build
Skill47 starsChanged 5 days agoMITView on GitHub
Builds an app, site, bot or feature end-to-end from a plain-language brief: requirements manifest, spec, tickets, one fresh subagent per ticket, then a blind acceptance check against the user's original words. Starts only on /briefproof:build; a bare /briefproof:build resumes an interrupted run.
- Reads credentials
156 other projects use a version of this.
Adopted by
Most recently taken up by
- jskswamy/skillstheir own version, first seen Nov 8, 2026
- domengabrovsek/agent-configtheir own version, first seen Nov 8, 2026
- domengabrovsek/claudetheir own version, first seen Nov 8, 2026
- lilly-builds/senior-engineer-modetheir own version, first seen Nov 8, 2026
- endqwerty/endstacktheir own version, first seen Nov 8, 2026
- DnsQueen/orcinus-skillstheir own version, first seen Nov 8, 2026
Used with
Projects with it also use backprop, finances and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
JuliusBrusseeSkillbackprop
Bug → spec protocol. When a bug is found or a test fails, trace the cause, decide whether a new §V invariant would catch recurrence, append to §B. This is the one non-obvious thing SDD does that plan-then-execute doesn't. Triggers on test failure, bug report, post-mortem, or explicit user ask.
Also in 4 projects that use this
GerardoRdz96Skillfinances
Use when Gera talks about his money — logging an expense ("I spent X on Y"), checking where he stands this pay-period, closing a period, planning debt payoff, onboarding his financial picture, or asking for budgeting/finance opinions. Servy's financial brain. Triggers — "I spent", "log this expense", "where am I this period", "close the period", "how's my budget", "debt plan", "should I pay off", "finances onboard", "/finances".
Also in 3 projects that use this
cpiprintSkillfavicon
Generate favicons from a source image
Also in 3 projects that use this
madeehahassanSkillGo-Live
Pre-launch checklist. Use before making any app public, sharing a link externally, or announcing a product launch. Adapts to Claude Code, claude.ai, and Cowork.
Also in 3 projects that use this
JuliusBrusseeSkilldeepen
Optional design-improvement pass for when you have spare usage to drain. Finds the shallowest modules in the code the spec touches, researches a deeper design, and proposes refactors that shrink interfaces and hide decisions — behavior held constant, tests green before and after. Proposes §I/§V/§T edits, never silent rewrites. Triggers when the user says "deepen this", "improve the design", "this module feels shallow", "pull complexity down", "use spare budget on the codebase", or invokes /ck:deepen. Leans on the codebase-design skill's deep-module vocabulary when present.
Also in 3 projects that use this
synaptiaiSkillgate
Create a BDSK review_gate artifact. Defines a checkpoint that controls whether generated output may proceed toward acceptance. Use when defining quality, security, or scope gates for execution plans.
Also in 5 projects that use this
Other versions156 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 156
- FalkorDB/FalkorDB★ 10ksame name
- microsoft/microsoft-ui-xaml★ 8.6ksame name
- NexaAI/nexa-sdk★ 8.5ksame name
- hathach/tinyusb★ 7.3ksame name
- parcadei/Continuous-Claude★ 3.9ksame name
- parcadei/Continuous-Claude-v2★ 3.9ksame name
- parcadei/Continuous-Claude-v3★ 3.9ksame name
- pytorch/TensorRT★ 3ksame name
- oxsecurity/megalinter★ 2.6ksame name
- iPlug2/iPlug2★ 2.4ksame name
146 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repositoryOne other file it gives its agents.
- changeSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
14 rules. 0 are common, 4 are distinctive, and 10 are very specific to this project.
0
Common
Most of the 143 edited versions we read keep these.
4
Distinctive
This author's own choices. Worth a look.
10
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Distinctive: line 17
Sequence beats speed: No code until stage 6 of 8.
- Very specific: line 31
Never ask for secrets, never do the irreversible unasked: Ask *which* provider, never the key.
- Very specific: line 40
Every run has its own folder: init creates .briefproof/runs/<date>-<slug>/ and its reply names it.
- Very specific: line 49
All run state lives in {run}/state.json, written only through the mcp__briefproof__state tool (the plugin's own ledger: no install, no …
- Very specific: line 66
Never edit state.json by hand.
- Distinctive: line 101
Don't paraphrase, don't merge, don't add your own ideas here.
- Very specific: line 112
Gate G1: every requirement has a status other than open, or a recorded reason.
- Very specific: line 115
Write {run}/4-spec/spec.md: behaviour, data, empty states, errors, limits.
- Very specific: line 126
Write {run}/5-plan/NN-slug.md: goal, the R## it serves, the files and folders it owns (nothing else may touch them while it runs), …
- Very specific: line 165
After the last ticket: one review of the whole branch by a fresh subagent.
- Distinctive: line 168
If the ledger or a spawn answers *Paused by the user* or *Token budget reached*, finish what is already running, end your turn with one …
- Very specific: line 184
Write the report to {run}/8-report/report.md first, then post the same text in the chat.
- Very specific: line 189
Write AGENTS.md (project memory: how to run, test, where things are.
- Distinctive: line 206
After a context compaction, do the same: re-read state, not this whole file.
“Common” is measured: kept by at least 6 in 10 of the 143 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Briefproof
First, check you are in Claude Code. This skill needs the plugin's ledger tool,
mcp__briefproof__state. If that tool is not available, you are in a chat or
Cowork session where the plugin's mod does not run: tell the user in one line,
"Briefproof runs in Claude Code: open the Code tab (local session) or a terminal
and run /briefproof:build", and stop.
Turn a described idea into a working, verified project in one conversation. Sequence beats speed. No code until stage 6 of 8. The early stages pin down what the user actually asked for; the late stages verify that this, and nothing less, was delivered.
The five rules that never bend
- Nothing quietly vanishes. The user's words become a numbered manifest
(
R01,R02…) before anything else. A requirement leaves only asdeferredordroppedwith the user's own quote. Silence never cancels. - The writer never grades. Coverage and acceptance are checked by a fresh subagent that sees the brief and the project, never the spec, manifest or tickets. An author reviewing their own spec reads intent, not text, so gaps stay invisible.
- The orchestrator never writes code. Your context lives for the whole run and is never refreshed. One ticket → one fresh executor subagent.
- Never ask for secrets, never do the irreversible unasked. Ask which
provider, never the key; refer to
STRIPE_SECRET_KEYby name,.envis git-ignored before the first commit. Deploying, paying, sending, deleting data: always ask first, in every mode. - "Works" means it ran. Tests were written by the same process as the code. The project is started for real before anyone says done.
State and progress
Every run has its own folder: init creates .briefproof/runs/<date>-<slug>/
and its reply names it; show prints it as run folder:. Every file of the run
goes under that folder, one subfolder per stage, numbered as the pane numbers
them: 1-brief/, 2-manifest/ (the mod writes requirements.md there itself),
3-briefing/ (the mod writes answers.md; you write decisions.md in auto
mode), 4-spec/, 5-plan/ (tickets), 6-build/ (reviews), 7-acceptance/,
8-report/. Below, {run} means that folder. Earlier runs stay in their own
folders; a finished one can be changed with /briefproof:change.
All run state lives in {run}/state.json, written only through the
mcp__briefproof__state tool (the plugin's own ledger: no install, no approval
prompts). One call per event; batch where the tool allows:
state {action: "init", project: "Massage booking", mode: "ask"}
state {action: "stage", stage: "spec"} # preflight|manifest|briefing|spec|plan|build|accept|done
state {action: "add_requirements", quotes: ["verbatim quote", "another"]} # → R01, R02
state {action: "set_requirement", id: "R03", status: "in-spec"} # open|in-spec|done|deferred|dropped (+reason)
state {action: "add_tickets", tickets: [{title: "Booking request form", reqs: ["R01","R02"], review: true}]} # → T01
state {action: "set_ticket", id: "T01", status: "running"} # todo|running|review|done|failed
state {action: "gate", gate: "G2", result: "pass", note: "independent reader found nothing missing"}
state {action: "log", message: "one line the user would care about"}
state {action: "check"} # gate problems; "ok" when clean. A gate can't pass while its problems remain.
state {action: "show"} # plain-text summaryNever edit state.json by hand. The live pane beside the conversation renders it;
log at every stage change; that line is what the user watches.
Models are chosen by the plugin, not by you. The user picks a model per
stage in the plugin's settings (/plugin configure briefproof@briefproof); the
mod applies it to every request of that stage, subagents included. Never pass a
model when spawning a subagent, and never argue a stage onto a bigger model.
Token usage per stage is recorded in the ledger (show prints it); put that
table in the final report.
The user steers from the pane. Their clicks reach you as their own messages:
- "I dropped/deferred R03 … In my words: …": the ledger already has the status
and their reason. Update
spec.mdand the plan to match; never argue it back in. - "New requirement R07: …": already in the ledger and in
brief.mdunder Additions. Fit it into the spec and plan (a new ticket if the build is under way). - Pause. The ledger refuses
set_ticket … runningwhile paused. Finish the ticket in progress, commit it, then end your turn. "Resume the Briefproof run." means continue where you stopped.
The run
Announce in one short block: mode, what happens next, that the progress pane is open beside the chat, and that the user can say "auto" or "ask more" any time.
Modes. ask (default): ask only what the brief leaves open, in one round
(a second only if an answer opens a new fork). auto: ask nothing; every decision you made goes into the final
report under Assumptions. Irreversible actions are asked in both.
1 · Preflight
init, git init if needed, .gitignore with .env. Copy the brief
verbatim (secrets redacted to <REDACTED>) to {run}/1-brief/brief.md. The user's
own brief file is never modified.
2 · Manifest
Split the brief into atomic requirements, each a verbatim quote: one add_requirements call with all of them.
Don't paraphrase, don't merge, don't add your own ideas here.
3 · Briefing
Find the forks the brief leaves open (storage, auth, hosting, payment, who the
users are, what "done" looks like). Ask them in one round with the standard
AskUserQuestion tool: short plain questions, 2 to 4 options each, your pick
listed first (the pane shows it as the suggestion). Payment, hosting and
accounts are settled here, never stubbed "for later". The pane mirrors the open
dialog, so nothing else is needed to keep the user informed. New wishes from the user mid-run are appended to 1-brief/brief.md under
## Additions and added as new R##; the blind checker reads the brief, not
the manifest.
Gate G1: every requirement has a status other than open, or a recorded reason.
4 · Spec
Write {run}/4-spec/spec.md: behaviour, data, empty states, errors, limits; the
brief usually describes only the happy path, so working out what happens off
it is part of your job. Deepen what was asked; don't invent new features. Then write
{run}/4-spec/interfaces.md: module boundaries, shared types, project rules,
before any ticket, so ticket 01 doesn't decide the architecture alone.
Mark each covered requirement in-spec.
Gate G2: spawn a fresh subagent with prompts/coverage.md, giving it
only brief.md and spec.md paths. Anything it reports missing → fix the
spec and re-run once. gate G2.
5 · Plan
Write {run}/5-plan/NN-slug.md: goal, the R## it serves, the files and
folders it owns (nothing else may touch them while it runs), acceptance criteria,
how to verify. Small and vertical; a change to a
shared thing is three tickets (add new beside old → migrate → remove old).
Set review: true on the foundation ticket and anything risky (auth, money, data
migration). One add_tickets call for the whole plan.
Gate G3: check: every in-spec requirement is in a ticket and every
ticket traces to one. Commit the plan.
Before the build, the estimate. show now prints an estimate (tokens and
minutes for this many tickets, from the user's past runs or a stated default).
In ask mode, put it to the user with AskUserQuestion: "About 400k tokens and
25 minutes for 7 tickets. Go ahead?" with options Go (first), Set a
budget (then state {action: "budget", limit: <tokens>} with the number they
give), and Stop here (end the turn; the plan is saved and /briefproof:build
resumes it). In auto mode, log the estimate and go. The pane shows the same
estimate with a budget field, so the user may have set one already; show
tells you.
6 · Build
Work in waves. A wave is every ticket whose dependencies are done and whose
owned files overlap with no other ticket in the wave, at most three at a time.
Spawn the whole wave in one message (one Agent call per ticket, all in the
same turn) so they run in parallel; tickets that share files wait for the next
wave. For each ticket: set_ticket running, then a fresh subagent with
prompts/executor.md filled in, its prompt naming the ticket id (T03) in the
first line. It returns DONE, DONE_WITH_NOTES, or BLOCKED: <reason>.
The pane watches these spawns: a ticket shows as running the moment its
subagent starts, and moves on when the subagent reports, even if you forget a
set_ticket. Still call set_ticket done after the commit; it is the record.
DONE→ if marked for review, spawn a fresh reviewer (same prompt, review section); only itsBLOCKING:lines go back for a fix, at most twice. Save each reviewer's reply as{run}/6-build/NN-slug-review.md. Then one commit per ticket,set_ticketdone.BLOCKED→ resolve the blocker (answer, or a new ticket); never finish it yourself. If the build proves the spec wrong, amend the spec andlogwhy; never retire a requirement this way.- Append what each finished ticket built to
interfaces.mdso later tickets see it.
After the last ticket: one review of the whole branch by a fresh subagent; save its
reply as {run}/6-build/branch-review.md.
If the ledger or a spawn answers Paused by the user or Token budget reached, finish what is already running, end your turn with one line saying so, and wait. The user resumes from the pane; do not retry on your own.
7 · Acceptance
Gate G4: clone the repo to a temp dir, then spawn a fresh subagent with
prompts/acceptance.md, giving it only brief.md and the clone. It installs,
runs and checks each sentence of the brief. Save its full reply, unedited, as
{run}/7-acceptance/acceptance.md (append the re-check's reply below it). Every gap
becomes a fix ticket; re-check once. gate G4.
8 · Report
Compose from files re-read from disk, not from memory. In plain language:
what was built and how to run it; requirement table (R##, quote, status);
Assumptions (in auto mode); env var names still empty; anything deferred;
the usage-by-stage table from show.
Write the report to {run}/8-report/report.md first, then post the same
text in the chat. In auto mode also write {run}/3-briefing/decisions.md:
every choice you made instead of asking, one line each. The pane lists the stage
folders when the run is done, with buttons that open the run folder and the
report page.
Write AGENTS.md (project memory: how to run, test, where things are; pointers,
not prose) unless the user already has one. stage done.
Red flags: stop and redo the stage
- Code exists before
spec.md. - A requirement
droppedwithout the user's quote. - You graded G2 or G4 yourself, or gave the checker the spec/manifest.
- You wrote code in the orchestrator "because it's two lines".
- The report written from memory, or the project never actually started.
Resume
A bare /briefproof:build when the run in this folder is already done: say so in
one line and offer /briefproof:change <what to change> or /briefproof:build
<a new brief>; do not start anything. With an unfinished run: call show, re-read
1-brief/brief.md, 4-spec/interfaces.md and the current stage's files, then continue.
After a context compaction, do the same: re-read state, not this whole file.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

