Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when managing the money for an internal R&D program or portfolio — building a multi-period program budget with the F&A (indirect) split, tracking burn rate and runway against value-inflection milestones, or routing R&D cost items to a capitalize-vs-expense determination. Every budget output surfaces its assumptions block; capitalize-vs-expense is decision-support only and routes to a named finance owner — it never books an entry or decides accounting treatment. Distinct from finance/financia
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 33% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 101% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 40% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 20% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 29% | 0% |
Financial management of internal R&D programs and portfolios: program budgeting with F&A, burn/runway tracking, and capitalize-vs-expense routing. Every number ships with its assumptions block, and accounting-treatment calls route to a named finance owner — this skill never books an entry.
R&D finance partners, program controllers, and operations leads manage money that has already been allocated or raised — not the corporate close, not the next funding round, not finding a grant. This skill structures three recurring decisions:
Three deterministic tools:
program_budget_planner.py — Builds a multi-period budget from work-package line items, applies the F&A (indirect) rate to an MTDC-style eligible base, and rolls up direct / F&A / fully-loaded cost per period with an explicit assumptions block.burn_runway_tracker.py — Computes average + trailing burn, runway in periods/months, and whether each value-inflection milestone is reachable before cash runs out. Flags accelerating burn and below-threshold runway.capex_vs_opex_router.py — Scores each R&D cost item against the IAS 38 development-phase criteria (or flags US GAAP ASC 730 expense-as-incurred) and routes it to CAPITALIZE-CANDIDATE / EXPENSE / FINANCE-OWNER-REVIEW with a named owner. Never auto-decides.Invoke this skill when:
Do NOT use this skill to: run corporate DCF / valuation / close (use finance/financial-analysis), discover or position grants (use research/grants), or make the final accounting determination (that is the controller's + auditor's call — this tool only routes).
assets/rd_program_budget_template.md with work-package lines, categories, and per-period amounts.program_budget_planner.py --input program.json --profile {pharma-rd|biotech|medtech|deep-tech|software-rd|university-lab} --fa-rate <negotiated rate>. Read direct / F&A / fully-loaded rollups + assumptions.burn_runway_tracker.py --input ledger.json --threshold-months 6. Read runway + milestone verdicts + flags.capex_vs_opex_router.py --input costs.json --standard {ifrs|usgaap}. Read the per-item routing; send CAPITALIZE-CANDIDATE and FINANCE-OWNER-REVIEW items to the named owner.| Script | Purpose | Profiles | |---|---|---| | scripts/program_budget_planner.py | Multi-period budget + F&A split + assumptions | pharma-rd, biotech, medtech, deep-tech, software-rd, university-lab | | scripts/burn_runway_tracker.py | Burn, runway, milestone-vs-cash alignment | n/a (ledger-driven) | | scripts/capex_vs_opex_router.py | IAS 38 / ASC 730 routing to named finance owner | pharma-rd, biotech, medtech, deep-tech, software-rd, university-lab |
All three: stdlib-only, --help, --sample, --output {human,json}.
Run the onboarding questionnaire once before you start — it captures your defaults so every tool in this skill is pre-configured. Customization is the point: the answers actually change tool behavior.
bashpython3 scripts/onboard.py # interactive (also: --defaults, --set key=value, --reset) python3 scripts/onboard.py --show # see the questions + current effective config
Answers are saved to ~/.config/research-ops/research-finance.json (global) or ./.research-ops/research-finance.json (--scope project) and are read automatically by config_loader.py. They set the default R&D-area profile, the default F&A rate, the runway alert threshold, the accounting standard, and the named finance owner printed on capitalize-vs-expense routing. CLI flags always override saved config; RESEARCH_OPS_NO_CONFIG=1 ignores it.
The five questions: R&D area · F&A rate · runway threshold · accounting standard · finance owner.
This skill ships an isolated, opt-in bridge to engineering/autoresearch-agent. Only when you ask to "optimize" / "extend runway" / "run a loop" does an autoresearch experiment iteratively improve a program plan against this skill's runway metric. scripts/ar_evaluator.py is the ground-truth evaluator; it prints runway_months: <float> (higher is better).
bash/ar:setup --domain custom --name extend-runway \ --target ledger.json \ --eval "python3 ar_evaluator.py --target ledger.json" \ --metric runway_months --direction higher /ar:loop custom/extend-runway
Isolated: no hard dependency — autoresearch runs only on demand, and the loop edits ledger.json, never the evaluator.
references/rd_program_finance_canon.md — IAS 38 (research vs development); ASC 730 + ASC 985-20; Uniform Guidance 2 CFR 200 (F&A); FASB/IFRS capitalization criteria; NICRA basics.references/burn_and_portfolio.md — Cooper stage-gate; rNPV / real-options for R&D; risk-adjusted portfolio ROI; burn-rate / runway frameworks; milestone-based budgeting.references/indirect_rate_modeling.md — F&A pool composition (facilities + administration); MTDC base; de minimis 10%; fringe/overhead loading; CAS primer.finance/.| Sibling / neighbor | Scope | Difference | |---|---|---| | finance/financial-analysis | Corporate DCF, ratios, close, rolling forecast, SaaS metrics | That is company-level; this is R&D-program-level | | research/grants | NIH funding discovery + positioning | That finds funding; this manages money already won | | clinical-research (sibling) | Study design + feasibility + budget gate-check | That scopes the study; this funds + tracks the program | | ra-qm-team | Regulatory/QM submission | Unrelated — no financial scope |
bashpython3 scripts/program_budget_planner.py --sample python3 scripts/program_budget_planner.py --input program.json --profile university-lab --fa-rate 0.585 python3 scripts/burn_runway_tracker.py --sample --output json python3 scripts/capex_vs_opex_router.py --sample --standard ifrs
The sample budget excludes the sequencer (capital equipment) and CRO subaward from the F&A base; the capex router routes exploratory screening to EXPENSE, a fully-criteria'd pilot line to CAPITALIZE-CANDIDATE, and a partial-criteria software build to FINANCE-OWNER-REVIEW.
Walked one at a time by /cs:grill-research-ops or the orchestrator. Recommended answer + canon citation per question. Never bundled.
Recommended: research = expense; development = capitalize-candidate only with feasibility evidence, routed to a named finance owner. Canon: IAS 38.54-57; ASC 730.
Recommended: use the negotiated rate; if assumed, flag it explicitly. Canon: 2 CFR 200 (Uniform Guidance); NICRA basics.
Recommended: runway must cover the milestone plus a buffer; surface the gap. Canon: Cooper stage-gate; SaaS/startup efficiency frameworks (a16z, Bessemer).
Recommended: risk-adjusted; raw NPV overstates R&D value. Canon: rNPV drug-development valuation; real-options literature.
Recommended: name them — this tool recommends, it never books the entry. Canon: ASC 730 / IAS 38 governance; auditor sign-off requirements.
Walk depth-first. Lock 1-2 before opening 3-5. After all are answered, invoke program_budget_planner.py → burn_runway_tracker.py → capex_vs_opex_router.py.
Other measured skills in the registry, with their headline benchmark lift.