Receipt Compiler
SkillDocs & knowledgeLets your agent turn phone photos of receipts into a tidy A4 PDF expense pack with straightened, scan-style pages.
Available today. Use it from your connected AI after setup.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the Receipt Compiler skill
About this skill
Use when compiling phone-camera photos of receipts into an A4 PDF expense-claim pack, straighten, B&W scan look, optional cover/numbering/captions.
What this skill tells your AI
The instructions your AI receives, as published by moonlight-lupin/agent-skills in productivity/receipt-compiler/SKILL.md and read by ahel’s review.
Overview
Receipt Compiler turns a folder of phone-camera receipt photos into one A4 PDF that looks like a photocopied expense-claim pack: each receipt is straightened (perspective warp, deskew), converted to a B&W "scanned" look, tiled on A4 with uniform visual scale, numbered, and summarised on an optional cover page.
Four subcommands with an enforced confirmation gate:
scan— straighten + scanify + OCR each photo →manifest.jsonreview— print the extracted expense tableconfirm— stamp user approval + bind the reviewed data (digest)pack— build the A4 PDF (refuses to run untilconfirmhas run)
When to Use
- "Compile my receipts into a PDF for expense claim"
- "Make a claim pack from these receipt photos"
- "Straighten and B&W these receipts and line them up on A4"
- Not for: scanning via flatbed scanner, or PDFs of invoices (use
pdfskill).
Prerequisites
pip install opencv-python-headless pillow pillow-heif pytesseract reportlab numpy
# PyMuPDF is needed only to run the self-test (tests/), not the script itself
Plus system tesseract-ocr on PATH. Check with tesseract --version.
Workflow (agent must follow the gate)
Step 1 — scan
python3 ~/.hermes/skills/productivity/receipt-compiler/scripts/receipt_compiler.py \
scan <photos_dir> -o <workdir> [--mode bw|photo]
Default --mode bw gives the photocopy look the user asked for. Use --mode photo
for grayscale. Completion criterion: manifest exists with one entry per photo;
ocr_confidence and needs_review flags set.
Step 2 — review + confirm (MANDATORY, user in the loop)
python3 .../receipt_compiler.py review <workdir>
# ... apply any corrections to manifest.json, THEN re-run review so the user
# ... sees the corrected table ...
python3 .../receipt_compiler.py review <workdir>
# ... after the user approves the corrected table ...
python3 .../receipt_compiler.py confirm <workdir>
Present the printed table to the user in chat. Ask:
- Are the extracted dates/merchants/amounts right? Fix
manifest.jsonfields. - Optional requirements — ask every time, do not assume:
- cover page (with claimant/period/notes)
- per-receipt numbering badges
- per-receipt captions (date · merchant · amount)
- currency symbol on totals
- Exclusions — any receipt to drop (
"include": false)? - Purpose/notes text for the cover.
Only after the user approves: run confirm <workdir>. This sets
confirmed: true AND binds a review_digest of the exact reviewed fields at
approval time. Any edit after confirm (dates, amounts, currency, inclusion)
makes pack refuse until you re-run confirm — which means showing the user
the changed table again. There is no bypass flag. Apply user corrections to
manifest.json BEFORE running confirm.
Step 3 — pack
python3 .../receipt_compiler.py pack <workdir> -o claim.pdf \
[--cover --number --captions] \
--title "Expense Claim — <purpose>" --claimant "MH" --period "..." --notes "..."
Completion criterion: PDF exists, page count reported in JSON output. Then send the PDF to the user as a document/file on the active channel.
Layout rules (how receipts line up)
- A4 portrait, 15 mm margins, 5 mm gaps.
- Very tall receipts (aspect ≥ 2.2) are packed 3-per-row full-height; normal receipts 2-per-row, capped at 52% of content height (≈47% of the page). Scale is per-cell (each receipt fills its cell); rows with fewer receipts get wider cells.
- Every image is scaled to preserve aspect ratio — no distortion, no cropping.
- Receipts flow across pages; 30+ receipts pack fine.
- Tall receipts print before normal ones; re-order via the manifest if needed.
Common Pitfalls
- Skipping the confirmation gate —
packhard-fails onconfirmed: false, non-boolean confirmation values, and post-confirmation edits (digest check). There is no bypass flag; the user must see the table first. - Dark/shadowed photos — the 2/98 percentile stretch handles most; if OCR
confidence is < 55, or no amount was extracted, the entry is flagged
needs_review; surface these to the user. - Perspective warp failure — glossy/wrinkled receipts may not produce a clean
quad; the script falls back to small-angle deskew of the full frame. Check
methodin the manifest; ifdeskewon a receipt that clearly needs cropping, fix the crop manually with PIL or accept the framing. - HEIC photos — iPhone photos arrive as .heic;
pillow-heifhandles them if installed. If missing, ask the user for JPGs or installpillow-heif. - Multiple currencies — totals are grouped per currency (review output and cover page print one line per currency, no combined total). For a cleaner claim, keep one currency per pack; never zero or edit valid amounts to force a combined total.
- Long descriptions in cover table — descriptions truncate at 70 chars; keep
cover notes short or put detail in
notes.
Verification Checklist
-
scanproduced manifest.json with an entry per photo -
reviewtable shown to user; corrections applied to manifest - Optional requirements asked each time (cover/numbering/captions)
-
confirmrun only after user approval (never hand-editconfirmed) -
packoutput PDF exists, page count matches expectation - PDF sent to the user with the correct output path
Signals
- GitHub stars
- 80
- Forks
- 12
- Last commit
- Sep 2026
ahel review
K1binfo
installs-packagesK1binfo
installs-packages (in scripts/receipt_compiler.py)
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Item type
- skill
- Key
receipt-compiler- Source
- github.com/moonlight-lupin/agent-skills