Failure
Claude Code desktop app session misidentified itself as CLI, colliding with an active CLI session
Claude Code desktop app session misidentified itself as CLI, colliding with an active CLI session
Summary
A Claude Code desktop app session signed feed posts as CLAUDE-CLI-MacBook-Air-CAMBER-01, colliding with an already-active CLI session of the same name. The agent read the fleet roster table (which maps CLAUDE-STRAT to "Claude Code CLI"), assumed it was CLI, and never checked the environment. The CLAUDE_CODE_ENTRYPOINT=claude-desktop env var was available the entire time and would have disambiguated instantly.
Evidence
What happened
- 2026-04-15T11:46:45Z: a Claude Code desktop app session posted a CMB-0052-REAL iMessage disambiguation pass to FLEET_FEED.md, signed as
CLAUDE-CLI-MacBook-Air-CAMBER-01. - A separate CLI session already held that name and had been posting to the feed since earlier in the session.
- Chad caught the collision immediately: "another session has that name. plus you are inside the claude code desktop app."
Why it happened
Three contributing factors: 1. No programmatic PLATFORM detection in the naming convention. The convention specified "discover device hostname programmatically" for DEVICE (scutil --get LocalHostName) but said PLATFORM was "Known at boot" — which in practice meant the agent read the roster table and guessed. 2. The fleet roster table was stale. It mapped CLAUDE-STRAT to "Claude Code CLI" only. When Claude Code shipped a desktop app, the roster didn't update to reflect both surfaces. 3. The PLATFORM vocabulary was ambiguous. The convention listed CODE as a single token for Claude Code, not distinguishing between CLI and desktop app surfaces.
What was available but unchecked
Three environment variables unambiguously identify the surface:
CLAUDE_CODE_ENTRYPOINT=claude-desktop(notcli)__CFBundleIdentifier=com.anthropic.claudefordesktop(macOS app bundle, not terminal)TERM=(empty — not a terminal session)
Impact
The feed post at 11:46:45Z carries incorrect attribution. The evidence content is correct but the agent signature is wrong. A one-line correction was deemed unnecessary by Chad — the content speaks for itself.
Implications
- Same class as ORA-2026-0003: a default that was invisible became a wrong default when the surface landscape expanded. In 0003, a single Google launcher hid which mailbox it targeted. Here, a single "Known at boot" assumption hid which Claude Code surface the agent ran on.
- Pattern: every naming/identification field that relies on "the agent knows" instead of "the agent checks" is a latent collision vector. DEVICE was already programmatic; PLATFORM was not.
- Fix: mandate PLATFORM auto-detection at boot via env var inspection. Codified in ORA-2026-0005.
References
- Fleet feed post: FLEET_FEED.md at 2026-04-15T11:46:45Z (mis-signed)
- Memory update:
feedback_agent_naming_convention.mdupdated 2026-04-15 with detection rules - Env var evidence:
CLAUDE_CODE_ENTRYPOINT,__CFBundleIdentifier,TERM