SuperAPI AI 工具集

rex-subagents

智能体与模型

查看项目

更新于 11-01 16:53

技能介绍

用途

rex-subagents 描述 pstack 如何在 Rex 中运行子代理。主代理派发任务时,每个子代理是独立的 Claude Code 或 Codex 代理,运行在 Rex 窗格中,位于主代理右侧、同一标签页内。用户可以观看任意子代理并点击进入。watcher 通过 Rex 监听每个工作代理,在其完成、阻塞、失败或退出时唤醒主代理。

该技能明确要求:pstack 工作不要使用 harness 自带的子代理(如 Claude Code 的 Agent 工具、Codex 自带的代理),因为它们没有窗格、不读取 ~/.config/pstack/pstack-models.md 中的模型配置,也没有唤醒机制。

主要能力

  • 派发(spawn):为每个子代理指定名称、模型或入口、任务简报(brief),可加 --read-only 或 --worktree。
  • 等待与唤醒:派发后直接结束当前轮次,不轮询;子代理状态变化时,唤醒消息会作为下一条消息到达。
  • 读取结果:用 result <id> 读取子代理最终消息(来自其自身对话记录)。
  • 状态查看:status 列出所有子代理及其状态与 TASK STATUS。
  • 阻塞处理:子代理等待对话框或问题时,用 answer 选择选项或用 say 回复。
  • 后续指令:say 向保有状态(工作树、未提交改动、开发服务器等)的子代理发送后续消息。
  • 关闭与清理:close 关闭子代理,--all 关闭全部,--remove-worktree 在分支推送或合并后移除工作树。
  • 长命令:run 在子代理窗格中运行普通命令,退出时唤醒主代理并给出退出码,result 打印输出末尾。
  • 其他:models 列出可用模型;whoami 打印并记录主代理窗格;poke 从外部唤醒指定窗格。

使用方式

CLI 位于本技能目录下的 scripts/subagent;如果 harness 未提供路径,Claude Code 下为 ~/.claude/skills/rex-subagents/,Codex 下为 ~/.agents/skills/rex-subagents/。需用绝对路径调用,文中以 $SUB 代指。所有命令输出 JSON。

派发示例:

$SUB spawn --name "interrogate codex" --entry "codex/<model> (xhigh)" --brief /tmp/brief-codex.md
$SUB spawn --name "swarm slice 2" --agent claude --model <model> --effort high --brief-text "..."
$SUB spawn --name "arena b" --entry "claude/<model> (xhigh)" --worktree <branch> --brief /tmp/arena.md

任务简报应写入文件并通过 --brief 传入。子代理只拿到简报内容:目标、绝对路径、约束、报告格式,以及是否允许继续委派。subagent 会自动追加报告约定(最终消息包含完整报告和 TASK STATUS: done|blocked|needs-review 行)。--name 用于标注窗格和命名对话,建议写明技能和角色;JSON 返回的 id 为名称的 kebab-case 形式,后续命令使用该 id。

模型选择:--entry 接受 ~/.config/pstack/pstack-models.md 中的行条目原文,如 claude/<model> (<effort>)、codex/<model> (<effort>)、claudeAgent/...(按 claude 处理)或 inherit-parent/auto。也可用 --agent claude|codex 配合可选的 --model 和 --effort low|medium|high|xhigh|max。两者都不指定时,子代理运行主代理所用 harness 的默认模型。

--read-only 会在简报中加入只读说明(仅检查、不写入、不执行 git 命令)。--worktree <branch> 为写入者在 --base(默认 HEAD)基础上创建独立工作树;需先提交,未提交的改动不会进入新工作树。一个工作树或分支只允许一个写入者;不使用 --worktree 时,各子代理共享同一检出,并行写入者需负责互不重叠的文件且不执行 git 命令。

可以在同一轮次中一次性派发多个子代理(扇出),每个派发调用耗时数秒。派发后说明在等待什么并结束轮次,不要轮询、sleep 或循环查状态。子代理完成、阻塞、出错或退出时,会以类似下面的消息到达:

[pstack-rex] interrogate-codex finished (TASK STATUS: done). 1 of 3 workers still running. Read a report: ... result <id>. All workers: ... status

收到完成通知后用 result <id> 读取报告。若无 TASK STATUS 行而停止,说明子代理中途静默 45 秒,应读取结果和窗格(rex capture -s <session> -b <block_id> --trim | tail -40)后引导或替换。阻塞时用 answer <id> <选项编号> 或 say <id> "<文本>" 处理,仅在简报和上下文无法回答时才询问用户。出错、退出或关闭时先读窗格,再以整合后的范围重新派发,或记录该子代理的退出。wait 可阻塞至下一次唤醒,仅在当前轮次内必须拿到结果时使用。

适用场景与限制

适用于需要并行运行多个 Claude Code 或 Codex 代理、由主代理统一协调和汇总的 pstack 工作流,例如代码调查、评审、并行写作等。

限制:权限固定,Claude 以 --dangerously-skip-permissions 运行,Codex 以 --dangerously-bypass-approvals-and-sandbox 运行,subagent 不接受改动这些设置的 agent 参数。派发失败时 ok: false 会给出原因,如 trust_dialog、startup_dialog、no_status_after_60s、main_pane_unknown、rex_failed,dialog 字段显示窗格最后几行。主代理找不到自己窗格时,可设置 PSTACK_REX_MAIN_BLOCK 为 block id 后重试。主代理对所有子代理的工作负责:应阅读 diff 或证据而非只看报告,并自行撰写总结,在汇报前清理各子代理的窗格、对话、工作树和分支。