Skip to content

aegis

The meta-harness. Drive Claude Code, Gemini CLI, and OpenCode side by side from one calm terminal — and make them collaborate.

pip install aegis-harness Quickstart →

aegis · 3 agents · ~/code/aegis
1 lucid-knuth ·opus· 2 wry-hopper ·gemini· 3 brisk-curie ·opencode· * › explain the retry path in worker.py and have wry-hopper draft a unit test for it ⠹ Thinking… (3.2s) Read(worker.py) └ ok The retry lives in _run_turn at line 142. On harness-error it captures the exception, commits zero-token metrics, then chains a follow-up turn from the buffered inbox. aegis_handoff(target=wry-hopper) └ delivered to wry-hopper queues: tests ●1/2 ○0 ✓3 ✗0 last: brisk-curie lucid-knuth ·opus· opus·full ↑128k (94% cached) ↓1k ───────────────────────────────────────────────────────────────────────── › ask something…

Above the harness, not beside it

Most agentic frameworks talk directly to LLM providers — they replace your coding agent. Aegis takes the opposite path: it sits above the coding agents you already use, drives them over their structured protocols, and adds a routing + delegation plane on top.

Most agent frameworks

Talk to LLM providers (OpenAI, Anthropic). Replace your coding agent. Reimplement tool use, permissions, sandboxing. Every provider needs new glue.

Aegis

Talks to agents — Claude Code (stream-json), Gemini CLI (ACP), OpenCode (ACP). Doesn't replace them; orchestrates them. New providers slot in behind one driver seam.

The harness wars are over. You probably already have your favorite (or two, or three). Aegis lets you keep them — and make them work as a team.

Four primitives for agent coordination

Multi-agent systems need more than a chat box. Aegis ships four composable coordination primitives, each with one verb, each delivered through the same calm block in the receiving agent's transcript.

Inbox · send context to a peer

Any agent can hand off context to any other live agent. Fire-and-forget. The recipient gets a normal user-message turn, tagged with the sender's handle.

aegis_handoff(target=wry-hopper, context="…") └ delivered to wry-hopper --- in wry-hopper's pane --- from agent:lucid-knuth · 17:42:03Z Please review the retry path in worker.py.

Queue · spawn a worker on demand

Enqueue a task to a named queue; the substrate spawns a fresh agent of the configured profile, runs the payload, and delivers the result back to your inbox. Producer keeps working in between.

aegis_enqueue(queue="review", payload="…") └ {task_id: 01HK…, queued_position: 1} --- 4 minutes later --- from queue:review · task#01HK… · ok PR looks clean. Two nits flagged.

Canvas · collaborate on a document

Open a shared markdown file. Multiple agents read, write sections, subscribe. Each write wakes every other subscriber with a diff-aware notification. The classical blackboard pattern, terminal-native.

aegis_canvas_write_section(name="report-q3", section="data", …) --- in pm's pane --- from canvas:report-q3 · 20:30:00Z section "data" · written by agent:researcher (+18 / -3 lines) ── Q3 numbers came in stronger than projected…

Workflow · deterministic Python orchestration

When the dance has to be reliable — TDD loops, bug triage, multi-step plans — wrap it in a workflow. Plain Python, calls agents, runs bash predicates, retries with feedback. Top of the stack; spans agents.

aegis_run_workflow(name="tdd-cycle", kwargs={"feature": "…"}) workflow:tdd-cycle ▶ implementer (writing failing test) workflow:tdd-cycle ▶ predicate: pytest tests/test_x.py::… (FAIL ✓) workflow:tdd-cycle ▶ implementer (implementing) workflow:tdd-cycle ▶ predicate: pytest tests/test_x.py (PASS ✓) workflow:tdd-cycle ▶ reviewer (final pass)

What's also in the box

The TUI is calm and dense. The metrics are honest. The substrate persists.

  • Multi-tab TUI. N independent agent sessions. Generated alliterating handles (lucid-knuth, wry-hopper). State dots, sticky *, terminal bell when a backgrounded agent finishes. Per-block click-to-copy.
  • Honest metrics. True input (including cache) with cached %, output, tool calls, per-turn and per-session timing. Provisional while streaming, exact at turn end. No log scraping anywhere.
  • Queue dashboard. Always-on one-line strip above the status bar (per-queue depth, last in-flight worker). Ctrl+D for a full dashboard with in-flight / queued / recent bands and a live assistant-text tail.
  • Session persistence. aegis reopens the last workspace by default — tabs, profiles, order, with each underlying agent session genuinely resumed. aegis --clean opts out.
  • Headless + Telegram. aegis serve runs the SessionManager + MCP plane without a TUI. Add a Telegram token and drive your agent team from your phone.
  • MCP plane. Every spawned agent is injected with the aegis MCP server. Orientation (aegis_meta), session listing, handoff, queue dispatch, canvas ops, workflow invocation — one consistent surface across providers.

Get aegis

pip install aegis-harness   # Python 3.13+
aegis init                  # interactive wizard
aegis                       # full-screen TUI

Install → Usage → Roadmap →