Pack Availability Guard
When recommending a skill from another pack, verify the target pack is installed via .agents/project.json enabled_packs. If it is not enabled, recommend npx skillpacks install <pack> from the project shell. After install, tell Codex users to start a fresh Codex CLI session if the $ skill list remains stale. Only the currently running skill and skills verified available in the active session or project-local install state are directly recommendable. For unavailable pack skills, recommend npx skillpacks install <pack-or-skill>; for unavailable base skills, recommend npx skillpacks init before the skill.
Runway Model — Financial Runway & Unit Economics
Invoke as $runway-model.
Simple financial model: burn rate, revenue trajectory, runway in months, and scenario modeling. Takes real numbers, projects forward with optimistic/realistic/pessimistic scenarios. Append-only updates for tracking over time.
Soft Prerequisites
- Read
research/monetization.mdif it exists — theoretical unit economics and pricing to compare against actuals - Read
research/metrics.mdif it exists — growth rate targets for projections - Read
research/cohort-review-*.mdif any exist — real performance data for revenue trajectory - Read
research/gtm.mdif it exists — channel costs for CAC calculations
Process
0. Product-Path Scope Resolution
Resolve research scope by product path before using code or app structure as a hint:
- If
$ARGUMENTSnames a non-archivedresearch/{slug}/directory or a product-path ID whosescope_pathpoints there, use that path. Treat{slug}as the product/app name, not the ICP, audience, or segment label. - If
$ARGUMENTSnames onlyresearch/_archive/{slug}/or a manifest entry withstatus: archivedor legacystatus: abandoned, stop and warn that the path is archived; do not write or update scoped outputs there. - Read
research/.progress.yamlwhen present. Normalize legacyactive_pathtoactive_pathson read and write backactive_pathson manifest updates. Treat legacyabandonedasarchived; excludearchived,abandoned,deferred,revisit_candidate,promoted, and anyscope_pathunderresearch/_archive/from active target selection. - If active product paths exist in the manifest, use those paths. If multiple active paths exist, ask which one to target unless this skill explicitly supports cross-path output.
- If no active manifest target exists, list non-archived product directories under
research/, excludingresearch/_archive/and dot directories. Auto-select only when exactly one exists; ask when multiple exist. - If no product directories exist, use flat
research/single-product mode. - Detect monorepo/app/package structure only as a secondary hint. Suggest creating a missing
research/{slug}/product path when code clearly exposes an app, but do not require code or monorepo detection before usingresearch/{slug}/.
When product path {slug} is active, read and write research under research/{slug}/, specs under specs/{slug}/, and treat top-level research/*.md files as flat-mode documents or cross-path summaries.
1. Load Context & Data
Load research context: Read all soft prerequisite files.
Ingest financial data:
Check $ARGUMENTS:
- File path provided: Read the file
- Text provided: Parse the data directly
- Empty: Gather the numbers from the user. If the session is already in Plan mode and there are 2-3 concrete input-source choices, prefer
request_user_input; otherwise ask in plain text.
Required inputs (ask for each that's missing):
- Monthly burn rate (total expenses)
- Current cash/bank balance
- Monthly revenue (if any)
- Revenue growth rate (if applicable)
- Team size and key cost categories
Nice-to-have inputs:
- Detailed cost breakdown (salaries, infrastructure, tools, marketing)
- Customer count and ARPU
- CAC by channel
- Churn rate
- Expected cost changes (new hires, infrastructure scaling)
2. Calculate Core Metrics
Runway calculation:
- Gross burn: Total monthly expenses
- Net burn: Expenses minus revenue
- Runway (months): Cash balance ÷ net burn
- Zero-cash date: Projected date when cash runs out
Unit economics (if revenue exists):
- MRR / ARR: Monthly/annual recurring revenue
- ARPU: Average revenue per user
- CAC: Customer acquisition cost (if channel spend data available)
- LTV: Lifetime value (ARPU × average lifespan, or ARPU ÷ monthly churn rate)
- LTV:CAC ratio: Is acquisition sustainable?
- Payback period: Months to recover CAC
- Gross margin: Revenue minus cost of delivery
Compare actuals against theoretical estimates from research/monetization.md if it exists.
3. Scenario Modeling
Build three scenarios projecting 12 months forward:
Pessimistic (what if things go wrong):
- Revenue grows at 50% of current rate (or flat)
- Costs increase 10-20% (unexpected expenses, needed hires)
- Churn increases
- Runway: [months]
Realistic (current trajectory continues):
- Revenue grows at current rate
- Costs grow as planned
- Churn stays flat
- Runway: [months]
Optimistic (what if things go well):
- Revenue grows at 150-200% of current rate
- Costs stay controlled
- Churn decreases
- Runway: [months]
For each scenario, show monthly projections for cash balance, revenue, and expenses.
4. Identify Critical Decisions
Based on the model:
- Break-even point: When does revenue cover expenses? (per scenario)
- Hiring runway: Can you afford to hire? When?
- Marketing budget: How much can you spend on acquisition?
- Runway triggers: At what cash balance should you raise, cut costs, or change strategy?
- Revenue milestones needed: What MRR is needed to extend runway to [target]?
5. Present & Validate
Present to the user. If the session is already in Plan mode and there are 2-3 concrete choices, prefer request_user_input; otherwise ask in plain text:
- Core metrics summary
- Three scenarios with runway projections
- Critical decisions and trigger points
Ask:
- "Do these numbers match your records? Any costs or revenue I'm missing?"
- "Are the scenario assumptions realistic? Too conservative or too aggressive?"
Incorporate feedback before proceeding.
6. Populate Next Steps
Include 3–5 applicable items with "Pick one:" framing:
- IF runway < 6 months: Prioritize revenue —
$experimentto validate fastest path to revenue, or cut costs - IF unit economics unhealthy (LTV:CAC < 3):
$monetization— Revisit pricing or acquisition strategy - IF no
research/cohort-review-*.md:$cohort-review— Get real performance data to improve projections - IF actuals diverge from monetization estimates:
$monetization— Update strategy with real data - ALWAYS:
$roadmap— Ensure build plan accounts for runway constraints
7. Write Output
Present final model to user. Ask:
- "Ready to write this? Anything to adjust?"
Only after confirmation, write the output file.
Output
research/runway-model.md (or research/{slug}/runway-model.md)
Append-only — each update adds a new section at the top (below the header). Previous snapshots remain for historical tracking.
# Runway Model
> Last updated: [current date]
> Snapshots: [total count]
## Latest Snapshot: [Month Year]
> Data source: [where the numbers came from]
> As of: [date of financial data]
### Core Metrics
| Metric | Value | vs. Last Snapshot |
|--------|-------|-------------------|
| Cash balance | $[amount] | [+/- change] |
| Monthly revenue (MRR) | $[amount] | [+/- change] |
| Gross burn | $[amount/mo] | [+/- change] |
| Net burn | $[amount/mo] | [+/- change] |
| Runway | [months] | [+/- change] |
| Zero-cash date | [date] | [+/- change] |
### Unit Economics
| Metric | Actual | Target (from monetization) | Status |
|--------|--------|---------------------------|--------|
| ARPU | $[amount] | $[target] | [On/Below/Above] |
| CAC | $[amount] | $[target] | [On/Below/Above] |
| LTV | $[amount] | $[target] | [On/Below/Above] |
| LTV:CAC | [ratio] | [target] | [Healthy/Unhealthy] |
| Payback period | [months] | [target] | [On/Below/Above] |
| Gross margin | [%] | [target] | [On/Below/Above] |
### Cost Breakdown
| Category | Monthly Cost | % of Total | Trend |
|----------|-------------|------------|-------|
| Salaries/contractors | $[amount] | [%] | [↑↓→] |
| Infrastructure | $[amount] | [%] | [↑↓→] |
| Tools & services | $[amount] | [%] | [↑↓→] |
| Marketing/ads | $[amount] | [%] | [↑↓→] |
| Other | $[amount] | [%] | [↑↓→] |
### Revenue Breakdown
| Source | MRR | Customers | ARPU | Growth |
|--------|-----|-----------|------|--------|
| [tier/product] | $[amount] | [count] | $[amount] | [%/mo] |
### 12-Month Projections
#### Pessimistic
| Month | Revenue | Expenses | Net Burn | Cash Balance |
|-------|---------|----------|----------|-------------|
| [M1] | $[amt] | $[amt] | $[amt] | $[amt] |
| ... | | | | |
**Runway**: [months] | **Break-even**: [month or "not in window"]
#### Realistic
| Month | Revenue | Expenses | Net Burn | Cash Balance |
|-------|---------|----------|----------|-------------|
| [M1] | $[amt] | $[amt] | $[amt] | $[amt] |
| ... | | | | |
**Runway**: [months] | **Break-even**: [month or "not in window"]
#### Optimistic
| Month | Revenue | Expenses | Net Burn | Cash Balance |
|-------|---------|----------|----------|-------------|
| [M1] | $[amt] | $[amt] | $[amt] | $[amt] |
| ... | | | | |
**Runway**: [months] | **Break-even**: [month or "not in window"]
### Assumptions
[List every assumption behind the projections — growth rates, churn rates, cost changes, hiring plans]
### Critical Decisions
| Trigger | Condition | Action |
|---------|-----------|--------|
| Low runway | Cash < $[amount] or < [months] runway | [action: raise, cut, pivot] |
| Break-even path | Need $[MRR] by [date] | [what must happen to get there] |
| Hiring decision | Can afford hire when runway > [months] | [role and timing] |
| Marketing budget | Can spend $[amount/mo] on acquisition | [when and how] |
### Next Steps
Pick one:
- [conditional items from step 6]
---
[Previous snapshots remain below, newest first]
Create the research/ directory if it doesn't exist.
Task Classification
When this skill produces follow-up work, file it by execution semantics:
- Immediately actionable implementation or documentation work goes in
tasks/todo.md. - Human-only external actions tied to automated steps go in
tasks/manual-todo.mdwith_(blocks: Step N.X)_or_(after: Step N.X)_; repo edits, SDK wiring, generated assets, local commands, tests, audits, and authenticated CLI/API work stay intasks/todo.md. - One-time condition-gated records, baselines, or future measurements go in
tasks/record-todo.mdwith source, condition, non-blocking reason, evidence, and promotion rule. - Cadence-based reviews, playtests, adoption checks, investor updates, retros, or docs-health checks go in
tasks/recurring-todo.mdwith cadence, owner/agent, next due, evidence path, and escalation conditions. - Do not put non-blocking records or recurring obligations in
tasks/todo.mdunless they have been explicitly promoted into current execution work.
Constraints
- Real numbers only. Do not fabricate financial data. If numbers aren't provided, ask for them.
- Append-only. Previous snapshots are never deleted or modified. Only add new snapshots at the top.
- State assumptions. Every projection must list its assumptions explicitly. Never present projections as predictions.
- Present before writing. Never write output files until the model has been presented and validated.
- Conservative by default. When estimating, err on the conservative side. Optimistic projections should be labeled clearly.
- No investment advice. This is a planning tool, not financial advice. Note this in the output.
- Privacy-aware. Financial data is sensitive. Do not log raw financial data to search logs or interview logs.
Alignment Page
Follow the shared alignment-page convention via the packaged convention resolver; output path is alignment/runway-model-{topic}.html.
Default Shipping Contract
Follow the shared shipping contract convention in CLAUDE.md.