{
  "schemaVersion": "1.0",
  "item": {
    "slug": "financial-reconciler",
    "name": "Personal Finance Reconciler",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/gowtham1984/financial-reconciler",
    "canonicalUrl": "https://clawhub.ai/gowtham1984/financial-reconciler",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/financial-reconciler",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=financial-reconciler",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "skill.json",
      "assets/categories.json",
      "assets/csv_formats.json",
      "scripts/import_ofx.py",
      "scripts/db.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/financial-reconciler"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/financial-reconciler",
    "agentPageUrl": "https://openagent3.xyz/skills/financial-reconciler/agent",
    "manifestUrl": "https://openagent3.xyz/skills/financial-reconciler/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/financial-reconciler/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Finance Reconciler",
        "body": "A privacy-first personal finance skill that imports bank transactions, auto-categorizes them, tracks budgets, answers natural language spending queries, and generates reports. All data stays local in SQLite — nothing is sent to external servers."
      },
      {
        "title": "First-Time Setup",
        "body": "On first use, run these two commands before anything else:\n\npip3 install pandas ofxparse tabulate python-dateutil\n\npython3 scripts/db.py\n\nIf either command fails, stop and show the user the error. Do not proceed until setup succeeds."
      },
      {
        "title": "First-Time User Onboarding",
        "body": "If the user has no transactions in the database yet (or says something general like \"help me track my finances\", \"get started\", or \"what can you do\"), walk them through this:\n\nExplain that this tool tracks spending from bank statement files — all data stays on their machine.\nTell them to download a statement from their bank:\n\nChase: chase.com → Statements & Documents → Download account activity → CSV\nBank of America: bankofamerica.com → Statements & Documents → Download Transactions → CSV\nWells Fargo: wellsfargo.com → Account Activity → Download → Comma Delimited\nAny bank: Look for \"Export to Quicken\" or \"Download OFX/QFX\" for OFX format, or any CSV download option\n\n\nAsk them to share the file path or drop the file into the conversation.\nSuggest they try these after importing:\n\n\"How much did I spend on groceries last month?\"\n\"Set a $400 monthly budget for dining\"\n\"Show me my monthly report\""
      },
      {
        "title": "Handling File Input",
        "body": "When the user wants to import a bank statement:\n\nIf they provide a file path (e.g., ~/Downloads/chase_jan.csv): use that path directly with the import script.\nIf they attach/upload a file: the file will be available at a local temp path. Use that path with the import script.\nIf they mention a bank but don't provide a file: tell them exactly how to download it. For example: \"To get your Chase statement, log in to chase.com, go to Statements & Documents, select your account, choose a date range, and download as CSV. Then share the file path with me.\"\nIf the file format is unclear: the import script auto-detects Chase, Bank of America, and Wells Fargo formats. For other banks, it falls back to generic CSV parsing that matches common column names (Date, Description, Amount). If that also fails, ask the user what columns their CSV has.\n\nSupported file types: .csv (Chase, BofA, Wells Fargo, generic) and .ofx/.qfx (universal)."
      },
      {
        "title": "1. Import Transactions",
        "body": "For CSV files:\n\npython3 scripts/import_csv.py <file_path> [--format chase|bofa|wells_fargo|generic] [--account <name>]\n\nFor OFX/QFX files:\n\npython3 scripts/import_ofx.py <file_path> [--account <name>]\n\nChoose the import script based on file extension (.ofx/.qfx → import_ofx.py, everything else → import_csv.py). The bank format is auto-detected if --format is omitted. Both scripts output JSON.\n\nAfter a successful import, always run categorization automatically (step 2) without the user asking. Then present a summary like: \"Imported 47 transactions from Jan 1–31. Here's the breakdown: Groceries $342, Dining $189, ...\"\n\nIf the import returns duplicates > 0, mention it: \"Skipped 12 duplicate transactions that were already imported.\""
      },
      {
        "title": "2. Categorize Transactions",
        "body": "Run on uncategorized transactions:\n\npython3 scripts/categorize.py run\n\nRe-categorize everything (after adding rules):\n\npython3 scripts/categorize.py run --recategorize\n\nAdd a custom rule:\n\npython3 scripts/categorize.py add-rule <category> <pattern> [--type keyword|exact|regex|custom]\n\nCategories: groceries, dining, transport, utilities, subscriptions, shopping, healthcare, entertainment, income, uncategorized.\n\nIf more than 20% of transactions land in \"uncategorized\", proactively tell the user: \"I couldn't categorize X transactions. Here are some common ones: [list top uncategorized merchants]. Want me to add rules for any of these?\" Then use add-rule for each one they confirm, and re-run with --recategorize."
      },
      {
        "title": "3. Query Spending",
        "body": "python3 scripts/query.py \"<natural language query>\"\n\nThe query parser understands:\n\nTime: \"this month\", \"last month\", \"January\", \"last 30 days\", \"this year\", \"2024-01-01 to 2024-03-31\"\nCategories: \"groceries\", \"dining\", \"transport\", \"utilities\", \"subscriptions\", \"shopping\", \"healthcare\", \"entertainment\", \"income\"\nMerchants: \"at Starbucks\", \"from Amazon\"\nAggregations: total/sum, count, average, largest/max, smallest/min, list/show\n\nTranslate the user's question into the closest query string. Present results conversationally — for totals state the amount, for lists format as a readable table with dates and amounts."
      },
      {
        "title": "4. Manage Budgets",
        "body": "python3 scripts/budget.py set <category> <amount> [--period monthly|yearly]\npython3 scripts/budget.py status [--category <name>] [--period monthly|yearly]\npython3 scripts/budget.py list\npython3 scripts/budget.py delete <category> [--period monthly|yearly]\n\nBudget statuses: ok (under 80%), warning (80-100%), exceeded (over 100%).\n\nWhen reporting status, use clear language: \"Your dining budget is at 87% ($261 of $300) — you have $39 left this month.\" Highlight exceeded budgets prominently."
      },
      {
        "title": "5. Generate Reports",
        "body": "python3 scripts/report.py [--month <1-12>] [--year <year>] [--period monthly|yearly] [--format json|text|html]\n\nUse --format text for conversational summaries. Use --format html when the user wants a file they can open in a browser — save the output to a file and give them the path.\n\nPresent report highlights conversationally: biggest spending categories, changes from last month, budget concerns, and top merchants."
      },
      {
        "title": "Data Location",
        "body": "All data is stored locally at ~/.openclaw/skills/finance-reconciler/data/transactions.db (SQLite). Set the FINANCE_DATA_DIR environment variable to override."
      },
      {
        "title": "Responding to Common User Intents",
        "body": "User saysWhat to do\"Import my statement\" / shares a fileRun import → categorize → show summary\"How much did I spend on X?\"Run query.py with their question\"Set a budget for groceries\"Ask for the amount if not given, then run budget.py set\"Am I over budget?\"Run budget.py status for all categories\"Show me my report\" / \"monthly summary\"Run report.py for current or specified month\"What can you do?\" / \"help\"Explain the 5 operations with examples\"Why is X categorized as Y?\"Explain the rule-based system, offer to add a custom rule\"I don't have a file yet\"Give them bank-specific download instructions\n\nAll scripts output JSON to stdout. Parse the JSON and present results in clear, conversational language — never dump raw JSON to the user."
      }
    ],
    "body": "Finance Reconciler\n\nA privacy-first personal finance skill that imports bank transactions, auto-categorizes them, tracks budgets, answers natural language spending queries, and generates reports. All data stays local in SQLite — nothing is sent to external servers.\n\nFirst-Time Setup\n\nOn first use, run these two commands before anything else:\n\npip3 install pandas ofxparse tabulate python-dateutil\n\npython3 scripts/db.py\n\n\nIf either command fails, stop and show the user the error. Do not proceed until setup succeeds.\n\nFirst-Time User Onboarding\n\nIf the user has no transactions in the database yet (or says something general like \"help me track my finances\", \"get started\", or \"what can you do\"), walk them through this:\n\nExplain that this tool tracks spending from bank statement files — all data stays on their machine.\nTell them to download a statement from their bank:\nChase: chase.com → Statements & Documents → Download account activity → CSV\nBank of America: bankofamerica.com → Statements & Documents → Download Transactions → CSV\nWells Fargo: wellsfargo.com → Account Activity → Download → Comma Delimited\nAny bank: Look for \"Export to Quicken\" or \"Download OFX/QFX\" for OFX format, or any CSV download option\nAsk them to share the file path or drop the file into the conversation.\nSuggest they try these after importing:\n\"How much did I spend on groceries last month?\"\n\"Set a $400 monthly budget for dining\"\n\"Show me my monthly report\"\nHandling File Input\n\nWhen the user wants to import a bank statement:\n\nIf they provide a file path (e.g., ~/Downloads/chase_jan.csv): use that path directly with the import script.\nIf they attach/upload a file: the file will be available at a local temp path. Use that path with the import script.\nIf they mention a bank but don't provide a file: tell them exactly how to download it. For example: \"To get your Chase statement, log in to chase.com, go to Statements & Documents, select your account, choose a date range, and download as CSV. Then share the file path with me.\"\nIf the file format is unclear: the import script auto-detects Chase, Bank of America, and Wells Fargo formats. For other banks, it falls back to generic CSV parsing that matches common column names (Date, Description, Amount). If that also fails, ask the user what columns their CSV has.\n\nSupported file types: .csv (Chase, BofA, Wells Fargo, generic) and .ofx/.qfx (universal).\n\nOperations\n1. Import Transactions\n\nFor CSV files:\n\npython3 scripts/import_csv.py <file_path> [--format chase|bofa|wells_fargo|generic] [--account <name>]\n\n\nFor OFX/QFX files:\n\npython3 scripts/import_ofx.py <file_path> [--account <name>]\n\n\nChoose the import script based on file extension (.ofx/.qfx → import_ofx.py, everything else → import_csv.py). The bank format is auto-detected if --format is omitted. Both scripts output JSON.\n\nAfter a successful import, always run categorization automatically (step 2) without the user asking. Then present a summary like: \"Imported 47 transactions from Jan 1–31. Here's the breakdown: Groceries $342, Dining $189, ...\"\n\nIf the import returns duplicates > 0, mention it: \"Skipped 12 duplicate transactions that were already imported.\"\n\n2. Categorize Transactions\n\nRun on uncategorized transactions:\n\npython3 scripts/categorize.py run\n\n\nRe-categorize everything (after adding rules):\n\npython3 scripts/categorize.py run --recategorize\n\n\nAdd a custom rule:\n\npython3 scripts/categorize.py add-rule <category> <pattern> [--type keyword|exact|regex|custom]\n\n\nCategories: groceries, dining, transport, utilities, subscriptions, shopping, healthcare, entertainment, income, uncategorized.\n\nIf more than 20% of transactions land in \"uncategorized\", proactively tell the user: \"I couldn't categorize X transactions. Here are some common ones: [list top uncategorized merchants]. Want me to add rules for any of these?\" Then use add-rule for each one they confirm, and re-run with --recategorize.\n\n3. Query Spending\npython3 scripts/query.py \"<natural language query>\"\n\n\nThe query parser understands:\n\nTime: \"this month\", \"last month\", \"January\", \"last 30 days\", \"this year\", \"2024-01-01 to 2024-03-31\"\nCategories: \"groceries\", \"dining\", \"transport\", \"utilities\", \"subscriptions\", \"shopping\", \"healthcare\", \"entertainment\", \"income\"\nMerchants: \"at Starbucks\", \"from Amazon\"\nAggregations: total/sum, count, average, largest/max, smallest/min, list/show\n\nTranslate the user's question into the closest query string. Present results conversationally — for totals state the amount, for lists format as a readable table with dates and amounts.\n\n4. Manage Budgets\npython3 scripts/budget.py set <category> <amount> [--period monthly|yearly]\npython3 scripts/budget.py status [--category <name>] [--period monthly|yearly]\npython3 scripts/budget.py list\npython3 scripts/budget.py delete <category> [--period monthly|yearly]\n\n\nBudget statuses: ok (under 80%), warning (80-100%), exceeded (over 100%).\n\nWhen reporting status, use clear language: \"Your dining budget is at 87% ($261 of $300) — you have $39 left this month.\" Highlight exceeded budgets prominently.\n\n5. Generate Reports\npython3 scripts/report.py [--month <1-12>] [--year <year>] [--period monthly|yearly] [--format json|text|html]\n\n\nUse --format text for conversational summaries. Use --format html when the user wants a file they can open in a browser — save the output to a file and give them the path.\n\nPresent report highlights conversationally: biggest spending categories, changes from last month, budget concerns, and top merchants.\n\nData Location\n\nAll data is stored locally at ~/.openclaw/skills/finance-reconciler/data/transactions.db (SQLite). Set the FINANCE_DATA_DIR environment variable to override.\n\nResponding to Common User Intents\nUser says\tWhat to do\n\"Import my statement\" / shares a file\tRun import → categorize → show summary\n\"How much did I spend on X?\"\tRun query.py with their question\n\"Set a budget for groceries\"\tAsk for the amount if not given, then run budget.py set\n\"Am I over budget?\"\tRun budget.py status for all categories\n\"Show me my report\" / \"monthly summary\"\tRun report.py for current or specified month\n\"What can you do?\" / \"help\"\tExplain the 5 operations with examples\n\"Why is X categorized as Y?\"\tExplain the rule-based system, offer to add a custom rule\n\"I don't have a file yet\"\tGive them bank-specific download instructions\n\nAll scripts output JSON to stdout. Parse the JSON and present results in clear, conversational language — never dump raw JSON to the user."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/gowtham1984/financial-reconciler",
    "publisherUrl": "https://clawhub.ai/gowtham1984/financial-reconciler",
    "owner": "gowtham1984",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/financial-reconciler",
    "downloadUrl": "https://openagent3.xyz/downloads/financial-reconciler",
    "agentUrl": "https://openagent3.xyz/skills/financial-reconciler/agent",
    "manifestUrl": "https://openagent3.xyz/skills/financial-reconciler/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/financial-reconciler/agent.md"
  }
}