| Service | Role | Language | One-liner |
|---|---|---|---|
| Ensemble | Inference Gateway | Go | Routes LLM requests across providers with cache-aware, cost-optimized routing |
| Podium | Agent Conductor | Rust + TS/Python SDKs | Deploys and manages AI agent processes with dual-runtime support |
| Chronicle | Workspace Filesystem | Rust | FUSE filesystem providing versioned, replicated file access for agent workspaces |
| Diminuendo | Client Gateway | TypeScript (Bun) | ACP WebSocket gateway that translates between client ACP and Podium’s native protocol |
| Concordance | Config Service | TypeScript (Bun) | Raft-based distributed KV store for user preferences, tenant settings, and platform configuration |
How They Connect
- Diminuendo is the entry point for all clients. It authenticates users, manages sessions, and connects to Podium for agent lifecycle and streaming. Diminuendo translates between the ACP JSON-RPC 2.0 protocol that clients speak and Podium’s native StreamUpdate protocol (via WebSocket to
/agent/{instanceId}+ REST). It also connects to Ensemble for model configuration queries only (GET /api/v1/models), and to the GitHub API for repo/PR/issue operations. - Podium receives agent lifecycle commands from Diminuendo and spawns/manages agent processes. The Podium coordinator mounts Chronicle FUSE filesystems for each agent and manages their lifecycle. Agents call Ensemble directly for LLM inference (not through Diminuendo).
- Ensemble handles all LLM API calls — routing across providers (Anthropic, OpenAI, Google, xAI, OpenRouter), managing rate limits, optimizing for prompt cache hits, and tracking costs. Agents running inside Podium call Ensemble directly.
- Chronicle is a FUSE filesystem mounted by the Podium coordinator for each agent’s workspace directory. It is not a standalone service that other services connect to via API. It provides automatic version history, content-addressable storage, and bidirectional replication between agent-side and sandbox-side Chronicle instances.
Design Principles
- ACP on the client edge, native protocol internally: Clients speak ACP JSON-RPC 2.0 to Diminuendo. Diminuendo translates between ACP and Podium’s native StreamUpdate protocol via
PodiumNativeMapper(mapping 40+ native event types to ACP notifications). This gives clients a standards-based interface while allowing the agent runtime to use an optimized internal protocol. - Process isolation: Every agent runs in its own process with its own state database and workspace filesystem.
- Local-first with background sync: SQLite databases everywhere (Ensemble, Podium, Diminuendo), with Redis/Valkey for cross-instance coordination and S3 for durability.
- Configuration-driven: YAML configs for providers, models, pricing, timeouts, and routing — no code changes for operational tuning.