{"id":"company-cfo","name":"company-cfo","summary":"企業や代理店の月次CFOワークフロー — 銀行+決済処理業者+給与+経費管理から生データを取得し、分類と照合を行い、トランザクション合計法で月末現金を計算し、シナリオプロジェクターを更新して将来予測を行い、月次スナップショットレポートを作成し、サーフェックを行う...","body":"# /company-cfo — Monthly company CFO workflow\n\nThe 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.\n\nAnonymized team-scope sibling to `personal-cfo` (households). Same discipline (transaction-sum EOM, categorization traps, scenario modeling) applied to company books.\n\n## Step 0 — Load company config + prior run\n\nBefore starting work, read these in order:\n\n1. **`${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.\n2. **The most recent report** in `${COMPANY_CFO_ROOT}/reports/monthly/` — last month's snapshot. Tells you what leadership decided + what was open.\n3. **The most recent `*-followup.md`** in that folder (if one exists) — supplementary decisions, scenario analysis.\n4. **Any relevant memory notes** in `~/.claude/memory/` — running context: known anomalies, leadership constraints, current churn state.\n5. **`git log --oneline -10`** in `${COMPANY_CFO_ROOT}` — what's shipped since the last run.\n\nIf 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.\n\n## Step 1 — Parse mode\n\n| Invocation | Mode | Cadence |\n|---|---|---|\n| `/company-cfo monthly` (default) | **monthly** | Once per month on the 1st for the closed prior month |\n| `/company-cfo weekly` | **weekly** | Thin cash pulse — current cash + next 2 weeks of expected flows |\n| `/company-cfo scenario <question>` | **scenario** | Ad-hoc modeling in the projector |\n| `/company-cfo pickup` | **pickup** | Resume where the prior run left off (checks git log + last report + open items) |\n\nBelow sections walk through **monthly** in detail. Weekly + scenario are summarized at the end.\n\n---\n\n## Monthly workflow\n\nAsk the user: **Which month are we reporting on?** (Default: prior calendar month.)\n\nThen walk through these phases. Pause and confirm before moving to the next.\n\n### Phase 1 — Pull raw data\n\nFor the target month, pull raw data from each source. Standard source categories (each company's actual tools live in their `CLAUDE.md`):\n\n| Source category | What it gives | Common tools |\n|---|---|---|\n| **Bank / cash accounts** | Cash truth, internal vs external transfers, distribution recipients | Mercury CLI, Plaid, direct bank export |\n| **Payment processor** | Revenue, subscriptions, churn, payout timing | Stripe API, Paddle, LemonSqueezy |\n| **Payroll / contractors** | W-2 payroll, contractor pay | Plane, Deel, Gusto, Rippling |\n| **Expense management** | Reimbursements, corporate cards | Ramp, Brex, Divvy |\n| **Alternative revenue** | Non-primary billing sources | Direct invoice tools, alternative payment platforms |\n\nSave all pulls to `${COMPANY_CFO_ROOT}/data/YYYY-MM/<source>-*.json[l]` (gitignored — raw data doesn't get committed).\n\nAlso pull the **current cash balance** from the bank source for the \"today\" starting-cash figure.\n\n**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.\n\n### Phase 2 — Categorize and reconcile\n\nBucket 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.\n\n**Universal traps to check** (see `references/traps.md` for full list):\n\n- **Cash-vs-credit double-count** — 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.\n- **Internal transfers** — Checking ↔ Savings transfers net to zero. Exclude them (usually via a `kind=internalTransfer` filter or account-pair match).\n- **Currency mismatches** — contractor payment tools often return `destination_amount` in the worker's payout currency. Always use `source_amount` (or equivalent) for USD/base-currency cost analysis.\n- **Distribution counting** — 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.\n\nCross-checks before writing the report:\n- Total payroll debits in bank ≈ payroll-tool API total + fees (within a small residual for held deductions)\n- Payment processor payouts arriving in the month ≈ bank inflows from that processor (within timing lag)\n- Expense-management outflows in bank ≈ approved expenses in expense-mgmt tool (with cash-basis lag)\n\n### Phase 3 — Compute EOM cash (the transaction-sum method)\n\n**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.\n\nCorrect method (see `references/eom-cash-methodology.md` for the full recipe):\n\n```python\n# 1. Pull ALL transactions for each cash account (Checking + Savings + any other cash-holding):\n#    <bank-tool> transactions list --account-id <id> --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```\n\nCross-check EOM: last month's EOM + this month's net cash change should equal this month's EOM, to the dollar.\n\nIf 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.\n\n### Phase 4 — Update the scenario projector\n\nMost 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).\n\nCommon structure (see `references/scenario-projector.md` for the reference implementation):\n\n- **HISTORICAL** (trailing 3 closed months) — provides context before TODAY\n- **TODAY** — actual current cash balance (calendar-positioned within current month)\n- **Mo 1** — current calendar month EOM (partial — remaining-month activity)\n- **Mo 2-7** — next 6 full calendar month EOMs (scenario settings apply from here)\n\nEach month: `starting + revenue − expenses = profit → ending`\n\n**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`.\n\n**Update the projector each monthly run:**\n1. Append the just-closed month to HISTORICAL with all category fields; drop the oldest.\n2. Update `startingCash` to today's actual bank balance.\n3. Update expense baselines for any category that materially shifted.\n4. Update `baselineMrr` (net of processing fees).\n5. Verify presets still make sense (scenarios may need updating if comp structure or hiring plans changed).\n\n### Phase 5 — Write the snapshot report\n\nCreate `${COMPANY_CFO_ROOT}/reports/monthly/YYYY-MM.md` following the template in `references/report-template.md`. Sections (adapt as needed):\n\n1. **TL;DR** — headline + status table (net cash, ending balance, current MRR, trailing-N-month, recommendation)\n2. **Cash In** — by source (payment processor, alt revenue, one-times)\n3. **Cash Out** — by category (matches the projector's category structure)\n4. **Payroll breakdown** — verified contractor + W-2 split\n5. **Distributions** — who got paid, who didn't (flag anomalies)\n6. **Revenue metrics** — active subs, MRR delta, recent cancels with $ and customer\n7. **Forward projection** — 1-3 scenarios from the projector (link the projector state)\n8. **Recommended actions** — concrete for leadership to decide on\n9. **Open items** — questions to resolve next month\n\nWrite 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\").\n\n### Phase 6 — Update memory\n\nUpdate `~/.claude/memory/company_cfo_<company-slug>.md` (or wherever your memory system lives) if any of:\n\n- Distribution/comp structure changed\n- Active sub count or MRR shifted materially\n- New revenue stream (new billing platform)\n- New partner / contractor decision\n- New cash floor or distribution constraint\n\nDon't bloat the note. Replace stale facts; don't append indefinitely.\n\n### Phase 7 — Review and ship\n\nFollow your company's git workflow:\n\nBefore 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:\n\n```bash\ncd ${COMPANY_CFO_ROOT}\n# Verify .gitignore excludes raw data + secrets\nif ! grep -q '^data/' .gitignore 2>/dev/null; then\n  cat >> .gitignore <<'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```\n\nThen 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):\n\n```bash\ncd ${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```\n\n**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.\n\nBefore merging: run a code review (if applicable) or manually review the diff. Then merge + delete branch.\n\n---\n\n## Weekly cash pulse mode\n\nThin — designed to fit into a 15-minute weekly sync.\n\n1. Pull current cash balance (bank API `accounts list`)\n2. Pull last 7 days of transactions + next 7 days of scheduled outflows (payroll, known bills)\n3. Compute: current cash, next-payroll date + amount, next-Stripe-payout date + amount\n4. Flag if cash < next 2 weeks of outflows (below cash floor)\n5. One-line status: `Cash $X | Next payroll $Y on <date> | Next inflow $Z on <date> | Floor status: OK|WATCH|BREACH`\n\nSave to `${COMPANY_CFO_ROOT}/reports/weekly/YYYY-WW.md`.\n\nPair with `/loopify` to schedule the weekly run (typically Monday 9am).\n\n## Scenario mode\n\nAd-hoc — for \"what if we hire a $150K/yr engineer in September\" or \"what if churn ticks up 2%\".\n\nOpen 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`.\n\nIf the scenario decision is material (new hire, distribution change, big expense), also run `/decide` to formalize.\n\n## Pickup mode\n\nResume from the prior run. Surface:\n\n1. Most recent monthly report (`ls -t ${COMPANY_CFO_ROOT}/reports/monthly/*.md | head -1`)\n2. Most recent weekly pulse\n3. Latest `git log` on `${COMPANY_CFO_ROOT}` (what's shipped since last snapshot)\n4. Memory note for current narrative\n5. Open items from the last report's §9\n\n**Don't assume continuity from training data.** Always check the reports + memory + git log first.\n\n## Composes with\n\n- **`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.\n- **`company-brain`** — the CFO reports get stored + wiki-indexed there. `outputs/` in the company brain accumulates monthly reports; wiki pages compile trends across months.\n- **`toolify`** — wire company-specific data sources (Mercury API, Stripe, Plane, Ramp, or equivalents). First-run integration setup.\n- **`loopify`** — schedule the monthly run (1st of month) + weekly cash pulse (Monday 9am).\n- **`decide`** — for material decisions surfaced by the report (distribution changes, hiring, cash floor breach response). Formalize with the 37signals framework.\n- **`deep-research`** — for benchmark questions (\"what's a typical SaaS marketing budget as % of ARR?\") that inform scenario inputs.\n\n## Notes on quality\n\n- **Never invent methodology.** Every company computes cash differently — trust the company's `CLAUDE.md` in `${COMPANY_CFO_ROOT}`. If it's not documented, ask; don't guess.\n- **Transaction-sum method is non-negotiable.** Walkback from a balance snapshot has burned CFO workflows repeatedly. Use raw transaction sums, verify against current balance.\n- **Categorization discipline matters more than accuracy.** Same categories every month = trend-readable. Changing categories mid-year = trends become noise.\n- **Baseline expenses to actuals, not to \"safe\" estimates.** A software line modeled at $8K when actuals run $12K creates optimistic projections that break the model.\n- **Revenue is net of processing fees, not gross.** ~3% Stripe/similar processor fees materially change monthly cash inflow.\n- **The intramonth cycle low matters more than EOM.** With monthly payout cadences, cash dips deep mid-month. Cash floor applies to the LOW, not the EOM HIGH.\n- **Weekly payouts smooth the cycle dramatically** — if your payment processor supports it, switching from monthly to weekly payouts is one of the highest-leverage cash-management moves available. See `references/eom-cash-methodology.md`.\n- **When numbers don't reconcile, stop.** Don't ship a report with unexplained gaps. Investigate first — a $42K reconciliation gap once propagated silently for weeks before being caught.\n\n## When NOT to use this skill\n\n- **Ad-hoc single-number lookups** (\"what's our current cash?\") — just query the bank source directly, don't run the full workflow.\n- **Tax / accounting questions** — out of scope; refer to your CPA.\n- **Personal finance** — use `personal-cfo` instead.\n- **Investor pitch financials** — different discipline (multi-year projections, unit economics deep dives). This skill covers operational CFO cadence, not fundraising narrative.","author":"@coreyhaines31","ownerProfile":null,"authorContacts":null,"sourceUrl":"https://github.com/coreyhaines31/makerskills/tree/main/skills/company-cfo","license":"MIT","category":"writing","lang":"en","tokens":3465,"stars":0,"calls30d":1,"claimed":false,"visibility":"public","origin":"crawler","version":"0.1.0","createdAt":"2026-08-22","updatedAt":"2026-08-22","files":[{"path":"references/categorization.md","size":4202,"sha256":"94197e83dfb4769c4625ca1531525b9170fdbfd955c218632eaab77d83fe1a54"},{"path":"references/company-config-template.md","size":4779,"sha256":"2af9cb8ce0d8d33299d63405c8c2cd0a09915cf465347017fb6ba3eabdf895e8"},{"path":"references/eom-cash-methodology.md","size":5335,"sha256":"0b2de69b9dbfff2f492193b99215eade36198a72d293e00f91e0e52731b54d88"},{"path":"references/report-template.md","size":5344,"sha256":"daac7802d82731fb53fbcd3688a867e987941fd03125f89468790eec931003bd"},{"path":"references/scenario-projector.md","size":6895,"sha256":"91ec23b1587cf049d34dc013be67cf251d7d8c34ffcd1d6457960907ccdaf955"},{"path":"references/traps.md","size":6605,"sha256":"56b0641a6e1d292bbebfa237c6e6469364bfd0d4bda07b40b2ba9d252a8a8e3c"}],"requires":{"mcp":[],"tools":[]},"safety":{"flags":[],"scannedAt":"2026-08-22","hasScripts":false,"networkEndpoints":[]}}