Getting it into your agent
It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.
git clone --depth 1 https://github.com/cynco-labs/ai-accounting-skillsnpx agentmods add skills/cynco-labs/ai-accounting-skills/extract-bank-statementWrote 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/skills/cynco-labs/ai-accounting-skills/extract-bank-statement)<a href="https://agentmods.dev/skills/cynco-labs/ai-accounting-skills/extract-bank-statement"><img src="https://agentmods.dev/badge/skills/cynco-labs/ai-accounting-skills/extract-bank-statement/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/cynco-labs/ai-accounting-skills/extract-bank-statement"><img src="https://agentmods.dev/badge/skills/cynco-labs/ai-accounting-skills/extract-bank-statement.svg" alt="Reviewed on agentmods" width="80" 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.00037 | $0.00576 |
| Opus 5 | $0.00018 | $0.00288 |
| Sonnet 5 | $0.00007 | $0.00115 |
| Haiku 4.5 | $0.00004 | $0.00058 |
Grade A, and why
extract-bank-statement 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 12d 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 — 81 lines — stays where its author put it; the contents beside it link to each section on GitHub.
/extract-bank-statement
Purpose
Bank lines → structured transactions with proof, not vibes.
pdfplumber / CSV → layout adapter → Decimal balance proof → Excel / JSON
Preconditions
- Read
shared/guardrails.mdandreferences/bank_statement_extraction.md. - Prefer CSV/Excel export from the bank portal when the user can provide it.
- Never invent lines. Fail loud on balance breaks.
Step 1 — Unified extract (required)
python3 scripts/extract_bank.py \
--input /path/to/statements \
--output ./outputs/bank.xlsx \
--also-json ./workpapers/transactions.json \
--client-slug <slug> \
--fail-on-error
# detect only
python3 scripts/extract_bank.py --input /path/to/statements --detect-only
# CLI
npx @cynco/accounting-skills extract ./statements --out ./bank.xlsx --json ./txns.json
| Adapter | Status |
|---|---|
maybank_islamic_pdf |
Production (pdfplumber + line proof) |
cimb_csv |
Production (debit/credit CSV + balance proof) |
generic_csv |
Production (flexible headers) |
| Other PDF brands | Ask CSV — do not freestyle 1000 lines in chat |
Maybank-only direct script (still valid):
python3 scripts/extract_maybank_islamic_pdf.py \
--input /path/to/statements \
--output ./bank.xlsx \
--also-json ./workpapers/transactions.json \
--fail-on-error
Step 2 — Verify
line_balance_ok/ open–close proof in extract meta- Spot-check first/last page against PDF
- Write source register entry
Decision table
| Input | Action |
|---|---|
| Maybank Islamic PDF | extract_bank / Maybank script |
| CIMB / generic CSV | extract_bank CSV adapters |
| Other bank digital PDF | Prefer CSV; else new adapter (copy Maybank pattern) |
| Scanned image PDF | Ask for CSV or OCR pipeline — not vision freestyle |
Completion
Done when: transactions.json (and optional xlsx) written, line/open–close balance proof passes (or must stop recorded), source register updated.
Gates
--fail-on-errormust be set for production extracts- Zero fabricated transactions
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.
- 12d ago First seen · 81 lines · 37 tokens per session scan A 96e1dad61dc3
extract-bank-statement is a skill published in the GitHub repository cynco-labs/ai-accounting-skills (3 stars, last pushed 2mo ago), licensed MIT. It adds 37 tokens to every session and 576 once invoked, about $0.0002 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 skills, from other repositories
jangbu-import
A data-import workflow for turning bank files, card records, spreadsheets, receipts, tax invoices, and statement PDFs into a standard set of 13 transaction fields. OCR, or optical character recognition, is used to read information from document images and PDFs.
countbean-accounting
Rules for writing correct double-entry Beancount transactions when managing a Countbean cloud book — account naming, how to balance postings, categorisation, and safe ingestion. Use whenever recording, importing, or correcting financial data in a Countbean book.
process-my-statements
Process a batch of PDF or CSV bank and credit-card statements end to end: extract every transaction (parallel Haiku subagents), canonicalize the party names, categorize against your locked chart of accounts (parallel Sonnet subagents), detect inter-account transfers, and assemble a reviewed Google Sheets workbook with…
expense
Dodaje fakturę zakupu (koszt) do rejestru SQLite — zapisuje sprzedawcę, NIP, kwoty, kategorię, datę wpływu. Obsługuje wprowadzanie ręczne ORAZ OCR z pliku (PDF/JPG/PNG) przez lokalny Pixtral 12B z fallbackiem na Claude Haiku 4.5. Na ryczałcie koszty NIE pomniejszają podatku, ale VAT naliczony idzie do JPKV7M jako…
invoice-send
Konwertuje wygenerowaną fakturę DOCX na PDF (LibreOffice headless) i wysyła mailem do kontrahenta z treścią po polsku. Używa SMTP skonfigurowanego w .env. Użyj gdy user mówi "wyślij fakturę mailem", "wyślij PDF fakturę do X", "roześlij fakturę A1/04/2026", "wyślij ostatnią fakturę", "mail do klienta z fakturą".
invoice
Wystawia fakturę VAT dla JDG — generuje DOCX (do wysyłki/druku) i XML FA(3) (do KSeF), zapisuje do rejestru SQLite i zwraca numer faktury + ścieżki plików. Użyj gdy user prosi o "wystaw fakturę", "wygeneruj fakturę", "fakturę dla...", "faktura za usługę/konsultację/miesiąc".