builder is a plugin for coding agents. Your agent ends each piece of work with a builder report. The report names who the work is for, each call the agent made alone, and the test run that proves the work. Nothing leaves this machine without a send rule or your yes.
builder is the soul behind that report. You decide. The agent proposes, builds inside the repository, and reports. Correct is not enough: the work must fit one person at one moment. So each piece of work starts from that person and the non-goals. Each call the agent makes alone carries its reason. The evidence is a test run from the session. The last line says what left the machine.
Example, invented for illustration:
For: a customer who moved — at checkout. Now they can change their email in one step.
Non-goals: no change to the login flow.
Calls:
- The old address gets a notice — because a stolen account changes the email first.
Evidence: python3 -m unittest → 14 passed (example).
Outside: nothing sent.
builder installs on four harnesses. Pick yours. builder needs Python 3 and Bash, on macOS or Linux. Its session hook makes no network call and finishes in under one second.
/plugin marketplace add Lutherwaves/builder
/plugin install builder@builderIn Claude Code, call a skill as /builder:shape.
codex plugin marketplace add Lutherwaves/builder
codex plugin add builder@builderCodex runs a plugin's hooks only after you trust them. builder does not work around this step.
Until you trust the hook, the builder skill still loads by name.
Until Codex detection lands (issue #17), builder's session start on Codex uses the Claude Code step list and mapping.
The marketplace add was proven with a local path. The Lutherwaves/builder form is the git form that Codex documents.
A Cursor CLI plugin install is not verified. This manual path works.
In your project, create .cursor/hooks.json:
{"version":1,"hooks":{"sessionStart":[{"command":"<path to builder>/hooks/session-start --harness cursor"}]}}<path to builder> must be an absolute path.
Keep only these keys. One invalid key disables every hook in the file.
Then copy builder's skill folders into .agents/skills/ in the same project.
A Cursor plugin install (.cursor-plugin/plugin.json) also exists for the editor's plugin flow. This README does not claim that the CLI installs it.
As a fallback, add one line to your project's AGENTS.md. Cursor CLI reads that file.
builder never writes AGENTS.md itself.
Use the builder skill for the soul of this work: for whom, what it is not, each call with its reason, proof, and what left the machine.
Add builder to the plugin list in opencode.json. Use opencode 1.19 or newer: version 1.1.x crashes on plugins with non-function exports.
A local checkout works:
{"plugin": ["/path/to/builder"]}opencode also takes a git form, as superpowers documents: "plugin": ["builder@git+https://github.com/Lutherwaves/builder.git"]. Only the local path was proven, with opencode debug skill: the skills load. No live opencode session has run builder yet.
A harness is listed as supported only after every eval fixture passes on it.
| Harness | Version | Eval date | Status |
|---|---|---|---|
| Claude Code | 2.1.308 (Claude Code) | 2026-10-22 | experimental: canon 5/6; fleet 3/4; harness 4/6; reach 3/4; shape 2/6; 3 not graded |
- You ask for your work as usual. builder adds its thirteen tenets to the session, and the agent does your work first.
- At the end of that reply, the agent introduces builder in at most three short lines. This happens even after a one-line request.
- The agent offers one setup step and asks: yes, not now, or never.
- Each later reply offers the next step, one at a time: superpowers, gstack, a signed-in
gh, signed commits, and the channel where your team talks (for messages to teammates; notes to you go by notification). A step you already did is skipped. - "Not now" stays quiet for 7 days. "Never" stays quiet for good.
- When you answer every step, onboarding ends.
After that, a session shows at most one recommendation, and only when a signal fires.
Examples: you run three or more sessions, your weekly usage reaches 80%, or no code graph is set up.
The first two signals need matchblox.
builder keeps your answers in ~/.config/builder/ledger.json. Set BUILDER_HOME to move it.
| Skill | What you get |
|---|---|
builder |
The soul: thirteen tenets, a routing table to superpowers and gstack, and the builder report at the end of each piece of work. |
shape |
A feature name becomes an issue: the person, the moment, anti-goals, and each open question with a recommendation. |
canon |
A repository rule carries its incident and a check that fails when someone breaks it. |
reach |
By default, a message to a teammate waits for your yes. Every send passes a duplicate check and a limit of 6 sends per hour. |
fleet |
Many sessions work side by side, one lane each. Work outside a lane goes to its owner as a brief. |
intake |
The day's captured tasks are reconciled against work in motion. Nothing becomes an issue without your marker or your yes. |
budget |
A forecast of the weekly usage limit, and one idle session to compact. Where the harness has no usage reading, it says so. |
harness |
A local code graph answers "what calls this?" in one query, and a watcher names stale graphs. |
review |
A review proves how a change hurts a person: what it ran, each harm with its evidence, fix and test, and a verdict. Nothing is posted without your yes. |
Call a skill by name, for example the shape skill. The agent also loads a skill when its job comes up.
builder runs on its own. If a partner is missing, builder uses a fallback and says so once.
- superpowers: planning, test-driven development and review. builder routes to these skills.
- gstack: a real browser, QA, security checks and ship workflows.
- gh:
intakechecks open pull requests and issues through it. - matchblox:
budgetreads the plan windows from it, andfleetreads the live sessions. Runmatchblox setupto add its hooks (docs). - Your channel's MCP server:
reachsends through it. For Slack, use a Slack connector or Slack's official MCP server. - codebase-memory-mcp:
harnessprovisions it. It runs locally and needs no API key.
tests/evals/parity.sh runs two fixtures twice: once with your setup, and once with builder and its recommendations only.
The builder run accepts every recommendation.
It prints both transcripts next to the expected behaviour, so you can compare them.
It runs the agent four times, so it uses tokens from your plan.
parity.sh works on Claude Code only.
See tests/evals/README.md.
skills/budget/burn-proj.py works without the plugin:
python3 burn-proj.py <used_pct> <resets_at_epoch> [now_epoch]
python3 burn-proj.py --from-matchblox [now_epoch]
python3 burn-proj.py 19 1783504800 1782990571
# elapsed=15.0% naive=127% profile_aware=100% reset_in=5.95d--from-matchblox needs matchblox on your PATH. Without it, read your agent's usage view and pass the numbers by hand.
naivedraws a straight line from the use so far. It is the worst case.profile_awarediscounts the hours you do not work: 02:00 to 09:00, and the weekend. Tune them inmult().
Every change lands through a pull request, and the validate check must pass.
Run the same check before you push:
bash scripts/validate.shSee CONTRIBUTING.md for the rules, and SECURITY.md to report a vulnerability.
MIT.
The harness skill derives its framing from Ryan Lopopolo's
Harness Engineering, licensed CC BY 4.0.
builder adapts the concepts and copies no source prose.