跳转到主要内容

定制 Sub-agent

Trellis 原生带有 3 个 sub-agent(trellis-implementtrellis-checktrellis-research)。你可以修改它们或新增自己的。本章以 Claude Code 格式作为主要例子,再列出其他平台的 frontmatter 差异。
Sub-agent 在 14 个配置平台里有 11 个可用:Claude Code、Cursor、OpenCode、Codex、Kiro、Gemini CLI、Qoder、CodeBuddy、Copilot、Droid、Pi Agent。agent 文件格式按平台分 Markdown / TOML / JSON;没有 sub-agent PreToolUse hook 或 extension 等价机制的平台,sub-agent 自己通过 pull-based prelude 读取自己的 JSONL manifest、prd.md、存在时的 design.md、存在时的 implement.md,不靠 hook 注入。Codex 也可以跑 inline 模式,此时主会话通过 skill 读取同一批 artifact。Kilo、Antigravity、Devin 没有 sub-agent 原语——implement / check 在主会话里内联完成。

Sub-agent 定义(Claude Code 示例)

Sub-agent 定义文件在 .claude/agents/{name}.md,使用 YAML frontmatter:
Claude Code 上的关键 frontmatter 字段:

Sub-agent 文件格式按平台不同

文件扩展名、frontmatter 形状、工具声明语法各平台不一样:

Pi Agent 的 model 和 thinking 配置

Pi sub-agent 定义放在 .pi/agents/{name}.md。文件也是 Markdown + YAML frontmatter,字段和 Claude 风格 agent 接近,并额外支持 Pi 运行配置:
Pi extension 会在启动子 Pi 进程前读取这些 frontmatter。它会用 text/no-session 模式启动嵌套 agent,转发当前 Trellis context id,并把运行配置映射成 Pi CLI args: 单次调用 Pi subagent tool 时传入的 model / thinking 会覆盖 frontmatter,只影响这一次子进程。fallbackModels / fallback_models 会被解析,用来兼容 pi-subagents 风格的 agent 文件;但 Trellis 不会把它传给 Pi CLI,因为 Pi 目前没有 documented stable fallback-model flag。 如果自定义 sub-agent 也要拿 task context,约定一个 task-local JSONL 文件,然后扩展 .pi/extensions/trellis/index.ts 处理这个新的 sub-agent 名字。Pi Agent 不加载 Python hook 脚本。 写多平台通用的 sub-agent 时,把 Claude Code 版放在 packages/cli/src/templates/claude/agents/ 作为规范版,packages/cli/src/configurators/ 里各平台适配把 frontmatter 翻译成原生语法。原生的 trellis-implement / trellis-check / trellis-research 就是这么做的。

修改原生 sub-agent

示例:给 trellis-check 加 timeout 和更严的工具预算。
如果这个改动要推给全团队,把它放在 .trellis/spec/backend/(或你团队约定的位置)里,让 sub-agent 的行为通过 spec 注入改变,而不是 fork agent 定义。

新建 sub-agent

示例:一个 trellis-test sub-agent,为当前 diff 写测试。

上下文注入

如果希望你的 sub-agent 像原生 sub-agent 那样拿到 task 和 spec 上下文:
  1. 约定一个 JSONL 命名(如 test.jsonl)放在每个 task 目录下。
  2. 读取顺序保持一致:先 JSONL 条目,再 prd.md,再读取存在时的 design.md,最后读取存在时的 implement.md
  3. 在有 sub-agent PreToolUse hook 或 extension 等价机制的平台(Claude Code、Cursor、OpenCode、CodeBuddy、Droid、Pi Agent)上,编辑 inject-subagent-context 或 Pi extension,让它处理这个新 sub-agent 类型。
  4. 在没有该注入点的平台(Codex、Kiro、Gemini、Qoder、Copilot)上,参照原生 sub-agent 的 pull-based prelude 模式:在 agent 文件头部加一段要求 sub-agent 动手前先 Read 自己的 JSONL 和 task artifacts。
详细走查见定制 Hooks