OH-MY-PI
OMP
The native dispatch lane.
Driven through Fabric dispatch with a native adapter. This is the only harness Fabric dispatch itself accepts today.
Live · stagingHarness control layer
Elf's Agent Fabric is the managed layer that hands work to agent harnesses and keeps a verifiable record of what ran. This page names the mechanism behind every lane rather than printing a checkmark — including the lanes that are partial, unwired, or absent.
Every figure on this page was verified against a live system on 1 August 2026.
The roster
OH-MY-PI
The native dispatch lane.
Driven through Fabric dispatch with a native adapter. This is the only harness Fabric dispatch itself accepts today.
Live · stagingOPENAI
The headless execution lane.
Driven headlessly through codex-dispatch, native Codex CLI execution. A real path, and a separate one — it does not transit Fabric.
Live · separate pathANTHROPIC
The interactive lane.
Driven by injecting into a live tmux session, not by headless execution. Model calls on this lane do not transit the gateway.
Live · not headlessSST (OPEN SOURCE)
Adapter written, not yet connected.
A FabricPort adapter over the OpenCode server HTTP API is published at v0.1.2. Nothing imports it yet, so it drives no work today.
Built · not wiredNot supported.
Listed because its absence is a fact worth stating: it appears in no harness config and on no live route.
Not supportedSide by side
What each lane actually does, read out of the running configuration rather than a roadmap. A “no” here is a real no.
| Capability | OMP | Codex | Claude Code | OpenCode |
|---|---|---|---|---|
| Fabric dispatch | yes (native adapter) | no — codex-dispatch | no — pty injection | adapter built, unwired |
| Headless execution | yes | yes (native exec) | no | via HTTP API |
| Gateway-governed model calls | yes | yes | no — bypasses gateway | n/a |
| Signed dispatch receipt | yes | no | no | n/a |
| Grove worktree isolation | yes | yes | yes | yes |
| Hush secret resolution | yes | yes | yes | yes |
| Runs in production | no — staging only | n/a (local) | n/a (local) | no |
The gateway
Counted from a live authenticated request to the gateway on 1 August 2026, not from a catalogue file. One lane is a deliberate exception: Claude Code calls do not transit the gateway, so they are not covered by these figures.
The differentiator
A receipt binds what was asked for — harness, model, account — to what actually served the request. Drift is visible instead of silent.
A ten-token proof chain over the adapter protocol, plus a SHA-256 binding to the run transcript.
If the chain does not verify, the dispatch fails loud with a typed error. It does not fall back and it does not proceed.
Underneath
Stage-split secrets. No plaintext secret at rest, in any repo, at any stage.
Every agent works in an isolated git worktree. Canonical checkouts stay golden.
Forgejo at git.ch5.me and a private Verdaccio registry at npm.ch5.me.
A single LiteLLM gateway fronting every governed model call, across 7 live providers.
On the roadmap
The Fabric dispatch workflow is currently disabled in the production config. Staging only.
Today the control plane is single-box. Hub, gateway and auth all sit on one host.
Moving a live session between hosts currently returns an unavailable-adapter error.
The OpenCode adapter needs a consumer. Fabric dispatch accepts one harness today.
What this page does not claim
The control layer is infrastructure — worth reading if you care how the work actually gets done. Elf is the part you use: chat, browse, read docs, and keep your thread.
Go to elf.dance