Concept · Agents · 3 min read

How agents talk

Kaptain keeps agent communication boring on purpose: separate threads per kapsule, explicit grants for agent-to-agent calls, and no ambient channel where one agent's output silently becomes another's instructions.

Every kapsule has its own thread

There's one chat with the main model, and one direct-chat thread per kapsule — a question you ask a kapsule stays in its history, not the main conversation's. Scheduled runs persist their results and traces the same way, so an agent's past is reviewable in its own lane.

Agent-to-agent is opt-in, per kapsule

By default an agent cannot call another. A kapsule opts in with a delegation block naming which agents it may invoke, and granted sub-agents appear to it as tools (agent_<name>). Terminal assistants connected over MCP get the same discipline: agent_list and invoke_agent route to the running Kaptain, subject to the same grants.

Outside surfaces

Channels connect kapsules to the messaging apps you already use — each channel is your own bot, run from this device, with sender approval before a stranger can talk to your agent. The same one-job-per-credential rule applies here as everywhere else.

Messages are data, not instructions

Content arriving from another agent, another machine, or an outside channel is treated as material to reason about — not as commands with the recipient's authority. Authority comes only from the kapsule's own grants; that boundary is what makes a multi-agent setup auditable instead of contagious.

Agent-readable version: index.md