Finance · AP Automation · Process Invoices Skill
What the skill does every day, where it stops and asks a human, how to run it end to end yourself, and the open calls for V3.
TL;DR
It checks invoice email and the Invoices Due sheet for you every morning, and keeps one Basecamp board current so no invoice slips past its due date. By the time you sit down, the cards are already created, moved, and flagged.
It pulls from two sources so nothing falls through:
accounting@iheartraves.com and accounting@intotheam.com. It reads them, parses the PDF, and creates a card.Not in scope: influencer and creator payments. Those stay a separate manual process.
The skill is four small Python scripts plus a thin Claude layer that ties them together. Each script does one job and writes its result to a handoff file, so the run is the same every time and easy to check. They run in this order, and the order matters:
@reply comment on a card into a Gmail draft. Draft only, you click Send. (This one also runs by itself every hour so vendor replies stay current between full runs.)needs-review.json for a human.paid comment.$TBD, it opens the invoice PDF and fills the amount, invoice number, due date, and bank last-4 when it can read them cleanly. You approve before it commits, then the cap and bank checks re-run on the real numbers.The clearest way to understand the skill is to see exactly where it acts on its own and where it stops and asks you.
needs-review.json: a new vendor, an ambiguous sheet match, or something that might not be an invoice.Nine controls run on every email before any card is created. They are real code, not guidelines. A 10-test red-team suite has to pass 10 out of 10 before the skill does anything money-adjacent, and it currently passes all ten.
| Control | What it stops |
|---|---|
| Lookalike domain | A sender pretending to be a known vendor with a typo, a fake suffix, or a swapped-character (homograph) domain. |
| Hidden text & injection | Invisible text and white-on-white tricks, plus prompt-injection attempts, stripped before anything is parsed. |
| Bank-change kill-switch | Any email saying "new bank account," "updated wire details," and the like. The classic invoice-fraud move. |
| Authorized reply | Only you and Will can trigger a vendor reply draft. Anyone else's @reply comment is ignored. |
| Submitter is not approver | The same person cannot both forward an invoice and approve it. |
| New vendor & amount cap | A first-time vendor always goes to Manual Review no matter how small. Over-cap amounts get flagged ($25K default). |
| Bank last-4 mismatch | The bank last-4 read from the invoice PDF is checked against what is on file. A mismatch is a fraud hold. |
| Tamper-evident log | Every decision is written to a hash-chained log. If a line is ever edited, the chain breaks and the skill stops. |
| Phishing quarantine | Senders whose signature or links do not match their own domain (the kind that slip past SPF/DKIM), plus emails fishing for A/P aging, vendor lists, or bank and routing numbers. These go to a Quarantine column with links de-fanged and no payable card. |
Two backstops sit under all of it: the manual payment rail (a human runs every payment in Chase, the skill has no bank access and cannot move money) and the tamper-evident audit log (a broken chain is a P0 stop, so the record cannot be quietly altered).
This is the path to understand it hands-on. Everything below is safe: the risky stages run in dry-run and stop for your approval, and the skill cannot pay or send on its own.
Open the Finance board in Basecamp so you can watch cards move in real time as the run goes.
Tell Claude "process invoices." Claude runs the scripts in order and walks the judgment calls with you. To see each stage on its own, run them in this order and stop to read the output at each one:
Reports save to ~/Documents/Claude/output/process-invoices/ as markdown + CSV.
$TBD — it cannot move to Paid until a human clears it.These are the open calls to make after you have run it yourself. My detailed recommendations are in chat; this is the short list.
| Decision | The short version |
|---|---|
| Where it lives | Keep Basecamp as the operational queue; surface the scoreboard (on-time rate, security, audit health) in the Finance Command Center as the AP Scorecard tab, fed by history.py. Two layers, each doing what it is good at. |
| Off the laptop (keystone) | Move the engine off Camille's personal laptop to a controlled, scheduled host with rotated secrets, a durable audit log, and shared output. This one move fixes the biggest security gap and unlocks the scoreboard pipe at the same time. |
| Define the target | Set the SLA and the "80%" definition so the on-time rate has a bar to clear. Measurement exists now; the target does not. |
| Finish Phase 2 | Salesforce 3-way match: reconcile PO + goods received + invoice, with freight and duty as their own line, not folded into one band. |
| Buying-team rollout | Present the flow to the buying team (Maryanne, Alex) and fold their feedback in. |