makecindy / makecindy/cindy

[Feature] 录制用户操作并生成可复用 Skill(参考 Claude Cowork / Codex)

Open
#153 0 comments 0 reactions 0 assignees View on GitHub
enhancement feature
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.