English · 繁體中文 · 日本語 · 한국어 · Español · Français
The agent-native IR system: run investor relations like you have a team of ten — even if it's just you and an AI agent.
Most founders learn IR by losing: a diligence that stalls on a messy SAFE stack, an update streak that dies the first bad month, a data room assembled in a panic the week a term sheet shows up. The founders who raise well aren't smarter — they run a system. IR Kit is that system, open-sourced: the tools and the operating doctrine of an A-class startup's investor relations, runnable by any founder, anywhere, for free.
▶ Try the live demo — sample company, your edits stay in your browser · see the cap table & SAFE ledger
- 📊 Financial command center — monthly close, burn/runway/zero-cash date, KPI dashboard, runway scenarios for hiring decisions
- 🧮 Cap table & SAFE math — SAFE ledger with implied ownership, a priced-round modeler using real post-money SAFE mechanics, founder dilution walk to Series A, exit waterfall
- 🤝 Investor CRM — round commitments with weighted pipeline, interaction log, asks tracker, update distribution segments
- ✉️ Update composer — monthly updates in the TL;DR-first format tier-1 investors (YC, a16z, Sequoia) expect, metrics auto-filled from your financials, plus the archive a future lead will read back-to-back
- 📚 Playbooks — update doctrine, batch fundraising process, tiered data-room checklists (interactive), board pack structure, hard-question FAQ frames, diligence-grade metric definitions
- 🤖 Agent harness — prompt sets and a private workspace scaffold so your coding agent (Claude Code, Cursor, …) operates the whole system with you
- 🌐 Six languages — the dashboard switches between English, 繁體中文, 日本語, 한국어, Español, and Français (sidebar picker); CI enforces full locale coverage on every contribution
git clone https://github.com/howieyoung/ir-kit && cd ir-kit
node server.js # Node 18+, zero dependencies — that's the whole install
# → http://127.0.0.1:2330
node scripts/init-workspace.js # scaffold your private data room / board / CRM folders
./bin/ir.js status # the same system, from the command line
# then hand your agent prompts/onboard.md — it populates the system with your real dataExplore with the built-in sample company, then replace it with yours (Settings → profile, or hand your agent prompts/monthly-close.md).
→ The tutorial — also built into the app as the Get started page:
- Use it with your agent — onboarding in one conversation, the prompt rituals, and putting your agent on a schedule so the update draft is waiting for you on update day
- Use it yourself — the first-30-minutes walkthrough and the monthly rhythm
- Cap table 101 — never seen a SAFE? Ten minutes to using the modeler confidently
- Glossary — every term in the kit, one line each
The kit also tracks your cadence: the dashboard shows when the next update is due (and your streak), and Updates → Schedule exports a recurring calendar file for update day + quarterly board packs.
This is the part that matters, so it's not a policy, it's the design:
| Where your data lives | What the public sees | |
|---|---|---|
| Self-hosted (default) | Plain JSON in data/ + files in ir-workspace/ — both gitignored, both local |
Nothing |
| Static demo hosting | Each visitor's browser localStorage only | The fictional sample company |
- The repo ships only a fictional sample company ("Protico" is used as the sample brand; every number, investor, and contact is invented).
data/andir-workspace/are gitignored, so a fork can't accidentally publish a cap table.- The server binds to
127.0.0.1by default and has no accounts to breach — there's nothing to sign up for and no one else's infrastructure holding your SAFEs. It's hardened against the classic local-service attacks (DNS-rebinding, clickjacking, path traversal), verified by a smoke test in CI — see SECURITY.md. - Back up by making
data/+ir-workspace/a separate private repo, or export everything as one JSON from Settings. - One honest caveat about AI agents: IR Kit itself never sends your data anywhere, but a cloud-backed agent (Claude, Codex, Cursor…) processes what it reads through its provider. That's a trust boundary you control — use a local model for fully-offline operation. Details in SECURITY.md.
This is the part no other IR tool has: a first-class programmatic surface, so your coding agent (Claude Code, Codex, Cursor, …) is a peer of the browser UI — not a hack on top of it.
Day one is two words: tell your agent "ir start".
git clone+node server.js— the app runs immediately with a sample company.- Open your coding agent in the repo folder — it reads AGENTS.md automatically.
- Say: "ir start". The agent scaffolds everything (including a document inbox folder), states the ground rules, and guides you from there.
- Drop every financial/company document into the inbox — SAFEs, bank statements, cap tables, decks, completely unsorted is fine. (Docs scattered across your disk? It can
ir scanfolders you appoint instead — filenames only, nothing opened without your OK.) ir sortfiles everything into the right data-room categories — re-runnable any time you add more documents; it's a standing filing service, not a one-off.- With your consent it reads the sorted documents and extracts your real cap table, SAFEs, and monthly financials — every number cited to a source document; ambiguities go to an open-questions list, never guessed.
ir checkpasses, it walks you through the dashboard, you confirm → your company, real data. Provided nothing? The dashboard simply keeps its sample data. Nothing uploaded anywhere, ever.
$ ./bin/ir.js start
✓ workspace scaffolded (18 files) — inbox: ir-workspace/inbox
stage: collect · SAMPLE data · inbox 0 · data room 0
NEXT: drop every financial/company document into the inbox, then run: ir sort
Ground rules: consent before reading contents · originals read-only · every number cited · nothing leaves this machine.
$ ./bin/ir.js safe add "Meridian Capital" --principal 50000 --cap 8000000 --status Wired
✓ SAFE recorded — Meridian Capital $50,000 · implied 0.6%
✓ total SAFE overhang 4.8% (guardrail <15%)
✓ CRM reconciled — commitment → Wired · added to update distribution
round: $50,000 of $750,000 signed/wired
→ same-day ritual: countersign + send executed doc + thank-you note
$ ./bin/ir.js check
✓ ok — 0 errors, 0 warning(s)
$ ./bin/ir.js status --json | jq .financials.runwayMonths
22.0Three layers make it agent-native:
-
The
irCLI — a verb for every ritual, humans welcome too. Full reference with examples: docs/CLI.md.Command What it does ir startbegin here — guided-setup state machine: scaffolds everything (incl. the document inbox), detects your stage, prints the next step; safe to re-run ir sortfile inbox documents into data-room categories by filename — re-runnable any time; a standing filing service ir statusevery derived metric in one call (burn, runway, round, SAFE overhang) ir checkvalidate schemas + invariants — the post-edit test suite (exit 1 on violations) ir close-month 2026-07 --saas … --ads … --fde … --other-rev …close the books with the four-way revenue split; flags >20% MoM moves and short runway ir safe add "Fund X" --principal …record a SAFE and reconcile cap table + CRM + distribution in one pass ir prospect add "Fund Y" --fit … --source …log a sourced investor safely: inactive nurture row + no-ticket pipeline entry, so unqualified names never inflate your numbers ir update draft/mark-sentmetrics-filled draft from actuals (blocked if month isn't closed) / archive + streak ir scan <folders>onboarding: find candidate financial docs by filename only — contents never read ir model round --pre … --new …priced-round conversion with post-money SAFE mechanics ir export board-pack|tearsheet|captableboard pack, one-pager, diligence CSV — generated from actuals ir schedule showcron lines for the monthly rituals All commands take
--json; errors exit 1. Onesafe addkeeps four collections consistent — the invariants live in code, not in a prompt's good intentions. -
ir check— the agent's test suite: schema validation + cross-collection invariants (ledger↔CRM reconciliation, month continuity, the 15% SAFE-overhang guardrail). Any agent that edits JSON directly verifies its own work. -
AGENTS.md — the vendor-neutral contract every agent reads on arrival: capability map, schemas, privacy rules, and the prompt rituals in
prompts/(monthly close, SAFE signed, meeting prep, data-room audit, round kickoff, scheduling).
That's the "IR team of ten": the system remembers the cadence and enforces the invariants, the agent does the clerical work, you make the calls.
- For yourself: it's a local app; you're done. On a server (Fly/Railway/VPS/Docker):
HOST=0.0.0.0 node server.js—⚠️ no built-in auth; put it behind Cloudflare Access/Tailscale/basic auth. Your cap table is on this thing. - Public demo for others: host
public/on any static host (this repo auto-deploys it to GitHub Pages). No server → demo mode → visitors' edits stay in their own browsers.
Not legal advice (conversion math is a planning tool; counsel and the instruments decide), not a Carta/Pulley replacement (no 409A, no share issuance — export to those when you price a round), and deliberately not a multi-tenant SaaS — hosting strangers' cap tables is an auth/encryption/compliance product; this kit's answer is that nobody should have to upload their cap table to use good IR tooling.
Small, dependency-free PRs welcome. Wanted next: configurable traction-metric columns (currently sample-company-shaped: traffic/pages/platforms), CSV import for financials, opt-in scheduled sending via bring-your-own SMTP, priced-round (non-SAFE) ledger entries, more playbooks (debt, bridge, secondaries), localization. Keep the promises: zero deps, no build step, local-first, agent-editable JSON. See SECURITY.md for the security model.
MIT © Howie Young
