← Field notes
Measured2 min read

One repository task, three passes, one failure, and one blocked client

Codex, Claude Code, and OpenCode with local Qwen3 Coder passed the same fixed task. OpenCode with local Devstral Small 2 failed it, while Gemini CLI never reached model execution. The verifier—not the agent's confidence—decided each result.

You leave with A cross-harness baseline with elapsed time, cost boundaries, verifier results, one failure, and one blocked client, plus the pattern to reuse

The small pattern

repository/
├── AGENTS.md        # canonical scope, workflow, and safety rules
├── CLAUDE.md        # points Claude Code to AGENTS.md
├── GEMINI.md        # imports AGENTS.md
├── PROMPT.md        # the fixed task
└── verify.sh        # deterministic acceptance and forbidden-file check

Codex and OpenCode can read the canonical file directly. Claude Code and Gemini CLI receive tiny native pointers. The task, fixture, permissions, budget, and verifier remain unchanged between runs.

Why this beats copied instructions

One policy
A safety or scope change happens once instead of drifting across four long files.
Comparable runs
The harness changes; the job and acceptance criteria do not.
Portable exit
The repository remains useful when a model, subscription, or harness changes.

Measured result

Harness and modelResultElapsedReported cost
Codex CLI 0.152.1 · GPT-5.6-solPass32.54 sNot reported
Claude Code 2.1.259 · Claude Opus 5Pass30.98 s$0.2665 list cost
OpenCode 1.18.27 · local Qwen3 CoderPass21.46 s$0 provider cost
OpenCode 1.18.27 · local Devstral Small 2Fail25.49 s$0 provider cost
Gemini CLI 0.49.0 · pro aliasBlocked before model execution3.28 s$0

All successful runs changed only workspace/catalog.py, needed no human intervention during the run, and passed an independent ./verify.sh workspace rerun. Claude's number is the CLI's list-cost estimate on a subscription account. Local hardware and electricity were not metered for OpenCode.

The interesting difference was behavior

The task is too small to rank general coding quality. Codex and Claude Code reached compact passing implementations. OpenCode/Qwen3 Coder also passed, but first tried unavailable pytest commands, created a bytecode cache that the verifier rejected, cleaned it up, and recovered.

OpenCode/Devstral produced plausible code but retained two names that became empty after trimming. It ran the verifier, saw the exact assertion, and stopped without fixing the error. Qwen3-Coder-Next was not scored because its 80B total parameters exceed this host's fair 24 GB VRAM boundary; that is hardware incompatibility, not model failure.

Gemini's result is also an environment compatibility finding: Google rejected the installed client on the available personal tier before a model ran.

Run it without credentials

git clone https://github.com/Software-Sausage/recipes.git
cd recipes/recipes/portable-agent-repository
./verify.sh

The included proof uses POSIX shell, Python 3, and the standard library. Agent and provider credentials are needed only when you choose to run a harness.

Run it or apply it to your repository

The pinned release includes the fixture, verifier, exact results, limitations, and open-source path. If you need implementation help for a sanitized repository, request a consent-based introduction to an integrator.

Get the next measured recipe

One maintained workflow at a time. Explicit opt-in, no vendor-paid ranking, unsubscribe any time.