skill
moneyproof
Claude Code skill for writing and reviewing backend code that moves money: ledgers, idempotency, webhooks, state machines, payouts.
Set up
Skills are installed by placing their folder where your agent loads skills.
The download comes from github.com/theigwe/moneyproof itself, not from our server, so what you get is exactly what its author published.
Install instructions come from the README
README
synced Oct 26, 2026moneyproof
A Claude Code skill that makes Claude write and review backend code that moves money the way a payments engineer would.
Money bugs don't crash. They silently double-charge a customer, pay a merchant twice, or create money out of nothing. This skill gives Claude a set of non-negotiable rules, a default architecture, and focused reference guides so those outcomes are impossible by construction or detectable within minutes.
What it covers
| Area | Reference |
|---|---|
| Payment, refund and payout statuses, transitions, lifecycle design | lifecycle-and-state-machines.md |
| Minor units, decimals, rounding, allocation, double-entry ledger, audit trail | ledger-and-financial-correctness.md |
| DB transactions, locking, races, idempotency keys, transactional outbox | transactions-concurrency-idempotency.md |
| Webhook endpoints, duplicate, late and out-of-order events, reconciliation | webhooks-and-event-ordering.md |
| Auth, capture, void, 3DS, decline codes, card-testing defence | card-authorisation-and-declines.md |
| Settlement, merchant payouts, refunds, chargebacks, negative balances | settlement-payouts-refunds.md |
| KYC/AML, limits, risk rules, PCI scope, retention | compliance-risk-limits.md |
It also ships a starter PostgreSQL schema, assets/ledger_schema.sql:
an append-only double-entry ledger with triggers enforcing balanced transactions,
currency matching, no updates or deletes, and a drift view that compares cached balances
to ledger-derived ones.
The ten non-negotiables
- Never use floats for money.
- Amount and currency travel together.
- Balances are derived from an append-only double-entry ledger.
- Never update or delete financial history.
- Every state change goes through an explicit, database-guarded state machine.
- Every externally triggered mutation is idempotent.
- The PSP is the source of truth for what happened; the ledger is the source of truth for what we owe. Reconcile daily.
- Unknown is a real state. A timeout is not a failure.
- No external calls inside lock-holding DB transactions.
- Everything is auditable, with correlation IDs end to end.
The skill ends with a review checklist Claude runs against the code it wrote or reviewed, and it states any item it deliberately did not meet.
Install
Skills live in a skills directory. For all your projects:
git clone https://github.com/theigwe/moneyproof.git ~/.claude/skills/moneyproof
Or for a single project, clone into <project>/.claude/skills/moneyproof.
The folder name should match the name in SKILL.md. Start a new Claude Code
session and the skill is picked up automatically.
Usage
Claude loads the skill on its own when a task touches payments, wallets, balances, refunds, payouts, ledgers, PSP integrations (Stripe, Paystack, Flutterwave, Adyen and similar), webhook handlers, or any code that stores or computes money. You don't need to mention it. Examples:
- "Add a refund endpoint to our payments service."
- "Review this Paystack webhook handler for bugs."
- "Design the schema for merchant wallets and payouts."
- "Why can two concurrent refunds exceed the captured amount?"
Claude reads only the reference files the task needs, so context stays small.
Layout
SKILL.md entry point: non-negotiables, architecture, review checklist
references/ one focused guide per topic
assets/ledger_schema.sql starter PostgreSQL ledger
Scope and disclaimer
This is engineering guidance, not legal or compliance advice. KYC tiers, reporting duties, limits and retention periods depend on jurisdiction and licence. Keep them in configuration and confirm with your compliance team. The SQL is a starting point to adapt and test under your own load, not a drop-in production ledger.
Contributing
Issues and pull requests are welcome, especially for new PSP-specific pitfalls, additional failure modes, and corrections. Please keep guidance concrete and testable, and avoid em dashes.
License
MIT, see LICENSE.