Skip to content
The Liberation Engine

Build your own AI setup / Lesson 2 of 6 · Data

See where your money actually goes, then make it a monthly habit

Three months of bank exports become a plain report of flags and numbers, proved to the cent, and a reusable skill that runs the same check on next month's file.

What the agent made

Ran it for real with Claude Code 2.1.292 and OMP 18.8.5 on 2026-10-08. The first session started with no saved memory; each later session was a new one that kept only the files in the folder. Your result will differ.

1 · Build the money check

SAVED OUTPUT · money-report.md
# Money report: 2026-01 to 2026-03

Sources: 2026-01.csv (27 rows), 2026-02.csv (29 rows), 2026-03.csv (29 rows). 85 rows in total, all listed in categories.csv.
Amounts are quoted as they appear in the files: spending is negative, money in is positive.

## Referee

Command: `python3 money-referee.py categories.csv 2026-01.csv 2026-02.csv 2026-03.csv`

Real exit status: **0** (every export row appears in categories.csv exactly once with matching date, description and amount and a nonempty category; category totals sum to 10379.21, the same as the export files, to the cent).

## Totals by category per month

| Category | 2026-01 | 2026-02 | 2026-03 | Three months |
|---|---:|---:|---:|---:|
| Income | 5680.00 | 5680.00 | 5680.00 | 17040.00 |
| Housing | -1450.00 | -1450.00 | -1450.00 | -4350.00 |
| Utilities | -180.11 | -246.58 | -183.36 | -610.05 |
[trimmed]

The piece it left behind

It saved a skill any later session can use: .claude/skills/money-check/SKILL.md.

SAVED IN THE FOLDER · .claude/skills/money-check/SKILL.md
---
name: money-check
description: Run the monthly money check when a new month's bank export (a YYYY-MM.csv file with columns date,description,amount) has been added to the money practice folder. Use it to categorize the new month's rows by appending them to categories.csv, run money-referee.py over every month, and write money-report-YYYY-MM.md with category totals, recurring charges, price changes, new merchants and possible duplicates compared against earlier months.
---

# Monthly money check

## Folder and files

Everything lives in one folder: the folder that contains `categories.csv`, `money-referee.py` and `.claude/skills/money-check/` (this skill). Work only inside that folder.

- Bank exports: one file per month named `YYYY-MM.csv` (for example `2026-01.csv`, `2026-02.csv`, `2026-03.csv`). A new month's export will sit in the same folder under the same naming, for example `2026-04.csv`. Columns are `date,description,amount`, dates are `YYYY-MM-DD`, spending is negative and money in is positive.
- `categories.csv`: one line per export row across all months.
- `money-referee.py`: the independent checker.
- Reports: `money-report.md` covers 2026-01 to 2026-03. Each new month gets `money-report-YYYY-MM.md` named for the new month (for example `money-report-2026-04.md`).

[trimmed]

Then a brand-new session used what it saved on new input: see the proof.

The same prompts in OMP made their own versions, every session recorded and checked: Build the money check · A fresh session, a new month.

Make your own

  1. Get the files

    Download the practice folder (ZIP)

    Unzip it: you get a folder called cli-practice with 3 fictional files. Download three fictional bank exports, 2026-01.csv, 2026-02.csv and 2026-03.csv, for a made-up household in a made-up town. It also has a for-later folder with the new files for the fresh sessions.

  2. Open your agent in that folder

    Open a terminal in cli-practice and type claude or omp --approval-mode always-ask. First time? Set up in about five minutes, with steps for Mac, Windows, and Linux.

  3. Paste this prompt

    Work only inside this practice folder, which holds three fictional bank exports named 2026-01.csv, 2026-02.csv and 2026-03.csv (columns date,description,amount; spending is negative). Do not use the network, install anything, read outside this folder, or edit the exports. Do not write any file outside this folder, including temporary files in /tmp. Do not ask me to reply. Do not use em dashes or en dashes. Use only Python 3 and its standard library already on this computer. If python3 is unavailable, report that the checks could not run and never claim they passed.
    Build a money check I can repeat every month. Read every row, then write categories.csv with the header source_file,row,date,description,amount,category: one line per export row (row is the data row number, starting at 1), each row in exactly one category that you choose and keep consistent. Write money-referee.py, which takes categories.csv followed by the export files as arguments, re-reads the exports on its own without trusting categories.csv, and checks that every export row appears in categories.csv exactly once with the same date, description and amount and a nonempty category, and that the category totals add up to the total of the export files to the cent (use Decimal or integer cents, never floats). It prints every mismatch and exits nonzero on any mismatch, zero otherwise. Run python3 money-referee.py categories.csv 2026-01.csv 2026-02.csv 2026-03.csv and capture its real exit status. Then write money-report.md covering all three months: totals by category per month, recurring charges (state the rule you used to call a charge recurring: the same merchant and amount coming back at a regular interval, whether monthly or more often, including a charge that has only just started and has already repeated), price changes on the same merchant (show both amounts and say in words whether the charge is more or less, never with a plus or minus sign on the difference), merchants that appear for the first time in the latest month, and possible duplicate charges (same merchant, date and amount). Use only flags and numbers, quoting dates and amounts from the files, and never say what I should do about any of them. Put the referee's real exit status in the report.
    Finally write the native skill .claude/skills/money-check/SKILL.md (frontmatter with name: money-check and a description saying when to use it) that captures this exact monthly method, so a fresh session that knows nothing else can run it on a new export: where a new month's CSV will sit, the categories.csv layout and the category names in use, how to append the new month's rows without rewriting earlier rows, the exact referee command to run over all months, the rules for recurring charges (including one that started within the new month), price changes, new merchants and possible duplicates, the report layout, that the new report is named money-report-YYYY-MM.md for the new month and compares against earlier months, that it states the referee's real exit status, and the same no-advice and safety rules listed above. Create only these files: categories.csv, money-referee.py, money-report.md and the skill.

    The prompt asks the agent to stay in this folder; it cannot enforce that. Read each file change and command before you approve it.

  4. Check it yourself

    Open cli-practice/money-report.md in any text editor, then:

    Human check: Open the report and find three things from the numbers alone, then check each against the CSV files. A charge that first appears in March, a price on the same merchant that rises each month, and a charge that shows up twice on the same date in February. Confirm the referee's exit status in the report matches a run you do yourself, and that the report states facts and never tells you what to do.

    When we checked the recording above: I read both reports and reran money-referee.py myself on a scratch copy of the recorded files: exit 0 on the three January to March exports, 85 rows matched once, category totals 10379.21 equal the export total to the cent. The report finds Pixelstream -15.99 first seen on 2026-03-12, Hearth Internet rising 49.99, 54.99, 59.99 (5.00 more each month), and Hearth Internet -54.99 twice on 2026-02-03 (rows 3 and 4 of the February export), while correctly not flagging the two different Corner Diner amounts on 2026-03-14. Amounts are quoted from the files and the report states only flags and numbers, no advice. I also changed the categories file on a copy (a deleted row, an extra row, an altered amount, a blank category) and the referee exited 1 each time. The skill file was written and the input files were not edited.

