burn-test
Skill3 starsChanged 12 days agoMITView on GitHub
Your CFO. Builds the unit economics of a business before money is spent: what one unit earns after its direct costs, the real profit margin at the planned volume, the break-even point in units a day, year 1 month by month, the cash needed before it pays for itself, how long the startup spend takes to earn back, and what happens if the price drops, sales come in low or costs rise. Every number traces to an input the user can check. Use when the user says "find the profit margins", "do the numbers", "is this profitable", "break-even", "unit economics", "how much do I need to start", or "run the CFO".
In this repository13 other files it gives its agents.
- dealbreakerSkill
- first-dollarSkill
- ground-truthSkill
- handshakeSkill
- kill-or-buildSkill
- litmusSkill
- prove-itSkill
- reality-checkSkill
- receiptsSkill
- shark-boardSkill
- signalSkill
- straight-talkSkill
- truth-serumSkill
The file
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 2 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 51
Process: run unit_economics.py. It looks every claim id up in founder/evidence/claims.csv and gives each result the weakest label of its …
- Very specific: line 65
Write founder/numbers.json (shape: example.json in this folder, a walk-in matcha café).
- Very specific: line 107
Ask the user for anything only they know (rent quoted, wages they will pay).
- Very specific: line 140
Add a short section at the top of founder/cfo.md, in plain words:
- Very specific: line 146
The bad case: run --volume 0.5 and report it in one line.
- Distinctive: line 162
Every number in your note comes from the tool's output or an input you can name.
- Very specific: line 163
Every output takes the weakest label of its inputs, as the tool prints it: at best PLANNED for anything that uses the ramp or the plan …
- Distinctive: line 175
Not financial, tax or legal advice.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
burn-test
The person who asks "and what does that cost?" Margins decide whether a good idea is a business. This skill finds them, with every number traceable to an input, and says plainly how many of those inputs are real.
Read ${CLAUDE_SKILL_DIR}/../receipts/rules.md first.
Tool in this folder:
python3 "${CLAUDE_SKILL_DIR}/unit_economics.py" founder/numbers.json --out founder/cfo.md --handoff founderHandoff contract (stage 06 in founder/CONTEXT.md)
The margin is only as real as the weakest number it was computed from (rule 10
in rules.md). This skill takes each input's label in and hands each result's
label on, so nothing simulated reaches /kill-or-build looking measured.
Inputs
| input | label comes from |
price | sources.price in numbers.json: the price claim /litmus logged (SIMULATED if the panel picked it) or a real sale (MEASURED) |
each variable, fixed_monthly, startup item | its own "claim": "c.." (a quote or invoice is MEASURED) or "status" |
plan_per_day, ramp_per_day, days_per_month, capacity_per_day | sources.<field>; a ramp from the panel's buy rate is SIMULATED |
| anything with no source | PLANNED |
Break-even takes its label from the price and the costs only (selling days just
restate it per day). Quote every cost and back the price with a real sale, and
break-even is MEASURED. The margin at plan also uses plan_per_day and the
selling days, and year 1 uses the ramp: each result takes the weakest label of
its own inputs, so those stay PLANNED unless their volumes have a stronger
source.
Process: run unit_economics.py. It looks every claim id up in
founder/evidence/claims.csv and gives each result the weakest label of its
inputs.
Outputs
| output | label |
founder/cfo.md | opens with "How we know each number": every result, its label, and the input that set it |
founder/handoff/06_burn-test.json | the same, as a file the next stage reads: each result's value, label and set_by. A what-if is never handed off |
| the results you log in the ledger | ledger.py add ... --from <the input claim ids>, no --status |
Step 1: gather the inputs
Write founder/numbers.json (shape: example.json in this folder, a walk-in
matcha café). It needs:
| field | what goes in it |
unit | what one sale is: a cup, an order, a client-month, a seat |
price | price per unit before tax |
variable | the cost of ONE unit: ingredients, packaging, shipping, card fees, per-sale commissions |
fixed_monthly | what you pay every month regardless: rent, salaries, software, insurance |
startup | one-off spend before opening: deposits, build-out, equipment, first inventory, launch ads |
plan_per_day | the volume once it is up and running |
ramp_per_day | 12 numbers: realistic volume in each month of year 1 |
capacity_per_day | the most you can physically sell in a day, if there is a limit |
units_per_customer | units in a new customer's first order (default 1) |
backend_per_customer | what a customer leaves after costs from what they buy next, in their first year (from /dealbreaker's next sale; default 0) |
acquisition_cost | what it costs now to win one customer: ad or outreach spend divided by the customers it brought in (only once you have run a test) |
Where the numbers come from, in this order:
- The user's own quotes, invoices, leases and supplier price lists.
- Public prices the user can check (a supplier's price list, a landlord's listing,
a payment processor's published fees). Write the source next to the number in
founder/cfo-sources.md. - Your estimate, clearly marked as an estimate, with the reasoning. Never present an estimate as a fact.
Log each input in the ledger, kind cost (or price for the price): a quote,
invoice, lease or published price page is MEASURED with its evidence id; an
estimate is PLANNED. The plan reports how many costs are backed.
Then write each claim id into numbers.json, so the label travels with the
number:
"price": 6.50,
"sources": {"price": "c08", "ramp_per_day": "c11", "days_per_month": "PLANNED"},
"variable": [{"label": "Matcha (ceremonial, 2g)", "cost": 0.92, "claim": "c04"}]A source is a claim id, a status, or a list of them (the weakest wins). Leave
it out and the number is PLANNED.
Ask the user for anything only they know (rent quoted, wages they will pay). Use the
price from founder/pricing.md or founder/pitch.md if those exist.
The ramp is where plans lie. Month 1 is almost never the plan volume. If the
buyer panel ran, use its buy rate and first-month purchases to sanity-check the
ramp (founder/panel/results.md), and say how you did it. The panel's numbers
are an upper bound; if no real buyer has committed yet, the honest ramp is
lower than the panel suggests, never higher. A ramp worked out from the panel
is SIMULATED: say so in sources.ramp_per_day.
Step 2: run it
python3 "${CLAUDE_SKILL_DIR}/unit_economics.py" founder/numbers.json --out founder/cfo.mdIt writes: the per-unit table and the contribution (what each sale leaves after its own costs), fixed costs, the break-even in units a day, the profit margin at the plan volume, year 1 month by month, the year 1 operating profit and the result after the startup spend, the cash needed before it pays for itself, the month the startup money is earned back, and a what-if table (price -10%, volume -20%, unit costs +15%). It flags a price below variable cost, a break-even above capacity, a losing year 1 and a payback beyond 12 months.
What-ifs without editing the file:
python3 "${CLAUDE_SKILL_DIR}/unit_economics.py" founder/numbers.json --price 7.00
python3 "${CLAUDE_SKILL_DIR}/unit_economics.py" founder/numbers.json --volume 0.8Step 3: the CFO's note
Add a short section at the top of founder/cfo.md, in plain words:
- The hard truth: the number most likely to sink it, and how many of the
inputs are quotes versus estimates ("4 of 11 costs are quoted; the ramp is a
guess"). If the margin is
SIMULATED, say which input made it so ("the margin is SIMULATED because the price came from the panel [c08]"). - The bad case: run
--volume 0.5and report it in one line. If there is no real demand evidence yet, this is as likely as the plan. - The margin: the profit margin at plan, and the contribution per unit.
- The line to watch: the one cost or assumption that moves the result most (usually the ramp, rent or the price), with the what-if that proves it.
- Cash: how much money the founder needs before it pays for itself.
- What a customer is worth (Ready, Fire, Aim, rule 11 in
rules.md): the most the business can spend to win one customer, from the tool, and what it costs now if a test has run. If no next product is planned, say so: the first sale then has to pay for everything, which is the hardest way to grow. - Three ways to improve the margin, each with the number it changes and by how much (run the what-if, do not guess).
- Whether the board's conditions about money (
founder/board.md) are met.
Rules
- Every number in your note comes from the tool's output or an input you can name.
- Every output takes the weakest label of its inputs, as the tool prints it:
at best
PLANNEDfor anything that uses the ramp or the plan volume, andSIMULATEDwhenever a simulated input is under it. Never write a stronger label than the tool printed, and never call a projected margin "the real margin" or a result. Log a result with
--fromand no--status, so the ledger works the label out and refuses a leak:python3 "${CLAUDE_SKILL_DIR}/../receipts/ledger.py" add --claim "Contribution per cup" --kind cost --use PRIVATE --number "$4.76" --from c08,c04,c05- Revenue is before tax; say if the user's market adds sales tax on top.
- Not financial, tax or legal advice. Say once that an accountant should check the structure, payroll costs and tax before money moves.
Output
founder/numbers.json, founder/cfo.md, founder/cfo-sources.md. Next:
/kill-or-build uses these numbers for the verdict; /litmus if the
margin is thin.
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.

