Cash runway model
@ledgerly/cash-runway-model
Model cash runway from cash on hand, monthly burn by category, revenue growth, and planned hires. Produces runway months, cash-zero and raise-by dates, and an 18-month table for base, lean, and upside scenarios.
- Activity
- New: be the first to try it
- Installs
- 0 installs
- Likes
- 0 likes
- Clones
- 0 clones
What it makes
Real output from this kit
- Sample file5 KB, download to openRunwayFrom the kit's tests
- Sample file1 KB, download to openRunwayFrom the kit's tests
- Sample file4 KB, download to openRunwayFrom the kit's tests
How this works
- It is a skill: written instructions Claude reads when your request matches what the skill is for. You do not call it by name; just ask for the task.
- While it works, it reads and changes files in the places it lists, nowhere else.
- It runs these commands on your computer: node scripts/runway.mjs.
- Nothing runs until you choose to use it, and you can remove it any time.
SKILL.md
Cash runway model
A small, honest runway model: one JSON file of inputs, one script, three scenarios. Good enough to answer "when do we need to raise" and "what do these hires cost us in runway" in minutes, and simple enough that anyone can check it.
Inputs
Collect these, then write them to data/runway.json in the format of examples/runway.json:
as_ofandcash: the month of the balance and cash across all bank accounts (exclude money you cannot spend, like a deposit held as collateral).revenue: monthly cash collected from customers now (monthly) and expected monthly growth (growth_pct). Use cash, not bookings. If they bill annually up front, use the monthly average collected over the last 6 months and say so.expenses: monthly spend by category, with optionalgrowth_pctper category. Six to eight categories is plenty. Pull them from the last 3 months of the P&L or bank export and average them (theexpense-categorizerkit helps).hires: role, start month, annual salary.payroll_burden_pct(default 20) covers taxes and benefits. Usemonthly_costinstead for contractors.one_time: known lumps (insurance, annual contracts, a deposit).scenarios: start with the three in the example and adjust. Each can setrevenue_growth_pct,revenue_change_pct,expense_change_pct,hire_delay_months, andskip_hires(list of roles).min_cash_months: how long a raise takes (default 6). The raise-by date is cash-zero minus this.
Ask for anything missing. Never invent a cash balance or a growth rate; if the user does not know growth, propose last quarter's average and get a yes.
Steps
- Write
data/runway.jsonand show the user the key numbers back in a short list (cash, revenue, total monthly expenses, hires) before running. Run:
node scripts/runway.mjs data/runway.json --out out/runway- Read
out/runway.md(scenario summary and the 18-month table per scenario).out/runway.csvhas every category by month for a spreadsheet;out/runway.jsonhas the summary. - Answer the question the user actually asked first ("You have about 14 months; start raising by July 2027"), then show the scenario table.
- Offer one or two levers with their effect, by rerunning with a changed scenario: delay a hire by 3 months, cut a category by 10%, or a revenue miss of 20%. Show the change in runway months for each.
How the math works (say this if asked)
- Each month: revenue grows by
growth_pct, each expense category grows by its own rate, hires are added from their start month (salary / 12 x (1 + burden)). - Net burn = expenses - revenue. Runway = months until cash goes below zero, with the last month pro-rated. The model looks out up to 10 years to find cash-zero and breakeven, but the table shows
months(default 18). - It is a cash model: no accruals, no debt draws, no taxes on profit. Add a known loan or raise as a negative
one_timeamount (money in) if the user wants to see it.
Output template
**Runway: 14 months (base).** Cash runs out in Jan 2028. Start raising by Jul 2027.
| Scenario | Runway | Cash zero | Raise by | Breakeven |
...
Biggest lever: <for example, delaying the AE hire by a quarter adds 0.6 months>.Guardrails
- This is a planning model, not financial or investment advice. Say so once when you share a runway number with someone outside the team.
- Keep the user's inputs file as the source of truth: change scenarios in
data/runway.json, not by editing outputs. - If cash or burn numbers look off by 10x (monthly vs annual), stop and ask before running.
- Do not share salary-level detail in summaries; report hires as total cost unless the user asks.
README.md
Cash runway model
Answers "how much runway do we have, and when do we need to raise?" from a single inputs file: cash, revenue and growth, monthly burn by category, and planned hires. It runs base, lean, and upside scenarios and writes an 18-month table for each.
Who it is for: founders and finance leads at startups who want a runway answer they can explain, without a 12-tab spreadsheet.
Example
Input: examples/runway.json ($2.4M cash, $85k monthly revenue growing 4%, six expense categories, three planned hires).
Output (out/runway.md):
| Scenario | Runway | Cash zero | Raise by | Breakeven |
|---|---|---|---|---|
| base | 14 months | 2028-01 | 2027-07 | 2029-09 |
| lean | 16.4 months | 2028-03 | 2027-09 | 2032-10 |
| upside | cash never runs out | never | n/a | 2028-06 |
Plus a month-by-month table per scenario and out/runway.csv with every category.
What it can access
- Runs
node scripts/runway.mjs(Node built-ins only). - Reads
data/, writesdata/runway.json(your inputs) andout/runway*. - No network, no API keys.
Setup
None. Ask Claude "how much runway do we have?" and it will collect the inputs with you. Not financial advice: it is a planning model.
Files
- README.md
- SKILL.md
- examples/runway.json
- kit.json
- scripts/lib.mjs
- scripts/runway.mjs
Did it work?
0worked for them0did not work
Sign in to say whether it worked for you.
Nobody has said yet. Tried it? Tell the next person.
