Install
openclaw skills install friday-budgeting-proAI-powered personal finance tracker. Connects to your banks via Plaid, auto-classifies transactions, syncs daily, and exports to Excel. Supports multiple ledgers including personal household, rental properties, and investments. Ask your agent about spending, connect banks, manage ledgers, classify transactions, or trigger exports.
openclaw skills install friday-budgeting-proAI-powered personal finance on your own Mac. Connects to your banks via Plaid, classifies transactions automatically (and asks when unsure), syncs in the background, and exports to Excel. Supports personal, rental property, and investment ledgers. A small local UI handles setup and management; everything else happens through your agent.
After install, open http://127.0.0.1:6789 in your browser to:
Every sync() call runs the full pipeline automatically in one shot:
Plaid fetch → rule-based classification → LLM classification → review queue
routing_rules match instantly (no LLM cost)classify_pending_transactions runs on anything rules didn't catch;
each transaction gets one unified LLM call (classify_transaction) with rules + ledger
tree + hints + merchant history all in a single promptget_needs_review()| Tier | What happens |
|---|---|
| Primary | POST to OpenClaw local gateway (http://127.0.0.1:18789/v1/chat/completions, model openclaw/default) |
| Fallback | Anthropic SDK directly (claude-3-5-haiku-20241022) when gateway is unreachable |
Both the gateway port/token and the Anthropic API key are auto-discovered from OpenClaw's own config files — no manual env-var setup needed on a standard install:
~/.openclaw/openclaw.json (gateway.port / gateway.auth.token)~/.openclaw/agents/main/agent/auth-profiles.json (anthropic:default)Env vars that override auto-discovery (all optional):
OPENCLAW_API_URL, OPENCLAW_GATEWAY_PORT, OPENCLAW_GATEWAY_TOKEN,
OPENCLAW_LLM_MODEL, ANTHROPIC_API_KEY
Invoke for any personal finance request:
list_profiles — list all local user profiles (usernames)setup_status — check if first-run setup is complete (not_started | in_progress | complete)apply_initial_setup(banks_to_link, rental_properties?, investment_account_ids?, extra_ledgers?, hints?) — initialize ledgers, notifications, and first sync in one callstart_link(plaid_env?) — generate Plaid Link URL to connect a bankcomplete_link(public_token, plaid_env?) — exchange public token after user completes Plaid Linklist_connections — list connected banks and their status (active | needs_reauth)get_connections_needing_attention — list connections that need user action (reauth or expiring soon)refresh_connection(id) — re-authenticate a broken connection (Update Mode)disconnect(id) — remove a bank connection and its dataset_account_description(account_id, description) — set classifier context for an account (e.g. "Primary spending account")list_ledgers — show all ledgers (personal/property/investment) and their line itemsget_ledger(ledger_id, period?) — get a single ledger with all line items and classified transactions for the periodadd_ledger(name) — create a new ledgeradd_line_item(ledger_id, name, item_type) — add a line item (income | expense) to a ledgerremove_line_item(id) — remove a line itemset_account_ledger(account_id, ledger_id) — link a bank account to a default ledger for automatic routingcreate_property_ledger(name, description?) — create a property ledger with default line items (Rent income, Mortgage, Property tax, Maintenance, Insurance, Utilities)create_investment_ledger(name) — create an investment ledger (Contributions, Dividends/Returns)sync — pull latest transactions from all connected bankslist(filters?) — query transactions (supports date, ledger, category, account filters)get_needs_review — transactions that need manual review: uncertain classifications (confidence < 0.7) or unrouted transactions with no line item assignedget_needs_review_summary — call this immediately after every sync; returns a pre-formatted batch message (count, summary, transactions) ready to present to the user in one message. Use summary as-is for the user-facing message. Includes merchant, amount, date, account, and classifier reasoning for each transaction.route(transaction_id, allocations) — manually assign a transaction to a ledger/line itemadd_hint(text) — add a natural-language classification hint for the LLMlist_hints — list all classification hintsremove_hint(id) — remove a classification hintlist_setup_interview_questions — return the canonical onboarding interview prompts (employer, subscriptions, utilities, etc.)setup_interview(question_key, answer_text) — persist a user answer for a given question key (upsert on (user_id, question_key))list_setup_interview — return all stored interview answers for the active useranalyze_recurring_merchants(min_occurrences?, lookback_days?) — scan recent transactions and return recurring merchants with their inferred category for cross-referencing during onboardingfind_transactions(merchant?, date?, amount?, account?, days_window?) — fuzzy-search transactions by merchant name, ISO date (±days_window days), amount (±$0.50), or account name; returns up to 10 matches with their current classificationcorrect_transaction(transaction_id, line_item_id, create_rule?, rule_description?) — reclassify a transaction; set create_rule=True to also create a rule so future matches are classified the same way automaticallylist_rules — list all classification rules sorted by priority (lower = evaluated first)add_rule(name, description, rule_type, line_item_id?, priority?) — add a natural-language rule (transfer | savings | spending | income | skip)update_rule(id, **fields) — update a rule's name, description, type, priority, or enabled statereorder_rules(ids) — set new priority order by passing an ordered list of rule IDsdisable_rule(id) — disable a rule (skipped during classification)enable_rule(id) — re-enable a disabled ruledelete_rule(id) — delete a user-created rule (default rules cannot be deleted, only disabled)list_auto_promoted_rules — list auto-promoted routing rules with audit metadataundo_auto_promoted_rule(rule_id) — revert an auto-promoted rule and its affected entriessummary(period) — spending totals by category for a period (e.g. this_month, last_month)export_excel(years?) — generate Excel workbook and return download URLget_setting(key) — get an app setting; valid keys: home_currency, timezoneset_setting(key, value) — update an app setting
home_currency: one of CAD, USD, EUR, GBPtimezone: any non-empty IANA timezone string (e.g. America/Toronto, UTC, Asia/Tokyo)get_ui_url(page?) — return the local dashboard URL, optionally deep-linked to a pageset_ui_password(current_password, new_password) — change the UI login passwordreset_ui_password — generate a password-reset recovery tokenconfigure_plaid(client_id, secret, env) — update Plaid API credentialsDo
sync before answering spending questions if data may be stalesync, call get_needs_review_summary and, if count > 0, present the summary field to the user in a single message — do not send one message per transactionlist_rules to show what classification rules are active before adding new onesstart_link when the user wants to connect or reconnect a bankcreate_property_ledger for rental properties — it seeds the right line items automaticallycorrect_transaction(transaction_id, line_item_id) for each corrected itemfind_transactions(merchant=<name>) — if 2+ past transactions exist, propose adding a rule via add_rule (tag description with [from-correction])Don't
delete_rule on default rules — they can only be disabled