[!TIP] 受众:在用 Claude Code / 类似编排型 CLI 干活,觉得贵模型的 token 花在"写机械代码"上不划算的人。 核心目标:记录 flash-delegate 这个 skill 的真实工作方式——不是"AI 帮 AI"的口号,是一套具体的派活/复核/收尾流程,附带三个真实踩过的坑。 问题-方案映射

  • 机械活(写测试、批量改名、加类型注解)占用贵模型 token → 派给 DeepSeek V4 Flash,编排方只写目标和复核
  • “本地进程停了"不等于"任务真的停了” → opencode 的 session 在远端,必须显式删 session
  • opencode run 报 completed 但啥也没干 → 别在外面包 timeout/管道,直接用后台任务原生跑

1. 为什么这是"省 token"的切入点

贵模型(编排方,当前会话)的 token 应该花在需要判断的地方:拆任务、定验收标准、复核结果、拍板"这活能不能派出去"。写测试、批量重写、机械改名、加类型注解这类"验收标准一句话讲得清"的活,本质上是体力活,不需要贵模型的推理能力。

flash-delegate 这个 skill 做的事就是把这类活通过 opencode run --model opencode-go/deepseek-v4-flash 派给一个便宜快模型,编排方全程不亲自写这部分代码,只维护一份 TASKS.md 和最后的复核。

2. 前置检查

每次会话第一次用之前先跑:

command -v opencode || echo "NOT_INSTALLED"
opencode auth list

没装就 npm install -g opencode-ai,装了没认证就得让用户自己在自己的终端跑 opencode auth login(凭证存 ~/.local/share/opencode/auth.json,认证一次对所有会话生效)——不能替用户输入或代填 API key。可用模型 ID 有两个候选,opencode models | grep deepseek-v4-flash 确认哪个真的可用:opencode-go/deepseek-v4-flash(走 opencode 自己的订阅通道)或 deepseek/deepseek-v4-flash(DeepSeek 官方直连)。

3. 工作流程

  1. 目标文档:项目根目录维护一份 TASKS.md,每条任务写描述、验收标准、状态。这份文档只有编排方能改,派给 flash 的 prompt 里必须显式加一句"不要修改 TASKS.md"。

  2. 挑任务:只挑验收标准能一句话讲清楚的——写测试、批量重写、机械改名、加类型注解。要多轮探索或架构判断的,不下放。

  3. 隔离风险:项目是 git 仓库且有未提交改动,先 git status,建议用 worktree 或独立分支跑 flash 的活,避免和编排方同时改同一批文件冲突。

  4. 派活

    opencode run --model opencode-go/deepseek-v4-flash "<任务描述 + 验收标准>,不要修改 TASKS.md"
    

    要限定它能碰哪些文件,加 -f <path>

  5. 复核(不能只信 flash 的自我汇报):读一遍它改动/新建的文件,独立重跑一遍验收标准里的测试/命令——不要用它报告里贴的"跑过了"当结论。通过了编排方自己更新 TASKS.md;不通过要么重新派一次说清楚哪里错了,要么这任务本来就不该下放。

  6. 合并前必须过 review:flash 产出的东西不直接 push/合并到主分支。

4. 三个真实踩过的坑

坑一:本地进程被停≠任务真的停了。 opencode run 的会话在 opencode 自己的后端跑,不是纯本地子进程。2026-08-14 实测:一个派给 deepseek-v4-pro 的任务,界面上把对应后台任务"停掉"后,本地 ps 也确实看不到进程了,但 opencode session list 显示那个 session 还在持续更新、用量面板还在计费——同一个仓库上出现了两个 session 同时改代码。真正停止必须显式删 session:

opencode session list          # 找到对应的 session ID
opencode session delete <sessionID>

删完等几秒再跑一次 opencode session list 确认它不再出现或不再更新时间戳,才算真停了。

坑二:本地 CLI 进程可能"活干完了但不退出"。 2026-08-14 还实测到:opencode session list / opencode export <id> 能确认 session 早就 "finish": "stop"、结果都在了,但本地那个 opencode run CLI 进程本身挂着不退出——Bash 工具的后台任务因此一直显示"运行中",output 文件一直是空的。排查方法是看那个 session 的 Updated 时间是不是早就不再变化(说明活其实做完了),再用 opencode export <sessionID> 确认最后一条消息是 "finish": "stop"。是的话直接杀本地进程就行,不用干等 Bash 工具的完成通知——它可能永远不来。

坑三:派活时不要在外面包 timeout/管道。 opencode run --model ... "<prompt>" 前面包一层 timeout N| tail -M,2026-08-14 实测过一次:Bash 工具的后台任务显示"completed exit code 0",但 output 文件是空的、git 里也没有任何实际改动,像是任务从没真正跑完就被吞掉了。直接用 Bash 工具自带的后台运行单独跑这一条命令,不额外包装,才能看到完整的流式输出。

5. 已验证过的最小闭环

2026-08-13 在一个独立目录跑通过一次完整流程:写 TASKS.md → 派 fizzbuzz 实现 + 测试任务给 opencode-go/deepseek-v4-flash → flash 自主读文档、写两个文件、自己跑测试确认通过、没碰 TASKS.md → 编排方独立重跑测试确认 3/3 通过 → 编排方更新任务状态。全程编排方没有亲自写一行实现代码。

6. 什么能派、什么不能派

  • 能派:验收标准一句话讲清楚的活——批量代码生成、样板代码、有明确复现步骤的 bug 修复、给已定义好行为写测试、机械重构/改名、加类型注解、翻译注释/文档。
  • 不能派:架构决策、模糊不清的需求、安全敏感代码、任何需要多轮判断的活——这些留在编排方自己身上。

小结

省 token 不是"少用模型",是把"要不要判断"这道分界线画清楚:需要判断的留给贵模型,不需要判断、验收标准能一句话讲清的,派给便宜快模型干,编排方只管拆解和复核。三个坑都指向同一件事——派出去的活跑在远端,本地看到的"停了"“完事了”,不能直接当真,得拿 opencode session list / opencode export 这类命令去核实。