Run & Deploy
Build the workspace, run the two planes locally with no cluster, or apply the Kubernetes overlays.
Prerequisites
Rust 1.95+ (pinned via rust-toolchain.toml), protoc, and libprotobuf-dev.
just check # fmt + clippy + tests
cargo build --workspaceLocal two-process (no cluster)
Run the harness and the control plane as two processes. With no model set, the harness uses a stub provider; set a model to route to a real provider.
# harness — stub provider when no model is set, or a real
# provider via POLYCHROME_MODEL + provider config.
POLYCHROME_HARNESS_ADDR=127.0.0.1:50053 \
POLYCHROME_SIDE_ADDR=127.0.0.1:8181 \
cargo run -p polychrome-harness
# control plane — routes turns through the harness above
POLYCHROME_GRPC_ADDR=127.0.0.1:50052 \
POLYCHROME_SIDE_ADDR=127.0.0.1:8081 \
POLYCHROME_HARNESS_ADDR=http://127.0.0.1:50053 \
cargo run -p polychrome --bin polychrome-control-planeDrive a turn end to end with a properly framed Connect request — see crates/polychrome-slack/tests/integration.rs for the canonical client shape, or use the operator CLI.
Cluster
Build the per-target images and apply an overlay.
docker buildx build --target control-plane -t polychrome:latest --load .
docker buildx build --target harness -t polychrome-harness:latest --load .
docker buildx build --target slack -t polychrome-slack:latest --load .
kubectl apply -k manifests/overlays/local # OrbStack / kind / minikube
kubectl apply -k manifests/overlays/gke # GKE Autopilot (Filestore PVC)Overlays differ only in the StorageClass for the shared event-log PVC. Workload-identity binding for the cloud service account is documented in manifests/README.md.
Configuration
All environment variables are prefixed POLYCHROME_. The most useful on the control plane:
| Env | What it does |
|---|---|
MODEL | Provider model id; empty → stub provider |
SUMMARY_MODEL | Cheaper model for anchored-iterative summarization |
HARNESS_ADDR | Shared-Service harness path (http://host:port) |
PER_CONVERSATION_HARNESS | Resolve a harness pod per Conversation CR |
EVENTLOG_DIR | Commonware journal storage root |
LEASE_NAMESPACE | Enables cross-replica single-writer via a Lease |
APPROVE_ALL=1 | Auto-approve HITL requests (verification only) |
Observability is shared across binaries: OTEL_EXPORTER_OTLP_ENDPOINT / OTEL_SERVICE_NAME enable the OTLP exporter, and RUST_LOG / RUST_LOG_FORMAT tune the tracing subscriber.