The founder's private command center for a raise — local-first, agent-native.
Track investors, draft outreach in your own voice, model the cap table, and keep a data room — with a Claude agent that proposes changes and never writes silently. It all runs on your machine, against a SQLite file you own.
Quickstart · What you get · How it works · Connectors · FAQ · Docs
Next.js + Electron + round CLI · per-workspace SQLite (Drizzle) · MIT licensed · local-first
Everything in round.sh follows from these:
- Your raise, your machine. Investors, contacts, meetings, objections, cap table, and data room live in one local SQLite file inside a git-backed folder you own. Nothing about your raise leaves your laptop unless you connect a service and approve what flows in.
- The agent proposes, you approve. A Claude agent drafts outreach, syncs meeting notes, pulls signals, and suggests CRM updates — but every change lands in an approval queue you review first. It never writes silently.
pnpm install
pnpm dev # Next.js on http://localhost:3000Open http://localhost:3000. On first run you land on /welcome to create a
workspace — a folder that holds your round.db, company profile, investor notes, and data room.
That's it; the app is now running against a local database that is yours.
From there, the header setup checklist (the rocket icon) tracks what's left and auto-checks it off:
- Connect keys — paste them in Settings → Connectors (no file editing).
ANTHROPIC_API_KEYandEXA_API_KEYunlock the most; everything else is optional. See .env.example. - Company profile — your one-liner, stage, sector (Settings → Company), and your founder
voice (Settings → Voice & tone), saved to
company/voice.mdso drafts sound like you. - Round + growth — fill in round details, use of funds, and founders so the Round (cap table) and Growth (gap-to-goal planner) sections render.
- Add investors — paste a CSV or a list of names on the investors page, or from the CLI:
pnpm round status # read commands print immediately
pnpm round investors import investors.csv # write commands record a proposal you approveDesktop app: with
pnpm devalready running, start Electron withpnpm desktop:dev(it attaches to your dev server). Package an installer withpnpm desktop:dist.
Full walkthrough: GETTING_STARTED.md.
Running a raise means living in five spreadsheets, three inboxes, a notes app, and your own head. The pipeline goes stale, follow-ups slip, the cap table lives in a tab you're afraid to touch, and every "smart" fundraising tool wants your investor list on its servers.
round.sh keeps all of it in one place — on your laptop. A Claude agent works alongside you: it drafts outreach, syncs meeting notes, pulls signals, and proposes CRM updates — but every change lands in an approval queue you review first.
Built for: early-stage founders actively raising who already build with Claude. Not for: multi-user fund/back-office workflows or a hosted SaaS CRM — this is a single-founder, local-first, fork-it-yourself tool. Sending, uploading, and sharing are deliberately not automated, so you stay in the loop on everything that leaves your hands.
| Area | What it does |
|---|---|
CRM · app/(app)/crm, lib/crm |
Investor pipeline, contacts, meetings, objections, outreach drafts, stages |
Round · app/(app)/round, lib/round |
Cap table — scenarios, dilution, use of funds |
Growth · app/(app)/growth |
Gap-to-goal planner — gap banner, milestone ladder, trajectory chart, "how to get there" |
Engage · app/(app)/engage |
X/Twitter engage feed + per-investor feeds, read-only |
Files / data room · app/(app)/files |
Diligence materials by section, with data-room readiness checks |
Agent layer · lib/agent |
Propose → approve → apply → log. Every agent edit is a reviewable proposal |
Workspace · lib/workspace |
Multi-workspace lifecycle, git-backed undo, file scaffolding, a generated CLAUDE.md |
CLI · cli/ |
round status, round investors …, round granola sync, and more |
Architecture overview: docs/architecture/overview.md · local-first performance notes: docs/architecture/perf-local-first.md.
round.sh is local-first by construction, and the agent never edits your raise behind your back.
flowchart LR
A[Agent / CLI / sync] -->|proposes| B[Approval queue<br/>agentActions]
B -->|you approve| C[Apply to round.db]
C -->|recorded| D[Activity log + git history]
B -.->|you reject| A
- A fresh workspace ships a generated
CLAUDE.mdso Claude Code (runclaudein the folder — optional, with its own Anthropic sign-in) already understands your raise, plus.claude/skillslike prep, debrief, outreach, next-moves, path-to-close, and red-team. - A
PreToolUsehook (round hook pretooluse) intercepts agent file edits, and structured writes go throughlib/agent/proposals.tsinto theagentActionstable — reviewed in Approvals.
The CLI safety model, in four tiers:
| Tier | Examples | Behavior |
|---|---|---|
| Read | status, investors list, dataroom status |
Print immediately |
| Write | investors add/import, meeting create, outreach draft |
Record a pending proposal unless you pass --yes |
| Sync | granola sync, calcom sync, matcap sync |
Read-only network pulls; results still propose |
| Refused by design | delete, send, upload, share | Always refused — these never happen automatically |
All keys are optional and feature-gate their own surface. Set them in Settings → Connectors
(stored at ~/.round/keys.json, overridable via $ROUND_CONFIG_DIR, never committed) or in .env.local.
| Connector | Key | Powers |
|---|---|---|
| Anthropic | ANTHROPIC_API_KEY |
Outreach drafting, talking points, signal digests, fit synthesis |
| Exa | EXA_API_KEY |
Investor research, web signals, enrichment |
| X (Twitter) | X_API_BEARER_TOKEN |
Engage feed + per-investor feeds (read-only) |
| Granola | GRANOLA_API_KEY |
Meeting-notes sync → proposed meetings (round granola sync) |
| Cal.com | CALCOM_API_KEY |
Booking sync → proposed meetings (round calcom sync) |
| MatCap | MATCAP_API_KEY |
Advisor-intro pipeline (round matcap sync) |
| Gmail / Google Calendar | — | Agent-side, managed by Claude in a session (no app-stored key) |
Without ANTHROPIC_API_KEY, the synthesis features (digests, talking points, fit) degrade gracefully
to fetch-and-list rather than failing — so the app is useful before you connect anything.
round.sh is MIT licensed and meant to be forked. Keep the name or rebrand it:
pnpm fork-setup # interactive: app name, bundle id, git authorOr edit branding live in Settings → Branding (display name, tagline, logo). Full list of customization points: docs/forking.md.
Is my fundraise data sent anywhere?
No. Your investors, contacts, meetings, cap table, and data room live in a per-workspace round.db
SQLite file inside a git-backed folder you own (default ./workspaces, git-ignored). Data only
leaves your machine when you connect a service (e.g. Anthropic, Exa) and approve what flows in.
Keys live in ~/.round/keys.json or .env.local — neither is ever committed.
How is this different from a spreadsheet or a hosted CRM?
A spreadsheet doesn't draft your outreach, sync your meeting notes, or model your cap table — and a hosted CRM puts your investor list on someone else's servers. round.sh gives you both: an agent that proposes real work and a local-first store you own. Every agent change goes through an approval queue, and it's MIT-licensed so you can fork and rebrand it.
pnpm dev # web app on http://localhost:3000
pnpm test # Vitest suite (pnpm test:watch to watch)
pnpm lint # eslint
pnpm round <args> # the CLI against the active workspaceExa investor discovery scripts
# preview by default, --write to persist rows
pnpm exa:discover -- --query "Pre-seed B2B SaaS funds NYC" --count 25
pnpm exa:discover -- --query "Pre-seed B2B SaaS funds NYC" --count 25 --writeThe shared Exa client is lib/exa/client.ts; MCP servers for coding agents are
registered in .mcp.json. Your real data lives outside the repo (your workspace folder,
default ./workspaces, git-ignored) and your keys live in .env.local / ~/.round — neither is
ever committed.
- GETTING_STARTED.md — full first-run walkthrough
- docs/architecture/overview.md — how the pieces fit
- docs/architecture/perf-local-first.md — local-first performance
- docs/forking.md — rebrand and customize
- CONTRIBUTING.md · CODE_OF_CONDUCT.md · SECURITY.md
round.sh helps you think about and run your raise — an elevated way to organize your pipeline, model the cap table, and stay on top of every follow-up. It is not a professional service, and nothing in it is legal, financial, tax, accounting, or securities advice.
Raising capital carries real legal and regulatory weight. For the decisions that matter, bring in the right people — a startup attorney, an accountant, and any licensed advisors your raise calls for. round.sh is here to support how you run your raise; it is not a substitute for the professionals who support you.
MIT. Your raise, your data, your fork.

