Install
openclaw skills install nai-local-budgetAnalyze exported bank/credit card CSV files locally to track spending, categorize transactions with LLM reasoning, compare against user-defined budgets, and generate markdown reports. Use when the user mentions budgeting, spending analysis, finance tracking, bank statements, credit card exports, CSV transactions, monthly spending, or wants to know where their money is going. Fully local — no third-party APIs, complete privacy. Triggers on words like budget, spending, transactions, bank CSV, credit card export, finance report, monthly expenses.
openclaw skills install nai-local-budgetAnalyze bank/credit card CSV exports, categorize transactions, compare against budgets, and generate clean markdown reports for Obsidian.
parse_csv.py to normalize raw CSVs into a unified JSON formatcategorize.py to get LLM-ready JSON with suggested categories; review/adjustreport.py to generate a markdown spending reportAll scripts live in scripts/. Budget config and sample data in assets/. See references/csv-formats.md for supported formats and references/categories.md for category customization.
python3 scripts/parse_csv.py <input.csv> [--format chase|boa|generic] [--output transactions.json]
--format is omitted (checks header columns){ "date": "YYYY-MM-DD", "description": str, "amount": float, "type": "debit"|"credit", "original_category": str|null }MM/DD/YYYY, YYYY-MM-DD, MM/DD/YYIf the user's bank isn't auto-detected, check references/csv-formats.md for column mappings and use --format generic with the appropriate flag, or add a new format.
python3 scripts/categorize.py transactions.json [--budget assets/sample-budget.json] [--output categorized.json]
category based on description keyword matchingreferences/categories.md for the keyword-matching logic and how to customizeLLM review step: After running categorize.py, scan the output for anything in "Other" or with low-confidence keywords. Ask the user to confirm or correct those entries before proceeding.
python3 scripts/report.py categorized.json [--budget assets/sample-budget.json] [--output report.md]
--budget is omitted, report shows actuals only (no budget comparison)Budget is defined in a JSON file. See assets/sample-budget.json for a realistic example.
{
"monthly_budgets": {
"Housing": 1800,
"Food & Dining": 600
}
}
"Analyze my Chase export"
→ parse_csv.py chase_export.csv --format chase --output tx.json
→ categorize.py tx.json --output cat.json
→ Review categories, then report.py cat.json --budget assets/sample-budget.json
"Show me my spending for March"
→ Parse and categorize the CSV, then filter by month in report.py (it auto-groups by month)
"I went over budget on dining" → Run the full pipeline; report.py flags overage categories with ⚠️
"Add a new bank format"
→ See references/csv-formats.md for the column mapping spec
"Customize categories"
→ See references/categories.md to edit keyword lists or add new categories
Store CSVs and JSON outputs wherever the user prefers. Default working directory is wherever the command is run. Suggest keeping exports in a dedicated folder like ~/finances/exports/.
Reports can be saved directly to the Obsidian vault:
python3 scripts/report.py categorized.json --output ~/path/to/vault/finance/2024-03-budget.md