From makerskills
Monthly CFO workflow for companies/agencies: pulls bank/payment/payroll/expense data, categorizes/reconciles, computes EOM cash, updates scenario projector, writes snapshot report, surfaces decisions. Supports monthly, weekly, scenario, and pickup modes.
How this skill is triggered — by the user, by Claude, or both
Slash command
/makerskills:company-cfoThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The standing analysis leadership uses to make distribution / cuts / hiring / runway decisions. Primary cadence is **monthly** (run on the 1st for the closed prior month). Weekly and scenario modes cover the in-between.
The standing analysis leadership uses to make distribution / cuts / hiring / runway decisions. Primary cadence is monthly (run on the 1st for the closed prior month). Weekly and scenario modes cover the in-between.
Anonymized team-scope sibling to personal-cfo (households). Same discipline (transaction-sum EOM, categorization traps, scenario modeling) applied to company books.
Before starting work, read these in order:
${COMPANY_CFO_ROOT:-$HOME/code/company-cfo}/CLAUDE.md — your company's specific methodology, data source map, categorization rules, distribution mechanics. This is the source of truth for HOW your company computes things. Don't invent your own methodology.${COMPANY_CFO_ROOT}/reports/monthly/ — last month's snapshot. Tells you what leadership decided + what was open.*-followup.md in that folder (if one exists) — supplementary decisions, scenario analysis.~/.claude/memory/ — running context: known anomalies, leadership constraints, current churn state.git log --oneline -10 in ${COMPANY_CFO_ROOT} — what's shipped since the last run.If the COMPANY_CFO_ROOT dir doesn't exist yet: first-run walkthrough asks the user to mkdir it, seed a CLAUDE.md from references/company-config-template.md, and set the env var.
| Invocation | Mode | Cadence |
|---|---|---|
/company-cfo monthly (default) | monthly | Once per month on the 1st for the closed prior month |
/company-cfo weekly | weekly | Thin cash pulse — current cash + next 2 weeks of expected flows |
/company-cfo scenario <question> | scenario | Ad-hoc modeling in the projector |
/company-cfo pickup | pickup | Resume where the prior run left off (checks git log + last report + open items) |
Below sections walk through monthly in detail. Weekly + scenario are summarized at the end.
Ask the user: Which month are we reporting on? (Default: prior calendar month.)
Then walk through these phases. Pause and confirm before moving to the next.
For the target month, pull raw data from each source. Standard source categories (each company's actual tools live in their CLAUDE.md):
| Source category | What it gives | Common tools |
|---|---|---|
| Bank / cash accounts | Cash truth, internal vs external transfers, distribution recipients | Mercury CLI, Plaid, direct bank export |
| Payment processor | Revenue, subscriptions, churn, payout timing | Stripe API, Paddle, LemonSqueezy |
| Payroll / contractors | W-2 payroll, contractor pay | Plane, Deel, Gusto, Rippling |
| Expense management | Reimbursements, corporate cards | Ramp, Brex, Divvy |
| Alternative revenue | Non-primary billing sources | Direct invoice tools, alternative payment platforms |
Save all pulls to ${COMPANY_CFO_ROOT}/data/YYYY-MM/<source>-*.json[l] (gitignored — raw data doesn't get committed).
Also pull the current cash balance from the bank source for the "today" starting-cash figure.
If a source isn't wired yet: use /toolify <source> to wire it up before running the CFO workflow. First-time integration is a one-time cost.
Bucket all cash-account outflows into the categories your company uses. See references/categorization.md for a starter category set and the discipline of maintaining categorization.
Universal traps to check (see references/traps.md for full list):
kind=internalTransfer filter or account-pair match).destination_amount in the worker's payout currency. Always use source_amount (or equivalent) for USD/base-currency cost analysis.Cross-checks before writing the report:
Use transaction sums, not the walkback-from-current-balance method. Walkback has bitten CFO workflows repeatedly — a bank API balance snapshot at pull time can be off by tens of thousands, and that error propagates into every historical EOM value.
Correct method (see references/eom-cash-methodology.md for the full recipe):
# 1. Pull ALL transactions for each cash account (Checking + Savings + any other cash-holding):
# <bank-tool> transactions list --account-id <id> --format jsonl --max-items 100000
# 2. Sum the amount field across all transactions in each account.
# 3. The sum should equal that account's CURRENT available_balance exactly.
# (Sanity check — if not, missing data or a pre-history baseline deposit exists.)
# 4. For any past date T: balance_at_T = sum of all transactions posted on or before T
# (plus any pre-history baseline, which should be ~$0 if the sanity check passes).
Cross-check EOM: last month's EOM + this month's net cash change should equal this month's EOM, to the dollar.
If transaction sums don't reconcile with current balance, do not proceed with walkback as fallback. Investigate the gap first — missing pulls (timeout, paging), an unknown account, or a legitimate pre-history baseline.
Most CFO workflows benefit from a scenario projector — an interactive forecast that projects EOM cash forward N months under adjustable assumptions (revenue growth, expense scenarios, hiring plans, distribution changes).
Common structure (see references/scenario-projector.md for the reference implementation):
Each month: starting + revenue − expenses = profit → ending
Intramonth cycle low (for weekly cash pulse relevance): most CFO systems care about the low point of the month (when you might hit a cash floor), not just the high (EOM). Formula depends on payout cadence — see references/scenario-projector.md.
Update the projector each monthly run:
startingCash to today's actual bank balance.baselineMrr (net of processing fees).Create ${COMPANY_CFO_ROOT}/reports/monthly/YYYY-MM.md following the template in references/report-template.md. Sections (adapt as needed):
Write the why-paragraph in plain English: what happened and why. Reference the previous month if there's continuity ("Vendor X churn from last month finished hitting June payouts").
Update ~/.claude/memory/company_cfo_<company-slug>.md (or wherever your memory system lives) if any of:
Don't bloat the note. Replace stale facts; don't append indefinitely.
Follow your company's git workflow:
Before the first-ever run, verify .gitignore at the repo root excludes raw exports — Phase 1 dumps sensitive bank / payroll / payment-processor data to data/ and that MUST NOT be committed. If missing, seed it:
cd ${COMPANY_CFO_ROOT}
# Verify .gitignore excludes raw data + secrets
if ! grep -q '^data/' .gitignore 2>/dev/null; then
cat >> .gitignore <<'GITIGNORE'
# Raw financial data — never commit
data/
*.jsonl
*.env
*.env.local
.mcp.json
GITIGNORE
git add .gitignore
git commit -m "Seed .gitignore for raw financial data"
fi
Then ship the report + projector changes ONLY (never git add -A in this repo — targeted adds only, so a stray data/ file can't slip in):
cd ${COMPANY_CFO_ROOT}
git checkout -b feature/YYYY-MM-snapshot
git add reports/monthly/YYYY-MM.md scenarios/index.html CLAUDE.md # targeted
git status --short # verify no data/ or .env files staged
git commit -m "YYYY-MM monthly snapshot"
git push -u origin feature/YYYY-MM-snapshot
gh pr create --base main --title "YYYY-MM monthly snapshot"
Never git add -A in ${COMPANY_CFO_ROOT}. A silent data/ file leak would push bank transaction history + partner distribution ACHs to a git remote. Targeted adds only.
Before merging: run a code review (if applicable) or manually review the diff. Then merge + delete branch.
Thin — designed to fit into a 15-minute weekly sync.
accounts list)Cash $X | Next payroll $Y on <date> | Next inflow $Z on <date> | Floor status: OK|WATCH|BREACHSave to ${COMPANY_CFO_ROOT}/reports/weekly/YYYY-WW.md.
Pair with /loopify to schedule the weekly run (typically Monday 9am).
Ad-hoc — for "what if we hire a $150K/yr engineer in September" or "what if churn ticks up 2%".
Open the scenario projector, adjust the relevant knobs, screenshot or export the resulting cash projection. Save the analysis to ${COMPANY_CFO_ROOT}/reports/scenarios/YYYY-MM-DD-<question-slug>.md.
If the scenario decision is material (new hire, distribution change, big expense), also run /decide to formalize.
Resume from the prior run. Surface:
ls -t ${COMPANY_CFO_ROOT}/reports/monthly/*.md | head -1)git log on ${COMPANY_CFO_ROOT} (what's shipped since last snapshot)Don't assume continuity from training data. Always check the reports + memory + git log first.
personal-cfo — sibling. Personal-cfo handles household finances (house math, monthly cash flow, big purchases). Same discipline (transaction-sum method, scenario modeling) applied to different scope.company-brain — the CFO reports get stored + wiki-indexed there. outputs/ in the company brain accumulates monthly reports; wiki pages compile trends across months.toolify — wire company-specific data sources (Mercury API, Stripe, Plane, Ramp, or equivalents). First-run integration setup.loopify — schedule the monthly run (1st of month) + weekly cash pulse (Monday 9am).decide — for material decisions surfaced by the report (distribution changes, hiring, cash floor breach response). Formalize with the 37signals framework.deep-research — for benchmark questions ("what's a typical SaaS marketing budget as % of ARR?") that inform scenario inputs.CLAUDE.md in ${COMPANY_CFO_ROOT}. If it's not documented, ask; don't guess.references/eom-cash-methodology.md.personal-cfo instead.npx claudepluginhub coreyhaines31/makerskills --plugin makerskillsGuides Fondo monthly bookkeeping close: answer CPA categorization questions, review financial statements (P&L, balance sheet, cash flow), and handle errors for month-end reporting.
Builds what-if scenario columns on an existing Excel budget workbook — trim (headcount reduction, revenue shock, cost rebalance) or growth (new fund raise, expansion hires) with timing sensitivity.
Builds a 13-week rolling cash flow forecast to predict cash position and runway. Uses receipts timing and disbursements to catch shortfalls early.