A terminal client in the spirit of pi / Codex / Cursor. Holds every provider key on one backend, speaks one wire format, and normalizes the whole model zoo back to it.
cos 0 = 1 — every provider reduces to one protocol.
0 code — routing is by id, nothing to add.
2 lines — base URL + key env in config.ts.
1 adapter + one registry line. Only Anthropic needs it today.
loaded lazily — @anthropic-ai/sdk never loads unless a Claude request arrives.
Each gated tool prompts — “ada wants to run a shell command…” — and one key answers: [y]es · [a]uto · [p]lan · [n]o.
ada plans but won't edit. /run approves and executes.
Tools run without asking; destructive bash still confirms.
Undo reverts the agent's edits; snapshots capture the whole tree.
Every turn persisted as append-only JSONL; --continue / --resume picks up where you left off.
/undo reverts the agent's edits; checkpoints make it surgical.
/snapshot + /restore capture the whole workspace tree.
Old turns are summarized automatically as context grows — /compact forces it, /context shows the estimate.
Per-user seat keys; server-enforced model allowlist + tool rules pushed to every client.
Per-user usage metering and an append-only audit log. File-backed, self-hosted in your network.
Okta, Entra, Auth0, Keycloak, Google Workspace. JIT-provisioned seats; offboarding is immediate.
Stdlib-only RS256/JWKS verification, no new dependency — a bad token is a denied request.
stdio and HTTP servers — filesystem, github, postgres, slack, sentry… tools appear as server__tool.
ada serve — one-shot and Cursor-style streaming sessions with approval gating; typed SDK included.
ada acp plugs the agent into editors; ada share publishes a session view.
Named agents, subagents, worktrees, and orchestrators: react · single · plan · multi · toolsmith.
One wire format. One control point. One key per client.