Expense Filer Skill
Nobody's judgment is improved by hand-typing receipts. This skill does the clerk work — extraction, categorization, policy screening, currency normalization — and stops at the line that matters: submission happens only after a human reads the report. Numbers must reconcile; anything ambiguous is flagged, never guessed.
What This Skill Produces
- The itemized report — merchant, date, amount, currency, category, project/cost-center, per receipt
- Policy flags — over-limit items, missing-itemization risks, personal-expense suspicion, duplicates, each with the fix
- The reconciliation line — receipts total vs report total, to the cent
- The filing plan — what gets submitted where, gated on approval
Required Inputs
Ask for these if not provided:
- The receipts — images, PDFs, forwarded emails, or a folder the agent can read
- The policy — per-diem limits, category caps, itemization rules (or "use conservative defaults and flag everything near an edge")
- Context — trip/project the expenses attach to, cost center, currency of the report
- The expense system — Concur/Expensify/Ramp/a spreadsheet — and whether draft-only or submit is desired
Framework
- Extract with provenance — every line links to its source receipt; a number without a receipt is a flag, not a line.
- Categorize by the policy's taxonomy, not intuition; unknown category → flag with a best-guess clearly marked.
- Screen before math: duplicates (same merchant+amount±1 day), split-transaction patterns, weekend/personal-suspect items, alcohol-on-meal-receipt rules — flag, never silently drop or include.
- Normalize currency at the receipt-date rate, shown per line.
- Reconcile or refuse: if extracted totals and report totals disagree, the report doesn't ship.
Output Format
Expense Report: [trip/project] — [period]
| # |
Date |
Merchant |
Amount |
Curr |
→ [report curr] |
Category |
Receipt |
Flags |
| Total: [n] items · [amount] · reconciles ✓ |
|
|
|
|
|
|
|
|
| Flags needing you: [each with the question to answer] |
|
|
|
|
|
|
|
|
Quality Checks
Anti-Patterns
Execution
For agents with file/OCR access and expense-system access (API or UI). Without tools, the report itself is the deliverable. Rules per SKILLSPEC.md §5.
Preconditions
- The report above produced, flags resolved by the user, and the final version explicitly approved by a human.
- Expense-system access authenticated; the target report/trip container named.
- The filing plan (create entries, attach receipts, save as draft vs submit) displayed and confirmed — submit requires its own explicit yes.
Allowed actions
- Create the expense entries exactly as in the approved report; attach the corresponding receipt files.
- Save the report as a draft in the system.
- Submit only if the user's approval explicitly included the word-level go for submission.
- Nothing else: no editing existing reports, no touching payment methods, no approving on behalf of anyone.
Verification
- Re-read the created report from the system: line count, per-line amounts, and total match the approved version; every entry shows its attachment.
- Report the system's own total back next to the approved total.
Rollback
- Draft reports: delete the draft. Submitted reports: recall/withdraw if the system allows; otherwise notify the user immediately with the exact state.
- Stop and ask a human if: the system rejects an entry, an attachment fails, or any created total drifts from the approved one.
1---2name: expense-filer3description: Turn a pile of receipts into a filed expense report through a tool-using agent — extraction, policy checks, and categorization done for you; submission gated on your approval. Use when asked to file my expenses, process these receipts, build my expense report, or expense this trip. Produces the itemized report with policy flags and an approval-gated filing plan.4---5
6# Expense Filer Skill
7
8Nobody's judgment is improved by hand-typing receipts. This skill does the clerk work — extraction, categorization, policy screening, currency normalization — and stops at the line that matters: *submission happens only after a human reads the report.* Numbers must reconcile; anything ambiguous is flagged, never guessed.
9
10## What This Skill Produces
11
12- **The itemized report** — merchant, date, amount, currency, category, project/cost-center, per receipt
13- **Policy flags** — over-limit items, missing-itemization risks, personal-expense suspicion, duplicates, each with the fix
14- **The reconciliation line** — receipts total vs report total, to the cent
15- **The filing plan** — what gets submitted where, gated on approval
16
17## Required Inputs
18
19Ask for these if not provided:
20- **The receipts** — images, PDFs, forwarded emails, or a folder the agent can read
21- **The policy** — per-diem limits, category caps, itemization rules (or "use conservative defaults and flag everything near an edge")
22- **Context** — trip/project the expenses attach to, cost center, currency of the report
23- **The expense system** — Concur/Expensify/Ramp/a spreadsheet — and whether draft-only or submit is desired
24
25## Framework
26
271. **Extract with provenance** — every line links to its source receipt; a number without a receipt is a flag, not a line.
282. **Categorize by the policy's taxonomy**, not intuition; unknown category → flag with a best-guess clearly marked.
293. **Screen before math:** duplicates (same merchant+amount±1 day), split-transaction patterns, weekend/personal-suspect items, alcohol-on-meal-receipt rules — flag, never silently drop or include.
304. **Normalize currency** at the receipt-date rate, shown per line.
315. **Reconcile or refuse:** if extracted totals and report totals disagree, the report doesn't ship.
32
33## Output Format
34
35# Expense Report: [trip/project] — [period]
36| # | Date | Merchant | Amount | Curr | → [report curr] | Category | Receipt | Flags |
37|---|---|---|---|---|---|---|---|---|
38**Total:** [n] items · [amount] · reconciles ✓
39**Flags needing you:** [each with the question to answer]
40
41## Quality Checks
42- [ ] Every line traces to a receipt; every receipt appears exactly once
43- [ ] Totals reconcile to the cent, conversion shown per line
44- [ ] Every policy edge is flagged with the specific rule it grazes
45- [ ] Nothing ambiguous was guessed — flags ask, lines assert
46
47## Anti-Patterns
48- [ ] Do not round away discrepancies — a report that's $3 off is wrong, not close
49- [ ] Do not categorize creatively to fit under caps — flag the overage; gaming policy is the user's career, not your cleverness
50- [ ] Do not drop suspect items silently — surfacing them is the service
51- [ ] Do not submit anything — filing is gated below, always
52
53## Execution
54
55For agents with file/OCR access and expense-system access (API or UI). Without tools, the report itself is the deliverable. Rules per [SKILLSPEC.md §5](../../SKILLSPEC.md).
56
57### Preconditions
58- The report above produced, flags resolved by the user, and the final version **explicitly approved by a human**.
59- Expense-system access authenticated; the target report/trip container named.
60- The filing plan (create entries, attach receipts, save as draft vs submit) displayed and confirmed — **submit requires its own explicit yes.**
61
62### Allowed actions
63- Create the expense entries exactly as in the approved report; attach the corresponding receipt files.
64- Save the report as a draft in the system.
65- Submit only if the user's approval explicitly included the word-level go for submission.
66- Nothing else: no editing existing reports, no touching payment methods, no approving on behalf of anyone.
67
68### Verification
69- Re-read the created report from the system: line count, per-line amounts, and total match the approved version; every entry shows its attachment.
70- Report the system's own total back next to the approved total.
71
72### Rollback
73- Draft reports: delete the draft. Submitted reports: recall/withdraw if the system allows; otherwise notify the user immediately with the exact state.
74- Stop and ask a human if: the system rejects an entry, an attachment fails, or any created total drifts from the approved one.