Atomic sessions can talk to each other. Press ALT+M to message another session, or ask the agent to coordinate with a peer.
Intercom
Atomic bundles@bastani/intercom for direct 1:1 messaging between sessions on the same machine. Send context, findings, or requests yourself, or let agents coordinate. No separate install is needed.
The extension registers commands and tools at startup. Connections are lazy: a session connects when you or the model invoke Intercom. Workflow stages and admitted subagent children connect at session start so they are listable and steerable immediately.
Key capabilities:
- Session messaging -
send,ask(blocking, 10-minute timeout),reply,pending,list,groups, andstatusvia theintercomtool - Runtime groups - Add or remove named memberships without restarting; joined sessions keep their broker IDs and later subagents inherit the most recently joined membership
- Session and group discovery - List connected sessions or every available group, including session counts and membership markers
- Keyboard overlay - ALT+M or
/intercomopens a session picker and compose overlay - Attachments - Share
file,snippet, andcontextpayloads between sessions - Subagent escalation - Delegated children get a
contact_supervisortool for decisions, structured interviews, and progress updates - Run notifications - Workflows and subagents deliver run results and control notices to a parent session over Intercom
- Bundled skill -
/skill:intercomprovides planner-worker, group, and escalation-handling patterns
- Planner–worker splits across two terminals
- Research → implementation context handoffs
- Supervisor decisions and structured interviews for delegated subagents
- Pair debugging between sessions
Where to go next
Intercom coordinates several Atomic sessions on one machine. Read this page for the quick start and the coordination patterns, then continue:- Intercom operations covers connection states, delivery, notifications, shortcuts, and recovery.
- Intercom reference — the
intercomtool contract and every intercom setting.
Table of Contents
- Quick Start
- How Connection Works
- The intercom Tool
- Coordination Patterns
- Subagent Escalation: contact_supervisor
- Workflow and Subagent Notifications
- Configuration
- Keyboard Shortcuts
- How It Works
- Intercom vs Shared-Room Messengers
- Limitations
- Related Docs
Quick Start
From the Keyboard
Press ALT+M or run/intercom to open the session list overlay:
- Select a session — Use arrow keys to pick a target session
- Compose message — Write your message in the compose overlay
- Send — Enter Send · Escape Cancel
From the Agent
The agent can list sessions and send messages using theintercom tool. Tool calls and results render as compact transcript rows so send/ask/reply flows are easy to scan:
Receiving Messages
When a message arrives, it appears inline in your chat with the sender’s info and a reply hint:intercom({ action: "reply", ... }), so recipients never need raw sender or replyTo IDs. Idle recipients get a new turn immediately; busy interactive recipients receive the message once they go idle. Attachment content is included in the agent-visible body, and messages are rendered inline and stored in Atomic session history.
Working subagents and live workflow stages process send and ask as priority input. The current model call or cancellable tool is cancelled, then the message is handled in the same task and session. Tools that ignore cancellation finish first; completed side effects are not undone or replayed.
This works for foreground and background children. Startup messages join the original task, multiple messages keep arrival order, and asks retain their reply thread. Explicit interrupt, owner cancellation, host stop, and terminal children or closed stages take precedence over later input. Use an exact child name or full session ID from intercom list, not a workflow-stage path.
A busy non-interactive recipient that is neither an admitted subagent nor a workflow stage can still refuse a message without interrupting its task. A successful send receipt acknowledges transport delivery, not acceptance by the recipient’s model. The refusal carries the original reply thread: a waiting ask returns an error; otherwise the sender sees Intercom delivery failed feedback with a Sent: timestamp. That feedback bypasses the ordinary idle queue and does not trigger a standalone agent turn. During an active turn, protected delivery makes it visible and reconciles it at a protocol-safe boundary. Its wording describes the refused send, not the recipient’s later activity.
Atomic enables ordinary intercom by default, but it respects tool allowlists, exclusions and noTools: "all". Include "intercom" in an explicit allowlist when needed. SDK hosts can disable the entire package with builtins: { intercom: false }; reload does not restore it. contact_supervisor remains subagent-only. Registration is lightweight; broker connection and heavy initialization remain lazy until an Intercom surface is used.
How Connection Works
Moved to Intercom operations.Troubleshooting initialization
Moved to Intercom operations.The intercom Tool
Moved to Intercom reference.Actions
Moved to Intercom reference.Targeting Sessions and Pending Workflow Stages
Moved to Intercom reference.Deferred delivery to pending stages
Moved to Intercom reference.Groups
Moved to Intercom reference.send vs ask vs reply
Moved to Intercom reference.Attachments
Moved to Intercom reference.Coordination Patterns
The most natural use of Intercom is splitting a task between two sessions — one holds the big picture, the other does the hands-on work. Open two terminals, start Atomic in each, and name them so they can find each other:intercom({ action: "list" }), then coordinate:
Coordination is not only vertical. Subagents launched together and workflow stages in one invocation share an Intercom group, so they can list each other and message directly to debate, connect, learn, and coordinate as peers.
contact_supervisor is only for the supervisor. See Peer coordination for how to enable it from the launching prompt.
The bundled intercom skill (/skill:intercom) has copy-paste ready patterns for planner-worker delegation, status checks, natural replies, broadcasting to multiple workers, attachments, handling subagent escalations on the orchestrator side, and peer coordination between subagents and workflow stages.
Recommended: Add this snippet to your project’s AGENTS.md to help agents understand when to coordinate across sessions:
Subagent Escalation: contact_supervisor
When Atomic’s subagent runtime admits a delegated child, the child session gets a subagent-onlycontact_supervisor tool in addition to the regular intercom tool. Normal sessions never see contact_supervisor.
When the Tool Appears
The tool appears only in a delegated child whose parent granted supervisor coordination. Otherwise the child receives only ordinaryintercom. Supervisor identity is supplied by the runtime, not environment variables.
In parallel runs, a parent-targeted blocking ask waits in its original child execution. Foreground observations may yield so the parent can reply, but active and queued siblings retain their identities and execution capacity. Sends and progress updates never wait for a reply. A single-child launch retains the terminal fresh-child handoff when its exact live owner claims a blocking parent request.
The Three Reasons
Do not use
contact_supervisor for routine completion handoffs; return the final subagent result normally. Parallel requests wait without cancelling the batch. A claimed single-child blocking request ends that child and gives the parent a fresh-start handoff.
What the Supervisor Sees
For a parallel child, the supervisor receives the question with its child/run identity and a reply hint. Answer throughintercom({ action: "reply", message: "..." }); if several questions are pending, use pending and the exact replyTo. The answer returns as the requesting child’s tool result. Do not launch a replacement child to answer it.
Single-child claimed handoffs instead include terminal run metadata, ordered attachments, the original delegated task, and an explicit fresh-start [TASK_CONTEXT] call. That legacy single-child path still requires a new run identity for follow-up work.
For a single-child claimed handoff, the fresh-start instruction has this form:
Structured Interview Replies
interview_request questions use the shape { id, type, question, options?, context? } where type is single, multi, text, image, or info (info questions are context-only and need no response):
details.structuredReply when the answer matches the expected question IDs and options. A single-child claimed handoff instead carries the structured questions into its fresh task context and does not create an Intercom reply.
Workflow and Subagent Notifications
Moved to Intercom operations.Workflow Delivery Modes
Moved to Intercom operations.Subagent Control Notices
Moved to Intercom operations.Delivery Ordering
Moved to Intercom operations.Configuration
Moved to Intercom reference.Keyboard Shortcuts
Moved to Intercom operations.How It Works
Moved to Intercom operations.Intercom vs Shared-Room Messengers
Use a shared-room messenger for multi-agent swarms working on one shared task. Use Intercom when you want to manually coordinate your own sessions or have one agent reach out to another specific session.