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