子代理状态栏能分清是谁了:subagentStatusLine 新增 agentType
状态栏(status line)是 Claude Code 里很多人会自定义的一块:显示分支、模型、花费,全凭一个脚本。除了主会话的状态栏,子代理也有自己的一份,对应的配置叫 subagentStatusLine。
问题是,以前子代理状态栏脚本拿到的数据里,看不出当前是哪一种子代理。你定义了 reviewer、tester、researcher 三个自定义 agent,脚本只能一视同仁。
CLI 2.1.293 补上了这一块:subagentStatusLine 的输入数据里新增了 agentType 字段,脚本可以据此区分不同的自定义子代理类型。
状态栏脚本怎么拿数据
不管主状态栏还是子代理状态栏,思路都一样:Claude Code 运行你配置的命令,把一段 JSON 通过标准输入传给它,脚本把要显示的文字打到标准输出。主状态栏的基础配置见站内 状态栏教程。
现在这段 JSON 里多了 agentType,里面是子代理的类型名,比如你自定义 agent 的名字。
写一个按类型显示标签的脚本
下面是一个用 jq 的小例子,按类型给子代理状态栏加不同前缀:
#!/usr/bin/env bash
# ~/.claude/subagent-statusline.sh
input=$(cat)
type=$(echo "$input" | jq -r '.agentType // "unknown"')
case "$type" in
reviewer) label="🔍 审查" ;;
tester) label="🧪 测试" ;;
researcher) label="📚 调研" ;;
*) label="🤖 $type" ;;
esac
echo "$label"记得 chmod +x,然后在 settings 里把 subagentStatusLine 指向这个脚本。
jq 里的 // "unknown" 是兜底:旧版本或者某些内置子代理拿不到这个字段时,不会显示成 null。
先把数据 dump 出来看一眼
不同版本传进来的 JSON 结构可能有细微差别。写脚本之前,最稳的做法是先把原始输入存下来看:
#!/usr/bin/env bash
cat > /tmp/subagent-statusline-input.json
echo "debug"跑一次带子代理的任务,然后打开 /tmp/subagent-statusline-input.json,确认 agentType 在哪一层、值长什么样,再改成正式脚本。
什么时候有用
- 多个自定义子代理并行:一眼看出哪个面板是审查、哪个是测试。
- 按类型显示不同信息:比如测试类子代理多显示一个耗时,调研类只显示类型名。
- 团队统一脚本:把类型到图标的映射写进仓库里的脚本,大家看到的状态栏一致。
同版本相关的两个修复
2.1.293 还顺手修了两个和子代理显示有关的问题:
- 名字叫
worker的自定义 agent 启动时被显示成「Agent」的问题。 - agent 详情弹窗在 agent 结束后,标题里的类型名丢失的问题。
都是小事,但和这次的 agentType 一起,子代理「是谁」这件事在界面上清楚多了。
小结
- 2.1.293 起,
subagentStatusLine的输入里有agentType。 - 脚本从标准输入读 JSON,用
jq -r '.agentType'就能取到类型。 - 先 dump 原始输入确认结构,再写正式脚本;给字段加兜底值。