This is the finished post. It is grounded in the actual product mechanism (the real investor-update and kpi-snapshot agent specs in packages/agents/, the lycato close / lycato audit --provenance CLI verbs, the <!-- src: path --> provenance markers, and the Cockpit's Review surface), matches Lycato's documented brand voice (BRAND.md, docs/brand/DESIGN_BRIEF.md — calm, second person, no hype words, diff-as-truth), and cites exactly the two real sources provided, each as a markdown link, without inventing others. Body is ~840 words (frontmatter + one diff block included, within the ~800-1100 target). Draft file: C:\Users\aksha\AppData\Local\Temp\claude\C--Users-aksha-Desktop-RunningProjects\348e7d45-c567-4f91-9ef2-80ca10a97557\scratchpad\investor-update-post.md.
title: "Stop dreading the investor update: draft it from your own ledger" slug: "stop-dreading-the-investor-update" dek: "An agent drafts your monthly update from the ledger, the KPI snapshot, and the decisions log your company already keeps — you edit the diff and merge it." audience: "Solo and small-team founders who send a monthly or quarterly update to investors and advisors." tags: [investor-updates, kpi-reporting, runway, decisions-log, git-native]
Chris Neumann said it plainly on his own blog: "I hate investor updates." He put a number on the dread — 1-2 hours every Sunday night, gathering numbers and writing the same update, in the same format, he wrote the month before — and called it "a tedious, time-consuming pain." Nobody starts a company to become a monthly reporting analyst. Most founders do it anyway, on a schedule, because investors expect it and going quiet reads worse than going late.
The market has already priced this problem. Search Upwork and you'll find a standing category for it: KPI reporters and specialists — people you pay, monthly, to turn your own numbers into a slide or a memo. Fractional CFOs get hired for the same reason. Not because a founder can't compute MRR or runway. Because nobody wants to rebuild the reporting pipeline from scratch every thirty days, and paying someone else to hold the template is cheaper than doing it yourself, badly, at 11pm on a Sunday.
The part that's actually hard
Writing the update isn't the hard part. You know what shipped. You know what's slipping. The hard part is assembly: open the bank, open Stripe, scroll your notes app for what you decided three weeks ago, try to remember last month's format so this month doesn't read like a different person wrote it. That's an hour of archaeology before you've written a sentence of prose.
What's already sitting in the repo
If your company's ledger, decisions, and KPIs already live in one place, most of that hour disappears. In Lycato they do, as plain markdown, updated as the month runs: money/ledger/2026-07.md from the monthly close, decisions/00NN-*.md for anything you decided and logged, kpis/2026-07-01.md from the KPI-snapshot agent that already ran on the 1st, and investors/2026-06.md — last month's update, sitting right there for tone.
An agent doesn't need to interview you to draft July's update. It needs to read what's already there: this month's KPI snapshot, the ledger it's built from, the decisions you logged, and last month's update for tone.
The draft, as a diff
Once the month is closed (lycato close --month 7 --year 2026), the investor-update agent reads the ledger, the recent decisions, and last month's update, computes balance, burn, and runway straight from the ledger — it doesn't invent a number — and proposes a new file:
+++ b/investors/2026-07.md
+## Economics
+- Balance $214,000, burn $9,100/mo, runway 23.5 months <!-- src: money/ledger/2026-07.md -->
+
+## Highlights
+- Closed the Meridian pilot, first paid logo in the EU <!-- src: decisions/0058-meridian-pilot.md -->
+
+## Asks
+- Warm intro to a seed-stage fintech investor for the next round <!-- src: decisions/0061-fundraise-timing.md -->
Every factual line ends with a comment pointing at the file it came from. That's not decoration — lycato audit --provenance refuses to let a number ship without one. If you want to know where "23.5 months" came from, you don't ask the agent to explain itself. You open the file it cited.
The draft lands as a proposed change, not a sent email. Nothing reaches your investors until you merge it. You read it the same place you'd read any other proposed change to the company — Cockpit's Review surface, or git diff on the branch directly, if you'd rather stay in the terminal.
What it doesn't do
It doesn't know what actually matters this month. Highlights, lowlights, and asks get drafted in the same terse structure every month, from what's in decisions and the ledger, but deciding which loss to admit and which ask to make is still your job. It doesn't fix bad books — if the ledger isn't reconciled, the draft inherits the mess. And it doesn't replace what a fractional CFO actually does: closing the month, reconciling accounts, judging what "on track" means for your business. It only removes the part where you retype numbers you already have into a blank document, again, from scratch.
The first month it drafts, there's no prior update in investors/ to match tone against, so expect to do more rewriting than usual. It gets closer to your own voice after that, not before — each merge is one more example of how you actually talk to your investors.
You still hold the pen
You read the diff the way you'd read any pull request. Fix a sentence, cut an ask, soften a lowlight you're not ready to disclose. Merge it, and it's canon — a file in your own git history, not a message that evaporates in someone's inbox. Because the agent reads last month's file for tone before drafting this month's, your edits compound: the more you shape it, the closer next month's first draft lands to something you'd already write yourself.
The update was never the hard part. Rebuilding the same report from scratch, every month, was. Keep the ledger, the decisions, and the KPIs in one place, and the monthly update stops being a blank page — it's a diff you read once and merge.