Communitygithub.com

br1anchen/pstack-trio

在单个 Herdr 或 Rex 会话中运行三个编码智能体:主管负责规划、简报、评审和决策;副手基于 pstack 剧本进行实现、测试和诊断;顾问以不同类型的智能体对设计进行评审,回答设计和发现咨询,并在临时工作树中制作原型。

pstack-trio 是什么?

`pstack-trio` 是一项智能体协作技能,专为需要将复杂软件工程工作委派给多个专门智能体的开发者设计。它在单个 Herdr 或 Rex 会话中协调三个不同的智能体:主管负责所有权决策并主持所有讨论;副手在共享工作树中执行实际的实现、测试和诊断任务;顾问(必须是与主管或副手不同类型的智能体)仅在计划、关键发现或设计变更时提供设计评审和第二意见。沟通经过精心结构化:所有消息都通过一个基于文件的“三人组存储区”传递,确保即使在无滚动缓冲区的终端(如 Devin 或 Claude Code 所使用的)中也能完全保留历史记录。该技能强制执行一个严格的“先计划后实施”的工作流,要求规划讨论在实施开始前完成并获得同意和建议。它支持多种智能体类型,包括 Claude、Codex、Devin、pi 和 Prime,并集成了中继器命令用于跨窗格或选项卡的消息路由。关键限制包括需要 Herdr 或 Rex 环境、Python 3.11+,以及三个角色中至少有两个不同的智能体种类,以避免单一类型智能体间的循环引用。

兼容平台✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/br1anchen/open-pstack/tree/HEAD/skills/pstack-trio

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

在执行此工作流之前,请先阅读运行时适配器。其运行时映射适用于所有引用的剧本和脚本。

Pstack 三人组

三个智能体,一个 Herdr 或 Rex 会话,一个仓库。主管拥有判断权,副手拥有工作树的所有权,顾问拥有第二意见的所有权。它们之间的每条消息都是三人组存储区中的一个文件,外加一条命名该文件的一行提示。终端永远不会是记录介质,因为在备用屏幕上的智能体不会留下滚动缓冲区。

三人组是在 pstack-pair 的基础上增加了一个顾问。该配对的计划轮次、简报、检查、引导和评审保持不变;顾问参与每一轮计划,并在发现会改变设计时回答咨询。顾问永不向副手发送消息,也永不写入共享工作树。

前置条件

  1. 必须在 Herdr(test "${HERDR_ENV:-}" = 1)或 Rex(REX_BLOCK 已设置)内部。如果两者都不是,则说明情况并停止。
  2. 加载多路复用器的技能,用于窗格和智能体控制:Herdr 的 ~/.agents/skills/herdr/SKILL.md(或当该文件不存在时的 herdr --skill),或 Rex 的 rex skill show。其安全规则在整个过程中适用。在 Rex 中,请阅读在 Rex 中运行。
  3. herdr 或 rex,以及 Python 3.11 或更高版本(python3)需在 PATH 中。scripts/pair.sh help 列出每个存储区和通道操作;对于三人组,请使用它代替手动构建的 herdr 或 rex 调用。
  4. 主管、副手和顾问中至少要有两种不同的智能体种类。pair.sh spawn 从多路复用器读取主管的种类,如果三者完全相同则退出并返回代码 8;请告知人类选择另一种种类或使用 pstack-pair。副手和顾问可以是同一种类。
  5. 以自动模式启动主管。Devin 默认使用 --permission-mode dangerous 绕过权限检查。其他种类继承主管的模式。pair.sh permission 打印检测到的主管模式。--permission <mode> 覆盖两个生成角色的模式;--consultant-permission <mode> 仅覆盖顾问的模式。-- 后的原生权限标志会覆盖该次调用生成的每个角色的默认值。--permission auto 选择 Devin 的智能模式。没有对应权限翻译的种类会使用 -- 后的原生标志。spawn 还会跳过每种智能体的文件夹信任提示,否则该提示会让无人值守的智能体在一个它从未见过的文件夹中挂起:对于 pi 会使用 --approve,对于 Devin 会使用 --respect-workspace-trust false。-- 后的信任标志会覆盖它。生成的 Claude 也会在没有任何 MCP 服务器的情况下启动(使用 --strict-mcp-config 和空配置),因为每个服务器在每个会话中都是一个进程;-- 后的 --mcp-config 会保留你的配置。Claude 和 Codex 会改用询问来信任一个它们从未见过的文件夹;这个决定属于人类,所以 spawn 会拒绝该对话框并停止,告诉你该怎么做:在仓库中打开该智能体一次并信任它。

角色

