Espalier-Harness
A Claude Code harness that makes a planned, proven workflow the agent's default path, refuses its attempts to disable its own hooks, and treats CI as the only hard guarantee.
- Published
- Role
- Product direction, architecture, and AI assisted implementation
- Summary
- A public, MIT-licensed beta on PyPI with plan gated hooks, an anti-self-disable floor, a merge time CI gate, a published regression corpus, and a forward ledger the project runs on itself.

Context
Whenever I start something new, I try to learn the mechanics of the subject first, deeply and independently. I want to build ‘X’, but I need ‘Y’ and ‘Z’ to build a good ‘X’. I’m going to hyperfocus on ‘Y’ and ‘Z’, because the time will pay for itself many times over once work moves from ‘learning how to work’ to ‘applying those skills to X’.
Espalier is ‘Y’ and ‘Z’. Espalier is ‘how coding agents work’ for me: my findings with settings, my preferences, the hooks that I found mattered, the memory system I built to solve real problems I kept hitting, the handoff to keep projects moving fast, and the crafted .claude assets and crafted workflows incorporating staged review and planning loops. I can forget, and Espalier will remember. I can spend a good session planning and walk away from an automated workflow.
Espalier is what I built when I reached for things that did not exist.
It has evolved into an adaptive multi agent orchestration harness.
Constraints
Local hooks run in the same trust domain as the agent they govern. Anything that can write to the repository can switch them off before Claude Code runs them, so no local hook can honestly be called a security boundary. On your own machine, friction is all a hook can guarantee. That isn’t a reason to give up on friction. The threat I meet day to day isn’t an attack. It’s careless mistakes and the collateral damage of building fast: an edit made before there is a plan, a check skipped to save a minute, a cleanup that takes something else with it. Friction puts a pause in front of exactly those moments, while the mistake is still cheap to undo. That matters most for a new user, who doesn’t yet know where an agent tends to slip.
It’s big. Yes, quite large. The harness itself, as you see it in the GitHub repo, is not what is installed. The dev repo contains many self hosting tests, development plans and docs, and tools and systems for the harness’s own maintenance and deployment that are not needed in the user’s repo for work. That said, what it installs is substantial, and small projects can be overwhelmed: v0.8.0b2 adds about 37,600 lines of Python in 38 files (the hooks and their tools) and about 21,000 lines of Markdown in 55 files (agents, commands, skills and starter docs). That being said, it’s easy to cut systems you don’t need. I don’t deploy systems that are not used, and the install is designed to be modular and conforming to your own project, and your workflow.
So….. what does it do?
Espalier doesn’t ‘do’ anything.
Think of every AI agent as an individual worker. The model roughly equals the skills and abilities of the worker. How much education and experience they have, their personal techniques and connections, everything about ‘them’.
Espalier is their ‘bag of tools’.
Both a simple worker and an adept researcher benefit from having a notepad and pen, a smartphone, a work schedule, safety equipment for the job, a company car, company resources on call.
Espalier is the ancillaries to the agent, the things Claude would have to build to ‘build your thing’,
but prebuilt and battle tested through billions of tokens.
You could build a bespoke harness, and if you don’t download this one, I suggest you do. It can take a good bit of iteration, and there are many lessons to learn about AI coding limitations, programming workflow itself, and making those ‘learn while building’ mistakes that are so easy to fall into, and you would probably get a great harness. Especially if you use the researcher level model to build it.
Or you could type: python -m pip install espalier-harness
A regression corpus, not a safety score
Every bypass class the hooks are known to catch becomes a named, fail first test, and the same corpus runs against three weaker baselines. At v0.8.0b2 the full harness blocks 373 of 373 in scope attempts across 57 classes, and deliberately allows all 13 out of scope attempts across 8 classes. That is coverage of known history, not proof of safety. The corpus is built from bypasses that were found and then fixed, so a full score is expected by construction, and the results page opens with what it does not prove.
A forward ledger the harness runs on itself
Known forward work lives in a ledger. Every row has a read only probe that prints a known value while the issue is open, and a row whose probe stops printing that value becomes a candidate for closing. The headline counts are generated from the rows and checked by a test, so nobody can type them into agreement. Rows are struck, filed and repinned through one tool that runs the probe first.
Because the harness governs its own repository, the ledger is in constant use, and its count moves daily as work is found and closed. The count is a working record, not a score. In v0.8.0b2 the ledger serves the project’s own repository; the unreleased main branch also seeds it and its tools into adopting repositories as a system to adapt to your own project.
Evidence
Everything below is public.
| What to check | Where |
|---|---|
| Install the release | python -m pip install espalier-harness installs v0.8.0b2 from PyPI. |
| Regression coverage | The benchmark results at v0.8.0b2, with methodology, baselines and disclaimers. |
| The refusal in action | The 30-second demo in the README, redriven against the code by an end to end test. It shows the main branch, after v0.8.0b2. |
| Claims kept honest | A test checks the README, quickstart and cheat sheet against the surface support matrix for overclaiming. |
| Forward work | The forward ledger and the contract at its head. |
The Espalier family
Espalier-Harness is the public, packaged member of a small family of repo local harnesses. The other three are still under development, so there is nothing to inspect yet.
- Espalier Lite is a lighter, standalone Claude Code harness distilled from the larger one: task packs, recorded findings and decisions, compact generated state, and a few hooks. This site runs a fitted copy of it.
- Espalier for Codex brings the same workflow ideas to OpenAI’s Codex: durable instructions, readouts and proof gates.
- Espalier X-Lite is a small Codex harness: one task queue, verification receipts tied to the current code, and a compact handoff.
The two Codex variants are independent projects and are not affiliated with OpenAI.
Current state
Espalier-Harness is a beta, pre-1.0. It became public on 2026/09/25 with v0.8.0b1, and v0.8.0b2 followed on 2026/09/27. Development began in April 2026, and the project runs on its own repository every day.
Limits and next work
The bundled agents and commands are the project’s own working set, written for its Python codebase, so they are starting points for another repository rather than drop in reviewers. They were designed with this in mind, and the harness will form fit to your own project during initialization. The code quality scanners only understand Python. The evidence here shows that known slips stay caught, not how often slips happen or how much catching them is worth.
The repository’s roadmap names language aware agent templates and coverage of more Claude Code events as the next steps.




