{"id":"c8099143-8d28-458b-a5e4-2b2e6dfe2a12","entityType":"agent","slug":"clawhub-zack-schrag-treeline-money","name":"Treeline Money","canonicalUrl":"https://www.xpersona.co/agent/clawhub-zack-schrag-treeline-money","canonicalPath":"/agent/clawhub-zack-schrag-treeline-money","generatedAt":"2026-10-10T01:10:03.980Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"description":"Chat with your finances from Treeline Money. Query balances, spending, budgets, and transactions. Skill: Treeline Money Owner: zack-schrag Summary: Chat with your finances from Treeline Money. Query balances, spending, budgets, and transactions. Tags: latest:26.2.2101 Version history: v26.2.2101 | 2026-02-21T14:34:01.353Z | user Release 26.2.2101 v26.2.1601 | 2026-02-17T04:04:26.053Z | user Release 26.2.1601 v26.2.803 | 2026-02-08T23:19:16.360Z | user Release 26.2.803 v26.2.802 | 2026-02-08T21:24:05.440Z | user R","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2.3K downloads reported by the source. Last updated 4/15/2026.","installCommand":"clawhub skill install kn74ta3e9w7pm5f115wzsdsf818050mm:treeline-money","sourceUrl":"https://clawhub.ai/zack-schrag/treeline-money","homepage":"https://clawhub.ai/zack-schrag/treeline-money","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/zack-schrag/treeline-money","kind":"source"}],"safetyScore":84,"overallRank":62,"popularityScore":67,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Chat with your finances from Treeline Money. Query balances, spending, budgets, and transactions. Skill: Treeline Money Owner: zack-schrag Summary: Chat with yo"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"stars":null,"forks":null,"downloads":2300,"packageName":null,"latestVersion":"26.2.2101","tractionLabel":"2.3K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-02-28T18:50:01.185Z","emptyReason":null},"lastUpdatedAt":"2026-04-15T00:45:39.800Z","lastCrawledAt":"2026-02-28T18:50:01.185Z","lastIndexedAt":null,"nextCrawlAt":"2026-03-01T18:50:01.185Z","lastVerifiedAt":null,"highlights":[{"version":"26.2.2101","createdAt":"2026-02-21T14:34:01.353Z","changelog":"Release 26.2.2101","fileCount":2,"zipByteSize":6950},{"version":"26.2.1601","createdAt":"2026-02-17T04:04:26.053Z","changelog":"Release 26.2.1601","fileCount":2,"zipByteSize":6950},{"version":"26.2.803","createdAt":"2026-02-08T23:19:16.360Z","changelog":"Release 26.2.803","fileCount":null,"zipByteSize":null},{"version":"26.2.802","createdAt":"2026-02-08T21:24:05.440Z","changelog":"Release 26.2.802","fileCount":null,"zipByteSize":null},{"version":"26.2.801","createdAt":"2026-02-08T04:26:30.878Z","changelog":"Release 26.2.801","fileCount":null,"zipByteSize":null},{"version":"26.2.605","createdAt":"2026-02-06T20:12:28.813Z","changelog":"Release 26.2.605","fileCount":null,"zipByteSize":null},{"version":"26.2.604","createdAt":"2026-02-06T18:18:23.521Z","changelog":"Release 26.2.604","fileCount":null,"zipByteSize":null},{"version":"26.2.603","createdAt":"2026-02-06T17:42:53.699Z","changelog":"Release 26.2.603","fileCount":null,"zipByteSize":null}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install kn74ta3e9w7pm5f115wzsdsf818050mm:treeline-money","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zack-schrag-treeline-money/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zack-schrag-treeline-money/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zack-schrag-treeline-money/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zack-schrag-treeline-money/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zack-schrag-treeline-money/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zack-schrag-treeline-money/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T01:10:03.979Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zack-schrag-treeline-money/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zack-schrag-treeline-money/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zack-schrag-treeline-money/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zack-schrag-treeline-money/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"readme":"Skill: Treeline Money\n\nOwner: zack-schrag\n\nSummary: Chat with your finances from Treeline Money. Query balances, spending, budgets, and transactions.\n\nTags: latest:26.2.2101\n\nVersion history:\n\nv26.2.2101 | 2026-02-21T14:34:01.353Z | user\n\nRelease 26.2.2101\n\nv26.2.1601 | 2026-02-17T04:04:26.053Z | user\n\nRelease 26.2.1601\n\nv26.2.803 | 2026-02-08T23:19:16.360Z | user\n\nRelease 26.2.803\n\nv26.2.802 | 2026-02-08T21:24:05.440Z | user\n\nRelease 26.2.802\n\nv26.2.801 | 2026-02-08T04:26:30.878Z | user\n\nRelease 26.2.801\n\nv26.2.605 | 2026-02-06T20:12:28.813Z | user\n\nRelease 26.2.605\n\nv26.2.604 | 2026-02-06T18:18:23.521Z | user\n\nRelease 26.2.604\n\nv26.2.603 | 2026-02-06T17:42:53.699Z | user\n\nRelease 26.2.603\n\nv26.2.602 | 2026-02-06T16:42:52.036Z | user\n\nRelease 26.2.602\n\nv26.2.601 | 2026-02-06T12:16:58.065Z | user\n\nRelease 26.2.601\n\nv26.2.403 | 2026-02-04T18:48:42.082Z | user\n\nAdd Quick Start section and CLI behavior notes based on agent feedback\n\nv26.2.402 | 2026-02-04T17:54:22.871Z | auto\n\n- Updated install instructions to use new URLs (`treeline.money/install.sh` and `.ps1`)\n- No other functional or user-facing changes in this version\n\nv0.0.5 | 2026-02-04T06:38:31.222Z | auto\n\n- Added a detailed \"First Time Setup\" section with CLI installation instructions, demo mode, and options for connecting real bank data.\n- Updated integration setup guides for SimpleFIN, Lunch Flow, and CSV import.\n- Clarified Treeline's local-first, private data model in the description.\n- Minor metadata update: removed the `requires` entry from metadata.\n- General markdown reorganization and cleanup for better onboarding and usability.\n\nv0.0.4 | 2026-01-30T00:05:35.025Z | user\n\nInitial release: Chat with your finances via Moltbot\n\nArchive index:\n\nArchive v26.2.2101: 2 files, 6950 bytes\n\nFiles: SKILL.md (17321b), _meta.json (137b)\n\nFile v26.2.2101:SKILL.md\n\n---\nname: treeline\ndescription: Chat with your finances from Treeline Money. Query balances, spending, budgets, and transactions.\nuser-invocable: true\nhomepage: https://treeline.money\nmetadata: {\"openclaw\":{\"emoji\":\"🌲\",\"requires\":{\"bins\":[\"tl\"]},\"install\":[{\"id\":\"tl-mac\",\"kind\":\"download\",\"url\":\"https://github.com/treeline-money/treeline/releases/latest/download/tl-macos-arm64\",\"bins\":[\"tl\"],\"label\":\"Install Treeline CLI (macOS)\",\"os\":[\"darwin\"]},{\"id\":\"tl-linux\",\"kind\":\"download\",\"url\":\"https://github.com/treeline-money/treeline/releases/latest/download/tl-linux-x64\",\"bins\":[\"tl\"],\"label\":\"Install Treeline CLI (Linux)\",\"os\":[\"linux\"]},{\"id\":\"tl-win\",\"kind\":\"download\",\"url\":\"https://github.com/treeline-money/treeline/releases/latest/download/tl-windows-x64.exe\",\"bins\":[\"tl.exe\"],\"label\":\"Install Treeline CLI (Windows)\",\"os\":[\"win32\"]}]}}\n---\n\n# Treeline Money\n\n**Chat with your finances.** Ask questions like \"What's my net worth?\", \"How much did I spend on groceries?\", or \"Am I over budget?\" and get instant answers from your own financial data.\n\n---\n\n## Quick Start\n\n```bash\n# 1. Install the CLI (OpenClaw handles this automatically)\n\n# 2. Enable demo mode (sample data)\ntl demo on\n\n# 3. Try it out\ntl status\n```\n\n---\n\n## First Time Setup\n\n> **For agents:** If `tl` commands fail with \"command not found\", the CLI needs to be installed. OpenClaw handles installation automatically via the skill metadata. Start with demo mode so users can try queries immediately.\n\nVerify the CLI is available with `tl --version`. Start with demo mode so users can try queries immediately.\n\n**Optional:** Download the [desktop app](https://treeline.money/download) for visual exploration of your data.\n\n### Demo Mode\n\nDemo mode loads sample data so users can try queries without connecting a bank:\n\n```bash\ntl demo on\n```\n\nTo switch to real data later:\n```bash\ntl demo off\n```\n\nDemo data is separate from real data.\n\n### CLI Behavior Notes\n\n- `tl demo on` prints a success message — if it seems to hang, wait a few seconds (first run initializes the database)\n- Use `tl demo status` to verify demo mode is enabled\n- Some commands may take a few seconds on first run due to database initialization\n- If you see errors about missing tables, try `tl demo on` again\n\n### Connecting Real Data\n\nWhen the user is ready to move beyond demo mode, direct them to set up a data source with the guides linked below.\n\nData source options:\n- **SimpleFIN** ($1.50/month, US & Canada)\n- **Lunch Flow** (~$3/month, global)\n- **CSV Import** (free)\n\nSetup guides: [Bank Sync](https://treeline.money/docs/integrations/bank-sync/) · [CSV Import](https://treeline.money/docs/integrations/csv-import/)\n\nOnce set up, use `tl sync` to pull bank transactions or `tl import` to load a CSV.\n\n---\n\n## What is Treeline?\n\n[Treeline Money](https://treeline.money) is a local-first personal finance app. All your data stays on your device in a local DuckDB database. No cloud accounts, no subscriptions required (sync services are optional), full SQL access to your financial data.\n\n---\n\n## Limitations\n\n**Encrypted databases not supported.** If the user has enabled database encryption in Treeline, CLI commands will fail. They'll need to either:\n- Disable encryption if they want OpenClaw access\n- Use the Treeline app directly for encrypted databases\n\nIf you see \"database is encrypted\" errors, explain this limitation.\n\n---\n\n## Response Formatting\n\n**Format all responses for mobile/chat:**\n- Use bullet points, not markdown tables\n- Round numbers for readability ($1,234 not $1,234.56)\n- Lead with the answer, details second\n- Keep responses concise — chat isn't a spreadsheet\n- Use line breaks to separate sections\n\n**Example good response:**\n```\nYour net worth is $125k\n\nAssets: $180k\n- Retirement: $85k\n- Savings: $25k\n- Checking: $10k\n- Home equity: $60k\n\nLiabilities: $55k\n- Mortgage: $52k\n- Credit cards: $3k\n```\n\n**Example bad response:**\n```\n| Account | Type | Balance |\n|---------|------|---------|\n| My 401k Account | asset | 85234.56 |\n...\n```\n\n---\n\n## CLI Commands\n\n### Read commands (run freely)\n\nThese commands are read-only and safe to run autonomously:\n\n```bash\ntl status              # Quick account summary with balances\ntl status --json       # Same, but JSON output\n\ntl query \"SQL\" --json  # Run any SQL query (database opened in read-only mode)\ntl sql \"SQL\" --json    # Same as tl query (alias)\n\ntl backup list         # List available backups\ntl doctor              # Check database health\ntl demo status         # Check if demo mode is on/off\n```\n\n> **Note:** `tl query` and `tl sql` open the database in read-only mode by default. They cannot modify data unless `--allow-writes` is passed (see write commands below).\n\n**Use `tl status` for quick balance checks** — it's faster than a SQL query.\n\n### Write commands (ask the user first)\n\nThese commands modify local data. **Always ask the user for confirmation before running them**, unless the user has explicitly allowed them in `PERMISSIONS.md` (see [Agent Permissions](#agent-permissions)).\n\n```bash\ntl query \"SQL\" --allow-writes --json  # Run a SQL query with write access\ntl sql \"SQL\" --allow-writes --json    # Same (alias)\n\ntl sync                # Sync accounts/transactions from bank integrations\ntl sync --dry-run      # Preview what would sync (read-only, safe to run)\n\ntl import FILE -a ACCOUNT          # Import transactions from CSV\ntl import FILE -a ACCOUNT --dry-run  # Preview import without applying (read-only, safe to run)\ntl import FILE -a ACCOUNT --json   # JSON output for scripting\n\ntl backup create       # Create a backup\ntl backup restore NAME # Restore a backup\n\ntl compact             # Compact database (reclaim space, optimize)\n\ntl tag \"groceries\" --ids ID1,ID2  # Apply tags to transactions\n\ntl demo on|off         # Toggle demo mode (sample data)\n```\n\n> **Tip:** `--dry-run` variants are read-only and safe to run without confirmation. Use them to preview before asking the user to confirm the actual operation.\n\n**Use `tl compact` if the user mentions slow queries** — it optimizes the database.\n\n### CSV Import Details\n\n`tl import` auto-detects column mappings from CSV headers. Most bank CSVs work out of the box:\n\n```bash\ntl import bank_export.csv --account \"Chase Checking\"\n```\n\nThe `--account` / `-a` flag accepts an account name (case-insensitive, substring match) or UUID.\n\n**Always preview first** with `--dry-run` to verify columns were detected correctly:\n\n```bash\ntl import bank_export.csv -a \"Checking\" --dry-run --json\n```\n\n**All import flags** (all optional except `--account`):\n\n| Flag | Purpose | Example |\n|------|---------|---------|\n| `--date-column` | Override date column | `--date-column \"Post Date\"` |\n| `--amount-column` | Override amount column | `--amount-column \"Amt\"` |\n| `--description-column` | Override description column | `--description-column \"Memo\"` |\n| `--debit-column` | Use debit column (instead of amount) | `--debit-column \"Debit\"` |\n| `--credit-column` | Use credit column (instead of amount) | `--credit-column \"Credit\"` |\n| `--balance-column` | Running balance (creates snapshots) | `--balance-column \"Balance\"` |\n| `--flip-signs` | Negate amounts (credit card CSVs) | `--flip-signs` |\n| `--debit-negative` | Negate positive debits | `--debit-negative` |\n| `--skip-rows N` | Skip N rows before header | `--skip-rows 3` |\n| `--number-format` | `us`, `eu`, or `eu_space` | `--number-format eu` |\n| `--profile NAME` | Load a saved profile | `--profile chase` |\n| `--save-profile NAME` | Save settings as profile | `--save-profile chase` |\n| `--dry-run` | Preview without importing | `--dry-run` |\n| `--json` | JSON output | `--json` |\n\n**Common patterns for agents:**\n\n```bash\n# Step 1: Find the account UUID\ntl status --json\n\n# Step 2: Preview import\ntl import transactions.csv -a \"550e8400-e29b-41d4-a716-446655440000\" --dry-run --json\n\n# Step 3: Execute import\ntl import transactions.csv -a \"550e8400-e29b-41d4-a716-446655440000\" --json\n```\n\nDuplicate transactions are automatically detected and skipped on re-import via fingerprinting.\n\n---\n\n## Agent Permissions\n\n**Before running any write command, check for `PERMISSIONS.md` in this skill directory.**\n\nIf it exists, read it to see which write commands the user has pre-approved. Pre-approved commands can be run without asking for confirmation. All other write commands still require explicit user confirmation before execution.\n\nIf `PERMISSIONS.md` does not exist, **always ask before running any write command.**\n\n**Template for PERMISSIONS.md:**\n\n```markdown\n# Treeline Agent Permissions\n\nCommands listed here are pre-approved — the agent can run them without\nasking for confirmation each time. Remove a line to require confirmation.\n\n## Allowed write commands\n- tl sync\n- tl backup create\n- tl demo on|off\n```\n\n---\n\n## User Context\n\n**Before answering finance questions, check for `CONTEXT.md` in this skill directory.**\n\nIf it exists, read it first — it contains user-specific knowledge:\n- Account meanings (which accounts are retirement vs brokerage, etc.)\n- Tag conventions and cash flow rules\n- Plugin configurations\n- Personal preferences\n\n**Learning new context:** When you discover something about the user's setup:\n1. For small observations, note them in CONTEXT.md and briefly mention what you saved\n2. For significant assumptions or corrections, ask: \"Want me to save that to your Treeline context?\"\n\nSee the [User Context Pattern](#user-context-pattern) section at the end for the template.\n\n---\n\n## Quick Reference\n\n### Net Worth\n```bash\ntl query \"\nWITH latest AS (\n  SELECT DISTINCT ON (account_id) account_id, balance\n  FROM sys_balance_snapshots\n  ORDER BY account_id, snapshot_time DESC\n)\nSELECT\n  SUM(CASE WHEN a.classification = 'asset' THEN s.balance ELSE 0 END) as assets,\n  SUM(CASE WHEN a.classification = 'liability' THEN ABS(s.balance) ELSE 0 END) as liabilities,\n  SUM(CASE WHEN a.classification = 'asset' THEN s.balance ELSE -ABS(s.balance) END) as net_worth\nFROM accounts a\nJOIN latest s ON a.account_id = s.account_id\n\" --json\n```\n\n### Account Balances\n```bash\ntl query \"\nWITH latest AS (\n  SELECT DISTINCT ON (account_id) account_id, balance\n  FROM sys_balance_snapshots\n  ORDER BY account_id, snapshot_time DESC\n)\nSELECT a.name, a.classification, a.institution_name, s.balance\nFROM accounts a\nJOIN latest s ON a.account_id = s.account_id\nORDER BY s.balance DESC\n\" --json\n```\n\n### True Spending (Excluding Internal Moves)\n\nCheck CONTEXT.md for `internal_transfer_tags`. Default pattern:\n\n```bash\ntl query \"\nSELECT SUM(ABS(amount)) as total_spent\nFROM transactions\nWHERE amount < 0\n  AND transaction_date >= date_trunc('month', current_date)\n  AND NOT (tags && ARRAY['transfer', 'savings', 'investment'])\n\" --json\n```\n\n### Spending by Tag\n```bash\ntl query \"\nSELECT tags, SUM(ABS(amount)) as spent\nFROM transactions\nWHERE amount < 0\n  AND transaction_date >= '2026-01-01' AND transaction_date < '2026-02-01'\n  AND tags IS NOT NULL AND tags != '[]'\nGROUP BY tags\nORDER BY spent DESC\n\" --json\n```\n\n### Recent Transactions\n```bash\ntl query \"\nSELECT t.description, t.amount, t.transaction_date, a.name as account\nFROM transactions t\nJOIN accounts a ON t.account_id = a.account_id\nORDER BY t.transaction_date DESC\nLIMIT 10\n\" --json\n```\n\n---\n\n## Database Schema\n\n### Core Tables\n\n**accounts**\n| Column | Description |\n|--------|-------------|\n| `account_id` | UUID primary key |\n| `name` | Account display name |\n| `classification` | `asset` or `liability` |\n| `account_type` | `credit`, `investment`, `Loan`, `other`, or null |\n| `institution_name` | Bank/institution name |\n| `currency` | Currency code (e.g., `USD`) |\n| `is_manual` | Boolean — manually added vs synced |\n\n**sys_balance_snapshots** — Source of truth for balances\n| Column | Description |\n|--------|-------------|\n| `snapshot_id` | UUID primary key |\n| `account_id` | FK to accounts |\n| `balance` | Balance at snapshot time |\n| `snapshot_time` | When recorded |\n| `source` | `sync`, `manual`, etc. |\n\n**transactions**\n| Column | Description |\n|--------|-------------|\n| `transaction_id` | UUID primary key |\n| `account_id` | FK to accounts |\n| `amount` | Signed (negative = expense) |\n| `description` | Transaction description |\n| `transaction_date` | When it occurred |\n| `posted_date` | When it cleared |\n| `tags` | Array of tags |\n\n### Tags vs Categories\n\n**Tags** are the primary concept in Treeline — transactions can have multiple tags.\n\n**Categories** come from the budget plugin (`plugin_budget`), which maps tags to budget categories. Not all users have this plugin.\n\n---\n\n## Plugin System\n\nPlugins have their own DuckDB schemas: `plugin_<name>.*`\n\n### Discovering Installed Plugins\n```bash\ntl query \"\nSELECT schema_name\nFROM information_schema.schemata\nWHERE schema_name LIKE 'plugin_%'\n\" --json\n```\n\n### Common Plugin Schemas\n\n**plugin_budget.categories** — Budget categories\n| Column | Description |\n|--------|-------------|\n| `category_id` | UUID primary key |\n| `month` | `YYYY-MM` format |\n| `type` | `income` or `expense` |\n| `name` | Category name |\n| `expected` | Budgeted amount |\n| `tags` | Array of tags to match |\n\n**plugin_goals.goals** — Savings goals\n| Column | Description |\n|--------|-------------|\n| `id` | UUID primary key |\n| `name` | Goal name |\n| `target_amount` | Target amount |\n| `target_date` | Target date |\n| `completed` | Boolean |\n| `active` | Boolean |\n\n**plugin_subscriptions** — Detected recurring charges\n\n**plugin_cashflow** — Cash flow projections\n\n**plugin_emergency_fund** — Emergency fund tracking\n\nCheck CONTEXT.md for which plugins the user has and cares about.\n\n---\n\n## Common Patterns\n\n### Getting Current Balances\n\nAlways use latest snapshot:\n```sql\nWITH latest AS (\n  SELECT DISTINCT ON (account_id) account_id, balance\n  FROM sys_balance_snapshots\n  ORDER BY account_id, snapshot_time DESC\n)\nSELECT a.name, s.balance\nFROM accounts a\nJOIN latest s ON a.account_id = s.account_id\n```\n\n### Working with Tags\n\nTags are arrays:\n```sql\n-- Contains a specific tag\nWHERE tags @> ARRAY['groceries']\n\n-- Contains any of these tags\nWHERE tags && ARRAY['food', 'dining']\n\n-- Note: UNNEST doesn't work in all contexts in DuckDB\n-- Instead, GROUP BY tags directly\n```\n\n### Date Filters\n```sql\n-- This month\nWHERE transaction_date >= date_trunc('month', current_date)\n\n-- Specific month\nWHERE transaction_date >= '2026-01-01'\n  AND transaction_date < '2026-02-01'\n```\n\n### Budget vs Actual\n```sql\nSELECT\n  c.name,\n  c.expected,\n  COALESCE(SUM(ABS(t.amount)), 0) as actual,\n  c.expected - COALESCE(SUM(ABS(t.amount)), 0) as remaining\nFROM plugin_budget.categories c\nLEFT JOIN transactions t ON t.tags && c.tags\n  AND t.amount < 0\n  AND t.transaction_date >= (c.month || '-01')::DATE\n  AND t.transaction_date < (c.month || '-01')::DATE + INTERVAL '1 month'\nWHERE c.month = strftime(current_date, '%Y-%m')\n  AND c.type = 'expense'\nGROUP BY c.category_id, c.name, c.expected\n```\n\n---\n\n## Question Mapping\n\n| User asks | Approach |\n|-----------|----------|\n| \"Net worth?\" | Net worth query |\n| \"Balances?\" | Account balances query |\n| \"How much in [X]?\" | Filter by `name ILIKE '%X%'` |\n| \"How much did I spend?\" | True spending query (exclude internal moves) |\n| \"Spending on [tag]?\" | Filter by tag |\n| \"Am I over budget?\" | Budget vs actual (requires budget plugin) |\n| \"Recent transactions\" | Order by date DESC, limit |\n| \"Savings?\" | Filter accounts by name/type |\n| \"Retirement?\" | Filter by 401k, IRA, retirement keywords |\n| \"Import CSV\" / \"Upload transactions\" | Guide through `tl import` — preview first with `--dry-run` |\n| \"Import from [bank name]\" | Use `tl import` with appropriate flags for that bank's CSV format |\n\n---\n\n## Tips\n\n1. **Always use `--json`** for parseable output\n2. **Amounts are signed** — negative = expense\n3. **Use `classification`** for asset/liability\n4. **Balances live in snapshots**, not the accounts table\n5. **Check CONTEXT.md** for user-specific account meanings and tag conventions\n\n---\n\n## User Context Pattern\n\nWhen this skill is installed, create `CONTEXT.md` alongside it to store user-specific knowledge. This keeps the skill generic/shareable while personalizing behavior.\n\n**Template for CONTEXT.md:**\n\n```markdown\n# Treeline User Context\n*Auto-updated by your assistant as it learns your setup*\n\n## Account Notes\n<!-- What specific accounts mean, e.g.: -->\n<!-- - \"Company 401k\" = retirement account -->\n<!-- - \"Home Equity\" = home value estimate (manual) -->\n\n## Tag Conventions\n<!-- How the user uses tags -->\n\n## Cash Flow Rules\n<!-- Tags to exclude from \"true spending\" calculations -->\ninternal_transfer_tags: [transfer, savings, investment]\n\n## Income Sources\n<!-- Known income sources for better reporting -->\n\n## Active Plugins\n<!-- Which plugins are installed and relevant -->\n\n## Preferences\n<!-- Reporting style, rounding, spouse-friendly mode, etc. -->\n\n## Learned Facts\n<!-- Anything else discovered about the user's financial setup -->\n```\n\n**Maintenance:**\n- Briefly mention updates for small observations\n- Ask before recording significant assumptions\n- Periodically validate against live data (accounts may close, tags may change)\n\n---\n\n## Privacy Note\n\nAll data is local (`~/.treeline/treeline.duckdb`). Never share transaction descriptions or account details outside the conversation unless explicitly asked.\n\nFile v26.2.2101:_meta.json\n\n{\n  \"ownerId\": \"kn74ta3e9w7pm5f115wzsdsf818050mm\",\n  \"slug\": \"treeline-money\",\n  \"version\": \"26.2.2101\",\n  \"publishedAt\": 1771684441353\n}\n\nArchive v26.2.1601: 2 files, 6950 bytes\n\nFiles: SKILL.md (17321b), _meta.json (137b)\n\nFile v26.2.1601:SKILL.md\n\n---\nname: treeline\ndescription: Chat with your finances from Treeline Money. Query balances, spending, budgets, and transactions.\nuser-invocable: true\nhomepage: https://treeline.money\nmetadata: {\"openclaw\":{\"emoji\":\"🌲\",\"requires\":{\"bins\":[\"tl\"]},\"install\":[{\"id\":\"tl-mac\",\"kind\":\"download\",\"url\":\"https://github.com/treeline-money/treeline/releases/latest/download/tl-macos-arm64\",\"bins\":[\"tl\"],\"label\":\"Install Treeline CLI (macOS)\",\"os\":[\"darwin\"]},{\"id\":\"tl-linux\",\"kind\":\"download\",\"url\":\"https://github.com/treeline-money/treeline/releases/latest/download/tl-linux-x64\",\"bins\":[\"tl\"],\"label\":\"Install Treeline CLI (Linux)\",\"os\":[\"linux\"]},{\"id\":\"tl-win\",\"kind\":\"download\",\"url\":\"https://github.com/treeline-money/treeline/releases/latest/download/tl-windows-x64.exe\",\"bins\":[\"tl.exe\"],\"label\":\"Install Treeline CLI (Windows)\",\"os\":[\"win32\"]}]}}\n---\n\n# Treeline Money\n\n**Chat with your finances.** Ask questions like \"What's my net worth?\", \"How much did I spend on groceries?\", or \"Am I over budget?\" and get instant answers from your own financial data.\n\n---\n\n## Quick Start\n\n```bash\n# 1. Install the CLI (OpenClaw handles this automatically)\n\n# 2. Enable demo mode (sample data)\ntl demo on\n\n# 3. Try it out\ntl status\n```\n\n---\n\n## First Time Setup\n\n> **For agents:** If `tl` commands fail with \"command not found\", the CLI needs to be installed. OpenClaw handles installation automatically via the skill metadata. Start with demo mode so users can try queries immediately.\n\nVerify the CLI is available with `tl --version`. Start with demo mode so users can try queries immediately.\n\n**Optional:** Download the [desktop app](https://treeline.money/download) for visual exploration of your data.\n\n### Demo Mode\n\nDemo mode loads sample data so users can try queries without connecting a bank:\n\n```bash\ntl demo on\n```\n\nTo switch to real data later:\n```bash\ntl demo off\n```\n\nDemo data is separate from real data.\n\n### CLI Behavior Notes\n\n- `tl demo on` prints a success message — if it seems to hang, wait a few seconds (first run initializes the database)\n- Use `tl demo status` to verify demo mode is enabled\n- Some commands may take a few seconds on first run due to database initialization\n- If you see errors about missing tables, try `tl demo on` again\n\n### Connecting Real Data\n\nWhen the user is ready to move beyond demo mode, direct them to set up a data source with the guides linked below.\n\nData source options:\n- **SimpleFIN** ($1.50/month, US & Canada)\n- **Lunch Flow** (~$3/month, global)\n- **CSV Import** (free)\n\nSetup guides: [Bank Sync](https://treeline.money/docs/integrations/bank-sync/) · [CSV Import](https://treeline.money/docs/integrations/csv-import/)\n\nOnce set up, use `tl sync` to pull bank transactions or `tl import` to load a CSV.\n\n---\n\n## What is Treeline?\n\n[Treeline Money](https://treeline.money) is a local-first personal finance app. All your data stays on your device in a local DuckDB database. No cloud accounts, no subscriptions required (sync services are optional), full SQL access to your financial data.\n\n---\n\n## Limitations\n\n**Encrypted databases not supported.** If the user has enabled database encryption in Treeline, CLI commands will fail. They'll need to either:\n- Disable encryption if they want OpenClaw access\n- Use the Treeline app directly for encrypted databases\n\nIf you see \"database is encrypted\" errors, explain this limitation.\n\n---\n\n## Response Formatting\n\n**Format all responses for mobile/chat:**\n- Use bullet points, not markdown tables\n- Round numbers for readability ($1,234 not $1,234.56)\n- Lead with the answer, details second\n- Keep responses concise — chat isn't a spreadsheet\n- Use line breaks to separate sections\n\n**Example good response:**\n```\nYour net worth is $125k\n\nAssets: $180k\n- Retirement: $85k\n- Savings: $25k\n- Checking: $10k\n- Home equity: $60k\n\nLiabilities: $55k\n- Mortgage: $52k\n- Credit cards: $3k\n```\n\n**Example bad response:**\n```\n| Account | Type | Balance |\n|---------|------|---------|\n| My 401k Account | asset | 85234.56 |\n...\n```\n\n---\n\n## CLI Commands\n\n### Read commands (run freely)\n\nThese commands are read-only and safe to run autonomously:\n\n```bash\ntl status              # Quick account summary with balances\ntl status --json       # Same, but JSON output\n\ntl query \"SQL\" --json  # Run any SQL query (database opened in read-only mode)\ntl sql \"SQL\" --json    # Same as tl query (alias)\n\ntl backup list         # List available backups\ntl doctor              # Check database health\ntl demo status         # Check if demo mode is on/off\n```\n\n> **Note:** `tl query` and `tl sql` open the database in read-only mode by default. They cannot modify data unless `--allow-writes` is passed (see write commands below).\n\n**Use `tl status` for quick balance checks** — it's faster than a SQL query.\n\n### Write commands (ask the user first)\n\nThese commands modify local data. **Always ask the user for confirmation before running them**, unless the user has explicitly allowed them in `PERMISSIONS.md` (see [Agent Permissions](#agent-permissions)).\n\n```bash\ntl query \"SQL\" --allow-writes --json  # Run a SQL query with write access\ntl sql \"SQL\" --allow-writes --json    # Same (alias)\n\ntl sync                # Sync accounts/transactions from bank integrations\ntl sync --dry-run      # Preview what would sync (read-only, safe to run)\n\ntl import FILE -a ACCOUNT          # Import transactions from CSV\ntl import FILE -a ACCOUNT --dry-run  # Preview import without applying (read-only, safe to run)\ntl import FILE -a ACCOUNT --json   # JSON output for scripting\n\ntl backup create       # Create a backup\ntl backup restore NAME # Restore a backup\n\ntl compact             # Compact database (reclaim space, optimize)\n\ntl tag \"groceries\" --ids ID1,ID2  # Apply tags to transactions\n\ntl demo on|off         # Toggle demo mode (sample data)\n```\n\n> **Tip:** `--dry-run` variants are read-only and safe to run without confirmation. Use them to preview before asking the user to confirm the actual operation.\n\n**Use `tl compact` if the user mentions slow queries** — it optimizes the database.\n\n### CSV Import Details\n\n`tl import` auto-detects column mappings from CSV headers. Most bank CSVs work out of the box:\n\n```bash\ntl import bank_export.csv --account \"Chase Checking\"\n```\n\nThe `--account` / `-a` flag accepts an account name (case-insensitive, substring match) or UUID.\n\n**Always preview first** with `--dry-run` to verify columns were detected correctly:\n\n```bash\ntl import bank_export.csv -a \"Checking\" --dry-run --json\n```\n\n**All import flags** (all optional except `--account`):\n\n| Flag | Purpose | Example |\n|------|---------|---------|\n| `--date-column` | Override date column | `--date-column \"Post Date\"` |\n| `--amount-column` | Override amount column | `--amount-column \"Amt\"` |\n| `--description-column` | Override description column | `--description-column \"Memo\"` |\n| `--debit-column` | Use debit column (instead of amount) | `--debit-column \"Debit\"` |\n| `--credit-column` | Use credit column (instead of amount) | `--credit-column \"Credit\"` |\n| `--balance-column` | Running balance (creates snapshots) | `--balance-column \"Balance\"` |\n| `--flip-signs` | Negate amounts (credit card CSVs) | `--flip-signs` |\n| `--debit-negative` | Negate positive debits | `--debit-negative` |\n| `--skip-rows N` | Skip N rows before header | `--skip-rows 3` |\n| `--number-format` | `us`, `eu`, or `eu_space` | `--number-format eu` |\n| `--profile NAME` | Load a saved profile | `--profile chase` |\n| `--save-profile NAME` | Save settings as profile | `--save-profile chase` |\n| `--dry-run` | Preview without importing | `--dry-run` |\n| `--json` | JSON output | `--json` |\n\n**Common patterns for agents:**\n\n```bash\n# Step 1: Find the account UUID\ntl status --json\n\n# Step 2: Preview import\ntl import transactions.csv -a \"550e8400-e29b-41d4-a716-446655440000\" --dry-run --json\n\n# Step 3: Execute import\ntl import transactions.csv -a \"550e8400-e29b-41d4-a716-446655440000\" --json\n```\n\nDuplicate transactions are automatically detected and skipped on re-import via fingerprinting.\n\n---\n\n## Agent Permissions\n\n**Before running any write command, check for `PERMISSIONS.md` in this skill directory.**\n\nIf it exists, read it to see which write commands the user has pre-approved. Pre-approved commands can be run without asking for confirmation. All other write commands still require explicit user confirmation before execution.\n\nIf `PERMISSIONS.md` does not exist, **always ask before running any write command.**\n\n**Template for PERMISSIONS.md:**\n\n```markdown\n# Treeline Agent Permissions\n\nCommands listed here are pre-approved — the agent can run them without\nasking for confirmation each time. Remove a line to require confirmation.\n\n## Allowed write commands\n- tl sync\n- tl backup create\n- tl demo on|off\n```\n\n---\n\n## User Context\n\n**Before answering finance questions, check for `CONTEXT.md` in this skill directory.**\n\nIf it exists, read it first — it contains user-specific knowledge:\n- Account meanings (which accounts are retirement vs brokerage, etc.)\n- Tag conventions and cash flow rules\n- Plugin configurations\n- Personal preferences\n\n**Learning new context:** When you discover something about the user's setup:\n1. For small observations, note them in CONTEXT.md and briefly mention what you saved\n2. For significant assumptions or corrections, ask: \"Want me to save that to your Treeline context?\"\n\nSee the [User Context Pattern](#user-context-pattern) section at the end for the template.\n\n---\n\n## Quick Reference\n\n### Net Worth\n```bash\ntl query \"\nWITH latest AS (\n  SELECT DISTINCT ON (account_id) account_id, balance\n  FROM sys_balance_snapshots\n  ORDER BY account_id, snapshot_time DESC\n)\nSELECT\n  SUM(CASE WHEN a.classification = 'asset' THEN s.balance ELSE 0 END) as assets,\n  SUM(CASE WHEN a.classification = 'liability' THEN ABS(s.balance) ELSE 0 END) as liabilities,\n  SUM(CASE WHEN a.classification = 'asset' THEN s.balance ELSE -ABS(s.balance) END) as net_worth\nFROM accounts a\nJOIN latest s ON a.account_id = s.account_id\n\" --json\n```\n\n### Account Balances\n```bash\ntl query \"\nWITH latest AS (\n  SELECT DISTINCT ON (account_id) account_id, balance\n  FROM sys_balance_snapshots\n  ORDER BY account_id, snapshot_time DESC\n)\nSELECT a.name, a.classification, a.institution_name, s.balance\nFROM accounts a\nJOIN latest s ON a.account_id = s.account_id\nORDER BY s.balance DESC\n\" --json\n```\n\n### True Spending (Excluding Internal Moves)\n\nCheck CONTEXT.md for `internal_transfer_tags`. Default pattern:\n\n```bash\ntl query \"\nSELECT SUM(ABS(amount)) as total_spent\nFROM transactions\nWHERE amount < 0\n  AND transaction_date >= date_trunc('month', current_date)\n  AND NOT (tags && ARRAY['transfer', 'savings', 'investment'])\n\" --json\n```\n\n### Spending by Tag\n```bash\ntl query \"\nSELECT tags, SUM(ABS(amount)) as spent\nFROM transactions\nWHERE amount < 0\n  AND transaction_date >= '2026-01-01' AND transaction_date < '2026-02-01'\n  AND tags IS NOT NULL AND tags != '[]'\nGROUP BY tags\nORDER BY spent DESC\n\" --json\n```\n\n### Recent Transactions\n```bash\ntl query \"\nSELECT t.description, t.amount, t.transaction_date, a.name as account\nFROM transactions t\nJOIN accounts a ON t.account_id = a.account_id\nORDER BY t.transaction_date DESC\nLIMIT 10\n\" --json\n```\n\n---\n\n## Database Schema\n\n### Core Tables\n\n**accounts**\n| Column | Description |\n|--------|-------------|\n| `account_id` | UUID primary key |\n| `name` | Account display name |\n| `classification` | `asset` or `liability` |\n| `account_type` | `credit`, `investment`, `Loan`, `other`, or null |\n| `institution_name` | Bank/institution name |\n| `currency` | Currency code (e.g., `USD`) |\n| `is_manual` | Boolean — manually added vs synced |\n\n**sys_balance_snapshots** — Source of truth for balances\n| Column | Description |\n|--------|-------------|\n| `snapshot_id` | UUID primary key |\n| `account_id` | FK to accounts |\n| `balance` | Balance at snapshot time |\n| `snapshot_time` | When recorded |\n| `source` | `sync`, `manual`, etc. |\n\n**transactions**\n| Column | Description |\n|--------|-------------|\n| `transaction_id` | UUID primary key |\n| `account_id` | FK to accounts |\n| `amount` | Signed (negative = expense) |\n| `description` | Transaction description |\n| `transaction_date` | When it occurred |\n| `posted_date` | When it cleared |\n| `tags` | Array of tags |\n\n### Tags vs Categories\n\n**Tags** are the primary concept in Treeline — transactions can have multiple tags.\n\n**Categories** come from the budget plugin (`plugin_budget`), which maps tags to budget categories. Not all users have this plugin.\n\n---\n\n## Plugin System\n\nPlugins have their own DuckDB schemas: `plugin_<name>.*`\n\n### Discovering Installed Plugins\n```bash\ntl query \"\nSELECT schema_name\nFROM information_schema.schemata\nWHERE schema_name LIKE 'plugin_%'\n\" --json\n```\n\n### Common Plugin Schemas\n\n**plugin_budget.categories** — Budget categories\n| Column | Description |\n|--------|-------------|\n| `category_id` | UUID primary key |\n| `month` | `YYYY-MM` format |\n| `type` | `income` or `expense` |\n| `name` | Category name |\n| `expected` | Budgeted amount |\n| `tags` | Array of tags to match |\n\n**plugin_goals.goals** — Savings goals\n| Column | Description |\n|--------|-------------|\n| `id` | UUID primary key |\n| `name` | Goal name |\n| `target_amount` | Target amount |\n| `target_date` | Target date |\n| `completed` | Boolean |\n| `active` | Boolean |\n\n**plugin_subscriptions** — Detected recurring charges\n\n**plugin_cashflow** — Cash flow projections\n\n**plugin_emergency_fund** — Emergency fund tracking\n\nCheck CONTEXT.md for which plugins the user has and cares about.\n\n---\n\n## Common Patterns\n\n### Getting Current Balances\n\nAlways use latest snapshot:\n```sql\nWITH latest AS (\n  SELECT DISTINCT ON (account_id) account_id, balance\n  FROM sys_balance_snapshots\n  ORDER BY account_id, snapshot_time DESC\n)\nSELECT a.name, s.balance\nFROM accounts a\nJOIN latest s ON a.account_id = s.account_id\n```\n\n### Working with Tags\n\nTags are arrays:\n```sql\n-- Contains a specific tag\nWHERE tags @> ARRAY['groceries']\n\n-- Contains any of these tags\nWHERE tags && ARRAY['food', 'dining']\n\n-- Note: UNNEST doesn't work in all contexts in DuckDB\n-- Instead, GROUP BY tags directly\n```\n\n### Date Filters\n```sql\n-- This month\nWHERE transaction_date >= date_trunc('month', current_date)\n\n-- Specific month\nWHERE transaction_date >= '2026-01-01'\n  AND transaction_date < '2026-02-01'\n```\n\n### Budget vs Actual\n```sql\nSELECT\n  c.name,\n  c.expected,\n  COALESCE(SUM(ABS(t.amount)), 0) as actual,\n  c.expected - COALESCE(SUM(ABS(t.amount)), 0) as remaining\nFROM plugin_budget.categories c\nLEFT JOIN transactions t ON t.tags && c.tags\n  AND t.amount < 0\n  AND t.transaction_date >= (c.month || '-01')::DATE\n  AND t.transaction_date < (c.month || '-01')::DATE + INTERVAL '1 month'\nWHERE c.month = strftime(current_date, '%Y-%m')\n  AND c.type = 'expense'\nGROUP BY c.category_id, c.name, c.expected\n```\n\n---\n\n## Question Mapping\n\n| User asks | Approach |\n|-----------|----------|\n| \"Net worth?\" | Net worth query |\n| \"Balances?\" | Account balances query |\n| \"How much in [X]?\" | Filter by `name ILIKE '%X%'` |\n| \"How much did I spend?\" | True spending query (exclude internal moves) |\n| \"Spending on [tag]?\" | Filter by tag |\n| \"Am I over budget?\" | Budget vs actual (requires budget plugin) |\n| \"Recent transactions\" | Order by date DESC, limit |\n| \"Savings?\" | Filter accounts by name/type |\n| \"Retirement?\" | Filter by 401k, IRA, retirement keywords |\n| \"Import CSV\" / \"Upload transactions\" | Guide through `tl import` — preview first with `--dry-run` |\n| \"Import from [bank name]\" | Use `tl import` with appropriate flags for that bank's CSV format |\n\n---\n\n## Tips\n\n1. **Always use `--json`** for parseable output\n2. **Amounts are signed** — negative = expense\n3. **Use `classification`** for asset/liability\n4. **Balances live in snapshots**, not the accounts table\n5. **Check CONTEXT.md** for user-specific account meanings and tag conventions\n\n---\n\n## User Context Pattern\n\nWhen this skill is installed, create `CONTEXT.md` alongside it to store user-specific knowledge. This keeps the skill generic/shareable while personalizing behavior.\n\n**Template for CONTEXT.md:**\n\n```markdown\n# Treeline User Context\n*Auto-updated by your assistant as it learns your setup*\n\n## Account Notes\n<!-- What specific accounts mean, e.g.: -->\n<!-- - \"Company 401k\" = retirement account -->\n<!-- - \"Home Equity\" = home value estimate (manual) -->\n\n## Tag Conventions\n<!-- How the user uses tags -->\n\n## Cash Flow Rules\n<!-- Tags to exclude from \"true spending\" calculations -->\ninternal_transfer_tags: [transfer, savings, investment]\n\n## Income Sources\n<!-- Known income sources for better reporting -->\n\n## Active Plugins\n<!-- Which plugins are installed and relevant -->\n\n## Preferences\n<!-- Reporting style, rounding, spouse-friendly mode, etc. -->\n\n## Learned Facts\n<!-- Anything else discovered about the user's financial setup -->\n```\n\n**Maintenance:**\n- Briefly mention updates for small observations\n- Ask before recording significant assumptions\n- Periodically validate against live data (accounts may close, tags may change)\n\n---\n\n## Privacy Note\n\nAll data is local (`~/.treeline/treeline.duckdb`). Never share transaction descriptions or account details outside the conversation unless explicitly asked.\n\nFile v26.2.1601:_meta.json\n\n{\n  \"ownerId\": \"kn74ta3e9w7pm5f115wzsdsf818050mm\",\n  \"slug\": \"treeline-money\",\n  \"version\": \"26.2.1601\",\n  \"publishedAt\": 1771301066053\n}","readmeExcerpt":"Skill: Treeline Money Owner: zack-schrag Summary: Chat with your finances from Treeline Money. Query balances, spending, budgets, and transactions. Tags: latest:26.2.2101 Version history: v26.2.2101 | 2026-02-21T14:34:01.353Z | user Release 26.2.2101 v26.2.1601 | 2026-02-17T04:04:26.053Z | user Release 26.2.1601 v26.2.803 | 2026-02-08T23:19:16.360Z | user Release 26.2.803 v26.2.802 | 2026-02-08T21:24:05.440Z | user R","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# 1. Install the CLI (OpenClaw handles this automatically)\n\n# 2. Enable demo mode (sample data)\ntl demo on\n\n# 3. Try it out\ntl status"},{"language":"bash","snippet":"tl demo on"},{"language":"bash","snippet":"tl demo off"},{"language":"text","snippet":"Your net worth is $125k\n\nAssets: $180k\n- Retirement: $85k\n- Savings: $25k\n- Checking: $10k\n- Home equity: $60k\n\nLiabilities: $55k\n- Mortgage: $52k\n- Credit cards: $3k"},{"language":"text","snippet":"| Account | Type | Balance |\n|---------|------|---------|\n| My 401k Account | asset | 85234.56 |\n..."},{"language":"bash","snippet":"tl status              # Quick account summary with balances\ntl status --json       # Same, but JSON output\n\ntl query \"SQL\" --json  # Run any SQL query (database opened in read-only mode)\ntl sql \"SQL\" --json    # Same as tl query (alias)\n\ntl backup list         # List available backups\ntl doctor              # Check database health\ntl demo status         # Check if demo mode is on/off"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: treeline\ndescription: Chat with your finances from Treeline Money. Query balances, spending, budgets, and transactions.\nuser-invocable: true\nhomepage: https://treeline.money\nmetadata: {\"openclaw\":{\"emoji\":\"🌲\",\"requires\":{\"bins\":[\"tl\"]},\"install\":[{\"id\":\"tl-mac\",\"kind\":\"download\",\"url\":\"https://github.com/treeline-money/treeline/releases/latest/download/tl-macos-arm64\",\"bins\":[\"tl\"],\"label\":\"Install Treeline CLI (macOS)\",\"os\":[\"darwin\"]},{\"id\":\"tl-linux\",\"kind\":\"download\",\"url\":\"https://github.com/treeline-money/treeline/releases/latest/download/tl-linux-x64\",\"bins\":[\"tl\"],\"label\":\"Install Treeline CLI (Linux)\",\"os\":[\"linux\"]},{\"id\":\"tl-win\",\"kind\":\"download\",\"url\":\"https://github.com/treeline-money/treeline/releases/latest/download/tl-windows-x64.exe\",\"bins\":[\"tl.exe\"],\"label\":\"Install Treeline CLI (Windows)\",\"os\":[\"win32\"]}]}}\n---\n\n# Treeline Money\n\n**Chat with your finances.** Ask questions like \"What's my net worth?\", \"How much did I spend on groceries?\", or \"Am I over budget?\" and get instant answers from your own financial data.\n\n---\n\n## Quick Start\n\n```bash\n# 1. Install the CLI (OpenClaw handles this automatically)\n\n# 2. Enable demo mode (sample data)\ntl demo on\n\n# 3. Try it out\ntl status\n```\n\n---\n\n## First Time Setup\n\n> **For agents:** If `tl` commands fail with \"command not found\", the CLI needs to be installed. OpenClaw handles installation automatically via the skill metadata. Start with demo mode so users can try queries immediately.\n\nVerify the CLI is available with `tl --version`. Start with demo mode so users can try queries immediately.\n\n**Optional:** Download the [desktop app](https://treeline.money/download) for visual exploration of your data.\n\n### Demo Mode\n\nDemo mode loads sample data so users can try queries without connecting a bank:\n\n```bash\ntl demo on\n```\n\nTo switch to real data later:\n```bash\ntl demo off\n```\n\nDemo data is separate from real data.\n\n### CLI Behavior Notes\n\n- `tl demo on` prints a success message — if it seems to hang, wait a few seconds (first run initializes the database)\n- Use `tl demo status` to verify demo mode is enabled\n- Some commands may take a few seconds on first run due to database initialization\n- If you see errors about missing tables, try `tl demo on` again\n\n### Connecting Real Data\n\nWhen the user is ready to move beyond demo mode, direct them to set up a data source with the guides linked below.\n\nData source options:\n- **SimpleFIN** ($1.50/month, US & Canada)\n- **Lunch Flow** (~$3/month, global)\n- **CSV Import** (free)\n\nSetup guides: [Bank Sync](https://treeline.money/docs/integrations/bank-sync/) · [CSV Import](https://treeline.money/docs/integrations/csv-import/)\n\nOnce set up, use `tl sync` to pull bank transactions or `tl import` to load a CSV.\n\n---\n\n## What is Treeline?\n\n[Treeline Money](https://treeline.money) is a local-first personal finance app. All your data stays on your device in a local DuckDB database. No cloud accounts, no subscriptions required (sync services are opt"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn74ta3e9w7pm5f115wzsdsf818050mm\",\n  \"slug\": \"treeline-money\",\n  \"version\": \"26.2.2101\",\n  \"publishedAt\": 1771684441353\n}"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Chat with your finances from Treeline Money. Query balances, spending, budgets, and transactions. Skill: Treeline Money Owner: zack-schrag Summary: Chat with your finances from Treeline Money. Query balances, spending, budgets, and transactions. Tags: latest:26.2.2101 Version history: v26.2.2101 | 2026-02-21T14:34:01.353Z | user Release 26.2.2101 v26.2.1601 | 2026-02-17T04:04:26.053Z | user Release 26.2.1601 v26.2.803 | 2026-02-08T23:19:16.360Z | user Release 26.2.803 v26.2.802 | 2026-02-08T21:24:05.440Z | user R","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":838,"uniquenessScore":54,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T01:10:03.980Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}