Skip to content
Data
Skill

/findash-doctor

Use when the user says "doctor", "finance doctor", "check finance setup", "what's missing", or any "is everything set up?" equivalent. Audits binaries, configs, secrets, npm deps, DB, live Drive connectivity, and Chromium profiles. Auto-fixes safe local gaps and prints exact

From plugin
findash
215 skills

Claude Code

$ npx -y skills add ya5huk/findash --skill findash-doctor --agent claude-code

SKILL.md

findash-doctor.SKILL.md
name: findash-doctor
description: Use when the user says "doctor", "finance doctor", "check finance setup", "what's missing", or any "is everything set up?" equivalent. Audits binaries, configs, secrets, npm deps, DB, live Drive connectivity, and Chromium profiles. Auto-fixes safe local gaps and prints exact commands for everything that needs human action.

findash-doctor

You audit setup, fix what's safe, print a short scannable report. **Diagnose → auto-fix → report.** Anything needing the user goes into the report, not into a shell call.

Where things live

  • Run from the project root (the dir holding `CLAUDE.md`, `scripts/`, `docs/`). Paths below are relative.
  • Drive root ID: `root_folder_id=…` in `.secrets/findash` under `[drive]` (chmod 600, gitignored).
  • Seed script: `scripts/init-db.sql`. npm manifests: `scripts/package.json` (bank fetch) and `dashboard/package.json` (React app).

Checks

| # | Category | What | Auto-fix? | |---|---|---|---| | 1 | Binaries | Python ≥3.10; feature-gated `qpdf` and Node ≥22.22.2 | No | | 2 | Private state | local dirs exist at mode 700; files under `data/`, `inbox/`, `.secrets/`, plus browser-profile files, are mode 600 | `python3 scripts/harden_permissions.py --include-browser-profile` | | 3 | Drive connector | when `[drive]` is configured or explicitly selected: the official Google Drive connector's tools are discoverable (ToolSearch by function) in this session | No — print the add-connector steps | | 4 | Drive root ID | `.secrets/findash` `[drive]` has a non-placeholder `root_folder_id=` | Perms only | | 5 | Secrets | `.secrets/findash` exists + mode 600; note which `[sections]` are filled | Perms only | | 6 | Bank npm deps | when `[hapoalim]` or `[cal]` is configured: `scripts/node_modules/` populated and `npm ls --omit=dev` succeeds | `scripts/install_node_deps.sh` | | 7 | DB | `data/finance.db` exists, passes integrity/FK checks, and is at the current schema version | `python3 scripts/migrate_db.py --init` when missing; `python3 scripts/migrate_db.py` when outdated | | 8 | Chromium profiles | `~/.cache/findash/chromium-profile/{hapoalim,visaCal}/` (only when matching secrets exist) | No | | 9 | Drive live + layout | with the connector present: the metadata tool reaches the root from `python3 scripts/drive_root.py`, then every fixed public folder from `docs/drive-layout.md` exists directly under it | Fixed folders only | | 10 | IBKR connector | optional — the official Interactive Brokers connector is added in Claude (claude.ai), not findash config; sessions without it skip the investments feed | No | | 11 | React dashboard | `dashboard/node_modules/` populated and `npm --prefix dashboard run build` succeeds | `scripts/install_dashboard_deps.sh` |

Run `python3 scripts/check_config.py` for checks 4–6 and the optional-integration gates. Its output contains booleans and known section names only—never values. A section is configured only when every required value is non-empty and not a setup placeholder; a header by itself does not count.

Versions: parse `node --version` (major ≥23, or major=22 with minor ≥13) and `python3 --version` (≥3.10). Perms: anything with non-zero group/others digit is wrong. For Drive live, resolve the root with `python3 scripts/drive_root.py`, call the connector's metadata tool on that id, then list the root by `parentId` (with `excludeContentSnippets: true`) and compare folder titles against the fixed layout. If the root ID is missing or still a placeholder, skip both and let check #4 own it. Never search outside the vault, call recent-files, or print a vault listing.

