定制 Sub-agent
Trellis 原生带有 3 个 sub-agent(trellis-implement、trellis-check、trellis-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:
Sub-agent 文件格式按平台不同
文件扩展名、frontmatter 形状、工具声明语法各平台不一样:Pi Agent 的 model 和 thinking 配置
Pi sub-agent 定义放在.pi/agents/{name}.md。文件也是 Markdown + YAML frontmatter,字段和 Claude 风格 agent 接近,并额外支持 Pi 运行配置:
单次调用 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 上下文:- 约定一个 JSONL 命名(如
test.jsonl)放在每个 task 目录下。 - 读取顺序保持一致:先 JSONL 条目,再
prd.md,再读取存在时的design.md,最后读取存在时的implement.md。 - 在有 sub-agent
PreToolUsehook 或 extension 等价机制的平台(Claude Code、Cursor、OpenCode、CodeBuddy、Droid、Pi Agent)上,编辑inject-subagent-context或 Pi extension,让它处理这个新 sub-agent 类型。 - 在没有该注入点的平台(Codex、Kiro、Gemini、Qoder、Copilot)上,参照原生 sub-agent 的 pull-based prelude 模式:在 agent 文件头部加一段要求 sub-agent 动手前先
Read自己的 JSONL 和 task artifacts。