what an agent may do
AGENTS.md tells agents what your project is.
HARNESS.md tells them how every run must behave —
linted by a tiny CLI, proven by a trace.
The problem
Without it
Overnight agent, eleven edited files, zero logs, something merged into
main. The only record is a scrollback buffer that's
already gone.
With bridle
GOOD nightly-20260728T053205Z-349e54 harness v1.2.0 (2c35307e6bac) · agent claude-sonnet-5 5 events · 0 escalation(s)
Prompts became artifacts. Now runs do too.
When to reach for it
Long-running and overnight agents are exactly where implicit, in-your-head policy falls apart. Write the policy once; audit it forever.
Every event carries the run ID, the agent, the harness version and a hash of the harness file — if someone edits the policy mid-run, the trace shows it.
Bridle is the layer above, not a replacement. Your orchestrator — Claude Code, LangGraph, cron + scripts — stays the runtime. Bridle hands it a script.
The linter exits 1 on a broken harness. A ready-made GitHub Action lints every harness on every PR.
What you get · the four pillars
What a good run observably looks like: the Plan → Act → Evaluate loop, budgets, and which sub-agents may exist.
Which events — tool calls, code edits, DB writes, API hits — must be logged, where, and how they tie back to a run ID and harness version.
Which skills, tagged cheap/frontier and safe/risky, may be used in which phase. Planning never writes. Evaluation uses different eyes.
What auto-merges, what needs a PR and a human, what's forbidden, and how a run gets rolled back. Your VCS is the control plane.
A per-run progress log and resume protocol so a restarted agent never redoes finished work — and explicit triggers for stopping and calling a human.
lint --tier 1 holds you to just the Charter. One honest
tier-1 harness beats four aspirational ones. Move up when it stops being a lie.
Install · adopt in 30 minutes
Node 18+. Install from GitHub — the bare name bridle
on npm belongs to an unrelated package, so always go through the repo.
npm install -g github:manpreet171/bridle
Prefer not to install anything? Every command below
also works as npx github:manpreet171/bridle <command>.
bridle init
your-project/ ├── AGENTS.md # project OS (skipped if you have one) ├── HARNESS.md # ★ the Harness Script — fill in its sections ├── prompts/ # AI-written plans, human-approved ├── skills/ # tool know-how, tagged with cost/trust bands └── logs/ # append-only run traces (JSON Lines)
The linter refuses a harness missing any pillar for your tier. Exit 1 — CI-friendly.
bridle lint
bridle run start nightly --agent claude-sonnet-5
bridle run log tool_call --detail '{"tool":"oxylabs","status":"ok"}'
bridle run log check_pass --phase evaluate
bridle run end good
bridle status
Recent runs: GOOD nightly-20260728T053205Z-349e54 harness v1.2.0 (2c35307e6bac) · agent claude-sonnet-5 · 5 events · 0 escalation(s)
Written down, not locked down: Bridle never sits between your agent and its work.
No server, no daemon, no API key — if you delete the CLI tomorrow, your
HARNESS.md is still a useful document your agents read.
Source & docs
The manifesto, the pillar deep-dive, the 30-minute adoption guide, real example harnesses and the trace JSON schema live in the repository. MIT licensed.
github.com/manpreet171/bridle→