heath-ledger

AI bookkeeping agent for Mercury bank accounts. Pulls transactions, categorizes them (rule-based + AI), and generates Excel workbooks with P&L, Balance Sheet, Cash Flow, and transaction detail. Use when the user wants to do bookkeeping, generate financial statements, categorize bank transactions, connect Mercury, or produce monthly/quarterly/annual books. Triggers on: bookkeeping, P&L, profit and loss, balance sheet, cash flow, financial statements, Mercury bank, categorize transactions, generate books, monthly close.

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "heath-ledger" with this command: npx skills add wrannaman/heath-ledger

Heath Ledger

AI bookkeeping skill for Mercury bank accounts.

Quick Start

  1. scripts/init_db.mjs — creates DB + seeds ~90 universal vendor→category rules
  2. scripts/connect_mercury.sh <MERCURY_API_TOKEN> [entity_name] — discovers accounts
  3. (Optional) scripts/connect_stripe.sh <entity_id> <stripe_api_key> — connect Stripe for exact revenue + fees
  4. (If Stripe connected) scripts/pull_stripe_revenue.sh <entity_id> <start_date> <end_date> — pull monthly revenue data
  5. scripts/pull_transactions.sh <entity_id> <start_date> <end_date>
  6. scripts/categorize.sh <entity_id> — rule-based first, AI for unknowns
  7. Review ambiguous items, correct with scripts/set_category.sh
  8. scripts/generate_books.sh <entity_id> <start_date> <end_date> [output_path]

Setup Flow

Mercury API Key (Required)

Get from Mercury Dashboard → Settings → API Tokens. The token gives read-only access to transactions.

Stripe API Key (Optional but Recommended)

Without Stripe API: Mercury shows net Stripe deposits (revenue minus fees). The system estimates gross revenue using a configurable fee rate (default 2.3% + $0.30).

With Stripe API: You get exact gross revenue, exact fees, and proper refund tracking. Always prefer this when available.

To connect: scripts/connect_stripe.sh <entity_id> <stripe_api_key> Then pull data: scripts/pull_stripe_revenue.sh <entity_id> <start_date> <end_date>

The P&L generator automatically uses Stripe data when available, falling back to Mercury estimates otherwise.

Entity Settings

Configure per-entity via the entity_settings table:

SettingDefaultDescription
accounting_basisaccrualaccrual or cash — cash basis uses posted dates only
month_offset1Fiscal year month offset (1 = calendar year)
stripe_fee_rate0.023Stripe percentage fee for gross-up calculation
stripe_fee_fixed0.30Stripe fixed fee per transaction
amortization_monthlynullMonthly amortization amount for acquired assets

Workflow

  1. Connect Mercuryscripts/connect_mercury.sh <token> [name] discovers accounts, creates entity
  2. Pull transactionsscripts/pull_transactions.sh <entity_id> <start_date> <end_date>
  3. Categorizescripts/categorize.sh <entity_id> [max_transactions] — rule-based first, then AI for unknowns
  4. Review ambiguous — Script outputs low-confidence items. Ask user, then update with scripts/set_category.sh <transaction_id> <category> [subcategory]
  5. Generate booksscripts/generate_books.sh <entity_id> <start_date> <end_date> [output_path]

Scripts Reference

All scripts are in scripts/. Run with bash or node. Database is SQLite at data/heath.db.

ScriptPurpose
init_db.mjsCreate/migrate SQLite database + seed rules
connect_mercury.shConnect Mercury API, discover accounts
pull_transactions.shPull transactions for date range
categorize.shCategorize transactions (rules + AI)
set_category.shManually set category for a transaction
add_rule.shAdd/update a categorization rule
generate_books.shGenerate Excel workbook
list_entities.shList all entities
connect_stripe.shConnect Stripe API to an entity
pull_stripe_revenue.shPull Stripe balance transactions by month
status.shShow entity status (accounts, tx counts)

Chart of Accounts

See references/chart-of-accounts.md for the full chart with P&L sections and cash flow classifications.

Learning & Compounding System

Heath Ledger gets smarter over time through a layered rule system:

Rule Hierarchy

  1. Entity-specific rules (highest priority) — per-company overrides
  2. Global rules (entity_id = NULL) — apply to all entities
  3. Seed rules — universal vendor mappings shipped with the skill
  4. AI categorization — used when no rule matches

How Learning Works

  • Every manual correction creates or updates a categorization rule
  • Rules track usage_count — heavily-used rules are more reliable
  • source field tracks provenance: seed, ai, human, manual
  • Human-confirmed rules get confidence: 0.95-1.0
  • AI-generated rules start at 0.85 and can be promoted
  • Entity-specific rules can be promoted to global when they prove universal

The Compounding Effect

After categorizing ~5,000 transactions across 2 entities, the system now auto-categorizes ~95% of transactions without AI. Each new entity benefits from all previous learnings.

Known Limitations

Stripe Net vs Gross (Without Stripe API)

Mercury deposits from Stripe are net amounts (revenue minus ~2.9% + $0.30 fees). Without the Stripe API:

  • We estimate gross revenue using configurable fee rates
  • This creates "synthetic" Stripe Fee entries
  • Accuracy depends on your actual Stripe fee rate (varies by plan, card type, international)
  • Solution: Connect Stripe API for exact numbers

Deel Fee Splitting

Deel combines platform fees and contractor payroll in one transaction stream. Pattern:

  • Small fixed amounts (~$2-5) → Deel Platform Fee → categorize as "Software expenses"
  • Larger variable amounts → Contractor Payroll → categorize as "Wages & Salaries"
  • The system learns this pattern but may need initial human guidance

Mercury API Limitations

  • Only returns posted transactions (not pending)
  • Some counterparty names are truncated or normalized differently
  • Wire descriptions may include reference numbers that create duplicate rules

Multi-Currency

  • Wise transfers create both a debit (USD) and may show FX fees separately
  • International wire fees from Mercury appear as separate line items
  • FX gains/losses are not tracked (would need multi-currency ledger)

AI Categorization

The categorize.sh script calls the host agent's model via stdin/stdout JSON protocol. It sends transaction batches and expects category assignments back. The script writes a prompt to stdout that the agent should process and return results for.

When AI confidence < 0.85, transactions are flagged as ambiguous for user review.

Key Details

  • Cash or accrual basis — configurable per entity
  • Multiple entities supported — each with own connections and rules
  • Rules persist — categorization rules saved to SQLite, reused across runs
  • Seed rules — ~90 universal vendor mappings loaded on init
  • Excel output — 4-tab workbook: P&L, Balance Sheet, Cash Flow, Transaction Detail

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

Invoice & Expense Tracker

AI-powered invoice and expense tracking from natural language. Maintain a local ledger, generate monthly reports by category/vendor, export to CSV for QuickB...

Registry SourceRecently Updated
056
Profile unavailable
Automation

Accounts Payable Automation

Automate accounts payable with invoice processing, approval routing, payment optimization, vendor management, month-end close, key metrics, and fraud prevent...

Registry SourceRecently Updated
0429
Profile unavailable
General

Invoice Scan

AI-powered invoice scanning and data extraction from images and PDFs. Use when: (1) user sends an invoice image/PDF to scan or extract data from, (2) convert...

Registry SourceRecently Updated
082
Profile unavailable