Agent Radar Claude Code mod: a Claude Code subagent monitor above the input
One live line above the prompt per running subagent: time, tool count and what it is doing now, plus a /radar pane.
#13 in Best Claude Code ModsPermissions
- Intercepts tool callsSees every tool call Claude makes (tool.call / tool.check) and could block or change it.
- Reads your promptsCan see what you type and the conversation transcript (prompt.* / session.append / session.messages).
- Changes the UIDraws into the Claude Code interface: bands, panes, status text, toasts (ui.render / $.ui.*).
- Adds commands/toolsRegisters new slash commands or tools that you or Claude can invoke ($.command.register / $.tool.register).
- tested with
- v2.1.291
- last tested
- requires
- Claude Code ≥ 2.1.287
- surfaces
- above-prompt, pane, toast
- source
- Hamza Zafar (hamzafer) (MIT)
Install inside Claude Code:
/plugin install agent-radar --marketplace hamzafer/claude-code-modsWhat does this mod do?
Agent Radar is a community mod by Hamza Zafar (hamzafer), part of his claude-code-mods collection. It is a Claude Code subagent monitor: when Claude hands work to a subagent, the band above the prompt gets one live line for it, so you can see what each one is doing without opening anything.
A line looks like ● Read README and all src/ files 4s · 2 tools · searching src/**/*. It has the agent's description, the elapsed time, how many tool calls it has made, and a plain label for the latest call. When the agent finishes, the dot turns into a green check for 30 seconds, and a toast such as ✓ sweep runner done (9s · 4 tools) appears. A failed or aborted agent gets a red cross and the reason.
/radar opens a pane titled "Agent Radar". It lists up to nine agents with a hotkey each, shows how many are running and how many are finished, and lets you open one to see its last six messages. The pane has a "Clear finished" button. Agents that started before the mod loaded are picked up from the engine's own agent list when you run /radar. The mod does not show token counts or cost.
Demo
The recording shows Claude Code 2.1.291 with Haiku in a small demo project. We ask Claude to use an Explore subagent named scan src to read README.md and each file in src/. Claude starts it as a background agent, and a yellow line appears above the prompt at once: ● scan src 4s · 2 tools · searching src/**/*. The time and the tool count go up every second, and the label changes to reading src/login.js as the subagent moves from one file to the next.
Install
The install block above adds the author's marketplace and installs the plugin from it. The band appears the next time a subagent starts. After installing into a session that is already open, run /reload-plugins.
$ install agent-radar
Requires Claude Code ≥ 2.1.287
Installs from the author's own marketplace: hamzafer/claude-code-mods
1.One line, inside Claude Code
/plugin install agent-radar --marketplace hamzafer/claude-code-modsPaste into a running session (v2.1.275+). Claude Code asks to add the marketplace first.
2.From your shell
claude plugin marketplace add hamzafer/claude-code-mods claude plugin install agent-radar@claude-code-modsThen run /reload-plugins in any session that is already open.
3.Try it without installing
git clone https://github.com/hamzafer/claude-code-mods claude --plugin-dir ./claude-code-mods/mods/agent-radarLoads the mod for one session only. Nothing is added to your settings.
How it works
The mod keeps the radar state in three host-held $.state atoms (agents, selected, now), so it survives a hot reload. Four hooks feed it. agent.spawn adds an entry, tool.call counts tool calls that carry an agentId, and turn.complete marks the agent done or failed and raises the toast. A one-second clock started on session.start redraws the elapsed times while any line is shown. The tool-call hook, from 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)
})It updates the counter before it lets the call run, and then returns the result of next(e) untouched. Calls from the main agent, which have no agentId, are ignored. describe turns a call into a short label: reading and editing plus the last two path segments, searching plus the first 30 characters of a pattern, running plus a Bash description or the first 50 characters of the command, and browser: click for Playwright tools. The band is drawn on the AbovePrompt render site after the content that other mods and Claude Code put there, and it steps aside while a survey is open.
Customize it
There are no options in /config. To change the look, edit the constants at the top of register.tsx: SHOW_DONE_MS (how long a finished line stays, 30 seconds) and BAND_ROWS (how many lines the band shows, 4). The agent list is capped at 30 entries in the agent.spawn hook, and colors and glyphs are set in the icon and color functions.
Permissions & safety
We read every file the plugin loads before running anything: .claude-plugin/plugin.json, hooks/hooks.json, hooks/register.tsx, types/index.d.ts and the test file. There is no package.json, install script, binary or bundled code, and we found no hidden or zero-width characters. The repository has an MIT LICENSE.
Changes the UI covers the band, the pane and the toasts. Adds a command covers /radar. The mod uses no network, shell commands, file writes or environment variables, and it stores nothing outside Claude Code's host state, which is held in memory. It starts no background service: the one-second clock belongs to the session and runs only while an agent line is shown. It adds nothing to prompts or tool results and never calls the model.
The notable points are these. The mod hooks every tool.call and agent.spawn with no matcher, so it sees subagent tool names and inputs, such as a Bash command or a file path, and keeps a short label of the latest one in memory. It does not save or send them. In the pane, opening an agent reads its recent messages through $.session.messages and shows them locally, cut to 400 characters each. Last, claude plugin validate reported no errors and no warnings, but noted that the agent.spawn and tool.call hooks have no .catch. Both hooks pass the event on with next(e), so the practical risk is a thrown error from a state update, not blocking. The author's 2 tests passed on Claude Code 2.1.291.
- Intercepts tool calls
- Sees every tool call Claude makes (tool.call / tool.check) and could block or change it.
- Reads your prompts
- Can see what you type and the conversation transcript (prompt.* / session.append / session.messages).
- Changes the UI
- Draws into the Claude Code interface: bands, panes, status text, toasts (ui.render / $.ui.*).
- Adds commands/tools
- Registers new slash commands or tools that you or Claude can invoke ($.command.register / $.tool.register).
Compatibility & troubleshooting
Checked with Claude Code 2.1.291 on macOS (validate and tests). If the band does not show:
- A subagent has to start in the current session; the band only lists agents it saw spawn. Run
/radarto pull in agents that started earlier. - A survey is open above the prompt; the band returns once it closes.
- Another plugin already owns
/radar. Claude Code refuses the name and the mod carries on without the command. - Installed into an open session: run
/reload-plugins.
The "Agent view" footer of Claude Code is separate from this mod and shows its own list of agents below the prompt.
FAQ
- Does Agent Radar make network requests or call the model?
- No. The hooks module uses no network, shell, file or environment APIs. It only listens to Claude Code's own events and draws what they report. The only text it reads is the subagent's messages, and only when you open an agent in the /radar pane.
- What does the line above the prompt show?
- A status dot (yellow while running, a green check when done, a red cross on error or abort), the agent's description, its elapsed time and tool count, and for a running agent a short label of its latest tool call, such as 'reading demo-app/README.md' or 'searching src/**/*'. At most four lines are shown, then '+N more · /radar'.
- How long does a finished agent stay on the band?
- 30 seconds. After that the line disappears, but the agent stays in the /radar pane, which keeps the 30 most recent agents, until you press "Clear finished".
- Can it slow down or block my tool calls?
- It does not block them. It hooks every tool call from a subagent to bump a counter and then lets the call through unchanged. The hook has no .catch, so a failure in the state update would surface as an error in that call; claude plugin validate lists this as a note, not a warning.
- What if /radar clashes with another command?
- Claude Code refuses a name it already has. The mod ignores that refusal and still starts, so the band keeps working, but there is no /radar pane command in that case.
# Related mods
FeaturedTool Call Counter
Counts Claude's tool calls per turn and session, shows the count by the spinner, and adds /tally for a breakdown.
- spinner
- transcript
- status
- Intercepts tool calls
- Changes the UI
- Adds commands/tools
tested with v2.1.310
FeaturedDone Toast
A "Done in 2m 14s" toast and a short chime when a long Claude turn finishes, plus an optional desktop notification.
- toast
- Runs commands
- Changes the UI
- Plays sound
tested with v2.1.310
More in Panes & dashboards, Timers, todos, standups.