name: reconcile description: Sync all bank pipelines and reconcile balances against YNAB argument-hint: "" allowed-tools: Bash(.venv/bin/python:), Read, Write, Skill(sync-baneco:), Skill(sync-bisa:), Skill(sync-sol:) model: sonnet
Weekly Reconciliation
All python commands MUST use .venv/bin/python (not python or python3).
When the user runs this skill:
Phase 1 — Sync all pipelines
Run all 4 pipelines sequentially. Track the import results (imported/duplicates) for each.
- Invoke
/sync-baneco --auto-accept— note the imported/duplicates counts from the output - Invoke
/sync-bisa --auto-accept— note the imported/duplicates counts from the output - Invoke
/sync-sol --auto-accept— note the imported/duplicates counts from the output - Run Binance pipeline directly (no AI categorization needed):
.venv/bin/python -m binanceParse the "Imported X transactions (Y duplicates skipped)" line from output.
Phase 2 — Collect balances
-
Get bank/exchange balances from exported data:
- Baneco:
.venv/bin/python -c "from baneco import get_last_balance; print(get_last_balance())" - BISA:
.venv/bin/python -c "from bisa import get_last_balance; print(get_last_balance())" - Banco Sol:
.venv/bin/python -c "from sol import get_last_balance; print(get_last_balance())" - Binance:
.venv/bin/python -c "from binance import get_usdt_balance; print(get_usdt_balance())"
- Baneco:
-
Get YNAB account balances:
- Baneco:
.venv/bin/python -c "import json; from baneco import get_ynab_balance; print(json.dumps(get_ynab_balance()))" - BISA:
.venv/bin/python -c "import json; from bisa import get_ynab_balance; print(json.dumps(get_ynab_balance()))" - Banco Sol:
.venv/bin/python -c "import json; from sol import get_ynab_balance; print(json.dumps(get_ynab_balance()))" - Binance:
.venv/bin/python -c "import json; from binance import get_ynab_balance; print(json.dumps(get_ynab_balance()))"
YNAB balances are in milliunit format (× 1000). Divide by 1000.0 to get the human-readable amount.
- Baneco:
Phase 3 — Reconciliation report
- Print a summary using this format:
## Weekly Reconciliation — {today's date}
### Sync Results
| Pipeline | Imported | Duplicates |
|------------|----------|------------|
| Baneco | {n} | {n} |
| BISA | {n} | {n} |
| Banco Sol | {n} | {n} |
| Binance | {n} | {n} |
### Balance Comparison (BOB Budget)
| Account | Bank Balance | YNAB Balance | Diff | Status |
|------------|-------------|--------------|---------|--------|
| Baneco | {x} Bs | {y} Bs | {diff} | {ok} |
| BISA | {x} Bs | {y} Bs | {diff} | {ok} |
| Banco Sol | {x} Bs | {y} Bs | {diff} | {ok} |
### Balance Comparison (USD Budget)
| Account | Exchange | YNAB Balance | Diff | Status |
|----------|--------------|--------------|---------|--------|
| Binance | {x} USDT | {y} USD | {diff} | {ok} |
Status column rules:
- Diff == 0 (or within 0.01): show checkmark
- Diff != 0: show warning sign
-
If there are discrepancies, add a "### Discrepancy Analysis" section listing possible causes:
- Recent transaction not yet synced
- Rounding difference in conversion
- Pending/uncleared transactions
- Manual adjustment needed
-
NEVER make changes automatically to fix discrepancies. Only report them.
Notes:
- If Binance balance is None (balance.json not found), note it as "N/A" in the table
- If any pipeline fails, still continue with the others and note the failure
- Bank balances from CSVs reflect the balance at the time of the last transaction in the export