[Feature] 录制用户操作并生成可复用 Skill(参考 Claude Cowork / Codex)
- Dominant language
- TypeScript
- Stars
- 2.7k
- Forks
- 395
- Avg merge
- 21h 48m
- Merged PRs (30d)
- 776
Description
## 背景
Claude Cowork 在 2026-07-21 发布了 “Record a skill”:用户一边完成任务、一边录屏并口述,Claude 把过程转换成以后可重复执行的 Skill。
- 官方动态:https://x.com/claudeai/status/2079595988998554047
- 原文要点:`Record your screen while you do a task, talk through it as you go, and Claude turns it into a skill it can run again.`
另一个直接相关的实践是 Elvis Saravia 的 “Multimodal Prompting for Agents”。其演示同步采集语音转写、关键帧、鼠标事件和屏幕标注,把一次真实操作转换成更完整的多模态任务记录。
- 文章:https://x.com/omarsar0/status/2073404610501329247
- 演示:https://www.youtube.com/watch?v=_rIziQa48wQ
Cindy 目前已有 `/learn` 的完整后半段能力:可从自由文本、当前会话或 SkillHub 内容蒸馏 Skill,在隔离 staging 中生成提案,做敏感信息检查,展示 diff,并经用户确认后安装到 `~/.agents/skills/`,同时兼容 Claude Code / Codex。
当前缺口是:用户无法直接把“自己实际怎么完成一个任务”作为 `/learn` 的一等证据来源。很多个人工作流很难靠文字完整描述,尤其包含跨 App、多步骤 UI 操作、“这里 / 这个区域”一类指代,以及口头判断标准时。
## 目标
参考 Claude Cowork 的低门槛录制体验、Codex `skill-creator` 的结构化编写与迭代思路,以及 Multimodal Prompting 的富上下文采集方式,为 Cindy 增加「录制任务生成 Skill」:
> 用户录制自己完成一次任务的过程,可选同步口述原因和注意事项;Cindy 把录制转换成结构化证据,交给现有 `/learn` 蒸馏成一个可审查、可试跑、可继续修改的 Skill。
本功能只补齐 `/learn` 的录制证据入口,复用现有的生成、审查和安装链路,不新建一套平行的 Skill 系统。
## 建议流程
1. 在聊天输入框 `+` 菜单和 SkillHub 中提供「录制任务生成 Skill」。
2. 开始前选择录制单个窗口或整个屏幕;默认推荐单窗口,麦克风口述可选。
3. 录制期间提供持续可见的状态提示,以及暂停、继续、圈选/箭头/备注、标记敏感片段、结束和取消。
4. 结束后展示可裁剪的统一时间线、转写文本、关键帧、标注和提炼出的步骤摘要。
5. 用户确认素材后,把结构化 evidence block 交给现有 `/learn` 管线:
- 判断改进已有 Skill 还是新建 Skill;
- 在 staging 中生成一个 Skill;
- 检查 secrets、个人路径、内部地址等敏感内容;
- 展示文件 diff、证据摘要和风险提示;
- 用户可在蒸馏会话中继续纠正,确认后才安装。
6. 生成 Skill 后提供 2–3 个建议测试用例;允许用户试跑并根据结果继续迭代同一提案。
## 核心抽象:RecordedTaskBundle
不要让模型直接面对一段没有结构的长视频。一次录制应先确定性地转换成一个带统一时间线的 `RecordedTaskBundle`,概念上包含:
- 用户补充的高层任务描述;
- 带开始/结束时间的语音转写片段;
- 由点击、标注、窗口切换和显著画面变化触发的关键帧;
- 节流后的指针轨迹,以及 click / drag / scroll 等语义动作;
- 圈选、箭头、文字备注等标注及其归一化坐标;
- 当时的 App、窗口标题,以及能力允许时的 URL、viewport、DOM / accessibility target;
- 录制范围、权限、脱敏结果、采样策略和所用 provider 等 provenance。
所有模态必须共享同一时间基准,使“把这里对齐”“删掉这个区域”等口述能准确关联到当时的画面、标注和操作目标。
`RecordedTaskBundle` 是录制证据结构,不是永久媒体副本。媒体字段只引用 `cindy-media` 中有账本和生命周期的 blob,结构化文本与事件使用独立的可版本化 schema。
## 两级采集能力
### Cindy 内置 Browser:富语义轨迹
当任务发生在 Cindy 可控的 Browser 中时,在用户明确授权的前提下额外采集:
- URL、viewport 与页面变化;
- DOM selector / accessibility role / accessible name;
- 目标控件 bounding box;
- click、scroll、navigation 等浏览器事件。
这些信息能让 `/learn` 理解用户指向了哪个真实控件,并帮助生成比纯坐标更稳定的 Skill。
### 任意桌面窗口:通用视觉轨迹
对于其它 App,降级为:
- 单窗口或整屏画面;
- 语音与屏幕标注;
- 指针、点击、拖拽、滚动和窗口切换;
- 可获得的 App / 窗口元数据。
两种来源最终归一成同一个 `RecordedTaskBundle`,上游采集能力不同不应让 `/learn` 出现两套输入协议。
## 证据预处理与成本控制
MVP 优先采集:
- 选定窗口/屏幕的视频;
- 可选麦克风口述及带时间戳转写;
- 关键帧和窗口切换时间点;
- 指针、点击、拖拽和滚动事件;
- 用户主动添加的圈选、箭头、步骤标记或备注。
不要默认记录全量键盘输入、剪贴板内容或密码字段。若未来需要更准确的输入语义,应作为单独的显式 opt-in,并优先记录“向已知字段输入了内容”这类脱敏结构化事件,而不是原始按键和值。
模型侧不应逐帧吞整段视频。预处理至少包括:
- 按点击、标注、页面切换和显著视觉变化抽取关键帧;
- 重复帧去除与相邻事件合并;
- 指针轨迹节流,保留 click / drag 等关键节点;
- 转写分段并与画面、标注、动作对齐;
- 先生成高层步骤摘要,同时保留可按需回查的原始转写和证据引用;
- 对关键帧数量、录制时长、总字节和发送给模型的 token 设置硬上限。
可以使用更便宜的转写 / 视觉模型做后台预处理,但最终发给蒸馏 agent 的证据包必须可检查、可追溯,不能让后台模型生成的摘要成为唯一事实来源。
## 隐私与安全边界
- 开始录制前明确展示采集范围、麦克风状态、结构化事件类型,以及哪些内容会发送给模型/provider。
- 默认单窗口录制;录制中必须一直有明显指示,禁止静默后台录制。
- 支持暂停、裁剪和排除敏感片段;检测到密码、验证码、token、支付信息等内容时给出强提示。
- 原始录屏和音频默认仅本地保存,并提供“Skill 生成后立即删除”选项。
- 若保留录屏/音频/关键帧,必须走 `cindy-media` 媒体总仓的 blob + ledger + ref 生命周期,禁止新增专用 recording/cache 目录或绕过账本落盘。
- 最终 Skill 不应包含原始录屏、私密截图、secret、机器专属绝对路径,也不应依赖录制素材才能运行。
- 取消、失败、超时和用户丢弃提案时必须清理 staging,并释放对应媒体引用,不留孤儿文件。
- DOM、accessibility、窗口标题和 URL 同样可能包含敏感信息,必须进入统一脱敏和用户预览流程,不能只检查截图与转写。
## 与现有能力的衔接
- 新增 `RecordedTaskBundle` 及版本化 schema,作为录制模块与 `/learn` 之间的稳定边界。
- 扩展 `LearnSourceKind`,增加 recording 类型及 provenance;复用现有状态机、staging、校验、diff、revision watcher 和 apply 流程。
- 录制素材先由代码转换成结构化 evidence block,再交给 learn host;时间对齐、脱敏、采样、生命周期和失败恢复不依赖 prompt 自觉。
- 生成结果继续遵守现有 `SKILL_AUTHORING_SPEC`,同时兼容 Claude Code 和 Codex customization scanner。
- SkillHub 继续作为生成后查看、编辑、验证、版本比较和发布的统一入口。
## MVP 范围
- Desktop 端;macOS 和 Windows 至少各完成一次真实流程验证。
- 单次录制生成或改进一个 Skill。
- 单窗口/整屏录制、可选麦克风、基础标注、暂停/继续/结束/取消。
- 转写 + 事件触发关键帧 + 指针/点击事件 + 步骤摘要,形成版本化 `RecordedTaskBundle`。
- Cindy Browser 优先提供 DOM / accessibility 富语义;其它桌面 App 保持视觉轨迹可用。
- 接入现有 `/learn` 审查与安装流程。
- 不做无提示的全局输入监听,不自动发布到 SkillHub,不自动执行生成的 Skill。
## 验收标准
- [ ] 用户可以从聊天 `+` 菜单或 SkillHub 启动「录制任务生成 Skill」。
- [ ] 开始前可选择窗口/屏幕和麦克风,录制期间始终有明显状态提示。
- [ ] 支持暂停、继续、取消、结束和基础屏幕标注,并为时长、文件大小和证据数量设置明确上限。
- [ ] 录制结果被转换为版本化 `RecordedTaskBundle`,语音、画面、标注和操作事件使用同一时间基准。
- [ ] 用户可以从时间线确认“这里 / 这个区域”等口述准确对应当时的关键帧、坐标和操作目标。
- [ ] 结束后可预览并裁剪录制范围,查看带时间戳转写、关键帧、事件和步骤摘要。
- [ ] Cindy Browser 录制能提供经脱敏的 DOM / accessibility 目标;不具备该能力的桌面 App 仍可通过视觉轨迹完成录制。
- [ ] 预处理按语义事件抽帧、去重并压缩轨迹,不把整段视频逐帧发送给蒸馏 agent。
- [ ] 用户确认素材后,通过现有 `/learn` 管线生成 Skill 提案,而非直接落盘。
- [ ] 能识别相近的已安装 Skill,并优先生成改进 diff,避免近似重复 Skill。
- [ ] 用户可查看完整文件 diff、敏感信息警告和本次使用的证据摘要,再决定应用或丢弃。
- [ ] 生成的 Skill 可被 Claude Code 和 Codex 发现,不包含 secret、私密截图或机器专属绝对路径。
- [ ] 提供建议测试用例,并允许根据试跑反馈继续修改同一提案。
- [ ] 原始媒体的保存、删除和异常恢复全部遵守 `cindy-media` 引用生命周期;取消/失败后无孤儿媒体或 staging。
- [ ] macOS / Windows 的屏幕录制和麦克风权限拒绝、权限撤销、设备不可用都有可理解的错误和恢复路径。
## 非目标
- 第一版不追求把任意像素级 UI 操作自动转换成稳定的跨应用 RPA。
- 不默认采集原始按键、剪贴板、密码或验证码。
- 不绕过用户审查直接安装、执行或发布生成的 Skill。
Contributor guide
Research direction
Start at the chat + menu, SkillHub, the existing /learn pipeline, RecordedTaskBundle boundary, and cindy-media lifecycle described in the issue. Trace how recording evidence would enter the existing review flow; done means the cross-platform MVP, consent and privacy safeguards, structured timeline, reviewable Skill proposal, and cleanup behavior meet the listed acceptance criteria.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- electron, typescript
- Domain
- ai, desktop, security
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 32/100