The coordinator is a Rust/Axum HTTP server that manages agent processes on a single host. It is not exposed externally — the gateway proxies to it.

Routes

GET /health

Coordinator health check.

GET /admin/status

Detailed status including active agents, resource usage, and Chronicle mount status.

POST /deploy/agent

Deploy an agent bundle to this coordinator.
{
  "source": "s3://podium-registry/production/deployments/claude-agent/1.0.0/claude-agent-1.0.0.tar.gz",
  "checksum": "sha256:2b795103...",
  "agent_type": "claude-agent",
  "version": "1.0.0"
}
The coordinator:
  1. Downloads the bundle from S3 (if not already cached locally)
  2. Extracts to deployments/{agent_type}/{version}/
  3. Sets up the runtime environment (node_modules for TS, venv for Python)

POST /instances

Create a new agent instance on this coordinator.
{
  "deployment_id": "claude-agent:1.0.0@2b795103",
  "agent_id": "agent_abc123",
  "config": { ... },
  "secrets": { ... }
}
The coordinator:
  1. Calls ensure_deployment() (downloads from S3 if needed)
  2. Creates instance directory structure
  3. Initializes Chronicle FUSE mount
  4. Spawns agent process
  5. Establishes IPC channel
  6. Returns instance info

GET /agent//info

Get agent instance info (status, config, resource usage).

POST /agent//messages

Post a message to an agent (non-streaming, used for simple interactions).

GET /agent//messages

Get agent message history.

GET /agent//logs

Get structured agent logs.
Query ParamTypeDescription
limitintNumber of log entries
offsetintPagination offset
levelstringFilter by log level

GET /agent//files/

Read a file from the agent’s Chronicle workspace.

POST /agent//files/

Upload a file to the agent’s workspace.

WebSocket /agent/

Native protocol WebSocket endpoint. Used by Diminuendo (via the gateway) to stream agent events in real time. The coordinator sends native StreamUpdate events (e.g. { type: "update", content: {...}, event_type: "tool_call_start" }) and receives native commands (e.g. { type: "process_message", content: { text: "...", messages: [...] } }). This is Podium’s own protocol, not ACP. Diminuendo’s PodiumNativeMapper handles the translation between this native protocol and ACP for clients.