API: MCP and A2A¶
Two doors, each with its own credential and its own default. The engine itself still listens on
nothing: ipc.py binds a Unix socket (a named pipe on Windows) and the operating-system user is
the credential.
There is now a third door, and it is the only one that can be reached over a network: the phone
bridge (scripts/console/phone_bridge.py), which the Android console talks to. It is a separate
process, it is not installed or running unless somebody installs it, and it refuses to listen at
all until a phone has been paired. It binds loopback only — Tailscale does the exposing — and it
proxies a fixed allowlist of routes to the engine's socket. Everything not on that allowlist is
refused, including every setup, onboarding, accounts, secrets and file route. See
scripts/install-phone-bridge.sh, and scripts/test_phone_bridge.py for what the allowlist
guarantees.
No bearer key gained the ability to change anything: appkeys.py scopes are still
read | traces | sync. The bridge runs as the Human on the Human's machine, which is the same
credential the socket already required.
MCP — soloinc mcp¶
The console's tools over stdio, for the program that spawns it. Read tools: list_cells,
portfolio, get_pipeline, list_workloads, awaiting_human, recent_runs, preflight,
intake_snapshots. The write tools — decide, release_brief, halt_workloads,
run_workload, stop_workload, start_pipeline, stop_pipeline, run_stage, stop_stage,
clear_intake, cancel_delegation, unwind_delegation — are not offered over stdio: they need a
write app key, and this build issues none. Each asks the same step-up its button does: once an
authenticator is enrolled, a current code from it, or it is refused. Resources: console://instructions/<workload> (the assembled sheet,
markdown) and console://pipeline/<id> (the definition, yaml).
Add it to Claude Code with claude mcp add soloinc -- soloinc mcp.
A2A — between cells¶
A stage may hand an item to another cell's pipeline, on this machine or on a peer reached over https. The item is worked there under that cell's own process and gates and returned; the sender continues where it left off. Delivery is at-least-once with a deterministic task id, so a retry never files the same item twice. Each cell's signed agent card and per-agent cards are published with its snapshot.