Every week · Review
Model Sanity-Checker
Reviews any model like a senior analyst: the broken formula, the buried hardcode, the assumption fighting another tab, the total that won't tie.
Free, no email
Quick answer
01What it does
Checks a model's mechanics with the same checklist every run: formula integrity, buried hardcodes, ties and totals, cross-tab consistency, and hygiene.
02What you give it
An .xlsx, .xlsm or .csv file, an exported Google Sheet, or a pasted formula range. Add the previous version if you want the two compared.
03What you get back
A model sanity report: a verdict, then one row per finding with its severity, the exact cell, the issue, and the fix.
Say this to run it
- “Sanity check my model”
- “Check this model”
- “Review my spreadsheet”
- “Find the broken formula”
- “Does this tie out?”
- “Check my formulas”
- “Audit this workbook”
Add it to Claude
- 01
Download the file
model-sanity-checker.skill, 12 KB
- 02
Add it in Claude
Customize › Skills › Add, then upload the file.
- 03
Attach your model and ask
“Sanity check my model.”
- 01
Copy the prompt
The skill and its reference files, as one prompt.
- 02
Paste it into a new Claude chat
Use this when your Claude admin blocks skill uploads.
- 03
Attach your model and ask
“Sanity check my model.”
- 01
Download the file
model-sanity-checker.skill, 12 KB
- 02
Unzip it into your skills folder
unzip model-sanity-checker.skill -d ~/.claude/skills/ - 03
Ask in Claude Code
“Sanity check my model.”
What you get back
This is the format every run returns, from the skill's own template.
Output · references/findings-template.md
Model Sanity Report — Output Format
Always produce the output in exactly this structure and order. Every finding names a cell. Same format, every run.
🔎 Model Sanity Report
Model reviewed: {one line — file name, tabs, period covered} Verdict: {one of — ✅ Ties clean, safe to send · 🟡 Sendable after the fixes below · 🔴 Don't send yet — it produces wrong numbers · ⚪ Limited pass — values-only input; formula-level checks did not run} — one sentence of rationale.
Findings
| # | Sev | Location | Issue | Fix |
|---|---|---|---|---|
| 1 | {✗/⚠} | {Tab!Cell} | {one line — what's wrong} | {one line — the fix} |
Order by severity (✗ first), then by workbook tab order — so a repeat run on the same model produces an identical list. Every row names an exact cell or range. If a category came back clean, do not pad the table — note it below. If there are no findings at all, write "No findings" in place of the table.
Reviewed clean: {comma-separated list of the checklist categories whose checks ran and found nothing, e.g. "Hygiene — no hidden values, labels current." Categories whose checks could not run belong under "What this pass can't see", not here.}
🔧 Fix these first
The top findings by damage (up to 3), in priority order — the ones producing wrong numbers right now. One line each: the issue, then the fix. If there are no findings, write "Nothing — no findings."
- {…}
- {…}
- {…}
What this pass can't see
One or two lines, honestly stated: checks that couldn't run (e.g. no formulas in a values-only export or .csv, no cached values in the file, external links unresolvable, prior version not provided) — and the standing caveat that internal consistency ≠ agreement with the source systems the numbers came from.
Fix the list and re-run me — same checklist, so you can confirm it goes to zero. Want me to walk through the fixes one by one?
Inside the skill
Four plain-text files you can read before you install.
references/checks.md--- name: model-sanity-checker description: >- Reviews any financial model or spreadsheet the way a senior analyst would before it gets sent: finds the broken formula, the hardcoded number hiding in a formula range, the assumption that contradicts another tab, and the total that won't tie. Use whenever someone wants a model, forecast, or workbook checked for errors before sharing it. Triggers include "sanity check my model", "check this model", "review my spreadsheet", "find the broken formula", "does this tie out", "check my formulas", "audit this workbook", or uploading a model and asking if it's ready to send. metadata: author: "Aleph - getaleph.com" version: "1.0.0" --- # Model Sanity-Checker ## What this skill does This skill reviews a model the way a careful senior analyst reviews anything before it leaves the team: the **same fixed checklist, every time**, producing the **same annotated findings list, every time**. It is a peer review before the human one — it catches what a skim-through misses, before someone else finds it. It checks the model's *mechanics*: formula integrity, buried hardcodes, cross-tab consistency, and whether the totals actually tie. It does not judge the business assumptions themselves (that's the budget-pressure-tester's job); it judges whether the workbook does what its author thinks it does. ## When to use it - Before sending a model to your manager, Finance, or an external party - After inheriting a workbook from someone else - After a heavy editing session, to catch what broke - Anytime someone asks "does this tie?" or "is this safe to send?" ## Inputs Accept the model in whatever form the user provides: - An uploaded spreadsheet (`.xlsx`, `.xlsm`, `.csv`) or exported Google Sheet - A pasted formula view or range **Read formulas, not just values.** When using code execution, load the workbook twice: once with formulas visible (`data_only=False`) to inspect formula text and patterns, and once with values (`data_only=True`) to check ties. If cached values are missing (common in generated files), say so and check what can be checked — do not invent numbers. **Values-only input** (a `.csv` or a values-only export): read it with the `csv` module or pandas — openpyxl rejects `.csv` files. With no formulas to inspect, the formula-integrity, buried-hardcode, and most cross-tab and hygiene checks are not assessable — say so up front. Run the value-level ties that can run, and never issue the ✅ verdict on values-only input (use the ⚪ Limited pass verdict from `references/findings-template.md`). Optionally accept a prior version of the same model to diff: most model rot happens *between* drafts. ## Workflow 1. **Map the workbook** — tabs, what each one does, how data flows between them (which tabs feed which), where inputs, calculations, and outputs live. 2. **Run the checklist** — work through every category in `references/checks.md`, in order. Do not skip categories. For each finding, record the exact cell, what's wrong, and the concrete fix. 3. **Produce the report** — assemble findings into the exact format defined in `references/findings-template.md`. Every finding names a cell. Same format, every run. 4. **Offer the next step** — offer to (a) walk through fixes one by one, or (b) re-run the pass after the user revises, so they can confirm the list went to zero. ## The checklist The full checklist lives in `references/checks.md`, across five categories — **Formula integrity, Buried hardcodes, Ties & totals, Cross-tab consistency, and Hygiene**. Treat it as the standard, not a suggestion. ## Output format Always return the **Model Sanity Report** exactly as specified in `references/findings-template.md`. Every finding is one row: severity, cell, issue, fix. No finding without a cell reference. ## A note on scope This pass checks the model as a document, before it's sent. It deliberately does not evaluate whether the plan inside it is a good plan (use the budget-pressure-tester for that), and it can only check consistency *within* what it can see — whether the numbers match the source systems they came from is a different job, and the reason connected, governed data (e.g., via the Aleph MCP) beats pasted exports.
# Model Review Checklist Run every category, in order. Every finding must name the exact cell (or range), state what is wrong in one line, and give the concrete fix. Every category ends the pass in one of three states: **clean** (its checks ran and found nothing — it goes in the report's "Reviewed clean" line), **findings** (rows in the findings table), or **not assessable** (its checks could not run on this input — it goes under "What this pass can't see", never under "Reviewed clean"). A category may only be reported clean if its checks actually ran. Severity key: - **✗ Wrong now** — produces an incorrect number today. Must fix before sending. - **⚠ Fragile** — correct today but will break or mislead (hardcode in a formula range, magic number, stale reference). Fix or footnote. - **✓ Clean** — reviewed, no issue. --- ## 1. Formula integrity — do the formulas do what they look like they do? - **Error values:** any `#REF!`, `#DIV/0!`, `#VALUE!`, `#N/A` anywhere, including in hidden rows/columns. - **Pattern breaks:** in any row or column of repeated formulas, find the cell whose formula doesn't match its neighbors' pattern — the copy-paste that skipped a cell, references the wrong column, or points two periods back instead of one. This is the single highest-yield check in the list. - **Wrong-anchor references:** absolute/relative mix-ups (`$B$5` where `B5` was meant, and vice versa) that make a dragged formula silently wrong. - **Off-by-one ranges:** `SUM` ranges that clip the first or last row of what they're meant to total, or that include a header/subtotal row. ## 2. Buried hardcodes — constants where formulas should be - **Hardcoded cells inside formula ranges:** a typed-in number sitting in the middle of a row of formulas. It will not update when drivers change, and nothing marks it as an override. - **Magic numbers inside formulas:** unlabeled constants in formula text (`=B12*1.15*0.97` — what are 1.15 and 0.97?). Every constant should live in a labeled assumption cell and be referenced. - **Assumption bypass:** a formula that hardcodes a rate or value that also exists as a named assumption on another tab — the two will drift apart. ## 3. Ties & totals — does the math foot? - **Subtotals vs. components:** every total equals the sum of its parts. Recompute independently; do not trust the formula's presence. - **Cross-tab ties:** summary/output tabs match the detail tabs they claim to pull from — especially any tab that looks pasted rather than linked. - **Percent rows:** recompute margins/growth rates from the underlying rows. - **Row vs. column totals:** where a grid totals both ways, both ways agree. ## 4. Cross-tab consistency — does the model agree with itself? - **Duplicated assumptions:** the same driver (churn, growth, headcount, price) defined or used with different values in different tabs. - **Period alignment:** the same months/quarters in the same columns on every tab; no tab shifted by one period. - **Units:** thousands vs. units vs. millions consistent across tabs; % vs. decimal consistent in rate cells. - **Stated vs. used:** anything in an assumptions/notes tab that the calculation tabs quietly ignore or override. ## 5. Hygiene — will the next person misread it? - **Hidden rows/columns carrying live values** that feed visible results. - **Stale labels:** headers or notes referring to old periods, old versions, or renamed tabs. - **Sign conventions:** costs flipping between positive and negative treatments mid-model. - **External links:** references to other workbooks that will break when the file is sent.
# Model Sanity Report — Output Format
Always produce the output in exactly this structure and order. Every finding
names a cell. Same format, every run.
---
## 🔎 Model Sanity Report
**Model reviewed:** {one line — file name, tabs, period covered}
**Verdict:** {one of — ✅ Ties clean, safe to send · 🟡 Sendable after the fixes
below · 🔴 Don't send yet — it produces wrong numbers · ⚪ Limited pass —
values-only input; formula-level checks did not run} — one sentence of
rationale.
---
### Findings
| # | Sev | Location | Issue | Fix |
|---|-----|----------|-------|-----|
| 1 | {✗/⚠} | {Tab!Cell} | {one line — what's wrong} | {one line — the fix} |
Order by severity (✗ first), then by workbook tab order — so a repeat run on
the same model produces an identical list. Every row names an exact cell or
range. If a category came back clean, do not pad the table — note it below. If
there are no findings at all, write "No findings" in place of the table.
**Reviewed clean:** {comma-separated list of the checklist categories whose
checks ran and found nothing, e.g. "Hygiene — no hidden values, labels
current." Categories whose checks could not run belong under "What this pass
can't see", not here.}
---
### 🔧 Fix these first
The top findings by damage (up to 3), in priority order — the ones producing
wrong numbers *right now*. One line each: the issue, then the fix. If there
are no findings, write "Nothing — no findings."
1. {…}
2. {…}
3. {…}
---
### What this pass can't see
One or two lines, honestly stated: checks that couldn't run (e.g. no formulas
in a values-only export or `.csv`, no cached values in the file, external
links unresolvable, prior version not provided) — and the standing caveat that
internal consistency ≠ agreement with the source systems the numbers came from.
---
*Fix the list and re-run me — same checklist, so you can confirm it goes to
zero. Want me to walk through the fixes one by one?*
WHAT THIS FILE IS ================= model-sanity-checker.skill — Reviews a financial model for broken formulas, buried hardcodes, and totals that don't tie. A .skill file is Anthropic's packaging format for Claude Skills. It is a standard ZIP archive, nothing more. If you are reading this in a text editor, you are looking at the raw bytes of that archive — this build is intentionally uncompressed so the contents stay human-readable. LOOK INSIDE YOURSELF ==================== Rename the file from .skill to .zip and extract it, or run: unzip model-sanity-checker.skill Every file inside is plain-text markdown — the instructions Claude reads. There is no executable code in this package. WHAT'S INSIDE ============= SKILL.md references/checks.md references/findings-template.md README.txt (this file) HOW TO USE IT ============= Upload this file as-is to Claude: Settings -> Skills -> Add. Or add it in Claude Cowork or Claude Code. From Aleph (getaleph.com), the FP&A platform. The full guide: https://www.getaleph.com/claude-skills-library Questions: marketing@getaleph.com
Related skills
Skill · Review · Free
Budget Pressure-Tester
A CFO-grade review of your draft budget, returned as a readiness scorecard.
Get the skillSkill · Communicate · Free
Board Pack Prep
Predicts what your board will ask and drafts evidence-backed answers.
Get the skillSkill · Run · Free
Weekly FP&A Digest
Drafts your recurring update to Slack overnight, for you to review and post.
Get the skill