Garden Inbox 是一个面向 Paperclip 用户的收件箱整理技能,用于扫描 Mine 收件箱、分类可逆归档候选、请求复选框确认,并仅归档用户接受的选项。
用途 该技能用于在 Paperclip 工作流中安全地整理收件箱。它把收件箱条目分为不同桶,识别可归档的候选,并通过确认卡片让用户选择,最终只归档被接受的条目。归档是每用户的展示状态,可逆,不会改变底层 issue。
主要能力
- 扫描:读取收件箱、工作区、关闭就绪状态和本地 Git 元数据,生成报告和候选文件。
- 分类:将每个收件箱行归入 A、B、C、D 四个桶之一。A 为已合并/已归档工作区且所有关联工作已终止,默认选中;B 为终止或工作区消失且闲置超过阈值,默认选中;C 为有领先于基线的提交的陈旧工作,默认不选中;D 为保留,从不提供归档。
- 确认:在驱动 issue 上发布复选框交互卡片,超过 200 个候选时按顺序发布多张卡片。
- 应用:在交互解决后,仅归档被接受且存在于原始 candidates.json 中的选项 ID。
使用方式 需要设置 PAPERCLIP_API_URL 和 PAPERCLIP_API_KEY。脚本会从运行 JWT 负载的 responsible_user_id 解析目标用户,也可用 --user-id <uuid> 显式覆盖。建议使用运行自有的输出目录。
扫描命令: node .agents/skills/garden-inbox/scripts/garden-inbox.mjs scan --output-dir "$RUN_DIR" --stale-days 60
确认命令: node .agents/skills/garden-inbox/scripts/garden-inbox.mjs confirm --issue-id "$PAPERCLIP_TASK_ID" --candidates "$RUN_DIR/candidates.json"
应用命令: node .agents/skills/garden-inbox/scripts/garden-inbox.mjs apply --issue-id "$PAPERCLIP_TASK_ID" --interaction-id "$INTERACTION_ID" --candidates "$RUN_DIR/candidates.json"
确认和应用均支持 --dry-run 用于开发或负载审查。确认可重复运行且幂等。对于之前被用户拒绝的候选,可用 --unselect <issueId>(可重复)使其默认不选中并注明先前拒绝。
适用场景 适用于需要批量整理 Paperclip 收件箱、但要求操作安全可逆、不改变底层 issue 的场景。也适用于需要用户明确确认后才执行归档的工作流。
限制
- 扫描为只读,不得归档或修改 issue 字段、分支或工作区。
- 确认仅写入确认卡片,不得归档或修改。
- 应用仅在已解决的 request_checkbox_confirmation 交互后运行。
- 不得用 issue 状态变更、分支删除、工作区清理或 issue 删除替代收件箱归档。
- 扫描按每个包含的 issue 状态分别读取 Mine,以避免全局 500 行上限静默遗漏旧行;若任一单状态查询达到上限,输出会标记覆盖可能被截断,该扫描不应视为完整。
- 不得手动将 D 桶条目提升为候选。
- 拒绝、过期或接受空选择时,脚本不归档任何内容。
- 修改分类或选择安全逻辑后,应运行零依赖 Node 测试:node --test .agents/skills/garden-inbox/scripts/garden-inbox.test.mjs