Agent Radar:提示词上方的 Claude Code 子代理监控
在提示词上方为每个运行中的子代理显示一行实时状态:用时、工具数和当前动作,另有 /radar 面板。
权限
- 拦截工具调用能看到 Claude 发起的每一次工具调用(tool.call / tool.check),并可以阻止或修改它。
- 读取你的提示词可以看到你输入的内容和对话记录(prompt.* / session.append / session.messages)。
- 修改界面在 Claude Code 界面中绘制内容:横条、面板、状态文字、弹出通知(ui.render / $.ui.*)。
- 添加命令/工具注册新的斜杠命令或工具,供你或 Claude 调用($.command.register / $.tool.register)。
- 实测版本
- v2.1.291
- 最近实测
- 需要
- Claude Code ≥ 2.1.287
- 显示位置
- 输入框上方、面板、弹出通知
这个插件能做什么?
Agent Radar 是 Hamza Zafar(hamzafer)开发的社区插件,属于他的 claude-code-mods 合集。它是一个 Claude Code 子代理监控:当 Claude 把工作交给子代理时,提示词上方的状态带会为它新增一行实时状态,无需打开任何东西,就能看到每个子代理正在做什么。
一行大致是这样:● Read README and all src/ files 4s · 2 tools · searching src/**/*。其中有代理的描述、已用时间、已发起的工具调用次数,以及最近一次调用的通俗标签。代理结束后,圆点会变成绿色对勾并保留 30 秒,同时弹出类似 ✓ sweep runner done (9s · 4 tools) 的提示。失败或被中止的代理会显示红色叉号和原因。
/radar 会打开标题为“Agent Radar”的面板。它最多列出九个代理,每个带一个快捷键,显示正在运行和已完成的数量,还可以打开某个代理查看它最近的六条消息。面板里有“Clear finished”按钮。插件加载之前就已启动的代理,会在你运行 /radar 时从引擎自身的代理列表中补进来。插件不显示 token 数量或费用。
演示
录屏使用 Claude Code 2.1.291 和 Haiku,在一个小型演示项目中进行。我们让 Claude 使用一个名为 scan src 的 Explore 子代理,读取 README.md 和 src/ 中的每个文件。Claude 把它作为后台代理启动,提示词上方立刻出现一行黄色状态:● scan src 4s · 2 tools · searching src/**/*。用时和工具数每秒递增,当子代理从一个文件转到下一个文件时,标签变为 reading src/login.js。
安装
上方的安装区块会添加作者的插件市场,并从中安装这个插件。下一次有子代理启动时,状态带就会出现。如果是在已打开的会话中安装,请运行 /reload-plugins。
$ install agent-radar
需要 Claude Code ≥ 2.1.287
从作者自己的 marketplace 安装: hamzafer/claude-code-mods
1.在 Claude Code 中一行安装
/plugin install agent-radar --marketplace hamzafer/claude-code-mods粘贴到正在运行的会话中(v2.1.275+)。Claude Code 会先询问是否添加该插件市场。
2.从终端安装
claude plugin marketplace add hamzafer/claude-code-mods claude plugin install agent-radar@claude-code-mods然后在所有已打开的会话中运行 /reload-plugins。
3.免安装试用
git clone https://github.com/hamzafer/claude-code-mods claude --plugin-dir ./claude-code-mods/mods/agent-radar仅在当前会话中加载该插件,不会写入你的设置。
工作原理
插件把雷达状态保存在三个由宿主持有的 $.state 原子中(agents、selected、now),因此热重载后依然保留。四个钩子为其提供数据:agent.spawn 添加一条记录,tool.call 统计带有 agentId 的工具调用,turn.complete 把代理标记为完成或失败并弹出提示。在 session.start 时启动的一秒时钟,会在有任何一行显示期间重绘已用时间。工具调用钩子来自 hooks/register.tsx:
on('tool.call', async ($, e, next) => {
if (e.agentId) {
const id = e.agentId
const line = describe(e as unknown as Record<string, unknown>)
await update($, agents, list => list.map(a => (a.id === id ? { ...a, tools: a.tools + 1, last: line } : a)))
}
return next(e)
})它先更新计数器,再让调用继续执行,并原样返回 next(e) 的结果。主代理发出的、没有 agentId 的调用会被忽略。describe 把一次调用转成简短标签:reading 和 editing 加路径的最后两段,searching 加模式的前 30 个字符,running 加 Bash 的描述或命令的前 50 个字符,Playwright 工具则显示为 browser: click。状态带绘制在 AbovePrompt 渲染位置,排在其他插件和 Claude Code 放入该位置的内容之后,并且在问卷打开时会让位。
自定义
/config 中没有任何选项。要改变外观,请编辑 register.tsx 顶部的常量:SHOW_DONE_MS(已完成的行保留多久,30 秒)和 BAND_ROWS(状态带显示几行,4 行)。代理列表在 agent.spawn 钩子中被限制为 30 条,颜色和图标则由 icon 与 color 函数设置。
权限与安全
在运行任何东西之前,我们读过插件加载的每个文件:.claude-plugin/plugin.json、hooks/hooks.json、hooks/register.tsx、types/index.d.ts 和测试文件。没有 package.json、安装脚本、二进制文件或打包代码,也没有发现隐藏字符或零宽字符。仓库带有 MIT 的 LICENSE。
修改界面 涵盖状态带、面板和提示。添加命令 涵盖 /radar。插件不使用网络、shell 命令、文件写入或环境变量,也不会在 Claude Code 的宿主状态(保存在内存中)之外存储任何内容。它不启动任何后台服务:一秒时钟属于会话,只在显示代理行时运行。它不会向提示词或工具结果添加任何内容,也从不调用模型。
需要留意的地方如下。插件不设匹配器地挂钩每一次 tool.call 和 agent.spawn,所以它能看到子代理的工具名称和输入,例如 Bash 命令或文件路径,并把最近一次的简短标签保存在内存中,但不会保存或发送它们。在面板中,打开某个代理会通过 $.session.messages 读取它最近的消息并在本地显示,每条截断到 400 个字符。最后,claude plugin validate 没有报告错误或警告,但提示 agent.spawn 和 tool.call 钩子没有 .catch。这两个钩子都会用 next(e) 把事件传下去,所以实际风险是状态更新抛出错误,而不是阻塞。作者的 2 个测试在 Claude Code 2.1.291 上通过。
- 拦截工具调用
- 能看到 Claude 发起的每一次工具调用(tool.call / tool.check),并可以阻止或修改它。
- 读取你的提示词
- 可以看到你输入的内容和对话记录(prompt.* / session.append / session.messages)。
- 修改界面
- 在 Claude Code 界面中绘制内容:横条、面板、状态文字、弹出通知(ui.render / $.ui.*)。
- 添加命令/工具
- 注册新的斜杠命令或工具,供你或 Claude 调用($.command.register / $.tool.register)。
兼容性与故障排除
已在 macOS 上用 Claude Code 2.1.291 检查(validate 和测试)。如果状态带没有出现:
- 子代理必须在当前会话中启动;状态带只列出它亲眼看到启动的代理。运行
/radar可以补入更早启动的代理。 - 提示词上方打开了问卷;问卷关闭后状态带会重新出现。
- 另一个插件已经占用了
/radar。Claude Code 拒绝这个名称,插件会在没有该命令的情况下继续工作。 - 在已打开的会话中安装:请运行
/reload-plugins。
Claude Code 的“Agent view”页脚与这个插件无关,它在提示词下方显示自己的代理列表。
常见问题
- Agent Radar 会发起网络请求或调用模型吗?
- 不会。这个 hooks 模块不使用网络、shell、文件或环境变量相关的 API,只监听 Claude Code 自己的事件并绘制事件报告的内容。它读取的唯一文本是子代理的消息,而且仅在你于 /radar 面板中打开某个代理时才会读取。
- 提示词上方的那一行显示什么?
- 一个状态圆点(运行中为黄色,完成后为绿色对勾,出错或中止时为红色叉号)、代理的描述、已用时间和工具数;对运行中的代理,还会显示其最近一次工具调用的简短标签,例如“reading demo-app/README.md”或“searching src/**/*”。最多显示四行,之后显示“+N more · /radar”。
- 已完成的代理会在状态带上停留多久?
- 30 秒。之后这一行会消失,但该代理仍保留在 /radar 面板中,面板保存最近 30 个代理,直到你点击“Clear finished”。
- 它会拖慢或阻塞我的工具调用吗?
- 不会阻塞。它挂钩子代理的每一次工具调用,先给计数器加一,再原样放行该调用。这个钩子没有 .catch,因此状态更新失败时,会表现为该次调用报错;claude plugin validate 把这一点列为提示,而不是警告。
- 如果 /radar 与其他命令冲突怎么办?
- Claude Code 会拒绝已经存在的命令名。插件会忽略这次拒绝并照常启动,所以状态带仍然可用,只是这种情况下没有 /radar 面板命令。

