TL;DR
A functional invoicing agent is not "GPT writes a number". It is a tool-calling Claude that owns a state machine — draft, sent, viewed, proof uploaded, paid — with hard guardrails on every transition.
The architecture
Claude orchestrates. The platform owns truth. EFT is the default rail; PayPal is the international fallback. No Stripe — South African banking does not need it for this lane.
The hard parts
Idempotency on agent retries. Webhooks from Resend. Proof-of-payment uploads from WhatsApp. Audit trails that make sense to humans and machines.
The result
A client sends one message. The system invoices, follows up, and reconciles — and a human reviews exceptions, not the happy path.
