beancount-accounting
npx skills add https://github.com/ouachitalabs/skills --skill Beancount Accounting
Skill 文档
Beancount Accounting Skill
Beancount is a plain-text double-entry accounting system. This skill provides expertise for creating, editing, and querying beancount files.
Core Concepts
Double-Entry Accounting
Every transaction must balance to zero. Money flows between accounts:
- Debits increase Assets/Expenses, decrease Liabilities/Income/Equity
- Credits decrease Assets/Expenses, increase Liabilities/Income/Equity
Five Account Types
| Type | Purpose | Normal Balance |
|---|---|---|
Assets |
What you own (bank accounts, investments) | Positive |
Liabilities |
What you owe (credit cards, loans) | Negative |
Income |
Money coming in (salary, interest) | Negative |
Expenses |
Money going out (food, rent) | Positive |
Equity |
Net worth, opening balances | Negative |
Account Naming
Use colon-separated hierarchical names starting with capital letters:
Type:Country:Institution:Account:SubAccount
Examples:
Assets:Checking:Centennial:Joint
Liabilities:Card:Chase:Sapphire
Expenses:Food:Groceries
Income:Salary:Employer
Transaction Syntax
Basic Format
YYYY-MM-DD flag "Payee" "Narration"
Account1 Amount Currency
Account2 Amount Currency ; optional comment
Flags
*– Cleared/completed transaction!– Pending/needs review
Examples
Simple expense:
2026-01-03 * "Starbucks" "Morning coffee"
Expenses:Food:Coffee 5.75 USD
Liabilities:Card:Chase:Sapphire
Paycheck with multiple postings:
2026-01-15 * "Employer" "Bi-weekly salary"
Assets:Checking:Main 3500.00 USD
Expenses:Taxes:Federal 800.00 USD
Expenses:Taxes:State 200.00 USD
Expenses:Insurance:Health 150.00 USD
Income:Salary -4650.00 USD
Transfer between accounts:
2026-01-10 * "Transfer to savings"
Assets:Savings:Ally 500.00 USD
Assets:Checking:Main -500.00 USD
Amount Interpolation
One posting amount can be omitted – beancount calculates it:
2026-01-03 * "Grocery Store" "Weekly groceries"
Expenses:Food:Groceries 125.43 USD
Assets:Checking:Main ; Amount calculated as -125.43 USD
Essential Directives
open / close
Declare account lifecycle:
2026-01-01 open Assets:Checking:Main USD
2028-12-31 close Assets:Checking:Main
balance
Assert account balance at start of day (catches errors):
2026-01-31 balance Assets:Checking:Main 4583.84 USD
pad
Auto-generate balancing entry between two dates:
2026-01-01 pad Assets:Checking:Main Equity:Opening-Balances
2026-01-02 balance Assets:Checking:Main 4583.84 USD
include
Split files for organization:
include "2026-01.beancount"
include "accounts.beancount"
option
Configure beancount behavior:
option "title" "Personal Finances"
option "operating_currency" "USD"
Metadata and Tags
Metadata
Attach key-value pairs to directives or postings:
2026-01-03 * "Amazon" "Office supplies"
order-id: "123-456-789"
Expenses:Office 45.00 USD
category: "equipment"
Liabilities:Card:Chase
Tags and Links
Group related transactions:
2026-01-15 * "Hotel" "Conference lodging" #work-travel #conference-2026
Expenses:Travel:Lodging 299.00 USD
Liabilities:Card:Chase
2026-02-01 * "Expense Report" "Reimbursement" ^conference-2026
Assets:Checking:Main 299.00 USD
Income:Reimbursements
BQL Queries
Beancount Query Language (BQL) provides SQL-like queries. Run with bean-query:
bean-query finances/2026.beancount "SELECT account, sum(position) WHERE account ~ 'Expenses' GROUP BY 1"
Common Queries
Account balance:
SELECT account, sum(position)
WHERE account ~ 'Assets:Checking'
GROUP BY 1
Monthly expenses by category:
SELECT MONTH(date), account, sum(position)
WHERE account ~ 'Expenses' AND year = 2026
GROUP BY 1, 2
ORDER BY 1, 2
Transactions for an account:
SELECT date, narration, payee, position, balance
WHERE account = 'Assets:Checking:Centennial:Joint'
ORDER BY date
Key BQL Functions
| Function | Purpose |
|---|---|
SUM(position) |
Aggregate amounts |
YEAR(date), MONTH(date) |
Extract date parts |
COST(position) |
Get cost basis |
account ~ 'pattern' |
Regex match account |
Working with Beancount Files
Reading Files
Before editing, read the beancount file to understand:
- Existing account structure
- Naming conventions used
- Transaction patterns
- Include file organization
Adding Transactions
- Match existing account names exactly
- Use consistent payee/narration style
- Ensure transaction balances to zero
- Add to chronologically appropriate location or include file
Validation
Run bean-check to validate syntax:
bean-check finances/2026.beancount
Common Patterns
Credit card payment:
2026-01-25 * "Chase" "Credit card payment"
Liabilities:Card:Chase:Sapphire 500.00 USD
Assets:Checking:Main -500.00 USD
Investment purchase with cost basis:
2026-01-20 * "Fidelity" "Buy index fund"
Assets:Investments:Fidelity:FXAIX 10 FXAIX {150.00 USD}
Assets:Investments:Fidelity:Cash -1500.00 USD
Mortgage payment breakdown:
2026-01-01 * "Rocket Mortgage" "Monthly mortgage"
Liabilities:Loan:RocketMortgage 800.00 USD ; Principal
Expenses:Housing:Interest 900.00 USD ; Interest
Expenses:Housing:Escrow 300.00 USD ; Escrow
Assets:Checking:Main -2000.00 USD
Best Practices
File Organization
- Use
includeto split by month or category - Keep account definitions in main file
- Add transactions to appropriate include files
Account Hierarchy
- Be consistent with naming depth
- Use specific subcategories for visibility
- Group related accounts logically
Balance Assertions
- Add monthly balance assertions for bank accounts
- Reconcile against actual statements
- Catches data entry errors early
Error Prevention
- Always run
bean-checkafter edits - Use balance assertions frequently
- Keep transactions in chronological order
Additional Resources
Reference Files
For detailed syntax and patterns, consult:
references/syntax.md– Complete directive reference with all optionsreferences/bql.md– Full BQL query language documentationreferences/examples.md– Common transaction patterns and workflows
Command Line Tools
| Command | Purpose |
|---|---|
bean-check file.beancount |
Validate syntax |
bean-query file.beancount "QUERY" |
Run BQL query |
bean-report file.beancount balances |
Balance report |
bean-web file.beancount |
Web interface |