From firefly-tools
Import a bank statement (CSV or PDF) and interactively review/categorize the imported transactions
How this skill is triggered — by the user, by Claude, or both
Slash command
/firefly-tools:import-and-reviewThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Full workflow for importing a bank statement and categorizing all transactions.
Full workflow for importing a bank statement and categorizing all transactions.
Before starting, read ${CLAUDE_PLUGIN_ROOT}/.env to check it exists and has no REPLACE_WITH placeholders.
If credentials are missing, tell the user to run /firefly-tools:setup first and stop.
The user provides a file path via $ARGUMENTS. This can be:
If no path is provided, use AskUserQuestion to ask for one.
Check the file extension:
If PDF:
csv-parser agent with the file pathIf CSV: Skip directly to Phase 2.
If anything else: Tell the user only CSV and PDF files are supported and stop.
If MCP tools (firefly:*) are not available (e.g., in Cowork mode), use the equivalent scripts in ${CLAUDE_PLUGIN_ROOT}/scripts/ via Bash. The script equivalents are:
firefly:import_bank_statement → python ${CLAUDE_PLUGIN_ROOT}/scripts/import_csv.py <path> [--bank hsbc|maybank] [--dry-run]firefly:get_financial_context → python ${CLAUDE_PLUGIN_ROOT}/scripts/get_context.py [--cache]firefly:get_review_queue → python ${CLAUDE_PLUGIN_ROOT}/scripts/review_queue.py --days 7firefly:categorize_transactions → python ${CLAUDE_PLUGIN_ROOT}/scripts/categorize.py --file updates.jsonfirefly:manage_metadata → python ${CLAUDE_PLUGIN_ROOT}/scripts/manage_metadata.py <action> --name "..."All scripts output JSON to stdout. You can optionally pre-validate CSVs with python ${CLAUDE_PLUGIN_ROOT}/scripts/validate_import.py <path> --check-duplicates.
firefly:import_bank_statement with the CSV file path (or python ${CLAUDE_PLUGIN_ROOT}/scripts/import_csv.py <path> in Cowork mode)
Call firefly:get_financial_context (or python ${CLAUDE_PLUGIN_ROOT}/scripts/get_context.py --cache) to load available categories, tags, budgets, and accounts
Call firefly:get_review_queue with days_back=7 (or python ${CLAUDE_PLUGIN_ROOT}/scripts/review_queue.py --days 7) to get recently imported transactions
Collect ALL transaction descriptions from the queue into a single list
Dispatch the merchant-classifier agent ONCE with the full batch of descriptions plus the financial context
Present the results to the user in a table format, grouped by confidence:
High confidence (auto-apply these?):
| # | Description | Amount | Category | Tags |
|---|---|---|---|---|
| 1 | Starbucks | $5.20 | Food & Dining | cafe |
| 2 | Shell | $45.00 | Transport | fuel |
Needs your input:
| # | Description | Amount | Suggestion | Why uncertain |
|---|---|---|---|---|
| 3 | GRAB*2847 | $12.50 | Transport OR Food & Dining | Could be ride or GrabFood |
Use AskUserQuestion to let the user:
Call firefly:categorize_transactions (or write a JSON file and run python ${CLAUDE_PLUGIN_ROOT}/scripts/categorize.py --file updates.json) with the confirmed classifications
firefly:manage_metadata (or python ${CLAUDE_PLUGIN_ROOT}/scripts/manage_metadata.py) to create them firstReport:
/firefly-tools:classify-unknowns later)npx claudepluginhub originalbyteme/claude-open-finance --plugin firefly-toolsImports financial transactions from CSV, OFX, or QIF bank exports. Detects format and banks (Chase, Amex, BofA), previews first 5, deduplicates by date/amount/description, and inserts new records into database.
Categorizes uncategorized bank transactions, matches payments to invoices, verifies bookkeeping entries for freelance or SME accounts via Norman Finance APIs. Use for reconciling accounts or expense categorization.
Processes bookkeeper Excel/CSV exports into categorized spending, budget comparisons, variance analysis, runway calculations, and burn rate trends. Useful for month-end financial reviews.