Database check (#7): run `python3 scripts/migrate_db.py --check`. A missing database is initialized with `--init`; an outdated populated database is upgraded by running `python3 scripts/migrate_db.py`. Never apply ad-hoc `ALTER TABLE` statements. A migration that reports conflicting same-date balances is a blocker requiring source reconciliation—never pick a value automatically. Verify `PRAGMA foreign_key_check` and `PRAGMA integrity_check` through `scripts/findash_db.py`. If `meta.last_db_backup_at` is older than 14 days, add one ⚠️ line. Apply the same staleness checks to configured sources, using active `account_feeds.provider='ibkr'` rows to decide whether IBKR is onboarded. Every active IBKR feed must point to a non-closed logical account.

Also audit logical-account identity: compare active brokerage accounts' latest holdings and surrounding canonical trades, especially when one account has an IBKR feed. Substantially identical portfolios may be a wrapper and its underlying IBKR account represented twice. Treat a clear duplicate as an accuracy blocker for an interactive `/findash:fetch-investments` reconciliation; never sum it, auto-merge it, or print the matching securities/quantities. Similar amounts or one matching trade are not enough evidence. IBKR connector (#10) remains optional and interactive. Never print account ids, balances, positions, source identifiers, or counterparties.

Audit bank-account transitions too. Multiple same-institution checking rows are an accuracy blocker when their activity does not economically overlap, an exact closing/opening transfer joins their boundary, or pre-boundary manual snapshots on the successor track the predecessor ledger. Treat a bank-renumbering migration as one logical account with separate feeds and recommend the reviewed `reconcile-account` flow. Do not infer identity from a similar balance alone, and never print the private comparison evidence.

Count payslips that should be paired with a salary credit but are not: a salary credit with the same exact native net amount and currency exists after the pay period starts, yet the payslip's `paid_on` does not equal that credit's posting date. Each one counts the same pay twice in cash flow. Report only the count as an accuracy warning and pair them interactively per [`docs/doc-types/payslips.md`](../../docs/doc-types/payslips.md) ("Pay

Read more
@ya5huk
Ships withfindash

A private, live dashboard that turns personal-finance evidence into a reconciled SQLite ledger. FinDash is a Claude Code plugin (findash) with one primary product surface: a private React dashboard running on localhost.

Stars on GitHub

Momentum

stars in total
21
Star history of ya5huk/findash on GitHub, a chart by star-history.com

Other skills on findash.

fetch-bank-data

fetch-bank-data

Use when the user says "fetch bank data", "pull from bank", "fetch hapoalim", "fetch cal", "fetch credit card", "pull from cal",…

@ya5huk@ya5hukInstall Skill
fetch-investments

fetch-investments

Use when the user says "fetch investments", "fetch ibkr", "fetch interactive brokers", "pull portfolio", "fetch brokerage",…

@ya5huk@ya5hukInstall Skill
setup

setup

Use when the user says "set up findash", "onboard", "first-time setup", "get findash running", "configure findash", or is…

@ya5huk@ya5hukInstall Skill
sync-finance-data

sync-finance-data

Use when the user says "sync finance", "daily sync", "run the morning sync", "fetch my finances", "ingest new docs", "run…

@ya5huk@ya5hukInstall Skill

More skills from other plugins.

context-loader
Auto-invoked

context-loader

Search memories from earlier Pi sessions in this repository. Use it when earlier work may already explain the code, error,…

mem07d69k
@mem0ai@mem0aiInstall Skill
analyzing-ai-citations

analyzing-ai-citations

Answer AI citation and answer engine optimization (AEO) questions in PostHog: whether AI answer engines (ChatGPT, Claude, and an…

posthog2w41k
@posthog@posthogInstall Skill

Questions about findash-doctor.

Which coding agents can use findash-doctor?
findash-doctor installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.