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.zipInstalls 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)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
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:
- Verify it's valid Beancount syntax
- Check that postings balance to zero
- Verify accounts exist in the chart of accounts
- 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.beancountfor the relevant month
Show the patch, explain any non-trivial normalization, and ask for explicit approval. Only after approval:
- Apply the patch
- Re-run
./bin/cfo-checkor pass the ledger path explicitly - 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:Xincreases,Assets:BankorLiabilities:CreditCarddecreases - Income:
Assets:Bankincreases,Income:Xincreases (Income is negative in Beancount) - Transfer:
Assets:BankAdecreases,Assets:BankBincreases - Credit card payment:
Liabilities:CreditCardincreases,Assets:Bankdecreases
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.yamlfirst, 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.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| cfo-log (this skill) | 0 | 4mo | Review | Advanced |
| portfoliosyncing | 3 | 5mo | No flags | Intermediate |
| miniqmt-skill | 0 | 6mo | Review | Intermediate |
| add-vault-note | 1 | 5mo | No flags | Intermediate |
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.
miniqmt-skill
xiaxiaoqian
MiniQMT量化交易开发技能,基于迅投XtQuant库提供行情数据获取(xtdata)和交易执行(xttrader)功能。用于开发股票、期货、期权等量化交易策略,支持历史/实时行情数据下载、K线/分笔数据获取、财务数据查询、自动下单/撤单、持仓查询、资产查询等。适用于需要连接MiniQMT客户端进行量化交易的场景。
add-vault-note
tradingstrategy-ai
Add a note to specific vault
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.
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.
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.