☰
pstack子代理策略详解:何时用poteto-agent,何时用全新子代理
2026/10/7 8:40:48 网站建设 项目流程

pstack子代理策略详解:何时用poteto-agent,何时用全新子代理

【免费下载链接】pstack-claudeClaude Code, Codex, Copilot, Pi, OpenCode, Gemini, and Prime Agent versions of Poteto's pstack. Rigorous agent workflows with Cursor primitives translated for other harnesses.项目地址: https://gitcode.com/GitHub_Trending/ps/pstack-claude

这篇文章面向新手,讲清 pstack 的子代理(subagent)调度策略:poteto-agent 在 playbook 步骤内何时登场,以及为什么 pstack 要求"新任务默认交给全新子代理",避免指令丢失和上下文漂移。

先认识 pstack 和它的主力子代理

pstack 是把 Lauren Tan 的 pstack 技能栈移植到 Claude Code、Codex、Pi 等代理运行时的项目。核心玩法很简单:向poteto-mode描述目标,它会自动调用匹配的工作流(查 bug、设计评审、并行探索等),并保证代码简洁、可验证。

pstack 内置了两个角色代理:

  • poteto-agent:/poteto-mode的路由目标,任何"按 poteto 风格干活"的请求都走它。定义见 poteto-agent.md
  • comment-sicko:一个专门"恨注释"的特色代理,负责清理叙述性注释和 workaround 说教,定义见 comment-sicko.md

poteto-agent 有一个硬性规则:动手前必须完整读取poteto-mode技能的 SKILL.md(含其中的 Principles 索引)。用general-purpose替代它会跳过这次阅读,风格就会漂移。这一点是理解整套子代理策略的关键。

规则一:playbook 步骤内,用 pstack:poteto-agent

poteto-mode 的 SKILL.md 中 Subagents 一节给出了明确的分工规则:

场景该用哪个子代理
playbook 步骤内的代码委派、临时帮手subagent_type: "pstack:poteto-agent"
how、why、interrogate、reflect、swarm等路由型技能技能自己设定的subagent_type(多模型评审用general-purpose),不要覆盖成 poteto-agent
需要指定推理等级时pstack:poteto-agent-<level>(low / medium / high / xhigh / max)

为什么路由型技能要排除在外?因为interrogate、arena、swarm这类技能的对抗信号来自模型多样性(不同模型各审一遍、互相投票),而不是来自 poteto 风格。尊重技能自己的设定,是第一条铁律。

按难度给子代理配模型

每次Agent调用都有默认约定:后台运行(run_in_background: true)、完整工具权限、用文件指针而非内联上下文传资料、按角色显式指定模型。模型分级策略是:

  • 最难的变更(跨模块设计、棘手的并发、微妙算法)→ 最强判断力模型
  • 琐碎的机械性编辑→ 快速代码模型
  • 其余任务→ 单角色默认模型

角色默认值写在 models.json(默认 opus、最强 fable、评审小组 opus/fable/sonnet),各推理等级对应的代理文件在 effort-agents/,并可通过/setup-pstack命令逐角色改写。

规则二:新任务默认交给全新子代理

这是 pstack 子代理策略里最容易忽视的一条:Fresh subagents by default(默认用全新子代理)。

什么是"合并范围"(consolidated scope)

新工作要交给一个全新子代理,并带上合并范围,即:

  1. 原始任务简报
  2. 之后所有补充指令
  3. 上一个代理的报告和分支

修复轮次、后续跟进、重试、队列里的下一项,全都适用。

为什么不能图省事直接"续命"?

官方给出的理由很直接:resume 链式恢复会悄悄丢掉指令(interrupt-chained resumes silently drop directives)。你以为旧代理还记得"别动那个配置",其实那条指令早没了。所以正确做法是开一个全新子代理,把全部上下文重新打包给它,而不是信任一句"已完成"的摘要。

严格的例外:什么时候可以 Resume

只有当新工作严格依赖只存在于那个代理里的状态、且搬走代价很高时,才允许 resume 原代理,包括三类:

  • 它本地的 checkout(本地检出)
  • 它未提交的改动
  • 它仍在运行的进程:开发服务器、模拟器、babysit 监视器等

注意两个易错点:

  • 给运行中代理下达"停止/暂停"指令,不算复用
  • 角色(如 PR owner)比代理活得久:代理一返回,角色下一轮就该由全新代理接手

停止旧代理要"确认它真的停了"

换新代理前,先停掉被弃用者并确认停止。因为列表里的completed状态只代表"完成已被通知",不代表进程已退出——带着后台子任务(live background children)的代理可以报告 completed 后继续复活。只有显式 stop 才能终结它。一个典型信号:代理声称工作树处于某个状态,但git status与它矛盾——说明它还在动。

为什么要把大量工作丢给子代理?

这与 pstack 的原则之一Guard the Context Window(守护上下文窗口)直接相关:上下文窗口有限且会话内不可再生,大输出、长文件、反复读取都会挤占主线程。策略是把大块内容路由给子代理,主线程只留摘要。子代理就是 pstack 用来"扩容"上下文的核心手段,因此"何时派子代理"和"派哪种子代理"同样重要。

常见错误清单

  • ❌ 用general-purpose顶替pstack:poteto-agent:跳过 SKILL.md 阅读,风格漂移
  • ❌ 把路由型技能(how / why / interrogate / swarm)的子代理强制改成 poteto-agent:失去多模型多样性信号
  • ❌ 修复轮、重试时 resume 旧代理省得重新交代:指令在链式 resume 中悄悄丢失
  • ❌ 看到completed就认为旧代理已退出:它可能只是通知了完成,进程仍在跑

小结:两张判断卡

选类型时:playbook 步骤内干活 →pstack:poteto-agent;路由型评审技能 → 技能自己指定。

选新旧时:默认全新子代理 + 合并范围;仅当工作严格依赖旧代理的本地检出、未提交改动或运行中进程时,才 resume 它。

把这两条记住,就能像 poteto-mode 一样调度子代理:简洁、可验证、不漂移。

【免费下载链接】pstack-claudeClaude Code, Codex, Copilot, Pi, OpenCode, Gemini, and Prime Agent versions of Poteto's pstack. Rigorous agent workflows with Cursor primitives translated for other harnesses.项目地址: https://gitcode.com/GitHub_Trending/ps/pstack-claude

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询