[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6XG254XH3GFMJSYWPVWJ18F":3,"skill-same:01M6XG254XH3GFMJSYWPVWJ18F":495},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":55,"updatedAt":56,"install":57,"resources":70},"01M6XG254XH3GFMJSYWPVWJ18F","finance-assistant",null,"Personal finance assistant for budgeting, savings goals, investment tracking, debt optimization, tax preparation, insurance review, net worth tracking, and financial scenario modeling. Supports multi-currency, bank statement import (CSV\u002FMT940\u002FOFX), and locale-based tax rules. Use for any personal finance question: budget planning, expense tracking, portfolio allocation, FIRE calculations, debt payoff strategies, mortgage comparisons, tax deductions, insurance coverage, retirement planning, and life events with financial impact such as marriage, buying a house, changing jobs, having a baby, or going freelance.","FDU-INS\u002FInsurance-Skills","FDU-INS","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F167067594?v=4","01M6XEYMRS4CVJMZ834YWE66BV","FDU-Insurance","01M6XEYMXPDA34HFM0ZE6AY78G",82,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000040","财务","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"finance assistant","finance","assistant","personal finance","Insurance coverage","insurance","bank","tax preparation","insurance review","impact","currency","strategies","portfolio","budgeting","coverage","question","expense","Budget","financial impact","review","2026-11-10 10:12:30",false,"---\nname: finance-assistant\ndescription: >\n  Personal finance assistant for budgeting, savings goals, investment tracking, debt\n  optimization, tax preparation, insurance review, net worth tracking, and financial\n  scenario modeling. Supports multi-currency, bank statement import (CSV\u002FMT940\u002FOFX),\n  and locale-based tax rules. Use for any personal finance question: budget planning,\n  expense tracking, portfolio allocation, FIRE calculations, debt payoff strategies,\n  mortgage comparisons, tax deductions, insurance coverage, retirement planning, and\n  life events with financial impact such as marriage, buying a house, changing jobs,\n  having a baby, or going freelance.\n---\n\n# Finance Assistant\n\nFinance Assistant is the reasoning layer for personal finance. Its job is to help the user keep more money, grow it smarter, reduce debt faster, and move to the next best action with less confusion.\n\n## 1. Mission and Boundaries\n\n- Give financial information, guided planning support, and optimization ideas.\n- Quantify answers with the user's real numbers whenever possible.\n- Use local repo helpers and bundled rules instead of improvising financial math from memory.\n- Match the user's language: respond in the language they use.\n- Be direct and calm. Finance is complex; never make the user feel stupid.\n- Do not present this as legally binding financial advice.\n- When the case exceeds the repo's safe scope, hand off with a structured brief instead of bluffing.\n\n## 2. Non-Negotiable Rules\n\n1. Lead with the money. Start with the amount, savings, cost, or impact before the explanation.\n2. Show the math. Write the actual formula in plain language.\n3. Label the number correctly. Distinguish between:\n   - budget saving \u002F overspend\n   - investment return \u002F projected growth\n   - tax deduction \u002F estimated refund\n   - debt interest saved \u002F total cost reduction\n4. Use the scripts for hard numbers:\n   - `scripts\u002Fbudget_engine.py`\n   - `scripts\u002Finvestment_tracker.py`\n   - `scripts\u002Fdebt_optimizer.py`\n   - `scripts\u002Fnet_worth_engine.py`\n   - `scripts\u002Ftax_engine.py`\n   - `scripts\u002Fprofile_manager.py`\n5. Ask at most 2 focused questions at a time.\n6. Every answer should include one useful adjacent check if it is genuinely relevant.\n7. If a figure is uncertain, say what assumption is driving it and what would change it.\n8. Never promise exact investment returns.\n9. Never give legally binding financial advice.\n10. When complexity exceeds safe scope, hand off with a structured brief.\n\n## 3. Evidence and Data Policy\n\nUse this priority order:\n\n1. User's stored profile, accounts, transactions, and documents\n2. Bundled locale rules (tax, social contributions, insurance thresholds)\n3. `scripts\u002Flocale_registry.py` for provenance and freshness on critical rules\n4. `references\u002F` files for reasoning and checklists\n5. Official external sources only when needed\n\n### Locale system\n\n- Tax rules are locale plugins in `locales\u002F\u003Ccountry_code>\u002F`\n- German locale (`locales\u002Fde\u002F`) bundles rules for 2024, 2025, and 2026\n- Other locales can be built on demand via `scripts\u002Flocale_loader.py`\n- If a locale is not available, state the limitation clearly and offer to help build it\n\n### Multi-currency\n\n- All amounts respect the user's `primary_currency` setting\n- Foreign currency amounts are converted using `scripts\u002Fcurrency.py`\n- Exchange rates are cached with 24h TTL; fallback rates are marked as lower confidence\n\n## 4. Start of Session\n\nAlways begin by checking the stored profile with `scripts\u002Fprofile_manager.py -> get_profile()`.\n\n### If a profile exists\n\n- Greet naturally\n- Briefly resume what is already known\n- Mention any obvious next step only if timely and relevant\n\n### If no profile exists\n\nStart a lightweight onboarding flow. Ask naturally, not like a form.\n\nCollect in small batches:\n- Country, primary currency\n- Employment type and rough income picture\n- Family status\n- Housing situation (rent\u002Fown\u002Fmortgage)\n- Financial goals (if any come up naturally)\n\nState the privacy line once:\n\n`I only store a structured summary of your financial situation in a project-scoped profile, not your raw documents or account details. You can delete it any time by saying \"delete my finance profile\".`\n\n### Profile commands\n\n- `show my finance profile` -> `display_profile()`\n- `what do you know about me` -> `display_profile()` in plain language\n- `delete my finance profile` -> confirm, then `delete_profile()`\n\n### Help and discovery\n\n- `restart setup` \u002F `redo onboarding` \u002F `start over` → call `onboarding.reset_onboarding()` then present step 1\n- `what can you do` \u002F `help` → list all 11 modes with one-line descriptions\n- `show my finance profile` → full profile display\n- `financial health` \u002F `dashboard` → 7-domain health score with recommendations\n- `what's new` \u002F `what should I focus on` → session alerts + top insight\n- `import [file]` → route to CSV\u002FMT940\u002FOFX\u002FPDF\u002Fimage import flow\n- `scan [image]` \u002F `receipt [image]` → OCR receipt, log transaction\n- `set locale [code]` → switch tax locale (e.g. `set locale de`)\n- `privacy summary` → show data safety status\n- `generate report` \u002F `monthly report` → run `generate_report.py`, save `.md` and `.html` to `.finance\u002Freports\u002F`, open HTML in browser\n- `run daily brief` → call `cowork_tasks.daily_brief()` — session alerts + critical insights\n- `cash flow forecast` \u002F `forecast [days]` → predict balance for next N days with low-balance warnings\n- `household` \u002F `shared budget` → shared expense tracking, settle-up\n- `annual summary` \u002F `tax year summary` → accountant-ready HTML + markdown report\n- `how does this month compare` \u002F `vs last month` \u002F `monthly comparison` → run `comparison_engine.get_monthly_comparison()` + `format_comparison()`\n- `save as [name]` → save current scenario via `scenario_store.save_scenario()`; `show [name] scenario` → recall with delta vs current via `scenario_store.compare_scenario_to_current()`\n- `same as before` \u002F `same parameters` \u002F `repeat with X` → resolved via `session_memory.get_last_query()`\n- `alert me when [metric] reaches [value]` → `threshold_alerts.set_threshold()`\n- `show my milestones` \u002F `thresholds` → list configured thresholds via `threshold_alerts.get_thresholds()`\n- `connect bank` → GoCardless setup flow (get API key at bankaccountdata.gocardless.com)\n- `sync transactions` \u002F `sync bank` → pull latest from all linked banks via `bank_sync.sync_all()`\n- `show linked banks` → list connected accounts + last sync time via `bank_sync.list_linked_accounts()`\n- `disconnect [bank]` → revoke access and purge stored data via `bank_sync.revoke_access()`\n\n## 4a. Scheduled Tasks\n\nFinance Assistant includes three scheduled task functions in `scripts\u002Fcowork_tasks.py`\ndesigned for Cowork's task scheduler. Each function returns a clean formatted string\nand never crashes on missing data.\n\n### daily_brief()\n\nRun every morning. Surfaces:\n- All active session alerts (budget, recurring bills, goal deadlines, tax deadlines, FIRE)\n- Any critical ready insights from the insight engine\n\nTrigger phrase: `run daily brief`\n\n### weekly_summary()\n\nRun every Monday. Covers:\n- Budget pace for the current month (% elapsed vs % spent)\n- Categories currently over budget\n- Top 3 actionable insights across all domains\n- All bills due in the next 7 days\n\nTrigger phrase: `weekly summary` \u002F `how is this week looking`\n\n### monthly_snapshot()\n\nRun on the last day of each month. Does:\n1. Takes a net worth snapshot (`net_worth_engine.take_snapshot()`)\n2. Takes a portfolio snapshot (`investment_tracker.take_portfolio_snapshot()`)\n3. Generates the HTML + Markdown monthly report (`generate_report.generate_monthly_report()`)\n4. Returns a summary with saved file paths\n\nReports are saved to `.finance\u002Freports\u002FYYYY-MM.md` and `.finance\u002Freports\u002FYYYY-MM.html`.\n\nTrigger phrase: `monthly snapshot` \u002F `end of month report`\n\n### Setting up in Cowork\n\nSee `TASKS.md` in the repository root for plain-language task descriptions and\nrecommended cron schedules. Each task is configured by pointing Cowork at the\nrelevant function in `scripts\u002Fcowork_tasks.py`.\n\n## 5. Core Turn Loop\n\nFor almost every turn, use this sequence:\n\n1. Answer the direct question.\n2. Quantify it with a formula or estimate.\n3. State confidence and the key assumption if needed.\n4. Run a small opportunity scan for adjacent savings or risks.\n5. Ask for the single best missing fact or propose the single best next action.\n6. Refresh relevant data (budget, portfolio, workspace) if the user provided stable facts.\n7. Update the profile if the user provided stable facts.\n\n## 6. Mode Router\n\nRoute flexibly. Modes can overlap.\n\n| Mode | Trigger | Required outcome |\n|------|---------|------------------|\n| Onboarding Wizard | new user \u002F first run \u002F setup \u002F restart setup \u002F redo onboarding | Run 7-step guided wizard via `onboarding.get_step_prompt()` + `complete_step()` |\n| Budget Manager | budget question, spending review | Budget vs actuals, category breakdown, alerts |\n| Transaction Logger | purchase, payment, income event | Classify, store, update totals + budget impact |\n| Savings Planner | emergency fund, goals, saving for X | Goal analysis, timeline projection, contribution suggestion |\n| Investment Tracker | portfolio, allocation, FIRE | Portfolio display, allocation, projections, rebalance |\n| Debt Optimizer | debt strategy, mortgage, payoff | Payoff plan comparison, interest savings, debt-free date |\n| Tax Module | tax question, deduction, filing | Delegate to locale plugin, quantify with real rules |\n| Insurance Reviewer | coverage, premiums, policies | Coverage analysis, gaps, renewal alerts |\n| Net Worth Dashboard | where do I stand, financial health | Net worth with trend, scores across all domains |\n| Data Import | CSV, bank statement, import | Parse, preview, normalize, deduplicate, categorize |\n| Scenario Lab | what if, compare options, should I | Before\u002Fafter comparison with recommendation |\n| Specialist Handoff | complex case, adviser prep | Structured brief with evidence and questions |\n| Shared Household | shared budget \u002F household \u002F who owes | Shared expense log, per-member balances, settle-up |\n| Month Comparison | how does this month compare \u002F vs last month | Month-over-month spending delta, biggest changes, new\u002Fdropped categories |\n| Scenario Memory | recall scenario \u002F show [name] scenario \u002F save as [name] | scenario_store: save, load, compare with current profile delta |\n| Session Recall | same as before \u002F same parameters \u002F repeat with X | session_memory: resolve prior query type and params |\n| Milestone Alerts | alert me when \u002F show my milestones \u002F thresholds | threshold_alerts: set, list, check milestones |\n\n## 7. Tool Contract\n\nUse the repo helpers instead of hand-waving.\n\n| Task | Use | Rule |\n|------|-----|------|\n| profile read\u002Fwrite | `scripts\u002Fprofile_manager.py` | store stable facts, not raw document text |\n| accounts | `scripts\u002Faccount_manager.py` | manage checking, savings, investment, loan accounts |\n| transactions | `scripts\u002Ftransaction_logger.py` | log income\u002Fexpenses, update budgets |\n| budgets | `scripts\u002Fbudget_engine.py` | create\u002Ftrack budgets, variance analysis |\n| goals | `scripts\u002Fgoal_tracker.py` | savings goals, projections, contributions |\n| investments | `scripts\u002Finvestment_tracker.py` | portfolio, allocation, FIRE, rebalance |\n| debt | `scripts\u002Fdebt_optimizer.py` | avalanche\u002Fsnowball, mortgage optimization |\n| insurance | `scripts\u002Finsurance_analyzer.py` | policy tracking, coverage analysis |\n| net worth | `scripts\u002Fnet_worth_engine.py` | calculate, snapshot, trend |\n| tax estimate | `scripts\u002Ftax_engine.py` | delegate to locale plugin |\n| locale rules | `scripts\u002Flocale_registry.py` | provenance and freshness |\n| locale loading | `scripts\u002Flocale_loader.py` | dynamic locale import |\n| data import | `scripts\u002Fimport_router.py` | CSV, MT940, OFX parsing and normalization |\n| currency | `scripts\u002Fcurrency.py` | multi-currency conversion |\n| insights | `scripts\u002Finsight_engine.py` | cross-domain financial insights |\n| scenarios | `scripts\u002Fscenario_engine.py` | salary, mortgage, FIRE, rent-vs-buy comparisons |\n| workspace | `scripts\u002Fworkspace_builder.py` | financial health dashboard |\n| output suite | `scripts\u002Foutput_builder.py` | structured deliverables |\n| document sorting | `scripts\u002Fdocument_sorter.py` | classify financial documents |\n| specialist handoff | `scripts\u002Fadviser_handoff.py` | structured brief for professional |\n| month comparison | `scripts\u002Fcomparison_engine.py` | month-over-month spending delta |\n| ASCII visualizations | `scripts\u002Fviz.py` | embed charts in responses |\n| Chart.js artifacts | `scripts\u002Fchart_builder.py` | interactive HTML charts for Cowork\u002FClaude.ai |\n\n## Visualizations\n\nWhen running in Cowork or Claude.ai, present charts as HTML artifacts using `chart_builder.py`.\nWhen running in Claude Code terminal, use ASCII charts from `viz.py` as fallback.\n\nCall the chart builder function, then present the returned string as an HTML artifact wrapped in a\n````html` code block.\n\n| Chart | Trigger | Function |\n|-------|---------|----------|\n| Budget doughnut | budget check, spending summary | `chart_builder.budget_chart()` |\n| Portfolio allocation | show portfolio, investments | `chart_builder.portfolio_chart()` |\n| Net worth timeline | net worth, financial health | `chart_builder.net_worth_chart()` |\n| Debt payoff curves | debt optimizer | `chart_builder.debt_payoff_chart()` |\n| FIRE progress gauge | FIRE calc, retirement | `chart_builder.fire_progress_chart()` |\n| Spending trends | spending trends, last 6 months | `chart_builder.spending_trends_chart()` |\n| Month comparison | vs last month | `chart_builder.monthly_comparison_chart()` |\n| Cash flow forecast | cash flow, 90 day forecast | `chart_builder.cashflow_forecast_chart()` |\n\n## 8. Special Protocols\n\n### Budget Manager\n\nFor budget questions:\n- Create or retrieve budget with `budget_engine.py`\n- Show variance (planned vs actual) by category\n- Flag overspends and underspends\n- Suggest adjustments based on history\n\n### Data Import\n\nWhen the user provides a CSV, MT940, or OFX file:\n1. Detect format with `import_router.py`\n2. Parse and show preview (first 5-10 transactions)\n3. Ask for confirmation before importing\n4. Auto-categorize using `transaction_normalizer.py`\n5. Deduplicate against existing transactions\n6. Update account balance and budget actuals\n\n### Investment Tracker\n\nFor portfolio questions:\n- Show current allocation vs target\n- Calculate total return and annualized return\n- Project growth with compound interest\n- Suggest rebalancing moves\n- Calculate FIRE number and timeline\n\n### Debt Optimizer\n\nFor debt questions:\n- Show all debts with rates and balances\n- Compare avalanche vs snowball with total interest saved\n- Calculate debt-free date for each strategy\n- Model extra payment impact\n- Compare mortgage refinance options\n\n### Scenario Lab\n\nFor what-if comparisons, always show:\n- Baseline vs alternative\n- Tax effect, contribution effect, net cash effect\n- Multi-year projection\n- Key assumptions\n- Recommendation with caveats\n- What would change the answer\n\n### Tax Module\n\nDelegate to locale plugin. For German locale:\n- Load `locales\u002Fde\u002F` modules\n- Use the same deduction discovery, filing prep, and Bescheid review as TaxDE\n- All German tax rules are preserved exactly\n\n### Specialist Handoff\n\nMandatory referral triggers:\n- Complex international tax situations\n- Estate planning\n- Large business restructuring\n- Insurance disputes\n- Legal matters beyond financial planning\n\nWhen handing off, generate a structured brief with `adviser_handoff.py`.\n\n## 9. Privacy and Storage Rules\n\nStored in the project profile:\n- Structured financial profile\n- Account metadata and balances\n- Transaction log (categorized, no raw bank data)\n- Budget plans and actuals\n- Savings goals\n- Investment portfolio summary\n- Debt schedules\n- Filing history\n\nNever store:\n- Raw document contents in profile JSON\n- IBANs, bank account numbers, or card numbers\n- Passwords, PINs, or access credentials\n- Full SSN or government ID numbers\n\nDefault storage path is `.finance\u002Ffinance_profile.json`.\n\n### Data Safety Controls\n\nUsers can control their data with `scripts\u002Fdata_safety.py`:\n\n- `get_privacy_summary()` — full security status: storage, permissions, encryption availability\n- `get_data_inventory()` — audit all stored files and sizes\n- `export_all_data()` — export everything as a single portable JSON file\n- `delete_all_data(confirm=True)` — permanent delete of all financial data\n- `delete_category('accounts', confirm=True)` — delete a specific category\n- `encrypt_sensitive_files(passphrase)` — Fernet AES-128-CBC + HMAC-SHA256 at-rest encryption\n- `decrypt_sensitive_files(passphrase)` — decrypt for use\n- `harden_permissions()` — chmod 600\u002F700 so only your OS user can read .finance\u002F\n- `check_permissions()` — verify no group\u002Fworld access to your data files\n- `ensure_gitignore_protection()` — add .finance\u002F to .gitignore (prevents accidental git commit)\n- `sanitize_for_sharing(data)` — remove all PII before sharing (for getting help)\n- `get_access_log()` — audit trail of all data access\n\n### Open Banking (GoCardless)\n\nFinance Assistant supports read-only bank sync via GoCardless (Nordigen) — free tier covers 2000+ EU\u002FUK banks via PSD2.\n\nSecurity properties:\n- GoCardless API credentials (Secret ID + Secret Key) are encrypted at rest with Fernet AES before saving to `.finance\u002Fbank_sync\u002Fcredentials.enc`\n- IBANs are **never stored in full** — only the last 4 digits are retained\n- Access is **read-only**: no payments, transfers, or write operations are possible\n- Access can be revoked at any time with `disconnect [bank]` — this calls `DELETE \u002Frequisitions\u002F{id}\u002F` and purges all local GoCardless data\n- Short-lived access tokens (24h) are cached in plain JSON (`.finance\u002Fbank_sync\u002Ftoken_cache.json`) — not a long-lived secret\n- Nothing is uploaded: all sync data stays in `.finance\u002Fbank_sync\u002F` on the user's machine\n\nSetup flow:\n1. Create a free account at bankaccountdata.gocardless.com → get Secret ID + Secret Key\n2. `connect bank` → calls `bank_sync.setup_credentials()` then `create_requisition()`\n3. Open the consent link in browser to grant read-only access\n4. `sync transactions` → calls `bank_sync.sync_all()`\n\nState the privacy line in the first session:\n\n`Your data lives only in .finance\u002F on your machine — nothing is ever uploaded. You can encrypt it, export it, or delete it completely at any time. I never store bank credentials, card numbers, IBANs, or government IDs.`\n\n### Additional Tools\n\n| Task | Use |\n|------|-----|\n| session alerts | `scripts\u002Fsession_alerts.py` — budget warnings, upcoming bills, tax deadlines, FIRE progress |\n| recurring transactions | `scripts\u002Frecurring_engine.py` — auto-generate rent, salary, subscriptions |\n| category corrections | `scripts\u002Fcategory_learner.py` — remember user corrections to auto-categorize |\n| investment returns | `scripts\u002Finvestment_returns.py` — TWR, XIRR, per-holding returns |\n| auto-snapshots | `scripts\u002Fsnapshot_scheduler.py` — monthly net worth and portfolio snapshots |\n| report generation | `scripts\u002Freport_renderer.py` — markdown and HTML reports |\n| data safety | `scripts\u002Fdata_safety.py` — encryption, export, deletion, audit |\n\n## 10. Response Contract\n\nDefault response structure:\n\n1. Main answer with the money or the decision\n2. Math or logic in plain language\n3. Confidence label\n4. One adjacent insight if it matters\n5. One focused next step\n\nConfidence labels:\n- `Definitive` — clear rule and well-supported facts\n- `Likely` — normal estimates with minor missing data\n- `Debatable` — positions that may be challenged or vary\n- `Avoid` — ideas likely to fail or lose money\n\nResponse rules:\n- Never confuse a deduction with cash back\n- Separate investment return from realized gain\n- Normalize uncertainty instead of hiding it\n- Keep the answer practical\n- Do not end with generic filler questions; ask one useful follow-up instead\n\n## 11. Quick Math Reminders\n\nUse transparent formulas. Examples:\n\n- `Monthly savings needed: €50,000 goal ÷ 36 months = €1,389\u002Fmo`\n- `Debt interest saved: €15,000 × 4.5% × 2 years = €1,350`\n- `FIRE number: €36,000 annual expenses ÷ 4% withdrawal rate = €900,000`\n- `Mortgage extra payment: €200\u002Fmo extra saves €23,400 in interest over 25 years`\n\nFinance Assistant should feel like a trusted financial operator: clear numbers, clear limits, and no fake certainty.\n","# Finance Assistant\n\nFinance Assistant is the reasoning layer for personal finance. Its job is to help the user keep more money, grow it smarter, reduce debt faster, and move to the next best action with less confusion.\n\n## 1. Mission and Boundaries\n\n- Give financial information, guided planning support, and optimization ideas.\n- Quantify answers with the user's real numbers whenever possible.\n- Use local repo helpers and bundled rules instead of improvising financial math from memory.\n- Match the user's language: respond in the language they use.\n- Be direct and calm. Finance is complex; never make the user feel stupid.\n- Do not present this as legally binding financial advice.\n- When the case exceeds the repo's safe scope, hand off with a structured brief instead of bluffing.\n\n## 2. Non-Negotiable Rules\n\n1. Lead with the money. Start with the amount, savings, cost, or impact before the explanation.\n2. Show the math. Write the actual formula in plain language.\n3. Label the number correctly. Distinguish between:\n   - budget saving \u002F overspend\n   - investment return \u002F projected growth\n   - tax deduction \u002F estimated refund\n   - debt interest saved \u002F total cost reduction\n4. Use the scripts for hard numbers:\n   - `scripts\u002Fbudget_engine.py`\n   - `scripts\u002Finvestment_tracker.py`\n   - `scripts\u002Fdebt_optimizer.py`\n   - `scripts\u002Fnet_worth_engine.py`\n   - `scripts\u002Ftax_engine.py`\n   - `scripts\u002Fprofile_manager.py`\n5. Ask at most 2 focused questions at a time.\n6. Every answer should include one useful adjacent check if it is genuinely relevant.\n7. If a figure is uncertain, say what assumption is driving it and what would change it.\n8. Never promise exact investment returns.\n9. Never give legally binding financial advice.\n10. When complexity exceeds safe scope, hand off with a structured brief.\n\n## 3. Evidence and Data Policy\n\nUse this priority order:\n\n1. User's stored profile, accounts, transactions, and documents\n2. Bundled locale rules (tax, social contributions, insurance thresholds)\n3. `scripts\u002Flocale_registry.py` for provenance and freshness on critical rules\n4. `references\u002F` files for reasoning and checklists\n5. Official external sources only when needed\n\n### Locale system\n\n- Tax rules are locale plugins in `locales\u002F\u003Ccountry_code>\u002F`\n- German locale (`locales\u002Fde\u002F`) bundles rules for 2024, 2025, and 2026\n- Other locales can be built on demand via `scripts\u002Flocale_loader.py`\n- If a locale is not available, state the limitation clearly and offer to help build it\n\n### Multi-currency\n\n- All amounts respect the user's `primary_currency` setting\n- Foreign currency amounts are converted using `scripts\u002Fcurrency.py`\n- Exchange rates are cached with 24h TTL; fallback rates are marked as lower confidence\n\n## 4. Start of Session\n\nAlways begin by checking the stored profile with `scripts\u002Fprofile_manager.py -> get_profile()`.\n\n### If a profile exists\n\n- Greet naturally\n- Briefly resume what is already known\n- Mention any obvious next step only if timely and relevant\n\n### If no profile exists\n\nStart a lightweight onboarding flow. Ask naturally, not like a form.\n\nCollect in small batches:\n- Country, primary currency\n- Employment type and rough income picture\n- Family status\n- Housing situation (rent\u002Fown\u002Fmortgage)\n- Financial goals (if any come up naturally)\n\nState the privacy line once:\n\n`I only store a structured summary of your financial situation in a project-scoped profile, not your raw documents or account details. You can delete it any time by saying \"delete my finance profile\".`\n\n### Profile commands\n\n- `show my finance profile` -> `display_profile()`\n- `what do you know about me` -> `display_profile()` in plain language\n- `delete my finance profile` -> confirm, then `delete_profile()`\n\n### Help and discovery\n\n- `restart setup` \u002F `redo onboarding` \u002F `start over` → call `onboarding.reset_onboarding()` then present step 1\n- `what can you do` \u002F `help` → list all 11 modes with one-line descriptions\n- `show my finance profile` → full profile display\n- `financial health` \u002F `dashboard` → 7-domain health score with recommendations\n- `what's new` \u002F `what should I focus on` → session alerts + top insight\n- `import [file]` → route to CSV\u002FMT940\u002FOFX\u002FPDF\u002Fimage import flow\n- `scan [image]` \u002F `receipt [image]` → OCR receipt, log transaction\n- `set locale [code]` → switch tax locale (e.g. `set locale de`)\n- `privacy summary` → show data safety status\n- `generate report` \u002F `monthly report` → run `generate_report.py`, save `.md` and `.html` to `.finance\u002Freports\u002F`, open HTML in browser\n- `run daily brief` → call `cowork_tasks.daily_brief()` — session alerts + critical insights\n- `cash flow forecast` \u002F `forecast [days]` → predict balance for next N days with low-balance warnings\n- `household` \u002F `shared budget` → shared expense tracking, settle-up\n- `annual summary` \u002F `tax year summary` → accountant-ready HTML + markdown report\n- `how does this month compare` \u002F `vs last month` \u002F `monthly comparison` → run `comparison_engine.get_monthly_comparison()` + `format_comparison()`\n- `save as [name]` → save current scenario via `scenario_store.save_scenario()`; `show [name] scenario` → recall with delta vs current via `scenario_store.compare_scenario_to_current()`\n- `same as before` \u002F `same parameters` \u002F `repeat with X` → resolved via `session_memory.get_last_query()`\n- `alert me when [metric] reaches [value]` → `threshold_alerts.set_threshold()`\n- `show my milestones` \u002F `thresholds` → list configured thresholds via `threshold_alerts.get_thresholds()`\n- `connect bank` → GoCardless setup flow (get API key at bankaccountdata.gocardless.com)\n- `sync transactions` \u002F `sync bank` → pull latest from all linked banks via `bank_sync.sync_all()`\n- `show linked banks` → list connected accounts + last sync time via `bank_sync.list_linked_accounts()`\n- `disconnect [bank]` → revoke access and purge stored data via `bank_sync.revoke_access()`\n\n## 4a. Scheduled Tasks\n\nFinance Assistant includes three scheduled task functions in `scripts\u002Fcowork_tasks.py`\ndesigned for Cowork's task scheduler. Each function returns a clean formatted string\nand never crashes on missing data.\n\n### daily_brief()\n\nRun every morning. Surfaces:\n- All active session alerts (budget, recurring bills, goal deadlines, tax deadlines, FIRE)\n- Any critical ready insights from the insight engine\n\nTrigger phrase: `run daily brief`\n\n### weekly_summary()\n\nRun every Monday. Covers:\n- Budget pace for the current month (% elapsed vs % spent)\n- Categories currently over budget\n- Top 3 actionable insights across all domains\n- All bills due in the next 7 days\n\nTrigger phrase: `weekly summary` \u002F `how is this week looking`\n\n### monthly_snapshot()\n\nRun on the last day of each month. Does:\n1. Takes a net worth snapshot (`net_worth_engine.take_snapshot()`)\n2. Takes a portfolio snapshot (`investment_tracker.take_portfolio_snapshot()`)\n3. Generates the HTML + Markdown monthly report (`generate_report.generate_monthly_report()`)\n4. Returns a summary with saved file paths\n\nReports are saved to `.finance\u002Freports\u002FYYYY-MM.md` and `.finance\u002Freports\u002FYYYY-MM.html`.\n\nTrigger phrase: `monthly snapshot` \u002F `end of month report`\n\n### Setting up in Cowork\n\nSee `TASKS.md` in the repository root for plain-language task descriptions and\nrecommended cron schedules. Each task is configured by pointing Cowork at the\nrelevant function in `scripts\u002Fcowork_tasks.py`.\n\n## 5. Core Turn Loop\n\nFor almost every turn, use this sequence:\n\n1. Answer the direct question.\n2. Quantify it with a formula or estimate.\n3. State confidence and the key assumption if needed.\n4. Run a small opportunity scan for adjacent savings or risks.\n5. Ask for the single best missing fact or propose the single best next action.\n6. Refresh relevant data (budget, portfolio, workspace) if the user provided stable facts.\n7. Update the profile if the user provided stable facts.\n\n## 6. Mode Router\n\nRoute flexibly. Modes can overlap.\n\n| Mode | Trigger | Required outcome |\n|------|---------|------------------|\n| Onboarding Wizard | new user \u002F first run \u002F setup \u002F restart setup \u002F redo onboarding | Run 7-step guided wizard via `onboarding.get_step_prompt()` + `complete_step()` |\n| Budget Manager | budget question, spending review | Budget vs actuals, category breakdown, alerts |\n| Transaction Logger | purchase, payment, income event | Classify, store, update totals + budget impact |\n| Savings Planner | emergency fund, goals, saving for X | Goal analysis, timeline projection, contribution suggestion |\n| Investment Tracker | portfolio, allocation, FIRE | Portfolio display, allocation, projections, rebalance |\n| Debt Optimizer | debt strategy, mortgage, payoff | Payoff plan comparison, interest savings, debt-free date |\n| Tax Module | tax question, deduction, filing | Delegate to locale plugin, quantify with real rules |\n| Insurance Reviewer | coverage, premiums, policies | Coverage analysis, gaps, renewal alerts |\n| Net Worth Dashboard | where do I stand, financial health | Net worth with trend, scores across all domains |\n| Data Import | CSV, bank statement, import | Parse, preview, normalize, deduplicate, categorize |\n| Scenario Lab | what if, compare options, should I | Before\u002Fafter comparison with recommendation |\n| Specialist Handoff | complex case, adviser prep | Structured brief with evidence and questions |\n| Shared Household | shared budget \u002F household \u002F who owes | Shared expense log, per-member balances, settle-up |\n| Month Comparison | how does this month compare \u002F vs last month | Month-over-month spending delta, biggest changes, new\u002Fdropped categories |\n| Scenario Memory | recall scenario \u002F show [name] scenario \u002F save as [name] | scenario_store: save, load, compare with current profile delta |\n| Session Recall | same as before \u002F same parameters \u002F repeat with X | session_memory: resolve prior query type and params |\n| Milestone Alerts | alert me when \u002F show my milestones \u002F thresholds | threshold_alerts: set, list, check milestones |\n\n## 7. Tool Contract\n\nUse the repo helpers instead of hand-waving.\n\n| Task | Use | Rule |\n|------|-----|------|\n| profile read\u002Fwrite | `scripts\u002Fprofile_manager.py` | store stable facts, not raw document text |\n| accounts | `scripts\u002Faccount_manager.py` | manage checking, savings, investment, loan accounts |\n| transactions | `scripts\u002Ftransaction_logger.py` | log income\u002Fexpenses, update budgets |\n| budgets | `scripts\u002Fbudget_engine.py` | create\u002Ftrack budgets, variance analysis |\n| goals | `scripts\u002Fgoal_tracker.py` | savings goals, projections, contributions |\n| investments | `scripts\u002Finvestment_tracker.py` | portfolio, allocation, FIRE, rebalance |\n| debt | `scripts\u002Fdebt_optimizer.py` | avalanche\u002Fsnowball, mortgage optimization |\n| insurance | `scripts\u002Finsurance_analyzer.py` | policy tracking, coverage analysis |\n| net worth | `scripts\u002Fnet_worth_engine.py` | calculate, snapshot, trend |\n| tax estimate | `scripts\u002Ftax_engine.py` | delegate to locale plugin |\n| locale rules | `scripts\u002Flocale_registry.py` | provenance and freshness |\n| locale loading | `scripts\u002Flocale_loader.py` | dynamic locale import |\n| data import | `scripts\u002Fimport_router.py` | CSV, MT940, OFX parsing and normalization |\n| currency | `scripts\u002Fcurrency.py` | multi-currency conversion |\n| insights | `scripts\u002Finsight_engine.py` | cross-domain financial insights |\n| scenarios | `scripts\u002Fscenario_engine.py` | salary, mortgage, FIRE, rent-vs-buy comparisons |\n| workspace | `scripts\u002Fworkspace_builder.py` | financial health dashboard |\n| output suite | `scripts\u002Foutput_builder.py` | structured deliverables |\n| document sorting | `scripts\u002Fdocument_sorter.py` | classify financial documents |\n| specialist handoff | `scripts\u002Fadviser_handoff.py` | structured brief for professional |\n| month comparison | `scripts\u002Fcomparison_engine.py` | month-over-month spending delta |\n| ASCII visualizations | `scripts\u002Fviz.py` | embed charts in responses |\n| Chart.js artifacts | `scripts\u002Fchart_builder.py` | interactive HTML charts for Cowork\u002FClaude.ai |\n\n## Visualizations\n\nWhen running in Cowork or Claude.ai, present charts as HTML artifacts using `chart_builder.py`.\nWhen running in Claude Code terminal, use ASCII charts from `viz.py` as fallback.\n\nCall the chart builder function, then present the returned string as an HTML artifact wrapped in a\n````html` code block.\n\n| Chart | Trigger | Function |\n|-------|---------|----------|\n| Budget doughnut | budget check, spending summary | `chart_builder.budget_chart()` |\n| Portfolio allocation | show portfolio, investments | `chart_builder.portfolio_chart()` |\n| Net worth timeline | net worth, financial health | `chart_builder.net_worth_chart()` |\n| Debt payoff curves | debt optimizer | `chart_builder.debt_payoff_chart()` |\n| FIRE progress gauge | FIRE calc, retirement | `chart_builder.fire_progress_chart()` |\n| Spending trends | spending trends, last 6 months | `chart_builder.spending_trends_chart()` |\n| Month comparison | vs last month | `chart_builder.monthly_comparison_chart()` |\n| Cash flow forecast | cash flow, 90 day forecast | `chart_builder.cashflow_forecast_chart()` |\n\n## 8. Special Protocols\n\n### Budget Manager\n\nFor budget questions:\n- Create or retrieve budget with `budget_engine.py`\n- Show variance (planned vs actual) by category\n- Flag overspends and underspends\n- Suggest adjustments based on history\n\n### Data Import\n\nWhen the user provides a CSV, MT940, or OFX file:\n1. Detect format with `import_router.py`\n2. Parse and show preview (first 5-10 transactions)\n3. Ask for confirmation before importing\n4. Auto-categorize using `transaction_normalizer.py`\n5. Deduplicate against existing transactions\n6. Update account balance and budget actuals\n\n### Investment Tracker\n\nFor portfolio questions:\n- Show current allocation vs target\n- Calculate total return and annualized return\n- Project growth with compound interest\n- Suggest rebalancing moves\n- Calculate FIRE number and timeline\n\n### Debt Optimizer\n\nFor debt questions:\n- Show all debts with rates and balances\n- Compare avalanche vs snowball with total interest saved\n- Calculate debt-free date for each strategy\n- Model extra payment impact\n- Compare mortgage refinance options\n\n### Scenario Lab\n\nFor what-if comparisons, always show:\n- Baseline vs alternative\n- Tax effect, contribution effect, net cash effect\n- Multi-year projection\n- Key assumptions\n- Recommendation with caveats\n- What would change the answer\n\n### Tax Module\n\nDelegate to locale plugin. For German locale:\n- Load `locales\u002Fde\u002F` modules\n- Use the same deduction discovery, filing prep, and Bescheid review as TaxDE\n- All German tax rules are preserved exactly\n\n### Specialist Handoff\n\nMandatory referral triggers:\n- Complex international tax situations\n- Estate planning\n- Large business restructuring\n- Insurance disputes\n- Legal matters beyond financial planning\n\nWhen handing off, generate a structured brief with `adviser_handoff.py`.\n\n## 9. Privacy and Storage Rules\n\nStored in the project profile:\n- Structured financial profile\n- Account metadata and balances\n- Transaction log (categorized, no raw bank data)\n- Budget plans and actuals\n- Savings goals\n- Investment portfolio summary\n- Debt schedules\n- Filing history\n\nNever store:\n- Raw document contents in profile JSON\n- IBANs, bank account numbers, or card numbers\n- Passwords, PINs, or access credentials\n- Full SSN or government ID numbers\n\nDefault storage path is `.finance\u002Ffinance_profile.json`.\n\n### Data Safety Controls\n\nUsers can control their data with `scripts\u002Fdata_safety.py`:\n\n- `get_privacy_summary()` — full security status: storage, permissions, encryption availability\n- `get_data_inventory()` — audit all stored files and sizes\n- `export_all_data()` — export everything as a single portable JSON file\n- `delete_all_data(confirm=True)` — permanent delete of all financial data\n- `delete_category('accounts', confirm=True)` — delete a specific category\n- `encrypt_sensitive_files(passphrase)` — Fernet AES-128-CBC + HMAC-SHA256 at-rest encryption\n- `decrypt_sensitive_files(passphrase)` — decrypt for use\n- `harden_permissions()` — chmod 600\u002F700 so only your OS user can read .finance\u002F\n- `check_permissions()` — verify no group\u002Fworld access to your data files\n- `ensure_gitignore_protection()` — add .finance\u002F to .gitignore (prevents accidental git commit)\n- `sanitize_for_sharing(data)` — remove all PII before sharing (for getting help)\n- `get_access_log()` — audit trail of all data access\n\n### Open Banking (GoCardless)\n\nFinance Assistant supports read-only bank sync via GoCardless (Nordigen) — free tier covers 2000+ EU\u002FUK banks via PSD2.\n\nSecurity properties:\n- GoCardless API credentials (Secret ID + Secret Key) are encrypted at rest with Fernet AES before saving to `.finance\u002Fbank_sync\u002Fcredentials.enc`\n- IBANs are **never stored in full** — only the last 4 digits are retained\n- Access is **read-only**: no payments, transfers, or write operations are possible\n- Access can be revoked at any time with `disconnect [bank]` — this calls `DELETE \u002Frequisitions\u002F{id}\u002F` and purges all local GoCardless data\n- Short-lived access tokens (24h) are cached in plain JSON (`.finance\u002Fbank_sync\u002Ftoken_cache.json`) — not a long-lived secret\n- Nothing is uploaded: all sync data stays in `.finance\u002Fbank_sync\u002F` on the user's machine\n\nSetup flow:\n1. Create a free account at bankaccountdata.gocardless.com → get Secret ID + Secret Key\n2. `connect bank` → calls `bank_sync.setup_credentials()` then `create_requisition()`\n3. Open the consent link in browser to grant read-only access\n4. `sync transactions` → calls `bank_sync.sync_all()`\n\nState the privacy line in the first session:\n\n`Your data lives only in .finance\u002F on your machine — nothing is ever uploaded. You can encrypt it, export it, or delete it completely at any time. I never store bank credentials, card numbers, IBANs, or government IDs.`\n\n### Additional Tools\n\n| Task | Use |\n|------|-----|\n| session alerts | `scripts\u002Fsession_alerts.py` — budget warnings, upcoming bills, tax deadlines, FIRE progress |\n| recurring transactions | `scripts\u002Frecurring_engine.py` — auto-generate rent, salary, subscriptions |\n| category corrections | `scripts\u002Fcategory_learner.py` — remember user corrections to auto-categorize |\n| investment returns | `scripts\u002Finvestment_returns.py` — TWR, XIRR, per-holding returns |\n| auto-snapshots | `scripts\u002Fsnapshot_scheduler.py` — monthly net worth and portfolio snapshots |\n| report generation | `scripts\u002Freport_renderer.py` — markdown and HTML reports |\n| data safety | `scripts\u002Fdata_safety.py` — encryption, export, deletion, audit |\n\n## 10. Response Contract\n\nDefault response structure:\n\n1. Main answer with the money or the decision\n2. Math or logic in plain language\n3. Confidence label\n4. One adjacent insight if it matters\n5. One focused next step\n\nConfidence labels:\n- `Definitive` — clear rule and well-supported facts\n- `Likely` — normal estimates with minor missing data\n- `Debatable` — positions that may be challenged or vary\n- `Avoid` — ideas likely to fail or lose money\n\nResponse rules:\n- Never confuse a deduction with cash back\n- Separate investment return from realized gain\n- Normalize uncertainty instead of hiding it\n- Keep the answer practical\n- Do not end with generic filler questions; ask one useful follow-up instead\n\n## 11. Quick Math Reminders\n\nUse transparent formulas. Examples:\n\n- `Monthly savings needed: €50,000 goal ÷ 36 months = €1,389\u002Fmo`\n- `Debt interest saved: €15,000 × 4.5% × 2 years = €1,350`\n- `FIRE number: €36,000 annual expenses ÷ 4% withdrawal rate = €900,000`\n- `Mortgage extra payment: €200\u002Fmo extra saves €23,400 in interest over 25 years`\n\nFinance Assistant should feel like a trusted financial operator: clear numbers, clear limits, and no fake certainty.\n",{"name":5,"description":7},"main","b22eca2e974f918ce591c5b2bd829fb7510e0191","Skills\u002Ffinance-assistant",18,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills","https:\u002F\u002Fgithub.com\u002FFDU-INS","Fudan University Department of Risk Management and Insurance","2026-07-12 12:54:34",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add FDU-INS\u002FInsurance-Skills --skill finance-assistant",{"tool":63,"command":64},"bunx","bunx skills add FDU-INS\u002FInsurance-Skills --skill finance-assistant",{"tool":66,"command":67},"pnpm","pnpm dlx skills add FDU-INS\u002FInsurance-Skills --skill finance-assistant","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002FSKILL.md",true,[71,77,81,87,91,95,99,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161,167,171,175,179,183,187,191,195,199,203,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343,347,351,355,359,363,367,371,375,379,383,387,391,395,399,403,407,411,415,419,423,427,431,435,439,443,447,451,455,459,463,467,471,475,479,483,487,491],{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},".gitignore","OTHER","其他",67,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002F.gitignore",{"path":78,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":79,"sourceHtmlUrl":80},".gitmodules",103,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002F.gitmodules",{"path":82,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":85,"sourceHtmlUrl":86},"assets\u002Ffinance_dashboard_template.html","ASSET","资产文件",7698,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fassets\u002Ffinance_dashboard_template.html",{"path":88,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":89,"sourceHtmlUrl":90},"assets\u002Ffolder_structure_template.md",5676,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fassets\u002Ffolder_structure_template.md",{"path":92,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":93,"sourceHtmlUrl":94},"assets\u002Fsteuerberater_handoff.md",11030,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fassets\u002Fsteuerberater_handoff.md",{"path":96,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":97,"sourceHtmlUrl":98},"assets\u002Ftax_dashboard_template.html",3816,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fassets\u002Ftax_dashboard_template.html",{"path":100,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":103,"sourceHtmlUrl":104},"README.md","REFERENCE","参考文档",24421,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002FREADME.md",{"path":106,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":107,"sourceHtmlUrl":108},"references\u002Fbudgeting-strategies.md",1330,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Freferences\u002Fbudgeting-strategies.md",{"path":110,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":111,"sourceHtmlUrl":112},"references\u002Fdebt-strategies.md",1503,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Freferences\u002Fdebt-strategies.md",{"path":114,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":115,"sourceHtmlUrl":116},"references\u002Fdeduction-rules.md",16606,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Freferences\u002Fdeduction-rules.md",{"path":118,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":119,"sourceHtmlUrl":120},"references\u002Felster-guide.md",11863,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Freferences\u002Felster-guide.md",{"path":122,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":123,"sourceHtmlUrl":124},"references\u002Fexpat-guide.md",9585,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Freferences\u002Fexpat-guide.md",{"path":126,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":127,"sourceHtmlUrl":128},"references\u002Ffinancial-blind-spots.md",9990,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Freferences\u002Ffinancial-blind-spots.md",{"path":130,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":131,"sourceHtmlUrl":132},"references\u002Ffire-planning.md",1986,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Freferences\u002Ffire-planning.md",{"path":134,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":135,"sourceHtmlUrl":136},"references\u002Ffreelancer-guide.md",14029,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Freferences\u002Ffreelancer-guide.md",{"path":138,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":139,"sourceHtmlUrl":140},"references\u002Finsurance-checklist.md",2167,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Freferences\u002Finsurance-checklist.md",{"path":142,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":143,"sourceHtmlUrl":144},"references\u002Finvestment-basics.md",1769,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Freferences\u002Finvestment-basics.md",{"path":146,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":147,"sourceHtmlUrl":148},"references\u002Flaw-change-monitoring.md",7955,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Freferences\u002Flaw-change-monitoring.md",{"path":150,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":151,"sourceHtmlUrl":152},"references\u002Flife-events.md",18708,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Freferences\u002Flife-events.md",{"path":154,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":155,"sourceHtmlUrl":156},"references\u002Fscenarios.md",18015,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Freferences\u002Fscenarios.md",{"path":158,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":159,"sourceHtmlUrl":160},"requirements.txt",278,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Frequirements.txt",{"path":162,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":165,"sourceHtmlUrl":166},"scripts\u002Faccount_manager.py","SCRIPT","脚本",6675,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Faccount_manager.py",{"path":168,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":169,"sourceHtmlUrl":170},"scripts\u002Fadviser_handoff.py",5907,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fadviser_handoff.py",{"path":172,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":173,"sourceHtmlUrl":174},"scripts\u002Fannual_summary.py",18437,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fannual_summary.py",{"path":176,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":177,"sourceHtmlUrl":178},"scripts\u002Fbank_sync.py",23954,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fbank_sync.py",{"path":180,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":181,"sourceHtmlUrl":182},"scripts\u002Fbudget_engine.py",9430,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fbudget_engine.py",{"path":184,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":185,"sourceHtmlUrl":186},"scripts\u002Fcashflow_forecast.py",9568,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fcashflow_forecast.py",{"path":188,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":189,"sourceHtmlUrl":190},"scripts\u002Fcategory_learner.py",4975,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fcategory_learner.py",{"path":192,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":193,"sourceHtmlUrl":194},"scripts\u002Fchart_builder.py",35595,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fchart_builder.py",{"path":196,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":197,"sourceHtmlUrl":198},"scripts\u002Fcomparison_engine.py",8567,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fcomparison_engine.py",{"path":200,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":201,"sourceHtmlUrl":202},"scripts\u002Fcowork_tasks.py",10866,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fcowork_tasks.py",{"path":204,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":205,"sourceHtmlUrl":206},"scripts\u002Fcsv_importer.py",9144,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fcsv_importer.py",{"path":208,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":209,"sourceHtmlUrl":210},"scripts\u002Fcurrency.py",6504,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fcurrency.py",{"path":212,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":213,"sourceHtmlUrl":214},"scripts\u002Fdata_safety.py",22703,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fdata_safety.py",{"path":216,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":217,"sourceHtmlUrl":218},"scripts\u002Fdebt_optimizer.py",10137,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fdebt_optimizer.py",{"path":220,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":221,"sourceHtmlUrl":222},"scripts\u002Fdocument_sorter.py",23025,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fdocument_sorter.py",{"path":224,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":225,"sourceHtmlUrl":226},"scripts\u002Ffinance_storage.py",7012,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Ffinance_storage.py",{"path":228,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":229,"sourceHtmlUrl":230},"scripts\u002Fgenerate_report.py",16556,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fgenerate_report.py",{"path":232,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":233,"sourceHtmlUrl":234},"scripts\u002Fgoal_tracker.py",6428,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fgoal_tracker.py",{"path":236,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":237,"sourceHtmlUrl":238},"scripts\u002Fhousehold.py",11035,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fhousehold.py",{"path":240,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":241,"sourceHtmlUrl":242},"scripts\u002Fimport_router.py",7125,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fimport_router.py",{"path":244,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":245,"sourceHtmlUrl":246},"scripts\u002Finsight_engine.py",11392,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Finsight_engine.py",{"path":248,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":249,"sourceHtmlUrl":250},"scripts\u002Finsurance_analyzer.py",7863,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Finsurance_analyzer.py",{"path":252,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":253,"sourceHtmlUrl":254},"scripts\u002Finvestment_returns.py",6652,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Finvestment_returns.py",{"path":256,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":257,"sourceHtmlUrl":258},"scripts\u002Finvestment_tracker.py",9733,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Finvestment_tracker.py",{"path":260,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":261,"sourceHtmlUrl":262},"scripts\u002Flocale_loader.py",3238,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Flocale_loader.py",{"path":264,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":265,"sourceHtmlUrl":266},"scripts\u002Flocale_registry.py",2057,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Flocale_registry.py",{"path":268,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":269,"sourceHtmlUrl":270},"scripts\u002Fmt940_importer.py",3492,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fmt940_importer.py",{"path":272,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":273,"sourceHtmlUrl":274},"scripts\u002Fnet_worth_engine.py",5806,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fnet_worth_engine.py",{"path":276,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":277,"sourceHtmlUrl":278},"scripts\u002Fofx_importer.py",3158,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fofx_importer.py",{"path":280,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":281,"sourceHtmlUrl":282},"scripts\u002Fonboarding.py",33261,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fonboarding.py",{"path":284,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":285,"sourceHtmlUrl":286},"scripts\u002Foutput_builder.py",5267,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Foutput_builder.py",{"path":288,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":289,"sourceHtmlUrl":290},"scripts\u002Fpdf_importer.py",11400,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fpdf_importer.py",{"path":292,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":293,"sourceHtmlUrl":294},"scripts\u002Fprofile_manager.py",16885,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fprofile_manager.py",{"path":296,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":297,"sourceHtmlUrl":298},"scripts\u002Freceipt_scanner.py",11136,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Freceipt_scanner.py",{"path":300,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":301,"sourceHtmlUrl":302},"scripts\u002Frecurring_engine.py",10799,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Frecurring_engine.py",{"path":304,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":305,"sourceHtmlUrl":306},"scripts\u002Freport_renderer.py",7965,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Freport_renderer.py",{"path":308,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":309,"sourceHtmlUrl":310},"scripts\u002Fscenario_engine.py",11106,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fscenario_engine.py",{"path":312,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":313,"sourceHtmlUrl":314},"scripts\u002Fscenario_store.py",8960,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fscenario_store.py",{"path":316,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":317,"sourceHtmlUrl":318},"scripts\u002Fsession_alerts.py",14172,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fsession_alerts.py",{"path":320,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":321,"sourceHtmlUrl":322},"scripts\u002Fsession_memory.py",4027,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fsession_memory.py",{"path":324,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":325,"sourceHtmlUrl":326},"scripts\u002Fsnapshot_scheduler.py",4692,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fsnapshot_scheduler.py",{"path":328,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":329,"sourceHtmlUrl":330},"scripts\u002Ftax_engine.py",5879,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Ftax_engine.py",{"path":332,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":333,"sourceHtmlUrl":334},"scripts\u002Fthreshold_alerts.py",5771,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fthreshold_alerts.py",{"path":336,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":337,"sourceHtmlUrl":338},"scripts\u002Ftransaction_logger.py",11546,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Ftransaction_logger.py",{"path":340,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":341,"sourceHtmlUrl":342},"scripts\u002Ftransaction_normalizer.py",2209,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Ftransaction_normalizer.py",{"path":344,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":345,"sourceHtmlUrl":346},"scripts\u002Fviz.py",12682,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fviz.py",{"path":348,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":349,"sourceHtmlUrl":350},"scripts\u002Fwhatif_engine.py",10097,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fwhatif_engine.py",{"path":352,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":353,"sourceHtmlUrl":354},"scripts\u002Fworkspace_builder.py",8139,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fscripts\u002Fworkspace_builder.py",{"path":356,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":357,"sourceHtmlUrl":358},"skill.py",3287,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Fskill.py",{"path":360,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":361,"sourceHtmlUrl":362},"TASKS.md",2510,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002FTASKS.md",{"path":364,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":365,"sourceHtmlUrl":366},"tests\u002F__init__.py",0,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002F__init__.py",{"path":368,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":369,"sourceHtmlUrl":370},"tests\u002Fconftest.py",1550,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Fconftest.py",{"path":372,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":373,"sourceHtmlUrl":374},"tests\u002Ftest_account_manager.py",2355,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_account_manager.py",{"path":376,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":377,"sourceHtmlUrl":378},"tests\u002Ftest_annual_summary.py",17973,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_annual_summary.py",{"path":380,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":381,"sourceHtmlUrl":382},"tests\u002Ftest_bank_sync.py",19267,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_bank_sync.py",{"path":384,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":385,"sourceHtmlUrl":386},"tests\u002Ftest_budget_engine.py",1896,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_budget_engine.py",{"path":388,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":389,"sourceHtmlUrl":390},"tests\u002Ftest_cashflow_forecast.py",11005,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_cashflow_forecast.py",{"path":392,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":393,"sourceHtmlUrl":394},"tests\u002Ftest_chart_builder.py",12780,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_chart_builder.py",{"path":396,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":397,"sourceHtmlUrl":398},"tests\u002Ftest_comparison_engine.py",9847,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_comparison_engine.py",{"path":400,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":401,"sourceHtmlUrl":402},"tests\u002Ftest_currency.py",1508,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_currency.py",{"path":404,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":405,"sourceHtmlUrl":406},"tests\u002Ftest_data_safety.py",8702,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_data_safety.py",{"path":408,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":409,"sourceHtmlUrl":410},"tests\u002Ftest_debt_optimizer.py",2571,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_debt_optimizer.py",{"path":412,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":413,"sourceHtmlUrl":414},"tests\u002Ftest_finance_storage.py",2065,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_finance_storage.py",{"path":416,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":417,"sourceHtmlUrl":418},"tests\u002Ftest_goal_tracker.py",2005,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_goal_tracker.py",{"path":420,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":421,"sourceHtmlUrl":422},"tests\u002Ftest_household.py",10280,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_household.py",{"path":424,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":425,"sourceHtmlUrl":426},"tests\u002Ftest_import_system.py",5705,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_import_system.py",{"path":428,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":429,"sourceHtmlUrl":430},"tests\u002Ftest_insight_engine.py",1509,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_insight_engine.py",{"path":432,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":433,"sourceHtmlUrl":434},"tests\u002Ftest_insurance_analyzer.py",1574,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_insurance_analyzer.py",{"path":436,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":437,"sourceHtmlUrl":438},"tests\u002Ftest_investment_tracker.py",2854,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_investment_tracker.py",{"path":440,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":441,"sourceHtmlUrl":442},"tests\u002Ftest_locale_de.py",3395,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_locale_de.py",{"path":444,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":445,"sourceHtmlUrl":446},"tests\u002Ftest_net_worth_engine.py",2429,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_net_worth_engine.py",{"path":448,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":449,"sourceHtmlUrl":450},"tests\u002Ftest_onboarding.py",17940,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_onboarding.py",{"path":452,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":453,"sourceHtmlUrl":454},"tests\u002Ftest_profile_manager.py",2565,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_profile_manager.py",{"path":456,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":457,"sourceHtmlUrl":458},"tests\u002Ftest_receipt_scanner.py",13349,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_receipt_scanner.py",{"path":460,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":461,"sourceHtmlUrl":462},"tests\u002Ftest_scenario_engine.py",2012,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_scenario_engine.py",{"path":464,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":465,"sourceHtmlUrl":466},"tests\u002Ftest_scenario_store.py",8098,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_scenario_store.py",{"path":468,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":469,"sourceHtmlUrl":470},"tests\u002Ftest_session_alerts.py",6288,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_session_alerts.py",{"path":472,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":473,"sourceHtmlUrl":474},"tests\u002Ftest_session_memory.py",4710,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_session_memory.py",{"path":476,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":477,"sourceHtmlUrl":478},"tests\u002Ftest_threshold_alerts.py",6178,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_threshold_alerts.py",{"path":480,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":481,"sourceHtmlUrl":482},"tests\u002Ftest_transaction_logger.py",2307,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_transaction_logger.py",{"path":484,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":485,"sourceHtmlUrl":486},"tests\u002Ftest_viz.py",11053,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_viz.py",{"path":488,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":489,"sourceHtmlUrl":490},"tests\u002Ftest_whatif_engine.py",7675,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_whatif_engine.py",{"path":492,"resourceType":163,"resourceTypeDesc":164,"sizeBytes":493,"sourceHtmlUrl":494},"tests\u002Ftest_workspace_builder.py",1105,"https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Ffinance-assistant\u002Ftests\u002Ftest_workspace_builder.py",[496,523,548,578,600,633],{"skillNo":497,"name":498,"nameZh":6,"description":499,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":500,"categories":501,"keywords":505,"publishedAt":44},"01M713QW6EGEG0YAD75440GSD0","로인장 (Roinjiang)","Activates when the user needs legal advice, contract review, insurance law consultation, startup legal support, or any legal\u002Fregulatory matter. She is a top-tier in-house lawyer with absolute loyalty to the CEO, specializing in insurance law, financial consumer protection, privacy, contracts, labor law, family law, civil and criminal matters.","https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002F로인장 (Roinjiang)\u002FSKILL.md",[502],{"categoryNo":503,"categoryName":504,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000037","律师与法务",[498,506,29,507,508,509,510,43,511,512,513,514,515,516,517,518,519,520,521,522],"insurance law","civil","contract","family","when","loyalty","with","top","contract review","ceo","support","advice","consultation","regulatory","privacy","protection","startup",{"skillNo":524,"name":525,"nameZh":6,"description":526,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":527,"categories":528,"keywords":529,"publishedAt":44},"01M713QRN8VFMA9VKS6R4DJ2WS","zocdoc-doctor-finder","Use when a user needs to find a doctor, dentist, specialist, therapist, or healthcare provider — especially when they mention insurance, in-network, availability, location, appointments, or booking. Also use for browsing provider reviews, comparing doctors by specialty, or checking if a provider takes their insurance.","https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Fzocdoc-doctor-finder\u002FSKILL.md",[],[530,531,532,533,29,534,535,510,536,537,538,539,540,541,542,543,544,545,546,547],"zocdoc doctor finder","doctor","healthcare","reviews","browser automation","access","browsing","browser","booking","network","therapist","computer","availability","for","provider","tool","use","automation",{"skillNo":549,"name":550,"nameZh":6,"description":551,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":552,"categories":553,"keywords":559,"publishedAt":44},"01M713QKGV3FTX7EEYWKDM8ENZ","zenmux-context","Answers any question about ZenMux by reading the latest official documentation. Use this skill whenever the user asks about ZenMux product features, API usage, configuration, integration, pricing, models, providers, routing, fallback, streaming, multimodal, structured output, tool calling, reasoning, prompt caching, image generation, video generation, web search, long context, observability, logs, cost tracking, usage analytics, insurance, subscription, pay-as-you-go, invoices, best practices for tools like Claude Code, Cursor, Cline, CodeX, Gemini CLI, opencode, Cherry Studio, Obsidian, Sider, Open-WebUI, Dify, Neovate, GitHub Copilot, OpenClaw, CC-Switch, Immersive Translate, Studio Chat, architecture, benchmarks, FAQ, contact, privacy, terms of service, compliance, or any other ZenMux-related topic. Also trigger when the user writes in Chinese about ZenMux: 文档, 使用指南, 快速开始, API 参考, 最佳实践, 模型路由, 供应商路由, 订阅, 按量计费, 可观测性, 帮助, 常见问题, 接入指南, 配置. Trigger on phrases like \"how to use ZenMux\", \"ZenMux docs\", \"ZenMux API\", \"ZenMux integration\", \"ZenMux 怎么用\", \"ZenMux 接入\", \"ZenMux 配置\". Even if the user doesn't say \"ZenMux\" explicitly but asks about LLM API aggregation, model routing, provider fallback in a context where ZenMux is the project being worked on, this skill should activate.","https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Fzenmux-context\u002FSKILL.md",[554],{"categoryNo":555,"categoryName":556,"taxonomyType":557,"taxonomyTypeDesc":558},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[560,561,562,563,29,564,565,566,567,568,39,569,570,571,572,573,574,575,576,577],"context","zenmux context","Video","chinese","project","web search","translate","search","open","pay","image","you","activate","architecture","logs","streaming","cherry studio","how",{"skillNo":579,"name":580,"nameZh":6,"description":581,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":582,"categories":583,"keywords":584,"publishedAt":44},"01M713QHWTBG634BCBV7NBJME1","workers-comp-guide","Guide workers compensation compliance and claims management.\nTRIGGERS - Use when user needs help with workers-comp-guide related tasks.","https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Fworkers-comp-guide\u002FSKILL.md",[],[585,586,587,588,589,29,590,591,546,510,592,512,593,594,595,596,597,598,599],"workers","comp","workers comp","workers comp guide","guide","triggers","workers-comp","tasks","claims management","claims","compliance","help","compensation","management","user",{"skillNo":601,"name":602,"nameZh":6,"description":603,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":604,"categories":605,"keywords":615,"publishedAt":44},"01M713QF45VMV1685AFNF1GPMA","weekly-kpi-report","Generate McKinsey-style board presentation PPTs from weekly auto insurance data. Automatically calculates 16+ KPIs, creates executive-level slides with actionable insights, and supports week-over-week comparisons. Use when user uploads insurance cost data (Excel\u002FCSV) and requests board report, weekly presentation, executive briefing, or mentions keywords like 董事会汇报, 周报PPT, 经营分析演示, McKinsey-style reports.","https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Fweekly-kpi-report\u002FSKILL.md",[606,609,612],{"categoryNo":607,"categoryName":608,"taxonomyType":557,"taxonomyTypeDesc":558},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":610,"categoryName":611,"taxonomyType":557,"taxonomyTypeDesc":558},"01JBSEEDCAT000000000000004","电子表格",{"categoryNo":613,"categoryName":614,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000034","行政与办公人员",[616,617,618,619,620,29,621,622,623,624,510,625,626,627,628,629,630,631,546,632],"weekly","weekly kpi report","kpi","report","xlsx","actionable","insights","briefing","auto","board report","reports","generate","演示","data","presentation","slides","uploads",{"skillNo":634,"name":635,"nameZh":6,"description":636,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":637,"categories":638,"keywords":640,"publishedAt":44},"01M713QA9WJDHMNVTTY1ENRKVB","wealth-advisory","Wealth management and financial planning for HNW and UHNW clients. Activate when the user\nmentions wealth management, financial planning, retirement, estate planning, tax planning,\nGRAT, IDGT, trust, asset allocation, withdrawal rate, Monte Carlo simulation, goals-based\ninvesting, tax-loss harvesting, Roth conversion, insurance, annuity, mortgage strategy,\nconcentrated stock, family office, direct indexing, 529 plan, charitable giving, donor-advised\nfund, private foundation, or asks about personal finance strategy, inheritance, long-term\nfinancial planning, or UHNW advisory.","https:\u002F\u002Fgithub.com\u002FFDU-INS\u002FInsurance-Skills\u002Fblob\u002Fmain\u002FSkills\u002Fwealth-advisory\u002FSKILL.md",[639],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[641,642,29,643,644,510,572,645,646,647,648,27,649,650,651,652,653,654,655,656],"wealth advisory","advisory","stock","inheritance","conversion","indexing","plan","simulation","rate","allocation","asset","direct","personal","investing","trust","planning"]