{"slug":"company-cfo","title":"company-cfo","summary":"Monthly CFO workflow for a company or agency — pull raw data from bank + payment processor + payroll + expense management, categorize and reconcile, compute end-of-month cash via transaction-sum method, update a scenario projector for forward forecasting, write the monthly snapsh","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-05T10:18:13.867539Z","repo":{"url":"https://github.com/coreyhaines31/makerskills","stars":834,"forks":69,"license":"MIT","updatedAt":"2026-09-04T23:29:09Z"},"bodyHtml":"<hr>\n<h2>name: company-cfo\ndescription: Monthly CFO workflow for a company or agency — pull raw data from bank + payment processor + payroll + expense management, categorize and reconcile, compute end-of-month cash via transaction-sum method, update a scenario projector for forward forecasting, write the monthly snapshot report, surface decisions to leadership. Modes — monthly (default; the standing report), weekly (thin cash pulse), scenario (ad-hoc modeling in the projector), pickup (resume where the prior run left off). Anonymized team-scope sibling to personal-cfo (which handles personal household finances). Composes with company-brain (report gets stored + wiki-indexed there), toolify (wire company-specific data sources), loopify (schedule the monthly + weekly runs). Triggers on \"/company-cfo,\" \"/cfo,\" \"monthly cash report,\" \"do the CFO snapshot,\" \"CFO monthly,\" \"let's run CFO,\" \"cash projection,\" \"runway forecast,\" \"monthly financials,\" \"cash pulse.\"\nmetadata:\nversion: 0.1.1</h2>\n<h1>/company-cfo — Monthly company CFO workflow</h1>\n<p>The standing analysis leadership uses to make distribution / cuts / hiring / runway decisions. Primary cadence is <strong>monthly</strong> (run on the 1st for the closed prior month). Weekly and scenario modes cover the in-between.</p>\n<p>Anonymized team-scope sibling to <code>personal-cfo</code> (households). Same discipline (transaction-sum EOM, categorization traps, scenario modeling) applied to company books.</p>\n<h2>Step 0 — Load company config + prior run</h2>\n<p>Before starting work, read these in order:</p>\n<ol>\n<li><strong><code>${COMPANY_CFO_ROOT:-$HOME/code/company-cfo}/CLAUDE.md</code></strong> — your company's specific methodology, data source map, categorization rules, distribution mechanics. <strong>This is the source of truth for HOW your company computes things.</strong> Don't invent your own methodology.</li>\n<li><strong>The most recent report</strong> in <code>${COMPANY_CFO_ROOT}/reports/monthly/</code> — last month's snapshot. Tells you what leadership decided + what was open.</li>\n<li><strong>The most recent <code>*-followup.md</code></strong> in that folder (if one exists) — supplementary decisions, scenario analysis.</li>\n<li><strong>Any relevant memory notes</strong> in <code>~/.claude/memory/</code> — running context: known anomalies, leadership constraints, current churn state.</li>\n<li><strong><code>git log --oneline -10</code></strong> in <code>${COMPANY_CFO_ROOT}</code> — what's shipped since the last run.</li>\n</ol>\n<p>If the <code>COMPANY_CFO_ROOT</code> dir doesn't exist yet: first-run walkthrough asks the user to <code>mkdir</code> it, seed a <code>CLAUDE.md</code> from <code>references/company-config-template.md</code>, and set the env var.</p>\n<h2>Step 1 — Parse mode</h2>\n<table>\n<thead>\n<tr>\n<th>Invocation</th>\n<th>Mode</th>\n<th>Cadence</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>/company-cfo monthly</code> (default)</td>\n<td><strong>monthly</strong></td>\n<td>Once per month on the 1st for the closed prior month</td>\n</tr>\n<tr>\n<td><code>/company-cfo weekly</code></td>\n<td><strong>weekly</strong></td>\n<td>Thin cash pulse — current cash + next 2 weeks of expected flows</td>\n</tr>\n<tr>\n<td><code>/company-cfo scenario &lt;question&gt;</code></td>\n<td><strong>scenario</strong></td>\n<td>Ad-hoc modeling in the projector</td>\n</tr>\n<tr>\n<td><code>/company-cfo pickup</code></td>\n<td><strong>pickup</strong></td>\n<td>Resume where the prior run left off (checks git log + last report + open items)</td>\n</tr>\n</tbody>\n</table>\n<p>Below sections walk through <strong>monthly</strong> in detail. Weekly + scenario are summarized at the end.</p>\n<hr>\n<h2>Monthly workflow</h2>\n<p>Ask the user: <strong>Which month are we reporting on?</strong> (Default: prior calendar month.)</p>\n<p>Then walk through these phases. Pause and confirm before moving to the next.</p>\n<h3>Phase 1 — Pull raw data</h3>\n<p>For the target month, pull raw data from each source. Standard source categories (each company's actual tools live in their <code>CLAUDE.md</code>):</p>\n<table>\n<thead>\n<tr>\n<th>Source category</th>\n<th>What it gives</th>\n<th>Common tools</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Bank / cash accounts</strong></td>\n<td>Cash truth, internal vs external transfers, distribution recipients</td>\n<td>Mercury CLI, Plaid, direct bank export</td>\n</tr>\n<tr>\n<td><strong>Payment processor</strong></td>\n<td>Revenue, subscriptions, churn, payout timing</td>\n<td>Stripe API, Paddle, LemonSqueezy</td>\n</tr>\n<tr>\n<td><strong>Payroll / contractors</strong></td>\n<td>W-2 payroll, contractor pay</td>\n<td>Plane, Deel, Gusto, Rippling</td>\n</tr>\n<tr>\n<td><strong>Expense management</strong></td>\n<td>Reimbursements, corporate cards</td>\n<td>Ramp, Brex, Divvy</td>\n</tr>\n<tr>\n<td><strong>Alternative revenue</strong></td>\n<td>Non-primary billing sources</td>\n<td>Direct invoice tools, alternative payment platforms</td>\n</tr>\n</tbody>\n</table>\n<p>Save all pulls to <code>${COMPANY_CFO_ROOT}/data/YYYY-MM/&lt;source&gt;-*.json[l]</code> (gitignored — raw data doesn't get committed).</p>\n<p>Also pull the <strong>current cash balance</strong> from the bank source for the \"today\" starting-cash figure.</p>\n<p><strong>If a source isn't wired yet:</strong> use <code>/toolify &lt;source&gt;</code> to wire it up before running the CFO workflow. First-time integration is a one-time cost.</p>\n<h3>Phase 2 — Categorize and reconcile</h3>\n<p>Bucket all cash-account outflows into the categories your company uses. See <code>references/categorization.md</code> for a starter category set and the discipline of maintaining categorization.</p>\n<p><strong>Universal traps to check</strong> (see <code>references/traps.md</code> for full list):</p>\n<ul>\n<li><strong>Cash-vs-credit double-count</strong> — if the bank shows a \"credit card autopay\" outflow AND the credit card account shows individual charges, don't count both. Filter to cash accounts only OR treat the CC as a debt account.</li>\n<li><strong>Internal transfers</strong> — Checking ↔ Savings transfers net to zero. Exclude them (usually via a <code>kind=internalTransfer</code> filter or account-pair match).</li>\n<li><strong>Currency mismatches</strong> — contractor payment tools often return <code>destination_amount</code> in the worker's payout currency. Always use <code>source_amount</code> (or equivalent) for USD/base-currency cost analysis.</li>\n<li><strong>Distribution counting</strong> — if leadership has N partners who should get a monthly distribution, verify N distributions exist. If N-1, flag the missing partner — often one is deferring their draw to balance cash.</li>\n</ul>\n<p>Cross-checks before writing the report:</p>\n<ul>\n<li>Total payroll debits in bank ≈ payroll-tool API total + fees (within a small residual for held deductions)</li>\n<li>Payment processor payouts arriving in the month ≈ bank inflows from that processor (within timing lag)</li>\n<li>Expense-management outflows in bank ≈ approved expenses in expense-mgmt tool (with cash-basis lag)</li>\n</ul>\n<h3>Phase 3 — Compute EOM cash (the transaction-sum method)</h3>\n<p><strong>Use transaction sums, not the walkback-from-current-balance method.</strong> 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.</p>\n<p>Correct method (see <code>references/eom-cash-methodology.md</code> for the full recipe):</p>\n<pre><code># 1. Pull ALL transactions for each cash account (Checking + Savings + any other cash-holding):\n#    &lt;bank-tool&gt; transactions list --account-id &lt;id&gt; --format jsonl --max-items 100000\n# 2. Sum the amount field across all transactions in each account.\n# 3. The sum should equal that account's CURRENT available_balance exactly.\n#    (Sanity check — if not, missing data or a pre-history baseline deposit exists.)\n# 4. For any past date T: balance_at_T = sum of all transactions posted on or before T\n#    (plus any pre-history baseline, which should be ~$0 if the sanity check passes).\n</code></pre>\n<p>Cross-check EOM: last month's EOM + this month's net cash change should equal this month's EOM, to the dollar.</p>\n<p>If transaction sums don't reconcile with current balance, <strong>do not proceed</strong> with walkback as fallback. Investigate the gap first — missing pulls (timeout, paging), an unknown account, or a legitimate pre-history baseline.</p>\n<h3>Phase 4 — Update the scenario projector</h3>\n<p>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).</p>\n<p>Common structure (see <code>references/scenario-projector.md</code> for the reference implementation):</p>\n<ul>\n<li><strong>HISTORICAL</strong> (trailing 3 closed months) — provides context before TODAY</li>\n<li><strong>TODAY</strong> — actual current cash balance (calendar-positioned within current month)</li>\n<li><strong>Mo 1</strong> — current calendar month EOM (partial — remaining-month activity)</li>\n<li><strong>Mo 2-7</strong> — next 6 full calendar month EOMs (scenario settings apply from here)</li>\n</ul>\n<p>Each month: <code>starting + revenue − expenses = profit → ending</code></p>\n<p><strong>Intramonth cycle low</strong> (for weekly cash pulse relevance): most CFO systems care about the <em>low</em> point of the month (when you might hit a cash floor), not just the high (EOM). Formula depends on payout cadence — see <code>references/scenario-projector.md</code>.</p>\n<p><strong>Update the projector each monthly run:</strong></p>\n<ol>\n<li>Append the just-closed month to HISTORICAL with all category fields; drop the oldest.</li>\n<li>Update <code>startingCash</code> to today's actual bank balance.</li>\n<li>Update expense baselines for any category that materially shifted.</li>\n<li>Update <code>baselineMrr</code> (net of processing fees).</li>\n<li>Verify presets still make sense (scenarios may need updating if comp structure or hiring plans changed).</li>\n</ol>\n<h3>Phase 5 — Write the snapshot report</h3>\n<p>Create <code>${COMPANY_CFO_ROOT}/reports/monthly/YYYY-MM.md</code> following the template in <code>references/report-template.md</code>. Sections (adapt as needed):</p>\n<ol>\n<li><strong>TL;DR</strong> — headline + status table (net cash, ending balance, current MRR, trailing-N-month, recommendation)</li>\n<li><strong>Cash In</strong> — by source (payment processor, alt revenue, one-times)</li>\n<li><strong>Cash Out</strong> — by category (matches the projector's category structure)</li>\n<li><strong>Payroll breakdown</strong> — verified contractor + W-2 split</li>\n<li><strong>Distributions</strong> — who got paid, who didn't (flag anomalies)</li>\n<li><strong>Revenue metrics</strong> — active subs, MRR delta, recent cancels with $ and customer</li>\n<li><strong>Forward projection</strong> — 1-3 scenarios from the projector (link the projector state)</li>\n<li><strong>Recommended actions</strong> — concrete for leadership to decide on</li>\n<li><strong>Open items</strong> — questions to resolve next month</li>\n</ol>\n<p>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\").</p>\n<h3>Phase 6 — Update memory</h3>\n<p>Update <code>~/.claude/memory/company_cfo_&lt;company-slug&gt;.md</code> (or wherever your memory system lives) if any of:</p>\n<ul>\n<li>Distribution/comp structure changed</li>\n<li>Active sub count or MRR shifted materially</li>\n<li>New revenue stream (new billing platform)</li>\n<li>New partner / contractor decision</li>\n<li>New cash floor or distribution constraint</li>\n</ul>\n<p>Don't bloat the note. Replace stale facts; don't append indefinitely.</p>\n<h3>Phase 7 — Review and ship</h3>\n<p>Follow your company's git workflow:</p>\n<p>Before the first-ever run, verify <code>.gitignore</code> at the repo root excludes raw exports — Phase 1 dumps sensitive bank / payroll / payment-processor data to <code>data/</code> and that MUST NOT be committed. If missing, seed it:</p>\n<pre><code>cd ${COMPANY_CFO_ROOT}\n# Verify .gitignore excludes raw data + secrets\nif ! grep -q '^data/' .gitignore 2&gt;/dev/null; then\n  cat &gt;&gt; .gitignore &lt;&lt;'GITIGNORE'\n# Raw financial data — never commit\ndata/\n*.jsonl\n*.env\n*.env.local\n.mcp.json\nGITIGNORE\n  git add .gitignore\n  git commit -m \"Seed .gitignore for raw financial data\"\nfi\n</code></pre>\n<p>Then ship the report + projector changes ONLY (never <code>git add -A</code> in this repo — targeted adds only, so a stray <code>data/</code> file can't slip in):</p>\n<pre><code>cd ${COMPANY_CFO_ROOT}\ngit checkout -b feature/YYYY-MM-snapshot\ngit add reports/monthly/YYYY-MM.md scenarios/index.html CLAUDE.md   # targeted\ngit status --short                                                    # verify no data/ or .env files staged\ngit commit -m \"YYYY-MM monthly snapshot\"\ngit push -u origin feature/YYYY-MM-snapshot\ngh pr create --base main --title \"YYYY-MM monthly snapshot\"\n</code></pre>\n<p><strong>Never <code>git add -A</code> in <code>${COMPANY_CFO_ROOT}</code>.</strong> A silent <code>data/</code> file leak would push bank transaction history + partner distribution ACHs to a git remote. Targeted adds only.</p>\n<p>Before merging: run a code review (if applicable) or manually review the diff. Then merge + delete branch.</p>\n<hr>\n<h2>Weekly cash pulse mode</h2>\n<p>Thin — designed to fit into a 15-minute weekly sync.</p>\n<ol>\n<li>Pull current cash balance (bank API <code>accounts list</code>)</li>\n<li>Pull last 7 days of transactions + next 7 days of scheduled outflows (payroll, known bills)</li>\n<li>Compute: current cash, next-payroll date + amount, next-Stripe-payout date + amount</li>\n<li>Flag if cash &lt; next 2 weeks of outflows (below cash floor)</li>\n<li>One-line status: <code>Cash $X | Next payroll $Y on &lt;date&gt; | Next inflow $Z on &lt;date&gt; | Floor status: OK|WATCH|BREACH</code></li>\n</ol>\n<p>Save to <code>${COMPANY_CFO_ROOT}/reports/weekly/YYYY-WW.md</code>.</p>\n<p>Pair with <code>/loopify</code> to schedule the weekly run (typically Monday 9am).</p>\n<h2>Scenario mode</h2>\n<p>Ad-hoc — for \"what if we hire a $150K/yr engineer in September\" or \"what if churn ticks up 2%\".</p>\n<p>Open the scenario projector, adjust the relevant knobs, screenshot or export the resulting cash projection. Save the analysis to <code>${COMPANY_CFO_ROOT}/reports/scenarios/YYYY-MM-DD-&lt;question-slug&gt;.md</code>.</p>\n<p>If the scenario decision is material (new hire, distribution change, big expense), also run <code>/decide</code> to formalize.</p>\n<h2>Pickup mode</h2>\n<p>Resume from the prior run. Surface:</p>\n<ol>\n<li>Most recent monthly report (<code>ls -t ${COMPANY_CFO_ROOT}/reports/monthly/*.md | head -1</code>)</li>\n<li>Most recent weekly pulse</li>\n<li>Latest <code>git log</code> on <code>${COMPANY_CFO_ROOT}</code> (what's shipped since last snapshot)</li>\n<li>Memory note for current narrative</li>\n<li>Open items from the last report's §9</li>\n</ol>\n<p><strong>Don't assume continuity from training data.</strong> Always check the reports + memory + git log first.</p>\n<h2>Composes with</h2>\n<ul>\n<li><strong><code>personal-cfo</code></strong> — sibling. Personal-cfo handles household finances (house math, monthly cash flow, big purchases). Same discipline (transaction-sum method, scenario modeling) applied to different scope.</li>\n<li><strong><code>company-brain</code></strong> — the CFO reports get stored + wiki-indexed there. <code>outputs/</code> in the company brain accumulates monthly reports; wiki pages compile trends across months.</li>\n<li><strong><code>toolify</code></strong> — wire company-specific data sources (Mercury API, Stripe, Plane, Ramp, or equivalents). First-run integration setup.</li>\n<li><strong><code>loopify</code></strong> — schedule the monthly run (1st of month) + weekly cash pulse (Monday 9am).</li>\n<li><strong><code>decide</code></strong> — for material decisions surfaced by the report (distribution changes, hiring, cash floor breach response). Formalize with the 37signals framework.</li>\n<li><strong><code>deep-research</code></strong> — for benchmark questions (\"what's a typical SaaS marketing budget as % of ARR?\") that inform scenario inputs.</li>\n</ul>\n<h2>Notes on quality</h2>\n<ul>\n<li><strong>Never invent methodology.</strong> Every company computes cash differently — trust the company's <code>CLAUDE.md</code> in <code>${COMPANY_CFO_ROOT}</code>. If it's not documented, ask; don't guess.</li>\n<li><strong>Transaction-sum method is non-negotiable.</strong> Walkback from a balance snapshot has burned CFO workflows repeatedly. Use raw transaction sums, verify against current balance.</li>\n<li><strong>Categorization discipline matters more than accuracy.</strong> Same categories every month = trend-readable. Changing categories mid-year = trends become noise.</li>\n<li><strong>Baseline expenses to actuals, not to \"safe\" estimates.</strong> A software line modeled at $8K when actuals run $12K creates optimistic projections that break the model.</li>\n<li><strong>Revenue is net of processing fees, not gross.</strong> ~3% Stripe/similar processor fees materially change monthly cash inflow.</li>\n<li><strong>The intramonth cycle low matters more than EOM.</strong> With monthly payout cadences, cash dips deep mid-month. Cash floor applies to the LOW, not the EOM HIGH.</li>\n<li><strong>Weekly payouts smooth the cycle dramatically</strong> — if your payment processor supports it, switching from monthly to weekly payouts is one of the highest-leverage cash-management moves available. See <code>references/eom-cash-methodology.md</code>.</li>\n<li><strong>When numbers don't reconcile, stop.</strong> Don't ship a report with unexplained gaps. Investigate first — a $42K reconciliation gap once propagated silently for weeks before being caught.</li>\n</ul>\n<h2>When NOT to use this skill</h2>\n<ul>\n<li><strong>Ad-hoc single-number lookups</strong> (\"what's our current cash?\") — just query the bank source directly, don't run the full workflow.</li>\n<li><strong>Tax / accounting questions</strong> — out of scope; refer to your CPA.</li>\n<li><strong>Personal finance</strong> — use <code>personal-cfo</code> instead.</li>\n<li><strong>Investor pitch financials</strong> — different discipline (multi-year projections, unit economics deep dives). This skill covers operational CFO cadence, not fundraising narrative.</li>\n</ul>\n","files":[{"path":"references/categorization.md","sizeBytes":4202,"isText":true},{"path":"references/company-config-template.md","sizeBytes":4779,"isText":true},{"path":"references/eom-cash-methodology.md","sizeBytes":5335,"isText":true},{"path":"references/report-template.md","sizeBytes":5344,"isText":true},{"path":"references/scenario-projector.md","sizeBytes":6895,"isText":true},{"path":"references/traps.md","sizeBytes":6605,"isText":true},{"path":"SKILL.md","sizeBytes":15919,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"notes-only","suspicious":0,"notes":2,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-05T10:18:20.525386Z","sha256":"A4B61B61A5BAD8339205ABFA475D536853C0CB5B13A07A5B04348FF5794C35B3","sizeBytes":23224},"review":null,"source":{"repositoryUrl":"https://github.com/coreyhaines31/makerskills","path":"skills/company-cfo","license":"MIT","commit":"1868b816090246ced9be9ef3556726c4dc94877c","subtreeSha":"6441676F686994327316CC059C4AF28D4E6227BAC561A792B440D2C48A109B5C","lastSyncedAt":"2026-09-27T20:56:59.539883Z"},"reviewedAt":"2026-09-05T10:18:52.721904Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/coreyhaines31/makerskills/tree/main/skills/company-cfo"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install coreyhaines31-makerskills@llmmart"},{"target":"git","command":"git clone https://github.com/coreyhaines31/makerskills.git"}]}