One spec.
Three agent harnesses.
Describe a fleet of AI agents once — roles, skills, handoff graph — and compile it into native harnesses for Claude Code, opencode and goose. No hand-porting agents between tools.
curl -fsSL https://infinia-harness.adid.dev/install.sh | sh
Capabilities, not tool names. Handover as a contract, not a convention.
A compiler for agent teams
Every agentic CLI grew its own harness format. Claude Code has subagents, Agent Skills and teams; opencode has primary/subagent markdown and commands; goose has recipes and sub-recipes. The concepts are isomorphic — a named specialist with a prompt, scoped permissions, a methodology, and a way to pass work on. Infinia Harness treats that shared shape as a compile target.
fleet.yaml ──► fleetsmith ──┬──► .claude/agents/*.md + .claude/skills/*/SKILL.md + CLAUDE.md
├──► .opencode/agents/*.md + commands/ + skills/ + AGENTS.md
├──► .goose/recipes/*.yaml (+ AGENTS.md, read first-class by goose)
└──► _fleet/ (portable handover protocol: handoffs + ledger)
SubagentStop handover gate
permission.task handoff graph
response.json_schema validation
The parts a hand-written harness keeps getting wrong
Each of these is a defect people hit repeatedly when they wire an agent team by hand. The compiler emits the fix rather than an instruction to remember it.
Capabilities, not tool names
Agents declare read/edit/run/web/spawn. Each adapter maps that onto its own permission model — a
Claude Code tools: allowlist, opencode allow/deny maps, goose
extensions. Least privilege survives the port.
Handover as a contract
Every edge in the fleet carries an artifact plus acceptance criteria. The protocol is file-based — the only channel all three tools share — so behaviour is portable, auditable and resumable. The message is the doorbell; the file is the payload.
Enforced gates, not advice
Where a target can check something deterministically, the compiler emits the check.
A Claude Code SubagentStop hook blocks an agent until its handoff file
is complete. A denied opencode agent disappears from the task tool entirely.
Loops that stop three ways
Declare loop: { until, max, check } on a phase or a
schedule: on the fleet. Each compiles to a bounded loop on every
target — ending on success, on no progress, or at the cap, rather than only burning
the budget.
A harness that grades itself
qa is a deterministic verification battery; eval measures
whether skills actually trigger, against a held-out corpus with a real noise floor;
evolve proposes its own improvements on a branch, for review.
Prompts built for caching
Agent bodies are invariant for a given spec — no dates, no run counters — so a repeatedly-run fleet keeps its prompt cache instead of rebuilding it. Per-run state lives in handoff files.
OSS is complete on its own
The file backend and git are the supported open-source answer, forever. Enterprise adds a shared cortex on top — and every enterprise capability names the core answer it degrades to. Nothing is enterprise-only.
fleetsmith
- Compile to Claude Code, opencode and goose
- Five fleet patterns and the handoff graph
- File-based handover protocol under
_fleet/ - Enforced handover gate, capability mapping, loop bounds
qa,evalandevolveself-improvement- Team knowledge shared through git, PR-gated
fleetsmith-ee
- See teammates' in-flight work before a commit exists
- Team-wide semantic recall, mid-task
- Org knowledge import — meetings, calls, decisions
- Cross-developer file and task overlap detection
- Purpose-scoped audit and an approval channel
- A cortex admin console over the whole grid
No configuration means exactly OSS behaviour. An unreachable or unlicensed cortex means one warning, stale-marked grid files, and runs that still complete. Grid state is advisory: it may never gate an agent or alter a QA verdict.
One command, both editions
The installer asks what it needs and defaults safely to everything else. Piped into a shell with no terminal attached, every question takes its default and the run is fully non-interactive — so the same command works in CI.
curl -fsSL https://infinia-harness.adid.dev/install.sh | sh
Installs the OSS edition. Detects Node, picks npm or the standalone binary, writes
~/.fleetsmith/env.sh, and touches nothing outside your home directory.
curl -fsSL https://infinia-harness.adid.dev/install.sh | sh -s -- --edition ee --yes
Installs fleetsmith and fleetsmith-ee, and — if Docker is
running — starts a RelataDB v2.0.0 cortex on port 9090 with a freshly generated bearer
token. Without Docker it installs the enterprise package anyway and runs on the file
backend until you point RELATA_URL at a cortex.
npm install -g fleetsmith
npm install -g fleetsmith-ee # enterprise, optional
Needs Node.js ≥ 18. Core discovers the enterprise package by ordinary module resolution, so a global install of both is all the wiring required.
curl -fsSL https://infinia-harness.adid.dev/install.sh | sh -s -- --method binary
A single self-contained executable — Node runtime, code and the one dependency baked in. Copy it onto any machine, no install step. The enterprise edition is not available this way: it is a normal package that core loads by module resolution, which a single-file binary has no way to do.
Install
Run the command above, then load the environment it wrote.
. ~/.fleetsmith/env.sh
Describe your fleet
Pick a pattern from the shape of your work, then edit the generated spec.
fleetsmith init my-fleet --pattern pipeline --domain "what your team does"
Compile it
Validate first — the validator catches design smells, not just schema errors.
fleetsmith validate fleet.yaml
fleetsmith build fleet.yaml --target all
Run it
Restart your agent CLI in the project. The fleet's agents and skills are now native to it — in Claude Code, say "build a harness for this project" and the bundled meta-fleet takes over.
Prefer to read before you run? The installer is plain POSIX shell and is served from
this site — read install.sh first, or run it with
--dry-run to see every action it would take without taking any.
Build the harness, not the plumbing
Start with the quick start if you want a fleet running in ten minutes, or the architecture if you want to know what it emits and why before you install anything.