All skills

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.

Download .skill · 12 KB

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

  1. 01

    Download the file

    model-sanity-checker.skill, 12 KB

  2. 02

    Add it in Claude

    Customize › Skills › Add, then upload the file.

  3. 03

    Attach your model and ask

    “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

#SevLocationIssueFix
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?

Inside the skill

Four plain-text files you can read before you install.

references/checks.md
# 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.

Related skills