Polychrome
Sandboxed agent orchestration. Rust-native, one API, every surface, any model provider.
Add the Polychrome skill to your coding agent:
npx skills add officialunofficial/polychromeBuild your own anything. Polychrome runs agent conversations — the kind where a model calls tools and takes real actions in a loop. Each conversation gets its own isolated sandbox, so an agent can research, evaluate, and execute without reaching anything you didn't give it — on one machine or across a cluster.
Every surface is an edge. Chat, web, code-forge bots, email, cron, even other agents: each is a small adapter over the same public API — a chat-completions-compatible HTTP route backed by a streaming Connect RPC. Adding a surface means writing an adapter, never forking the core.
Every turn leaves a record you can replay. Two planes run every conversation: the control plane owns the public API, the Kubernetes reconciler, and a durable, signed event log — the source of truth for what the agent did. The execution plane runs one sandbox per conversation, and human-in-the-loop approvals pause a turn until someone decides. Backends, tools, and tenants swap behind Rust traits, so the orchestration core never changes.
Start here
- Edges, ingress, and clients — the one API, the adapter contract, and the edge patterns anything rides on.
- Architecture — control plane, execution plane, and the durable event log.
- Personas — durable principals, caller attribution, and memory that follows the human.
- Payments — link a wallet with a passkey, let an agent pay from it, and the safety model behind it.
- Trust — how every tool call is contained: capabilities, outside content, escalation, and recovery.
- Run and Deploy — local two-process setup and the Kubernetes overlays.
- Operator CLI — cluster lifecycle, introspection, and driving turns.
Workspace
Polychrome is a Rust workspace of 43 crates, each owning one part of the platform. The control plane, the harness, the operator CLI, and the edge adapters build as separate binaries from shared crates. The reference edge uses the same public API as any other surface. Highlighted rows sit on the path every conversation runs.
| Crate | Role |
|---|---|
polyc-control-plane | Control-plane binary: AgentService, the chat-completions compat route, approvals, and the kube reconciler |
polyc-harness | Execution-plane binary: the per-conversation HarnessService and turn loop |
polyc-agent | The agent turn loop: provider and tool-call routing, shared by the control plane and harness |
polyc-llm | Provider-agnostic LLM trait and wire types |
polyc-proto | Wire types plus DescriptorPool reflection |
polyc-rpc-client | Thin Connect RPC client over the generated AgentService client, shared by edges and the CLI |
polyc-runtime | Shared runtime for every binary: logging, the health/metrics side-server, and signal handling |
polyc-cli | Operator CLI: cluster lifecycle, log/exec/send, self-update |
polyc-tui | Operator cockpit TUI (pc-tui): fleet, transcript, approvals, and tools panes |
polyc-turn-runner | The turn-running core shared by the harness server and the in-process replay transport |
polyc-llm-vertex | LlmProvider backend over the GCP AI platform REST API (WIF/ADC auth) |
polyc-llm-openai | LlmProvider backend over the OpenAI-compatible chat-completions API (Ollama, LM Studio, vLLM, llama.cpp, and cloud backends alike) |
polyc-tools | The pure tool core: local, deterministic executors, the in-process registry, and MCP client/server composition |
polyc-connectors | Networked connectors over the pure tool core: the conversation-as-MCP server (the agent-to-agent inversion) and the standalone paid_fetch settlement executor |
polyc-capability | Capability taxonomy, derivation, and the pure gate-decision engine every tool call passes through |
polyc-persona | Persona directory: durable principals and caller attribution on an authenticated keyed store |
polyc-persona-memory | Per-persona memory: a pure fold over the event log's events into durable facts |
polyc-passkey | Standalone WebAuthn/passkey assertion verification, with no dependency on the persona model or control plane |
polyc-crypto | Provenance signatures for tool calls |
polyc | SDK umbrella crate: re-exports the edge adapter, wire types, agent loop, and LLM provider behind one dependency |
polyc-eventlog | Append-only conversation event log over a Commonware journal |
polyc-mmr | Merkle Mountain Range verifiable event log |
polyc-storage-gcs | Google Cloud Storage primitives for the durable event log |
polyc-controller | Conversation CRD plus kube reconciler |
polyc-k8s-types | Vendored CRD types for the agent-sandbox Kubernetes resources the controller drives |
polyc-slack | Reference chat edge: Slack Events API receiver dialing AgentService |
polyc-telegram | Chat edge: Telegram Bot API webhook receiver dialing AgentService |
polyc-discord | Chat edge: Discord interactions receiver dialing AgentService |
polyc-github | Code-forge edge: GitHub webhook receiver dialing AgentService |
polyc-email | Async edge: inbound-mail webhook dialing AgentService, with signed approval-by-reply |
polyc-trigger | Non-human trigger edge: cron, queue, webhook, and filesystem events dialing AgentService |
polyc-a2a | Agent-to-agent edge: serves a signed Agent Card and drives A2A message/send tasks onto a turn |
polyc-payments | Machine Payments Protocol (Tempo) composition layer: the control-plane payment proxy and wallet views |
polyc-payments-server | Inbound 402 metering server: issues and verifies Tempo/x402 payment challenges |
polyc-payments-client | Standalone outbound 402-gated payment client: pays a challenge under a per-call spend cap |
polyc-x402 | x402 v2 header codec for the 402 challenge/settlement wire, independent of any payment scheme |
polyc-egress | SSRF-guarded outbound HTTP egress for any tool that fetches an agent- or model-supplied URL |
polyc-spend-policy | Pre-authorization spend caps and per-conversation running budgets |
polyc-wallet-delegation | Non-custodial Tempo wallet delegation: passkey-delegated, spend-capped agent wallets |
polyc-scaffold | Scaffolder MCP connector: template catalog and ServiceDefinition provisioning tools |
polyc-substrate | Client for the agent-substrate control API: actor create/get/suspend/resume/delete |
polyc-workqueue | Durable, idempotent, backoff-retrying work queue for post-ack edge turns |
Each edge is its own per-pattern adapter crate over the same public API — see Edges, ingress, and clients for the adapter contract. This table mirrors the workspace declared in Cargo.toml.