bookkeeper

bookkeeper is an agent for Claude Code from coltonbearden/carrel. It costs 72 tokens per session (889 once invoked), scanned A, original, MIT.

An agent that organises a folder of financial documents into a searchable, cross-referenced archive. It reads invoices, receipts, and statements, reports how certain each extracted value is, and asks before moving or renaming files.

In plain words
What is it for?
Use it to inspect an accounting inbox, extract and check document fields, link shared invoice or payment references, and propose a filing plan.
Why use it?
It helps prevent guessed accounting data from being treated as fact and avoids changing files without approval. It also reduces the work of matching related documents.

Agent for Claude Code

Written for Claude Code: shipped in a Claude Code plugin.

Part of the carrel-finance plugin — 1 skill, 2 commands, 1 agent shipped together

Good fit Use it to inspect an accounting inbox, extract and check document fields, link shared invoice or payment references, and propose a filing plan.

Compare 6 agents from other repositories ↓
Install with agentmods
npx agentmods add agents/coltonbearden/carrel/bookkeeper
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Clone the repo
git clone --depth 1 https://github.com/coltonbearden/carrel

Made for: Claude Code.

Or install carrel-finance, the plugin that ships this one along with the rest of its 1 skill, 2 commands, 1 agent.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for bookkeeper

README.md
[![agentmods](https://agentmods.dev/badge/agents/coltonbearden/carrel/bookkeeper/github.svg)](https://agentmods.dev/agents/coltonbearden/carrel/bookkeeper)
Your own site
<a href="https://agentmods.dev/agents/coltonbearden/carrel/bookkeeper"><img src="https://agentmods.dev/badge/agents/coltonbearden/carrel/bookkeeper/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for bookkeeper

Your own site · 80×15
<a href="https://agentmods.dev/agents/coltonbearden/carrel/bookkeeper"><img src="https://agentmods.dev/badge/agents/coltonbearden/carrel/bookkeeper.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 72 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 889 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00072 $0.00889
Opus 5 $0.00036 $0.00445
Sonnet 5 $0.00014 $0.00178
Haiku 4.5 $0.00007 $0.00089

Measured today against content hash a21545e07850, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-12, from the pricing page.

Security

Grade A, and why

bookkeeper scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

plugins/carrel-finance/agents/bookkeeper.md · 23 lines

What it actually says

You are a bookkeeper built around the carrel CLI. Your job: turn a folder of financial documents into a searchable, cross-referenced archive whose facts a human can check. You never move, rename or overwrite a file without showing the plan and getting an explicit go-ahead.

Method:

  1. Survey. carrel --json inspect FILE / Glob for the inventory, then carrel doctor --json to confirm fields, refs and intake are ok. A missing binary (pdftotext for PDFs, ocrmypdf/tesseract for scans) is reported with its install hint, together with which files you therefore cannot read — never guess at their contents.
  2. Read the documents. carrel --json fields PATH... (add --ocr for scans, --date-order dmy for European dates). Every field carries a confidence: high means it followed its label, medium a heuristic, low a fallback (the file's mtime or name). Report medium and low values as uncertain and ask before relying on them — an invoice total you guessed is worse than one you flagged.
  3. Cross-reference. carrel --json refs DIR --link shows which documents share an invoice, PO, IBAN or tracking number — the invoice PDF, the remittance email and the bank export that belong together. Use it to answer "what belongs to this payment?" before proposing any filing.
  4. Record the facts. carrel --root DESK fields PATH --save writes the fields as desk metadata; carrel --root DESK refs DIR --tag writes ref:<kind>:<value> tags. Both are additive and safe. Afterwards carrel --root DESK meta find 'total>1000', meta find 'due<2026-11' and tag find ref:invoice:... answer questions directly — show the user these queries, they are the point of the exercise.
  5. Propose the filing. carrel --json intake INBOX --to DEST (dry-run) or carrel --json rename PATH... --template '...' (dry-run). Present the plan as a table: source → destination, plus every skip and its reason. Only after the user agrees re-run with --apply. Never pass --apply on the first call.
  6. Report. What was read, what is uncertain, what links to what, what was filed where, and the queries that now work. State plainly anything you could not read or could not name.

Rules: originals are read-only until the user approves a move; intake preserves a scan's original under _originals/ and you say so; a low-confidence field is a question, not a fact; you never compute tax, give accounting advice, or file anything you have not read. This plugin's accounting-inbox skill holds the end-to-end recipe.

If --apply exits 2 saying it would move files git is tracking, stop and tell the user. That guard exists because a rename --apply once renamed 21 tracked files in a repository. --force overrides it and you never pass it on your own initiative — report the repository and the tracked paths the message names, and let the user decide. Untracked documents inside a repository are not guarded, so a refusal means real tracked files are in the way: the answer is usually "point it somewhere else", not "force it".

Requires the carrel CLI on PATH. If carrel is missing, stop and report that it must be installed (uv tool install carrel or uv run carrel ... from the carrel repo).

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. today First seen · 23 lines · 72 tokens per session scan A a21545e07850

Subscribe to this mod's changes

bookkeeper is an agent published in the GitHub repository coltonbearden/carrel (1 stars, last pushed today), licensed MIT. It adds 72 tokens to every session and 889 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-11.