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.
npx agentmods add commands/peerjakobsen/smartspender/receipt-emailgit clone --depth 1 https://github.com/peerjakobsen/smartspenderWrote 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.
[](https://agentmods.dev/commands/peerjakobsen/smartspender/receipt-email)<a href="https://agentmods.dev/commands/peerjakobsen/smartspender/receipt-email"><img src="https://agentmods.dev/badge/commands/peerjakobsen/smartspender/receipt-email.svg" alt="Measured on agentmods" height="20"></a>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.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00019 | $0.01750 |
| Opus 5 | $0.00010 | $0.00875 |
| Sonnet 5 | $0.00004 | $0.00350 |
| Haiku 4.5 | $0.00002 | $0.00175 |
Grade A, and why
receipt-email 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 6d ago.
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.
How it starts
The opening of the file, as written. The whole thing — 131 lines — stays where its author put it; the contents beside it link to each section on GitHub.
/smartspender:receipt email
Trigger
/smartspender:receipt email/smartspender:receipt email 30(scan last 30 days)- "Scan mine emails for kvitteringer"
- "Hent fakturaer fra email"
Arguments
| Argument | Required | Values | Default |
|---|---|---|---|
| action | yes | - | |
| days | no | positive integer | last_email_scan or 90 |
Prerequisites
- Gmail MCP server configured and accessible
- At least one bank sync completed (transactions.csv exists) for matching to work
Workflow
- Check Gmail MCP availability. If not available, respond: "Gmail MCP er ikke konfigureret. Tilfoej Gmail MCP-serveren til dit Cowork-miljoe for at kunne scanne emails."
- Determine scan date range:
- If
daysargument provided: scan from (today - days) to today - If
last_email_scanexists in settings.csv: scan from that timestamp to today - Otherwise: scan last 90 days
- If
- Load email scanning rules:
skills/email-receipt-scanning/SKILL.md - Search Gmail using the primary search query with the calculated date range
- If primary query returns fewer than 3 results, also run supplementary queries
- Filter results using the include/exclude heuristics from email-receipt-scanning skill
- If no emails found, respond: "Ingen kvitterings- eller fakturaemails fundet i den valgte periode."
- Present found emails to user:
Jeg fandt {n} emails med kvitteringer eller fakturaer: 1. {date} — {sender} — "{subject}" {attachment_info} 2. {date} — {sender} — "{subject}" {attachment_info} 3. {date} — {sender} — "{subject}" {attachment_info} ... Vil du importere alle, vaelge enkelte, eller annullere? (alle/vaelg/annuller) - [USER ACTION]: User chooses "alle", "vaelg" (then picks numbers), or "annuller"
- If user cancels, respond: "Email-scanning annulleret." and stop.
- Load document-parsing skill:
skills/document-parsing/SKILL.md - Load extraction and vendor detection rules from
skills/document-parsing/SKILL.md - Load schema:
skills/data-schemas/SKILL.md - Load matching rules:
skills/transaction-matching/SKILL.md - For each selected email, process in sequence:
a. Detect content type (PDF attachment, inline HTML, or both — prefer PDF)
b. If PDF: download attachment
c. Detect vendor from email sender domain (per email-receipt-scanning skill sender mapping) or fall through to invoice-parsing skill vendor detection
d. Check for vendor-specific parser:
invoice-knowledge/{vendor-id}/PARSER.mde. Extract receipt metadata and line items using vendor parser or general rules f. Search transactions.csv for matching transactions (amount +-1%, date +-1 day) g. Score candidates per transaction-matching confidence rules h. If exactly 1 match with confidence >= 0.8: auto-link i. If ambiguous: mark asambiguous(batch mode — don't interrupt for each email) j. Check for duplicate in receipts.csv (date + merchant + total_amount) k. If duplicate: skip this email and note as "allerede registreret" l. Generate receipt_id and item_ids m. If PDF: save toreceipts/{receipt_id}.pdf, setfile_referenceto this path n. If inline HTML only: setfile_referencetoemail:{message_id}o. Setsource: emailon the receipt row p. Append receipt row to receipts.csv q. Determine the monthly file from the receipt date:receipt-items-{YYYY-MM}.csvr. If the monthly file does not exist, create it with the header row s. Append item rows toreceipt-items-{YYYY-MM}.csvt. Log to action-log.csv - Update
last_email_scanin settings.csv to current datetime. If settings.csv does not exist, create it withkey,valueheader and thelast_email_scanrow. - Output batch summary
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.
- 6d ago First seen · 131 lines · 19 tokens per session scan A 85a092ca97d2
receipt-email is a command published in the GitHub repository peerjakobsen/smartspender (5 stars, last pushed 7mo ago), licensed MIT. It adds 19 tokens to every session and 1,750 once invoked, about $0.0001 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-08-31.
Other commands, from other repositories
research
Professional equity research analysis with institutional-grade formatting.
better-auth:add-plugin
Add a better-auth plugin to an existing project. Configures server and client plugins with proper imports.
cloudflare-r2:presigned-url
Generate presigned URLs for secure client-side uploads or downloads.
bun:migrate
Migrate existing Node.js/npm projects to Bun.
tax-review
Tax-filing compliance check — invokes tax-reviewer to produce TM-tax-{slug}.md with MeF e-file schema, Form 8879, PTIN/Circular 230, and IRC §7216 consent gaps.
add
Add a second payment provider alongside an existing integration, without touching the one already running.