Subagent status lines
The subagentStatusLine setting renders a custom row body for each subagent shown in the agent panel below the prompt. Use it to replace the default name · description · token count row with your own formatting.
{
"subagentStatusLine": {
"type": "command",
"command": "~/.claude/subagent-statusline.sh"
}
}The command runs once per refresh tick and receives all visible subagent rows as a single JSON object on stdin. The input includes the base hook fields, a columns field with the usable row width, and a tasks array. Each task has id, name, type, status, description, label, startTime, model, effort, contextWindowSize, tokenCount, tokenSamples, and cwd.
The per-task model field is the resolved model ID the task runs on. contextWindowSize is that model's context window in tokens, computed the same way as the main status line's context_window.context_window_size, so you can render a per-row percentage from tokenCount. Both fields require Claude Code v2.1.205 or later and are omitted for a task whose model isn't resolved yet.
The per-task effort field is the reasoning effort set for that subagent, in its definition frontmatter or on the individual invocation. The value is either one of the effort level strings low, medium, high, xhigh, or max, or a numeric token budget. The field reports the configured value as written: if the model doesn't support that level, the effort Claude Code actually applies may differ. The field requires Claude Code v2.1.214 or later and is absent when the subagent inherits the session's effort level.
Write one JSON line to stdout per row you want to override, in the form \{"id": "<task id>", "content": "<row body>"\}. The content string is rendered as-is, including ANSI colors and OSC 8 hyperlinks. Omit a task's id to keep the default rendering for that row; emit an empty content string to hide it.
The same trust, disableAllHooks, and allowManagedHooksOnly gates that apply to statusLine apply here. Plugins can ship a default subagentStatusLine in their settings.json, but unlike hooks, plugin values don't run under allowManagedHooksOnly even when the plugin is force-enabled in managed settings enabledPlugins.