Install
$ agentstack add skill-kakadeka-baton-baton ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Baton —— 项目接力协作系统
定位
Baton 让不同 AI 软件在同一项目中串行接力工作,同时保持需求、任务、代码、验证、知识和交接一致。
- 项目真相:
docs/ai_memory/(长期知识+机器状态,随 Git 同步)+.baton/(本机私有配置与临时数据,gitignore 不进 Git;例外:.baton/config.json入库,clone 后即恢复门禁/路由/verify 配置) - 最高事实:Git 与真实文件 > 状态文件 > 交接/文档 > AI 自述
- 目标:用户说人话工作,Baton 后台自动管理;用户不当运维。
核心原则
- 事实优先级:Git/真实文件/新鲜验证 >
state/*.json> 交接/日报 > 聊天记录与 AI 自述。AI 说"已完成/已 push"不是证据。 - 单写入者:同一工作区同一时刻只有一个 AI 写入。跨 AI 轮班靠交接文件的所有权状态(持有中/检查点/可接手/阻塞);上班时检查交接末条的所有权状态(插件模式 batonclockin 会显式输出,
ownership_conflict: true时保持只读并报告;无插件模式手工读 handoff 末条判断)。 - 交接最后写:文档写入顺序 = 任务/知识/日报 → 索引 → handoff(handoff 最后写表示前序事务完成)。
- 历史只增不改:历史文档只追加或标「已取代/已废弃」,禁止覆盖重写、禁止自动删除。
- 凭据红线:API Key/Token 不进 Git、Memory、Metrics、日志、交接。
- 完成≠下班:任务完成是任务级收尾;下班是工作日级收尾,两者不同。
- 假成功是红线:任何关键断言(验证过/复核过/push 过/同步过)必须有真实输出或 SHA 证据,否则必须报 FAIL。
- 查询历史先查索引:需要历史信息时先用关键词命中索引(插件模式 batonmemoryquery;无插件模式直接在 archiveindex.json 里按关键词匹配),再只读命中文件片段;禁止为查一个决策全量读取 docs/aimemory。所有收尾动作(下班/完成/存档/保存设计/记入记忆)会自动维护索引,无需手工维护。
口令
> 中英口令对照表(English trigger map):中英文触发语义完全等价,英文环境的 AI(Codex / Claude Code)与用户请用英文触发词,动作与规则不变。 > > | 中文口令 | English triggers | 工具/动作 | > |---|---|---| > | 上班啦 | "clock in" / "start work" | batonclockin | > | 下班啦 | "clock out" / "end work" | batonclockout + 远端 SHA 核验 | > | 继续工作 | "continue work" / "resume" | batonresume | > | 看看项目状态 | "check project status" / "status" | batonstatus | > | 保存设计规范 | "save design spec" | batonsavedesign | > | 完成 | "complete task" / "mark task complete" | batoncomplete | > | 更新项目文档 | "update project docs" | batonupdatedocs | > | 这个坑/决策记下来 | "remember this pitfall" / "record this decision" | batonremember | > | 加个需求 / 需求变更 | "add requirement" / "change requirement" | 更新 overview.md | > | Baton init | "Baton init" | batoninit | > | 一键验收 | "run acceptance check" / "accept" | batonaccept | > | 拉取/同步/看 git | "pull github" / "sync github" / "check git status" | batongit + pwsh 网络 git | > | 回复任务编号 | "reply the number" / task id | batonselect(持久化 currenttaskid/activework) | > | 异常接手释放锁 | "release workspace" / "I confirm the previous agent stopped" | batonrelease | > | 任务验收通过 | "acceptance passed" / "accept" | baton_complete(action=accept) | > | 检查更新 | "check update" / "check for updates" | 读版本锚 + pwsh 实查远端版本对比 | > | 更新 Baton | "update baton" / "upgrade baton" | 按 source 分流执行更新 + 实查本地==远端 |
上班啦(clock in / start work)
- 用 batonclockin 做本地三查与任务表;有 upstream 时必须先按 synchint 执行
git fetch origin --prune(fetch-before-lock:clockin 的 ahead/behind 基于本地 remote-tracking 引用,不 fetch 就不知道真实落后);本地落后且无分叉时再git merge --ff-only;同步完成前不得把任务表当开工依据(落后时 clockin 会阻断抢锁,返回 behindremote=true,同步后重跑)。(DSH 里用 pwsh 工具执行;无插件模式直接执行 git 命令。) - 门禁:
ownership_conflict: true(插件模式含机械判定:state 持有锁 holding、交接末条他人「持有中/检查点」、交接 HEAD 不是当前 HEAD 的祖先、交接分支与当前分支不一致)或出现无法归属的修改 → 保持只读并报告,等用户确认。解除方式:用户说「异常接手,我确认上一位代理已经停止」→ 调用 batonrelease 释放持有锁(写交接释放条目)→ 重新 clockin;用户确认前禁止任何写入。 - 单写入者锁:clockin 门禁通过后自动写
state.ownership = holding(写后立即回读复核:并发双开只有一个胜者 claimed=true,败者如实报冲突;60ms 静置窗口放大竞态可见性),下班/释放时置 released。所有写工具(clockout/select/complete/savedesign/remember/updatedocs/recordactual/route/commitall)执行前必须核对持有锁:未持有或持有者非本会话(DSH 可识别会话身份时)一律拒绝。同一会话内再次「上班啦」前必须先「下班啦」或 baton_release。 - 直接用 clockin 返回的 tasktable 输出任务表(推荐项编号 1),无任务明说、单任务直接推荐。待验收任务在 awaitingtasks 单列展示、不占编号(编号与 batonselect 的候选集严格一致,杜绝错位)。禁止重复读 current/handoff/tasks.json(clockin 已返回 currentsummary/handoff_tail/任务表,重复读取是浪费 token)。
- 版本提示:clockin 返回的
version_info.check_hint非空(距上次检查更新超过 config.update.checkintervaldays 或从未检查)→ 在任务表后输出该提示(纯本地判断,clockin 不做网络);无插件模式读.baton/version.json的last_check_at同规则判断。用户说「检查更新」才实查远端。 - 禁止:覆盖 dirty、reset、rebase、擅自 merge、擅自解 divergence、假装已同步。
- 无插件等价:手工执行三查(
git branch --show-current/git rev-parse HEAD/git status --short)+ 读 current/handoff 末条/tasks.json,按「任务表格式」输出。同步提示命令照常可用。
下班啦(clock out / end work)
- 检查改动与任务范围:把允许清单传给 batonclockout 的 allowedfiles(存在非 Baton 管理域的改动时必填);插件会机械核对 config.protectedpaths 与允许范围——任一越界或 protected 命中 = 阻断(不写任何文件、不提交,返回 FAIL 清单,修正后重试);体积告警不阻断。Contract 预锁:当前任务若开工时经 batonselect 预锁了 allowedpaths,预锁范围外的改动必须用户在 allowedfiles 中以
user:明确豁免(执行者事后自报不构成豁免),否则阻断。插件还会机械核对推流远端:remote 指向 Baton 开源发布仓库(github.com/kakadeka/Baton)或 config.remotes.pushblocked 清单 → 硬阻断(不写不提交;把 remote 改指私密库/本地仓库后重试);「上班啦」时命中会提前给出 pushblockedwarning。 - 按分类执行必要验证与审查(见「审查规则」)。
- batonclockout:更新日报/状态/交接(handoff 最后写)→ metrics 固化 + 月度报表 → 两次本地提交(收尾产物 + 发布记录,随一次 push 全部推送)。两阶段事务 + 文档阶段写前日志:closeout token 记录 headatstart/commit1_head 与文档阶段 step——commit1 失败重试只重跑 commit1、commit2 失败重试只补发布记录、文档阶段中途失败(如文件瞬时被锁)重试从断点续跑;任何重试都不会重复追加日报/索引/交接(另有按摘要去重的内容级双保险)。发布记录 state 写
push_state=pending——此时不得宣称「已发布」。 - 按 clockout 返回的 nextstep 执行 push:
git push origin(DSH 里用 pwsh 工具;无插件模式直接执行 git)。 - 调用 batonverifypush 做只读机械核验(该工具绝不写文件、绝不提交):有远端时工具必须自取远端证据——优先自行
git ls-remote refs/heads/实查真实远端 SHA 与本地 HEAD 比对,且要求工作区干净(强核验,调用方传什么 SHA 都伪造不了);ls-remote 受限时对 GitHub 远端改走gh api repos///git/refs/heads/实查;两通道均不可用 = 直接拒绝(source/remote_sha 是调用方字符串,不构成证据,不设声明式弱核验通过路径)。此时由主会话 pwsh 执行 ls-remote 取真实 SHA 写入交接并明示「弱核验·主会话实查」。无远端本地仓库时传remote_sha=本地 HEAD、source=local。不一致或工作区有未提交改动 = 「下班未完成」,输出八项诊断。 - 核验通过后调用 batonrecordpush 记账:有远端时工具再次 ls-remote / gh api 实查并绑定远端==本地 HEAD==传入 SHA,任一不符或两通道不可用即拒绝(无实查证据不记账);凭证写
strong=true(实查)供 accept 强核验。核验结果同时写入 Git 内 projectstate.json(pushstate=verified + pushverifiedsha)——跨电脑 clone 后 clock_in 不再误报 pending、accept 可直接通过;该 state 写入由下次收尾提交入库(accept 对「仅此记账未入库」的脏态有干净性豁免)。 - 单分支工作流:Baton 直接在项目当前分支收尾(commit+push+核验),不做分支切换、不 merge、不建任务分支;如需多分支并行,由用户自行管理分支,Baton 在哪个分支上班就在哪个分支收尾。已完成任务:终审后按配置整合稳定分支(默认不 merge,需用户授权)。
- 正常情况下绝不要求用户手动 git add/commit/push。
- 无插件等价:
git status --short核对范围 → 追加日报(建带头文件)→ 更新 current/handoff(保留修订记录+分卷索引,handoff 最后写)→git add -A && git commit→ push 前git remote get-url核对不得指向开源发布库 github.com/kakadeka/Baton →git push origin→git ls-remote origin与本地 HEAD 比对,一致才算完成;protected 命中必须 FAIL。
继续工作(continue work / resume,别名:接手继续)
用 batonresume 恢复:git 快照 + 当前工作摘要 + handoff 末条 + 未完成任务 + 最近记忆条目 + 下一步。禁止要求用户重讲项目。需要同步远端时按 synchint 用 pwsh 执行 fetch/ff-only。 与「上班啦」的区别:上班啦 = 正式开工(三查+任务表+门禁+synchint),是每个工作段的起点;继续工作 = 跨会话/换电脑后快速恢复上下文(只读快照+下一步),不做门禁写入、不产生任务表确认流。同一会话内二次询问进度时也用「继续工作」口径回复,不要重跑 clockin。 无插件等价:三查 git → 读 current.md + handoff 末条 + tasks.json 未完成任务 + archive_index.json 最近条目,输出下一步。
查看项目状态(check project status,自然语言)
「看看项目状态」「现在什么进度」→ baton_status(只读六层快照:git + 当前任务 + 交接摘要 + 文档角色)。不写任何文件、不改状态、不要求用户确认。
保存设计规范(save design spec)
- 用 batonsavedesign 保存用户已确认、可复用的设计事实(全局/组件/页面/工作流分类),写入
ui_spec/对应分册。 - 临时审美尝试、未确认想法不固化(进日报)。
- 冲突处理:旧版本标「已取代」,新决策记录决策 ID 与日期,标注当前有效版本。
- 后续 UI 任务必须自动引用相关设计规范;FROZEN UI 任务 Fidelity 必须用它作比对事实。
完成(complete task)
任务级收尾两步(状态机闭环,缺一不可):
- finish:
baton_complete(task_id, action=finish)更新任务状态与记录 → 写必要 Memory → 记 Metrics → 给下一步。任务状态置为「待验收」(用户未验收前不置 completed);插件机械移除 tasktodo/taskprogress 表行;验收证据按 DoD(命令 → 结果)补齐。不跑工作日 closeout(不 commit 不 push,除非任务本身要求)。 - accept:用户明确验收通过后,
baton_complete(task_id, action=accept)把「待验收」置为「已完成」(写验收记录、清当前任务指针)。工具幂等防重复;未验收不得置 completed(此前状态机缺少这一步导致任务永远无法真正完成)。
更新项目文档(update project docs)
用 batonupdatedocs 把当前工作增量写入文档与交接后停止写入(中途存档,不跑下班流程)。
Baton init
初始化项目实例:见 baton_init 工具(自动生成骨架、检测旧 skill/旧文档、给出迁移计划,绝不覆盖已有文档)。 无插件等价:运行 pwsh -File scripts/baton-install.ps1 -Scope Project(脚本随框架包分发,不在项目目录内;用户级安装的项目请从框架包目录运行该脚本,或先用插件 baton_init 生成骨架与提示、再由 install 脚本完成三端 SKILL 镜像与入口段;无插件也能装,见 README 安装章)。
数字确认(reply the number)
任务表给出后,用户回复编号即确认选择:编号 = 任务表 ID 列的值,一一对应。插件模式必须调用 batonselect(number=N[, allowedpaths=...]) 持久化——把编号解析为任务 ID、置为当前任务(inprogress)并写 currenttaskid/activework、同步视图表;开工时就应把本任务的允许改动路径经 allowedpaths 预锁(范围已知时必填,收尾时超出预锁必须用户豁免);无插件模式手工更新 tasks.json 的 currenttaskid/activework/allowedpaths 与 taskprogress 表。持久化后直接按该任务执行。禁止反问「您指的是任务 1 吗」。
Git 自然语言(pull github / sync github / check git status)
「拉取github」「同步github」「看看git状态」→ 走 batongit 轻量路径(本地 status/commitall)。commitall 与下班同款门禁:protected 命中或非管理域改动未在 allowedfiles 声明即阻断(封死 git add -A 绕过)。fetch/sync/push 属网络 git:用 pwsh 工具执行(插件沙箱内网络 git 受 msys 限制),结果照常用 batonverifypush 核验。不建 Contract、不启动审查、只读操作不污染状态。 无插件等价:直接执行对应 git 命令(status / fetch / push),push 后用 git ls-remote origin 与本地 HEAD 比对核验。
检查更新 / 更新 Baton(check update / update baton)
Baton 版本闭环:安装留版本锚、可检查、可更新。用户不当运维:检查/更新由 AI 按本口令全流程执行。
- 版本锚:
baton-install.ps1安装时自动写version.json——用户级在三端全局 skill 目录(与 SKILL.md 并列,如~/.agents/skills/baton/version.json),项目级在.baton/version.json(本机私有,gitignore)。字段:source(git/npm)、version、sha、installed_at、last_check_at。旧项目没有该文件 = 从未留痕,检查时视为「未知版本」,提示重跑 install 补锚。 - 检查更新(check update,只读动作):读版本锚 → 用主会话 pwsh 实查远端(网络操作,插件沙箱受限):
- 版本号(首选,任何环境):
npm view @kakadeka/dsh-baton version(受限环境若报 npm-cache EPERM,加--cache) - GitHub 通道:远端 SHA
git ls-remote https://github.com/kakadeka/Baton refs/heads/master;版本号备选(Invoke-RestMethod https://raw.githubusercontent.com/kakadeka/Baton/master/package.json).version(或git ls-remote ... refs/tags/v*看 tag 列表) - 与本地
version.json对比 → 报告「已是最新 vX.Y.Z / 有新版 vX.Y.Z(本地 vA.B.C)」。 - check 本身零写入:不自动回写
last_check_at。报告后提示用户「是否记录本次检查时间(回写 lastcheckat 至两处版本锚)」——用户明确同意才回写(显式 record-check),保持「检查=只读」的承诺。
- 更新 Baton(update baton):检查发现新版,用户确认后执行,按 source 分流:
- skill 用户(Claude/Codex/Cursor,source=git):
git -C $HOME\Baton pull(框架副本);pull 报 unrelated histories / 分叉失败 = 历史不连续的旧克隆,删除后重新git clone https://github.com/kakadeka/Baton.git $HOME\Baton;无副本则直接 clone → 重跑pwsh -File $HOME\Baton\scripts\baton-install.ps1 -Scope User(更新三端全局 skill)→ 对相关项目重跑-Scope Project(更新 SKILL 镜像/入口段,脚本幂等)→ install 自动刷新版本锚。 - DSH 用户(source=npm):dsh 部署目录内
npm update @kakadeka/dsh-baton→ 重启 dsh web。 - 更新后提示:SKILL 变更新会话生效(DSH 内当前会话的 skill 已加载,下个会话生效);DSH 组合包变更重启后生效。
- 假更新红线:更新后必须实查本地==远端才可宣称完成——skill:三端/项目 SKILL.md 版本锚 version 与远端一致;npm:
npm list @kakadeka/dsh-baton输出与远端一致。实查不符 = 更新失败,如实报告,不重试硬凑。 - 上班提示:见「上班啦」第 5 条——超
config.update.check_interval_days(默认 7 天)未检查时提示,clock_in 纯本地判断、不做网络。 - 无插件等价:手工读
version.json→ pwsh 实查远端(同上命令)→ 对比报告;更新按 source 分流手工执行;更新后同样实查本地==远端才可宣称完成。
记入记忆(remember this pitfall / record this decision,自然语言)
「这个坑记下来」「把这个决策记进知识库」「记个 issue」→ batonremember(decision/pit/issue)。记忆是长期资产:换 AI、换电脑后靠 batonmemory_query 命中,禁止重新解释或重复踩坑。
记录需求变更(add/change requirement,自然语言)
「加个需求:xxx」「这个需求不要了」「需求改成 xxx」→ 同步更新项目总览(权威项目卷,防止做着做着忘掉目标和需求)。总览文件固定为 overview.md(旧项目先经 baton-migrate 一次性迁移成规范名,不保留旧命名):
- 需求清单增/改/删一行(编号 RQ-NNN;移除时状态标「已移除」而非删除行)
- 「变更记录」表追加一行(日期/变更内容/类型:新增·修改·移除/原因)
- 同步更新技术栈/功能点/架构概要(如受影响)
- 将本次变更摘要追加进
state/archive_index.json便于历史查询
铁律:历史只追加不覆盖;需求变更必须留痕。
平台能力(跨工具通用 / 平台机制 / DSH 增强)
Baton 是一个 skill + 一份项目状态目录,不绑定任何 AI 平台。 插件(baton_* 工具)只是 DeepSeek Harness 上的机械化加速器,不是必需项。下表说清每块能力在四种工具下怎么用:
| 能力 | 跨工具通用? | 说明 | |---|---|---| | 口令(上班/下班/继续/完成/存档/记忆/需求变更) | ✅ 完全通用 | 纯文件+Git 层,任何 AI 照本 SKILL 规则执行 | | 记忆骨架与文档规范(修订记录/分卷索引) | ✅ 完全通用 | 纯 Markdown/JSON,零依赖 | | Git 真闭环(ff-only / commit / push / 远端 SHA 核验) | ✅ 完全通用 | 标准 git 命令,无插件模式手工执行 | | 防跑偏(冻结 / 允许路径 / 审查 / Fidelity) | ✅ 完全通用 | 规则 + 人工核对,不依赖工具 | | 任务分类与分级 | ✅ 完全通用 | 规则表,任何工具可读 | | 模型路由规则(该用哪档模型) | ✅ 规则通用 | 规则写在 config.json + 本 SKILL;执行靠各平台自己的机制 | | 派发执行代理 | ⚠️ 平台机制 | DSH:subagent 工具;Claude Code:内置 Task/Subagents;Codex:内置子代理;Cursor:Agent 模式(详见「自动模型分派协议」各平台小节) | | 记录实际模型 | ⚠️ 降级 | DSH 可查宿主身份(hostdescriptor);其它平台只能记 requested/unknown —— 诚实原则不变。月报模型排行只计入 hostdescriptor(宿主身份事件证据);requested(声明)与自报字符串只展示并标「声明/自报」,不污染排行 | | baton_* 工具(19 个) | ❌ DSH 专属增强 | 无插件模式按「无插件模式」章节手工等价执行 |
结论:在 Claude / Codex / Cursor 上,Baton 的核心能力(接力、记忆、Git 闭环、防跑偏)全部可用;只有"自动派代理 + 核实实际模型"退化为平台自带机制 + 诚实记录。这不是失效,是降级,且降级路径是显式的。
任务分类与分派(规则表)
Contract 定义(任务边界,轻量预锁实现):Contract 不是独立文件,是每个任务在开工时固定的边界三要素——①约束级别(FROZEN=用户已确认的需求/原型/设计规范,禁止自由发挥;BOUNDED=明确范围内实现;OPEN=真探索型)②允许范围(allowedpaths,经 batonselect 的 allowedpaths 参数预锁进任务条目)③验收标准。默认:有原型/设计规范/冻结需求的按 FROZEN 处理,禁止把明确需求当 OPEN。预锁机械强制:任务条目带 allowedpaths 时,「下班啦」/commitall 用真实 diff 核对——预锁范围内的改动直接放行;范围外改动必须用户在 allowedfiles 中以 user: 明确豁免,执行者事后自报不构成豁免。无插件模式由 AI 严格自检同一规则。
| 级别 | 例子 | 执行者 | 复核 | |---|---|---|---| | Micro | 改颜色/文字/查文件 | 主会话直接做 | 不复核(简报说明改动即可) | | Bounded | 普通功能 | 主会话或 flash 代理 | 主会话复核 | | Complex | 跨模块复杂逻辑 | pro 代理 | 主会话复核 | | Architecture | 架构设计 | pro 高推理 | 独立 pro 代理 | | High-risk | 数据/发布/安全 | pro + 用户授权 + 备份 | 独立复核,证据失败即 FAIL |
- 执行与复核不得同源:代理执行的 → 主会话复核;主会话执行的 → 独立代理复核。
- 模型池/路由/fallback 见
.baton/config.json;实际使用模型必须写入简报与 Metrics(actual ≠ recommended 时写明 fallback 原因)。 - 模型池按平台改写:config.json 的 model_pool 默认是 deepseek 示例,Claude Code / Codex / Cursor 用户应把自己平台的模型(如 claude-sonnet-4、gpt-5 等)按 tags(fast/reasoning)填入后标 status=verified;路由表结构不变。改策略只改 config.json。status=verified 的定义:该 provider 已完成真实 health/credential/dispatch 验证(真实调用成功);未验证的模型 status 留空或标 unverified,禁止自报 verified、禁止使用未验证模型。
- 中断接管:子代理因 provider/额度失败 → 主会话按 fallback 链用下一模型重新分派,提示词=读检查点+「从这里继续,不重做」;同根因两次失败 → 停 + 报告,不无限重试。
自动模型分派协议(用户只设默认模型,AI 按任务自动选模型+high/max)
规则跨平台一致;执行用各平台自己的机制。 本协议分三层:①分类(所有平台相同)②路由(规则在 config.json,DSH 用 baton_route 机械读取,其它平台直接读 config.json 的 routing 表)③分派与记录(见各平台小节)。
- 分类:按「任务分类与分派」表判定 micro/bounded/complex/architecture/high-risk/review。
- 路由:读
.baton/config.json的 routing 表取 recommended(provider/model/reasoning + fallback 链)。DSH 调 baton_route(机械读取并记 Metrics);其它平台直接读 config.json 对应行。改模型策略只改 config.json,不改代码。 - 分派与记录:
- DeepSeek Harness:micro → 主会话直做;bounded → 默认主会话,需隔离/繁忙时按推荐派 flash;complex/architecture → subagent 分派,参数填 provider/recommended.provider、model/recommended.model,疑难场景 reasoning 提到 max;review/fidelity → 独立 subagent 派 pro。用 batonroute 记录 recommended,batonrecordactual 记录 actual(source=requested / hostdescriptor / unknown,禁止模型自报)。
- Claude Code:micro/bounded → 主会话直接做(用当前会话模型);complex/architecture/high-risk → 用 Claude Code 内置 Subagents/Task 工具派子任务,在派发提示词里写明任务范围+检查点+「从这里继续,不重做」;模型档位通过会话内
/model切换实现(简报里写明 recommended 档位供用户确认,切换后实际档位如实记入简报与 Metrics)。actual 记录:主会话知道自己当前模型,但 source 只能记 requested 或 unknown(Claude 宿主不暴露子代理身份),禁止自报为已核实。 - Codex:micro/bounded → 主会话直做;complex/architecture/high-risk → 用 Codex 内置子代理/Task 机制派发,规则同上;模型档位通过 Codex 会话配置选择,简报写明 recommended 与实际;actual 同样只记 requested/unknown。
- Cursor:micro/bounded → 主 Agent 直做;复杂任务用 Cursor 的 Agent/子代理机制,或分步引导用户切换模型;实际档位如实记录,无法确认记 unknown。
- 兜底(所有平台):未配/未验证的模型永不使用;provider/额度失败 → 按 fallback 链重派(读检查点+「从这里继续,不重做」);同根因两次失败 → 停 + 报告。无法确认实际模型时记 unknown,绝不编造。
- 记录(不造假,所有平台):recommended 与 actual 分开记;source 如实标注(requested=主会话分派记录;hostdescriptor=宿主身份事件,仅 DSH 可读;unknown=无法确认)。完成后 complete/clockout 传 actual_model。DSH 一次性子代理的 model 在宿主侧是隐藏设计,continuable 子代理可读 agentModel;无法确认一律记 unknown。Reviewer 独立性不可由调用者自证:
reviewer_agent_id等参数只是声明(unverified),独立复核的可信身份必须以宿主签发的 session/run/agent/host 事件为准;无法证明独立时该任务保持「未满足独立复核」,不得假装 PASS。
Lean Gate(最小实现决策阶梯)
优先级永远:用户明确要求/FROZEN > 安全与数据完整性 > Contract/DoD/Fidelity > 正确性 > 记忆闭环 > 精简目标 > 输出风格。精简不得牺牲前六项。
模式(任务 Contract 可选字段 implementation_policy)
| 模式 | 语义 | |---|---| | off | 不施加精简策略(照常实现) | | lite | 按要求实现,同时指出一个更小备选,不擅自缩需求 | | full | 执行完整决策阶梯(默认);select 必须提供 reuse/native/minimum_check 机械证据字段 | | strict | full + 预算机械阻断:新增依赖/文件/抽象超预算必须用户例外 |
机械执行(batonselect + batonclock_out)
- select 开工:full/strict 缺 reusecandidates(复用搜索结果)、nativecandidates(stdlib/native/已装依赖检查结果)、minimum_check(最小检查 test/evidence id)任一 → 拒绝 select(机械字段门禁)。
- 预算窗口:select 把 Contract 快照进 state.contract——base SHA(窗口锚定任务开工,重选同一任务不重置)+ 依赖基线 + dependencybudget/newfilebudget/abstractionbudget(自然数;缺省=该维度不设限)+ lean_exceptions(用户明确例外,JSON 数组)。
- closeout 机械计算 delta:新增文件(
git diff --name-status base的 A 状态 +git ls-files --others未跟踪文件)、新增依赖(当前 package.json vs base 提交版本,含 dependencies/devDependencies/peerDe
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: kakadeka
- Source: kakadeka/Baton
- License: Apache-2.0
- Homepage: https://www.kakadeka.com/baton/
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.