A bookkeeping tool that transforms raw, messy data into verified, double-entry Beancount ledger entries.

Install

mkdir -p .claude/skills/cfo-log && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/15416" && unzip -o skill.zip -d .claude/skills/cfo-log && rm skill.zip

Installs to .claude/skills/cfo-log

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Transform raw captured data into structured Beancount double-entry records. The bridge between messy real-world data and clean accounting entries. Use when converting single-entry data or freeform descriptions into proper bookkeeping. CLEAR step: L (Log)
254 chars✓ has a “when” triggerlonger than Claude Code's old 250-char listing cap (fine on current versions)
Advanced

Key capabilities

  • Verify Beancount syntax of staging entries
  • Check that postings balance to zero
  • Verify accounts exist in the chart of accounts
  • Enrich entries with missing metadata or split compound transactions
  • Validate all postings balance and accounts are open
  • Prepare a unified diff for ledger patch

How it works

The skill transforms raw data into structured Beancount double-entry records by verifying syntax, balancing postings, enriching entries, and validating against a chart of accounts.

Inputs & outputs

You give it
raw captured data or freeform descriptions
You get back
structured Beancount double-entry records and a proposed ledger patch

When to use cfo-log

  • Convert expenses to Beancount
  • Normalize transaction records
  • Validate double-entry balancing
  • Create ledger patches

About this skill

/cfo-log — Bookkeeper

CLEAR Step

L — Log: Transform captured data into structured double-entry entries.

Core question: "For every dollar, do I know where it came from and where it went?"

Role

You are a precise bookkeeper who ensures every transaction is properly recorded in double-entry format. Debits equal credits. Every account is real. Every entry is traceable.

Workflow

Step 1: Review staging entries

Read the staging file (from /cfo-capture or manual input). For each entry:

  1. Verify it's valid Beancount syntax
  2. Check that postings balance to zero
  3. Verify accounts exist in the chart of accounts
  4. Check for duplicate entries in the existing ledger

Step 2: Enrich entries

For entries that need it:

  • Add missing metadata (payee normalization, narration cleanup)
  • Split compound transactions (e.g., a bill with multiple expense categories)
  • Add cost basis for foreign currency or investment transactions
  • Link related transactions (e.g., invoice → payment)

Step 3: Validate

Run bean-check equivalent validation:

  • All postings balance
  • All accounts are open on the transaction date
  • No duplicate transactions (by hash or date+amount+payee)
  • Currency matches account constraints

Step 4: Prepare ledger patch

Prepare a unified diff from staging to the appropriate ledger file:

  • YYYY/MM-transactions.beancount for the relevant month

Show the patch, explain any non-trivial normalization, and ask for explicit approval. Only after approval:

  1. Apply the patch
  2. Re-run ./bin/cfo-check or pass the ledger path explicitly
  3. Report the exact file(s) changed

Double-Entry Primer

Every transaction has at least two postings that sum to zero:

; Money flows FROM one account TO another
2026-03-15 * "Coffee Shop" "Morning coffee"
  Expenses:Meals-Entertainment    5.50 CAD   ; debit (money went here)
  Assets:Bank:TD-Checking        -5.50 CAD   ; credit (money came from here)

Common patterns:

  • Expense: Expenses:X increases, Assets:Bank or Liabilities:CreditCard decreases
  • Income: Assets:Bank increases, Income:X increases (Income is negative in Beancount)
  • Transfer: Assets:BankA decreases, Assets:BankB increases
  • Credit card payment: Liabilities:CreditCard increases, Assets:Bank decreases

Constraints

  • NEVER create entries that don't balance
  • NEVER use accounts that aren't in the chart of accounts (open them first)
  • NEVER approve a transaction at or above the configured large-transaction threshold
  • Read the threshold from cfo-stack.yaml first, then ~/.cfo-stack/config.yaml
  • ALWAYS show the proposed diff before any ledger mutation
  • ALWAYS run validation after applying an approved patch
  • ALWAYS preserve source metadata from /cfo-capture
  • If unsure about an entry, mark it with ! (flag) instead of * (cleared)

Output

Proposed patch for the appropriate month file, plus a validated ledger after approval.

When not to use it

  • When creating entries that do not balance
  • When using accounts not in the chart of accounts
  • When approving transactions at or above the configured large-transaction threshold

Limitations

  • NEVER create entries that don't balance
  • NEVER use accounts that aren't in the chart of accounts
  • ALWAYS show the proposed diff before any ledger mutation

How it compares

This skill automates the rigorous process of converting single-entry or freeform financial data into compliant double-entry Beancount ledger entries, ensuring accuracy and traceability.

Compared to similar skills

cfo-log side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
cfo-log (this skill)04moReviewAdvanced
portfoliosyncing35moNo flagsIntermediate
miniqmt-skill06moReviewIntermediate
add-vault-note15moNo flagsIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

You might also like

portfoliosyncing

AojdevStudio

Import and sync broker CSV portfolio data to Google Sheets DataHub. Supports multiple brokers (Fidelity, Schwab, Vanguard, etc.). USE WHEN user mentions import broker data OR sync portfolio OR update positions OR CSV import OR portfolio-sync OR working with Portfolio_Positions CSVs. Handles position updates, SPAXX/margin validation, safety checks, and formula protection.

333

miniqmt-skill

xiaxiaoqian

MiniQMT量化交易开发技能,基于迅投XtQuant库提供行情数据获取(xtdata)和交易执行(xttrader)功能。用于开发股票、期货、期权等量化交易策略,支持历史/实时行情数据下载、K线/分笔数据获取、财务数据查询、自动下单/撤单、持仓查询、资产查询等。适用于需要连接MiniQMT客户端进行量化交易的场景。

00

add-vault-note

tradingstrategy-ai

Add a note to specific vault

11

reconciliation

anthropics

Reconcile accounts by comparing GL balances to subledgers, bank statements, or third-party data. Use when performing bank reconciliations, GL-to-subledger recs, intercompany reconciliations, or identifying and categorizing reconciling items.

30139

finance-manager

ailabs-393

Comprehensive personal finance management system for analyzing transaction data, generating insights, creating visualizations, and providing actionable financial recommendations. Use when users need to analyze spending patterns, track budgets, visualize financial data, extract transactions from PDFs, calculate savings rates, identify spending trends, generate financial reports, or receive personalized budget recommendations. Triggers include requests like "analyze my finances", "track my spending", "create a financial report", "extract transactions from PDF", "visualize my budget", "where is my money going", "financial insights", "spending breakdown", or any finance-related analysis tasks.

1221

data-engineer

sickn33

Build scalable data pipelines, modern data warehouses, and real-time streaming architectures. Implements Apache Spark, dbt, Airflow, and cloud-native data platforms. Use PROACTIVELY for data pipeline design, analytics infrastructure, or modern data stack implementation.

325

Search skills

Search the agent skills registry