主管副手顾问
拥有计划、简报、咨询、评审、决策、与人类的沟通工作树、测试、诊断、证据设计评审、二次阅读、原型
使用pstack作为poteto模式下的框架、how、architect、评审技能每个简报命名的剧本,及其待办列表how、why、architect 的替代方案、interrogate 立场、对差异的 blast-radius
写入仅三人组存储区简报范围内 Scope 的文件,以及其进度日志和报告建议文件,以及一个它会在完成后删除的临时工作树
读取树始终,只读;在某个提交点上于临时工作树中运行检查始终始终,只读
通过...沟通计划、简报、引导、咨询、评审、长期命令、关卡进度行、报告建议

进入你的角色。主管:references/master.md。副手:references/sidekick.md。顾问:references/consultant.md。

三人组存储区

${XDG_STATE_HOME:-$HOME/.local/state}/pstack/trio/<slug>/,由 pair.sh init 创建。每个文件只有一个写入者。

路径写入者内容
pair.json通过 pair.sh 的主管智能体名称、窗格 ID、种类、当前工作目录、git 根目录、打开的临时工作树列表、副手的备用和故障转移、窗格布局(分割或标签页)
standing-orders.md主管通过路径粘贴到每个简报中的编号约束
plans/NNN-<slug>.md主管一轮计划,来自计划模板
briefs/NNN-<slug>.md主管一个单元,来自简报模板
progress/NNN-<slug>.md通过 pair.sh progress 的副手每个完成步骤或方法变更的时间戳行
steers/NNN-<slug>-s<k>.md主管针对单元 NNN 的引导 k,来自引导模板
consults/NNN-<slug>-c<k>.md主管关于单元 NNN 的咨询 k,来自咨询模板,包含 kind: 字段,值为 design、finding、objection 或 review
reports/NNN-<slug>-s<k>.md副手对引导 k 的反对意见,来自引导响应模板
reports/NNN-<slug>.md副手简报 NNN 的证据,来自报告模板,或是对计划 NNN 的同意/反对响应,来自计划响应模板
advice/NNN-<slug>.md顾问对计划 NNN 的设计评审,来自计划建议模板
advice/NNN-<slug>-c<k>.md顾问对咨询 k 的答案,来自建议模板
scratch/<id>通过 pair.sh scratch 的顾问或主管指向一个临时工作树的链接,用于一次咨询 (NNN-<slug>-c<k>) 或评审 (NNN-<slug>-review),基于某个提交或实时状态,保存在仓库外部,位于 ${XDG_STATE_HOME:-~/.local/state}/pstack/scratch/ (PSTACK_SCRATCH_ROOT 可移动该位置),Claude 和 Codex 必须每台主机信任一次(kitchen.py doctor 检查);完成后删除
reviews/NNN-<slug>.md主管对单元 NNN 的裁决,来自评审模板;指明其依赖的建议以及任何推翻
gates.md主管留给人类的待决问题
decisions.tsv通过 pair.sh log 的主管工作展示追踪记录
status.mdpair.sh status衍生表;禁止手动编辑
queue通过 pair.sh queue 和 dispatch 的主管下一个简报的路径,只有一个槽位
steps/NNN-<slug>.tsv通过 pair.sh step 的副手每行代表一个已提交的步骤:编号、提交、时间、它解决的备注、摘要
notes/NNN-<slug>-n<k>.md通过 pair.sh new-note 和 note 的主管对单元步骤到步骤 k 的评审,来自备注模板:阻塞项和后续行动
followups.md通过 pair.sh note 的主管来自每个备注的后续行动,用于后续简报或 Issue
session-handoff.md主管紧凑的恢复和下一个任务上下文,在启动时读取
sessions/pair.sh spawn / rotate先前的就绪报告;保留的会话导出和计时证据
events.tsv每个 pair.sh 命令每条消息、报告、唤醒和日志条目一行,由 pair.sh metrics 读取

NNN 是计划或简报、报告、建议和评审共享的零填充序列,因此同一单元的文件会排序在一起。

消息

提示文本方向发送者的辅助工具接收者的行动
bootstrap (命名技能、角色和存储区)主管到副手和顾问pair.sh spawn启动步骤,reports/000-ready.md 或 advice/000-ready.md,回复 READY
pstack-trio PLAN <plan-path>主管同时发送给副手和顾问pair.sh discuss副手将计划与代码对齐;顾问评审设计;各自写入同意或反对,结束该轮
pstack-trio BRIEF <brief-path>主管到副手pair.sh dispatch执行简报,写入其报告,运行 pair.sh finish,然后以 REPORT 行结束该回合
pstack-trio BRIEF <brief-path>,已排队主管到一个正在工作的副手pair.sh queue主管在新会话后分派它;pair.sh next 会拒绝
pstack-trio STEER <steer-path>主管到一个正在工作的副手,或一个因反对暂停的副手pair.sh steer在工具调用之间读取它;同意并继续,或用证据反对并结束该回合
pstack-trio CONSULT <consult-path>主管到顾问pair.sh consult读取相关文件,必要时在临时工作树中制作原型,写入建议,结束该回合
pstack-trio REPORT <report-path>副手到主管pair.sh finish (或 notify)读取报告,进行评审
pstack-trio ADVICE <advice-path>顾问到主管pair.sh notify读取建议,做出决定
pstack-trio STOP <store>主管到副手和顾问pair.sh stop安全暂停,写入停止报告或建议

