命令字典
Slash 命令、CLI 子命令、Hook 事件、启动参数的字典与演进史。
Slash 命令、CLI 子命令、Hook 事件、启动参数的字典与演进史。
通过 JSON 动态定义自定义子 agent
--agents <json>claude --agents '{"reviewer":{"description":"Reviews code","prompt":"You are a code reviewer"}}'--agents 是 Claude Code CLI 的启动 flag,用于在启动时以 JSON 形式动态定义自定义 subagent。这些定义只在当次会话中生效,不会写入磁盘,适合快速测试或脚本化自动化场景。
接受两种输入:
--print/-p 非交互模式,需要 v2.1.281 及以上版本)JSON 中每个顶层 key 是一个 agent 的名字,value 是该 agent 的定义对象。定义对象里的字段与文件形式 subagent(.claude/agents/*.md)的 frontmatter 字段基本一致,用 prompt 字段代替 Markdown 正文来充当系统提示词。
# macOS / Linux / WSL,内联 JSON
claude --agents '{
"code-reviewer": {
"description": "Expert code reviewer. Use proactively after code changes.",
"prompt": "You are a senior code reviewer. Focus on code quality, security, and best practices.",
"tools": ["Read", "Grep", "Glob", "Bash"],
"model": "sonnet"
},
"debugger": {
"description": "Debugging specialist for errors and test failures.",
"prompt": "You are an expert debugger. Analyze errors, identify root causes, and provide fixes."
}
}'
# Windows PowerShell,需用 here-string
claude --agents @'
{
"code-reviewer": {
"description": "Expert code reviewer. Use proactively after code changes.",
"prompt": "You are a senior code reviewer.",
"tools": ["Read", "Grep", "Glob", "Bash"],
"model": "sonnet"
}
}
'@
# 非交互模式 + JSON 文件路径(v2.1.281+)
claude -p --agents ./agents.json "Review my changes"
支持字段(除 description 外均为可选):
| 字段 | 类型 | 说明 |
|---|---|---|
prompt | string | 系统提示词,相当于文件形式 subagent 的 Markdown 正文,可为空 |
description | string | 描述 Claude 何时应委派给该 subagent |
tools | array/string | 逗号分隔字符串或数组,如 ["Read", "Grep", "Bash"] |
disallowedTools | array/string | 从继承或指定的工具列表中剔除的工具 |
model | string | sonnet / opus / haiku / fable,或完整 model ID |
permissionMode | string | default / acceptEdits / auto / dontAsk / bypassPermissions / plan |
maxTurns | number | 最大 agentic 轮次,达到上限后返回的输出会被标记为 partial(该标记需要 v2.1.246+) |
skills | array | 预加载进上下文的 skill 名称 |
mcpServers | array/object | 该 subagent 可用的 MCP servers |
hooks | object | 该 subagent 的生命周期 hooks |
memory | string | 持久化记忆范围:user / project / local |
effort | string | 推理力度:low / medium / high / xhigh / max |
background | boolean | 设为 true 时,即便 Claude 想切前台也保持后台运行 |
omitClaudeMd | boolean | 跳过 user/project/local 的 CLAUDE.md(v2.1.271+) |
isolation | string | 设为 worktree 表示在隔离的 git worktree 中执行 |
initialPrompt | string | 该 agent 作为主会话 agent 运行时自动提交的第一轮输入 |
experimental | object | 实验性选项,如 cacheTtl |
color | string | 显示颜色(在 CLI 定义中被忽略) |
唯一必需的字段是 description,其余字段均为可选,prompt 可以留空。
--agents 只接受 JSON 对象,不接受文件路径。--print(或 -p)时,--agents 才可以接受 JSON 文件路径,否则会报 --agents takes a JSON object, or a file path only with --print (-p)。--agents 定义的 subagent 是会话级、不落盘的。若想让 agent 定义持久化、跨会话复用,等价的落盘方式是把同样的字段写成 frontmatter,放到 .claude/agents/<name>.md(项目级)或 ~/.claude/agents/<name>.md(用户级)。
| 约束 | 原因 |
|---|---|
| JSON 文件路径形式需要 v2.1.281 及以上版本 | 该能力在较早版本中不存在 |
达到 maxTurns 上限后的 partial 输出标记需要 v2.1.246 及以上版本 | 该标记行为较晚加入 |
omitClaudeMd 字段需要 v2.1.271 及以上版本 | 该字段较晚加入 |
| 启动时会校验 JSON 配置,校验不通过则直接退出 | 避免带着损坏的 agent 定义进入会话 |
非 --print 模式下只接受 JSON 对象,不接受文件路径 | CLI 参数解析规则限定 |
当同名 subagent 出现在多个来源时,按以下优先级从高到低取用:
| 来源 | 作用范围 | 优先级 |
|---|---|---|
| Managed settings | 组织级 | 1(最高) |
--agents CLI flag | 当前会话 | 2 |
.claude/agents/ | 当前项目 | 3 |
~/.claude/agents/ | 用户的所有项目 | 4 |
plugin 的 agents/ 目录 | plugin 启用范围内 | 5(最低) |
也就是说,--agents 定义的 agent 会覆盖项目级和用户级的同名 subagent,但会被 managed settings 中的同名定义覆盖。
Error: Invalid --agents configuration:、Error: --agents takes a JSON object, or a file path only with --print (-p)、Error: --agents file not found,分别对应 JSON 不合法、非 --print 模式下误传文件路径、传入的文件路径不存在。--print/-p 时才能传文件路径,交互模式下传路径会直接报错,而不是尝试把路径当文件读取。.claude/agents/ 和 ~/.claude/agents/ 中的同名 agent,如果没意识到优先级顺序,容易误以为改了项目里的 agent 文件却没生效。