用途
autoskill 用于把用户自身的工作流历史转化为新的技能。它读取本地 screenpipe 守护进程被动采集的屏幕活动,识别重复出现的研究工作流,与仓库中已有的技能进行比对,并生成可供用户审阅、编辑和提升的技能提案。该技能为按需触发:用户需显式调用并指定时间窗口,它才会查询 screenpipe 的本地 HTTP API、聚类重复模式、与现有技能比对,并输出分阶段的提案文件夹。
主要能力
- 从 screenpipe 本地 HTTP API(默认 http://localhost:3030)拉取时间线事件,规范化为 {ts, app, window_title, text, content_type}。
- 对 OCR 文本和窗口标题进行脱敏,去除邮箱、API 密钥、Bearer 令牌和电话号码,作为纵深防御。
- 按空闲间隔(默认 10 分钟)切分会话,丢弃过短会话,并按应用签名聚类,保留达到最小规模(默认 2)的簇。
- 读取 skills/ 下每个 SKILL.md 的 frontmatter,使用本地 sentence-transformers 嵌入(余弦相似度)对每个簇与全部技能进行 top-k 匹配。
- 调用配置的 LLM 后端,将每个簇分类为 reuse(复用)、compose(组合)或 novel(全新),并生成相应的 SKILL.md 正文。
- 输出报告 report.md,以及 new-skills/<name>/SKILL.md 或 composition-recipes/<name>/SKILL.md。
- 提供 promote 子命令,将用户批准的提案移入 skills/<name>/,拒绝覆盖已有技能。
使用方式
前置条件:
- 运行 screenpipe 守护进程(默认绑定 localhost:3030)。可从源码构建:
git clone --depth 1 https://github.com/mediar-ai/screenpipe.git cd screenpipe cargo build -p screenpipe-engine --release ./target/release/screenpipe doctor ./target/release/screenpipe record --disable-audio --use-pii-removal
- 获取并导出 screenpipe API 令牌:
export SCREENPIPE_TOKEN=$(screenpipe auth token)
- Python 环境(仓库根目录):
pipenv install httpx pyyaml sentence-transformers
嵌入模型 sentence-transformers/all-MiniLM-L6-v2(约 80 MB)首次运行时下载。
- 本地 LLM(默认路径)——LM Studio:
lms load gemma-4-31b-it --context-length 131072 --gpu max -y lms status
- 云端 LLM 后端(可选,需显式选择):claude 需设置 ANTHROPIC_API_KEY 并在 config.yaml 中切换 backend: claude;foundry 需设置 FOUNDRY_API_KEY、切换 backend: foundry 并设置 foundry.endpoint。
统一 CLI 位于 scripts/autoskill.py,含三个子命令:
python scripts/autoskill.py doctor --config config.yaml --skills-dir ../ python scripts/autoskill.py run --start ... --end ... --config config.yaml python scripts/autoskill.py promote --proposed ~/.autoskill/proposed/<ts> --skills-dir ../ --name <skill>
运行示例:
export SCREENPIPE_TOKEN=$(screenpipe auth token)
python scripts/autoskill.py run
--start "2026-04-17T00:00:00Z"
--end "2026-04-17T23:59:59Z"
--config skills/autoskill/config.yaml
--skills-dir skills
提案默认落在 ~/.autoskill/proposed/<timestamp>/,可用 --out PATH 覆盖。加 --dry-run 可在聚类后停止,跳过 LLM 与嵌入模型加载,仅写 plan.md。
审阅与提升:
python scripts/autoskill.py promote
--proposed ~/.autoskill/proposed/2026-04-17T14-30-00
--skills-dir skills
--name zotero-pubmed-helper
适用场景
当用户提出以下请求时调用:
- “分析我过去 4 小时 / 一天 / 一周的活动,提出新技能。”
- “看看我一直在做什么,告诉我哪些还没被覆盖。”
- “根据我最近的工作流起草一个技能。”
- “为我重复的工作流找组合配方。”
不要用于关于 screenpipe 本身的一次性问题、实时屏幕查询,或在没有用户明确请求时调用——该技能分析敏感的本地内容,必须保持显式用户触发。
限制
- 需要运行中的 screenpipe 守护进程,无替代数据源;若守护进程未运行,run() 会抛出 ScreenpipeUnreachable 并附安装说明。
- 该技能对本地 screenpipe 守护进程(回环地址)和用户配置的 LLM 后端发起认证 HTTP 请求;读取 SCREENPIPE_TOKEN、ANTHROPIC_API_KEY、FOUNDRY_API_KEY 三个环境变量,各自仅用于对应端点的认证。无其他网络目标、无遥测、无数据外泄给第三方。
- 原始 OCR 不离开本机;检测与嵌入始终在本地运行,与后端选择无关。
- 建议将 references/screenpipe-config.yaml 复制到用户 screenpipe 配置以安装初始拒绝列表,敏感应用(密码管理器、消息、银行)在采集阶段即不被 OCR。
- 本地 LLM 默认推荐 LM Studio 运行 Gemma-4-31B-it;云端后端为可选,需用户显式选择。
- 本地 localhost 的 TLS 为可选(企业策略),参见 references/https-proxy.md 的 Caddy 模式。
- 新技能草案在提升前应始终由用户审阅。
- 测试:仓库根目录 tests/autoskill/ 下有 pytest 套件,可用 python -m pytest tests/autoskill -v 运行。
- 嵌入索引覆盖全部 135 个同级技能;当某簇对两三个同级技能得分较高时,生成的组合配方会显式命名它们。