discuss 在两个智能体都达成一致时返回,并为每个角色提供一个响应路径和状态。正在忙于一个单元的副手不会阻碍一轮:顾问立即获得计划,副手的一半被标记为 deferred(退出代码 4),当副手报告后再次运行 discuss 将只发送那一半。consult 在顾问进入 idle、done 或 blocked 状态时返回。dispatch 和 wait 在副手的回复到达、消息后的报告已写入,或副手处于 blocked 状态时返回;仅凭多路复用器的“稳定”状态并不可信:一个 Devin 副手在提示到达和步骤之间显示为空闲,在一个窄窗格中可能显示为整个运行完成,因此会将稳定状态与窗格中的“按 Esc 中断”行进行核对,如果一个没有报告且持续一分钟的稳定状态,则等待以 report: missing 结束。dispatch 和 wait 还会在检查间隔以摘要形式返回。wait 还会在分派的简报报告一经到达时立即返回,即使副手已经开始处理排队的简报;此时 running: 会指明副手正在处理的简报名称。notify 仅在主管空闲时提示主管。你在压缩后收到的消息仍然会命名此技能和要读取的文件,因此请重新加载技能并从该文件继续。

先计划

实施只有在副手同意并且顾问提出建议的计划之后才能开始。主管起草 plans/NNN-<slug>.md,包含所选设计、其权衡的备选方案及其优缺点,然后通过 pair.sh discuss 发送,该命令同时到达两个智能体。副手检查每个步骤是否与代码一致,并带着证据回答同意或不同意。顾问评审设计本身:数据结构、边界、备选方案表遗漏的内容,并回答同意或不同意。主管将两者合并到下一轮或一个裁决为 agreed 的评审中。

顾问是咨询性质的。来自顾问的 object 不会阻止 agreed 的达成;主管可以在评审的“已推翻”部分和决策行中说明理由来推翻它。但必须存在对应计划轮的建议文件:pair.sh dispatch 会拒绝一个特性、错误修复、重构、性能问题或 pstack-tdd 类型的简报,如果其计划没有存档的顾问建议或没有 agreed 评审。只读和取证类简报不需要计划;一个错误诊断的简报在其计划之前运行。三轮未能达成一致将变为一个需要人类解决的关卡,所有立场记录在 gates.md 中。

咨询

咨询是主管在计划轮次之外向顾问提出的问题。pair.sh new-consult <store> <NNN> --kind <kind> 为单元 NNN 创建文件;pair.sh consult 发送文件并等待建议。

种类何时使用顾问回答
design主管在计划或引导之前权衡方向选择哪个方向以及原因,附上权衡
finding检查摘要、报告或差异揭示了意外情况是否如所见那样,以及它改变了什么
objection副手反对一个引导基于证据谁是正确的,以及替代方案
review裁决有争议,或单元处于第二次修订接受、修订或拒绝,附上发现
glance检查显示第一次提交或较大的差异,而该单元修订成本最高五分钟内:评审是否会建议修订,以及原因,或 none

以下情况咨询是强制性的:在引导偏离已商定设计之前,在副手反对后发出后续引导之前,以及对单元进行第二次尝试做出 revise 裁决之前。其他情况下是可选的,并且不会为落地单元发送咨询:所有讨论和评审在落地之前结束。每单元最多三次咨询;new-consult 会在没有 --force 的情况下拒绝第四次,因为第四次意味着设计有误,应属于计划轮次。Glance 咨询不在此上限之内,每单元一次,并且从不强制:顾问的配额是稀缺资源,因此应将其用于后期修订成本最高的地方。

每次咨询可在任何时间运行,无论副手是否在工作。consult 将副手的状态和 HEAD 提交信息印在咨询文件上;顾问在该时间点读取已提交的工作,任何未提交的内容只能通过 pair.sh scratch 快照读取,绝不会读取可能发生变化的实时工作树。每个咨询都附带一个时间盒,默认为十五分钟,glance 为五分钟;超过时间盒后,顾问会写入 partial 建议并结束该回合。

检查与引导

与 pstack-pair 相比没有变化:副手追加进度行,dispatch 和 wait 在间隔时间返回检查摘要,引导是唯一可能到达正在工作的副手的消息。每个简报最多两个新的引导,每个引导最多两轮。顾问增加了一个步骤:当摘要或反对意见显示一个会改变设计的发现时,主管在引导之前进行咨询,并且引导的“方向”部分会引用建议路径。

各种类型的任务会话

任何类型的副手(Claude、Codex、Devin、pi、Prime、Muse)都使用一个全新的会话

…

[已截断,无法完整翻译]

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能