Skip to main content
The engine ships one agent. It answers the questions asked at /ask in the web client and through the chat API, over the coded record of the person the question is about. Adding a capability means adding a tool, not another agent. Every agent runtime other than the bundled one (Claude Desktop, Cursor, an agent loop of your own) reaches the same data through the MCP endpoint and needs nothing from this page.

What a turn can use

Each answer streams as typed blocks (text, reasoning, tool calls and their results, usage), so a client can show the tool trace behind an answer.

Configuration

The agent’s keys have no agent-name suffix. The shipped values live in config.llm.yaml; override them in your overlay. Model selection and keys are described in Configuration.

Replacing the agent

There is one agent slot. A replacement comes from an installed package that declares a mirobody.agents entry point, or from a directory listed in AGENT_DIRS; the first class found that defines generate_response becomes the agent for the process. Nothing in the package needs editing. The contract is two methods. generate_response receives the user the turn is about (already authorized, and possibly a care-circle member rather than the caller), this turn’s messages, and keyword arguments such as language, session_id and timezone; it yields the same typed blocks the shipped agent streams. Accept **kwargs, since the chat layer may add arguments.
To build a different harness on the shipped middleware and filesystem backends instead, install mirobody[agent]. The full contract, the block vocabulary and a minimal example plugin are in .