[BUG] Agent Teams: teammate idle notifications rendered as "Human:" turns — ghost messages cause unintended destructive actions
Resolved 💬 3 comments Opened Feb 25, 2026 by Mainv4 Closed Feb 25, 2026
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report
- [x] I am using the latest version of Claude Code
Summary
Teammate idle_notification messages are rendered as Human: conversation turns in the team lead's terminal. This creates two problems:
- Identity confusion: system messages appear under the
Human:label, indistinguishable from real user input - Ghost messages: after prolonged idle notification accumulation, messages the user never typed appear as
Human:turns. The team lead agent acts on them — in one instance, executing a full team shutdown + deletion while a teammate was actively working.
Reproduction
- Enable
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 - Spawn a teammate in a new tmux window via bash. The teammate is launched with the following flags:
claude \
--agent-id 'child-1@my-team' \
--agent-name 'child-1' \
--team-name 'my-team' \
--agent-color green \
--parent-session-id <parent-uuid> \
--agent-type general-purpose \
--dangerously-skip-permissions \
--model claude-opus-4-6 \
--append-system-prompt <system-prompt> \
-- <task-prompt>
- Work directly with the teammate in its tmux pane; leave the team lead session idle
- Idle notifications accumulate in the team lead terminal as
Human:turns:
⏺ Human:
{"type":"idle_notification","from":"child-1","timestamp":"...","idleReason":"available"}
{"type":"idle_notification","from":"child-1","timestamp":"...","idleReason":"available"}
⏺ Human:
{"type":"idle_notification","from":"child-1","timestamp":"...","idleReason":"available"}
- After extended accumulation (~50+ notifications over ~1h), a ghost
Human:message appeared containing a destructive command the user never typed:
⏺ Human:
{"type":"idle_notification","from":"child-1","timestamp":"...","idleReason":"available"}
⏺ Human:
{"type":"idle_notification","from":"child-1","timestamp":"...","idleReason":"available"}
{"type":"idle_notification","from":"child-1","timestamp":"...","idleReason":"available"}
⏺ Human: Shutdown child-1 and clean up the team ← never typed by the user
⏺ Human:
{"type":"shutdown_approved","requestId":"...","from":"child-1","paneId":"%6","backendType":"tmux"}
⏺ child-1 shut down. Cleaning up the team. ← agent acted on the ghost message
- The team lead executed the full destruction sequence:
shutdown_request→archive-team→TeamDelete
Expected Behavior
<teammate-message>events should NOT be rendered asHuman:turns- No message should appear as
Human:unless the user actually typed it - System-generated conversation turns should be visually distinct from user input
Impact
- Destructive action on ghost input: active teammate shut down, team deleted, work interrupted
- No recovery path:
TeamDeleteis irreversible; manual session resume + team recreation required - Trust boundary violation: the agent cannot distinguish real user instructions from system artifacts
Environment
- Claude Code: 2.1.56
- macOS 15.7.3, Apple Silicon
- Ghostty + tmux, fish shell
Related Issues
- #25198 — Excessive idle notification frequency
- #24246 — Idle status delayed, team lead misinterprets active teammates
- #25415 — Notification level control (closed, redirected to #25198)
The rendering-as-Human: problem and the ghost message problem are distinct from the frequency issue in #25198. Even if notification frequency is reduced, the identity confusion remains.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