Then prove it: fresh sessions

Each run below is a brand-new session, recorded for real in Claude Code. It remembers nothing from the run before except the files saved in the folder, so the short prompt is the whole instruction.

2 · A fresh session, a new month

Before this run, copy the files from for-later/next-month in the ZIP into cli-practice: 2026-04.csv.

Quit the agent, start it again in cli-practice, and paste only this:

Run my monthly money check on the new month. Work only inside this practice folder. Do not use the network, install anything, read outside this folder, or edit any export. Do not write any file outside this folder, including temporary files in /tmp. Do not ask me to reply. Do not use em dashes or en dashes. If python3 is unavailable, report that the checks could not run and never claim they passed.
SAVED OUTPUT · money-report-2026-04.md
# Money report: 2026-04

Sources: 2026-01.csv (27 rows), 2026-02.csv (29 rows), 2026-03.csv (29 rows), 2026-04.csv (31 rows). 116 rows in total, all listed in categories.csv.
Amounts are quoted as they appear in the files: spending is negative, money in is positive.

## Referee

Command: `python3 money-referee.py categories.csv 2026-01.csv 2026-02.csv 2026-03.csv 2026-04.csv`

Real exit status: **0** (export rows: 116, categories.csv rows matched: 116; every export row appears exactly once with matching date, description and amount and a nonempty category; category totals sum to 13851.29, the same as the export files, to the cent).

## Totals by category per month

| Category | 2026-01 | 2026-02 | 2026-03 | 2026-04 | Four months |
|---|---:|---:|---:|---:|---:|
| Income | 5680.00 | 5680.00 | 5680.00 | 5680.00 | 22720.00 |
| Housing | -1450.00 | -1450.00 | -1450.00 | -1450.00 | -5800.00 |
| Utilities | -180.11 | -246.58 | -183.36 | -183.83 | -793.88 |
[trimmed]

Human check: Nothing was re-explained, so the saved skill carried the method. Check that the report is named for the new month, that a small charge new this month is flagged because of how it repeats, that the price that keeps rising is listed with all four amounts, that the streaming charge from March is shown repeating, and that the referee exit status in the report is 0 from a run you can repeat yourself on the four exports.

When we checked the recording: Fresh session with only the one sentence. It used the saved skill: appended 31 April rows to categories.csv without changing earlier lines, ran the referee over all four exports and reported exit 0, which I reproduced on a scratch copy (116 rows matched, totals 13851.29 to the cent). The new report is named money-report-2026-04.md. The weekly -1.99 Sparkline Games charge (2026-04-04, 04-11, 04-18, 04-25) is listed as recurring and as a new merchant, Pixelstream -15.99 is shown repeating on 2026-04-12, Hearth Internet is listed rising to 64.99 after 49.99, 54.99, 59.99, and the February duplicate is still flagged. No advice language and no inputs were edited.

Do it for real

Export one month of your own bank transactions as a CSV (on most bank sites it is a Download or Export button on the transactions page), delete any account numbers from the file before you start, and know that the file goes to the model provider when you use it. Run the same prompt on it, read every flag against your own statement, then run the skill once a month when the new export arrives.

Why an agent, not a chat window

The agent sorts every row into one category, totals the months, flags repeats, price changes and possible duplicates from the dates and amounts, and a separate script it writes proves the totals match the bank files to the cent. The method is saved as a skill, so next month a fresh session repeats it from one short sentence.