Already Told You:自动化一个工作项
一次处理一个工作项,使用通俗易懂的英文,每一步都需用户确认。在未获得“是”的答复前,不会在 ~/already-told-you/ 之外创建或更改任何内容。
- 选择工作项。 读取最新的
~/already-told-you/<YYYY-MM-DD>/findings.json(使用 Glob 查找)。如果没有找到 → 提示“请先运行 /already-told-you:run”并停止。将 D 部分显示为编号列表:标题、当前每周小时数 → 自动化后所需分钟数、建议的how字段。如果$ARGUMENTS指定了某个工作项,直接使用它;否则询问用户选择哪个。 - 确认方案。 重新表述该工作项为:触发器(何时/由谁启动)→ Claude 做什么 → 输出什么 → 人工在哪里审批。使用下方列出的自动化选项确认类型;如果用户偏好其他类型则进行更改。只询问缺失的信息(哪个文件夹、哪个应用、什么时间、输出应放在哪里)。
- 创建技能。 每个自动化都通过一个技能运行。如果 C 部分已经为该工作项起草了一个技能,则从
<report>/skills/<name>/SKILL.md开始;否则在该路径下创建一个新的草稿,并遵循相同的规则(frontmatter 包含name和description,引用用户的原话;编号步骤;最后一步为审批)。展示草稿,与用户一起完善,然后使用捆绑的安装器进行安装,切勿自行写入技能文件夹:询问安装位置(~/.claude/skills= 所有项目,${CLAUDE_PROJECT_DIR}/.claude/skills= 当前项目),运行python3 ${CLAUDE_PLUGIN_ROOT}/scripts/install_skill.py --check --src <report>/skills/<name> --dest <dest>,在获得“是”的确认后运行python3 ${CLAUDE_PLUGIN_ROOT}/scripts/install_skill.py --install --src <report>/skills/<name> --dest <dest>(该命令会请求权限,除非用户同意--force,否则不会替换现有技能)。 审批步骤: 如果该工作项涉及发送、发布、付费或删除,技能会准备好结果并停止。定时任务没有人工询问的机会,因此定时任务运行时,技能只将草稿写入文件夹(或应用中的草稿,例如邮件草稿),用户稍后审批。绝不允许定时任务直接发送。 - 连接/定时执行——仅处理所选类型所需的部分:
技能 + MCP:指出该工作项需要的应用连接。如果该应用尚未连接,告知用户如何连接(根据应用文档使用claude mcp add ...,使用/mcp检查,或使用 claude.ai 连接器)。切勿将密钥粘贴到文件或聊天中;API 密钥应属于用户自己的密钥存储或环境变量。定时任务 (桌面):提供在 Claude Code Desktop 应用中进行点击的逐步说明 → 任务 → 新建本地任务,包括要粘贴的确切提示(/<技能名称>加上任何细节)、计划、项目文件夹和权限选择。提醒:该应用只在应用打开且电脑唤醒时运行。定时任务 (云端例行任务):提供要键入的确切命令,例如/schedule every Monday at 9am, run /<技能名称> ...,并说明它在云端运行,使用 GitHub 仓库的副本和连接器——没有本地文件。定时任务 (cron)macOS:填写下面的 launchd 模板。使用command -v claude查找 claude 路径(运行前先询问)。将填充好的 plist 文件先写入~/already-told-you/automation/<标签>.plist并展示给用户。获得“是”的确认后,将其复制到~/Library/LaunchAgents/并使用launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/<标签>.plist加载(每个命令都需请求权限)。其中的--allowedTools只列出工作项所需的工具——绝不能使用--dangerously-skip-permissions。在 Linux 上,显示等效的 crontab 行,供用户使用crontab -e添加。
- 尝试运行一次(如果用户同意):现在手动运行该技能,并展示它生成的草稿。
- 完成。 总结设置了什么、审批在哪里进行、预计节省的时间(来自报告的当前每周小时数 → 自动化后分钟数),以及如何关闭自动化。
自动化选项(依据 code.claude.com/docs,2026 年 10 月——仅使用这些)
选择能完全完成工作且最轻量的选项。how 字段的取值可以是:skill、skill + MCP、schedule (desktop)、schedule (routine)、schedule (cron)。
skill——该工作每次都遵循相同的流程,由用户启动。一个位于~/.claude/skills/<名称>/(所有项目)或<项目>/.claude/skills/<名称>/(单个项目)的技能可以将 15 分钟的解释和引导缩短为一个/<名称>命令。通常也在 C 部分有草稿。skill + MCP——流程需要另一个应用(邮件、日历、Notion、Slack、数据库……)。技能通过 MCP 服务器调用该应用。用户通过claude mcp add ...或/mcp,或使用 claude.ai 连接器进行连接。只有当过往记录表明用户使用某个特定应用时,才指出该应用。schedule (desktop)——需要按周期执行且依赖本地文件。Claude Code Desktop 应用中的桌面定时任务(任务页面 → 新建本地任务)会在指定时间和频率启动一个新的会话。在用户机器上运行,仅当应用打开且电脑唤醒时有效;权限按任务设置。schedule (routine)——需要按周期执行但不依赖本地文件(基于 GitHub 仓库或通过连接器工作)。云端例行任务在 Anthropic 的云端运行,即使笔记本电脑合上也能执行;在 Claude Code 中使用/schedule创建(例如/schedule every Monday at 9am, ...),或在 claude.ai/code/routines 创建。研究预览版,Pro/Max/Team/Enterprise 计划,最小间隔为一小时。schedule (cron)——在没有 Desktop 应用时的后备方案:macOSlaunchd(或cron)在设定时间以无头模式运行claude -p "/<技能名称>",使用--allowedTools只列出工作项所需的工具。
不适用于重复性工作的选项: /loop 和会话 cron 任务仅在 Claude Code 会话打开时运行,并在七天后过期。
每个自动化的审批规则: 任何发送、发布、付费或删除的操作都会停止,等待一个人工审批步骤(运行会准备草稿或预览;用户确认后才能发送)。
launchd 模板(macOS 上的 schedule (cron))
填写每一个 {{...}},并保存为 <标签>.plist:
{{label}}——例如com.already-told-you.weekly-client-update{{claude}}——command -v claude打印的绝对路径{{skill}}——已安装的技能名称{{tools}}——仅该工作需要的工具,例如Read,Write(~/drafts/**),Bash(git log *){{project}}——该工作所在的项目绝对路径{{weekday}}/{{hour}}/{{minute}}——0 = 星期日;小时 0-23{{home}}——用户主文件夹的完整路径(launchd 不展开~)
文件的第一行必须是 XML 声明,接着是 Apple plist 的 DOCTYPE 行(PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"),然后是:
<plist version="1.0">
<dict>
<key>Label</key><string>{{label}}</string>
<key>WorkingDirectory</key><string>{{project}}</string>
<key>ProgramArguments</key>
<array>
<string>{{claude}}</string>
<string>-p</string>
<string>/{{skill}} (定时运行:仅准备草稿,绝不发送、发布、付费或删除)</string>
<string>--allowedTools</string>
<string>{{tools}}</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Weekday</key><integer>{{weekday}}</integer>
<key>Hour</key><integer>{{hour}}</integer>
<key>Minute</key><integer>{{minute}}</integer>
</dict>
<key>StandardOutPath</key><string>{{home}}/already-told-you/automation/{{label}}.log</string>
<key>StandardErrorPath</key><string>{{home}}/already-told-you/automation/{{label}}.log</string>
</dict>
</plist>
在展示给用户之前,使用 plutil -lint <file> 检查完成的文件。