Quarterly investor update
A few days into each quarter, Claude Code reads the finance exports, dashboards and weekly briefings saved in your folder over the quarter and drafts the update: headline metrics, highlights, lowlights, asks. A second model reads it as a skeptical board member and lists the questions it raises, so you can answer them before anyone else asks.
- This quarter’s files Shell
- Draft the update Claude Code · Opus
- Board member read Claude API · Opus 5
- Approve update You
- Save update Shell
What each step does
This quarter’s files
ShellLists the files added or changed in the last 100 days, leaving out past updates.
Draft the update
Claude Code · OpusReads the files and drafts the update with metrics, highlights, lowlights and asks.
Board member read
Claude API · Opus 5A skeptical board member reads the draft and lists the questions it raises.
Approve update
YouShows you the draft and the board questions. Reject with answers to fold them in.
Save update
ShellSaves the approved update in the updates folder.
From copy to first run
- Copy the pipeline JSON with the button above.
- In Jimothy, open Pipelines → New pipeline, paste it under “Or import a pipeline JSON” and click Import.
- Under Workspace, choose the folder with the quarter’s metrics exports and briefings (the weekly briefing template’s folder works).
- Fill in the variables below under Pipeline settings → Variables.
- Triggers → Add trigger → Schedule, cron 0 9 5 1,4,7,10 * (09:00 on the 5th of each quarter’s first month).
What to fill in
The prompts and commands read these as {{vars.<name>}}. The examples are placeholders: replace them with your own.
| Variable | What to put in it | Example |
|---|---|---|
company | Your company, stage and what investors care about. | Acme, Series B, $18M ARR, reporting tool for finance teams |
asks | Standing asks for investors, e.g. intros or hires. Leave empty if none. | Intros to VP Sales candidates with mid-market SaaS experience. |
updatesFolder | Folder where approved updates are saved. | updates |
Show the pipeline JSON
{
"jimothyPipeline": 1,
"name": "Quarterly investor update",
"description": "Drafts the quarterly investor update from your metrics and briefings, with a board member’s questions to answer first.",
"icon": "workflow",
"color": "#7c3aed",
"repo": {
"mode": "inplace",
"localPath": ""
},
"concurrency": 1,
"variables": {
"company": "Acme, Series B, $18M ARR, reporting tool for finance teams",
"asks": "Intros to VP Sales candidates with mid-market SaaS experience.",
"updatesFolder": "updates"
},
"steps": [
{
"id": "gather",
"name": "This quarter’s files",
"type": "shell",
"description": "Lists the files added or changed in the last 100 days, leaving out past updates.",
"timeoutMinutes": 2,
"command": "u={{vars.updatesFolder}}; find . -type f -mtime -100 -not -path \"./$u/*\" -not -name '.*' | sort | head -300"
},
{
"id": "draft",
"name": "Draft the update",
"type": "agent",
"description": "Reads the files and drafts the update with metrics, highlights, lowlights and asks.",
"harnessId": "claude-code",
"model": "opus",
"dependsOn": [
"gather"
],
"timeoutMinutes": 40,
"prompt": "Draft the quarterly investor update for {{vars.company}} for the quarter that just ended.\n\nFiles from the quarter:\n{{steps.gather.output}}\n\nRead them (do not modify anything). Compute any metric changes with a script, not in your head. Write in Markdown:\n# <Company> · <Quarter> update\n## TL;DR (three bullets)\n## Metrics (table: metric, this quarter, last quarter, change; only metrics the files support)\n## Highlights\n## Lowlights (be candid: misses, churn, delays, and what we're doing about them)\n## Priorities next quarter\n## Asks\n{{vars.asks | default:\"(no standing asks)\"}}\n\nCite the source file in brackets after each number. Under 900 words.{{#if steps.approve.output}}\n\nYour previous draft was rejected with this feedback, and the board questions below were raised. Rewrite it:\n{{steps.approve.output}}{{/if}}"
},
{
"id": "questions",
"name": "Board member read",
"type": "agent",
"description": "A skeptical board member reads the draft and lists the questions it raises.",
"harnessId": "anthropic-api",
"model": "claude-opus-5",
"dependsOn": [
"draft"
],
"timeoutMinutes": 10,
"systemPrompt": "You are an experienced, skeptical board member at {{vars.company}}.",
"prompt": "Read this draft investor update:\n\n{{steps.draft.output}}\n\nList the questions you would ask on the board call, most important first: numbers that don't reconcile, trends it glosses over, lowlights without a plan, metrics conspicuously missing. One line each, at most eight."
},
{
"id": "approve",
"name": "Approve update",
"type": "approval",
"description": "Shows you the draft and the board questions. Reject with answers to fold them in.",
"dependsOn": [
"questions"
],
"loopBackTo": "draft",
"maxLoops": 3,
"approvalMessage": "**Questions a board member would ask**\n\n{{steps.questions.output}}\n\nReject with answers to fold them into the update, or approve to save it.\n\n---\n\n{{steps.draft.output}}"
},
{
"id": "save",
"name": "Save update",
"type": "shell",
"description": "Saves the approved update in the updates folder.",
"dependsOn": [
"approve"
],
"timeoutMinutes": 1,
"command": "mkdir -p {{vars.updatesFolder}} && f={{vars.updatesFolder}}/update-$(date +%F).md && printf '%s\\n' {{steps.draft.output}} > \"$f\" && echo \"Saved $(pwd)/$f\""
}
]
}More for executives, and beyond
Weekly executive briefing
Reads the week’s team updates and metrics from a shared folder and writes a one-page briefing: progress on priorities, risks and decisions needed.
ExecutivesDecision red team
Pressure-tests a proposal from three angles at once (financial, customer, execution) and writes a decision memo with a recommendation.
ExecutivesLeadership meeting decisions
Turns a leadership meeting transcript into decisions, owners and deadlines, and posts them once you’ve checked them.