{
  "schemaVersion": "1.0",
  "item": {
    "slug": "spend-pulse",
    "name": "Spend Pulse",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/jbornhorst1524/spend-pulse",
    "canonicalUrl": "https://clawhub.ai/jbornhorst1524/spend-pulse",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/spend-pulse",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=spend-pulse",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "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/spend-pulse"
    },
    "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/spend-pulse",
    "agentPageUrl": "https://openagent3.xyz/skills/spend-pulse/agent",
    "manifestUrl": "https://openagent3.xyz/skills/spend-pulse/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/spend-pulse/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": "Spend Pulse",
        "body": "Proactive spending alerts via Plaid. Track credit card spending against a monthly budget with pace-based alerts."
      },
      {
        "title": "Installation",
        "body": "# Install globally\nnpm install -g spend-pulse\n\n# Or from source\ngit clone https://github.com/jbornhorst1524/spend-pulse.git\ncd spend-pulse\nnpm install && npm run build && npm link\n\nVerify installation:\n\nspend-pulse --version"
      },
      {
        "title": "First-Time Setup",
        "body": "Run the interactive setup wizard:\n\nspend-pulse setup\n\nThis will:\n\nPrompt for Plaid API credentials (get them at https://dashboard.plaid.com/developers/keys)\nAsk to choose Sandbox (test data) or Development (real bank) mode\nSet monthly spending budget\nOpen browser for Plaid Link bank authentication\nStore credentials securely in macOS Keychain\n\nFor Sandbox testing, use these Plaid test credentials when the bank login appears:\n\nUsername: user_good\nPassword: pass_good\n\nAfter setup, run initial sync:\n\nspend-pulse sync"
      },
      {
        "title": "spend-pulse check — Primary Command",
        "body": "Returns alert decision with full context. This is the main command to use.\n\nshould_alert: true\nreasons:\n  - 3 new transactions\n  - end of month approaching\nmonth: \"2026-01\"\nbudget: 8000\nspent: 6801.29\nremaining: 1198.71\nday_of_month: 30\ndays_in_month: 31\ndays_remaining: 1\nexpected_spend: 7200.00\npace: under\npace_delta: -398.71\npace_percent: -6\npace_source: last_month\noneline: \"Jan: $6.8k of $8k (85%) | $1.2k left | 1 days | > On track\"\nnew_transactions: 3\nnew_items:\n  - merchant: Whole Foods\n    amount: 47.50\n    category: Groceries\n  - merchant: Amazon\n    amount: 125.00\n    category: Shopping\n\nAlert triggers (should_alert: true when any apply):\n\nNew transactions since last check\nOver pace (spending faster than expected)\nRemaining budget < $500\nEnd of month (last 3 days)\nFirst of month (new month started)"
      },
      {
        "title": "spend-pulse sync",
        "body": "Pull latest transactions from Plaid. Run before check for fresh data.\n\nsynced: 16\nnew: 3\naccount: \"Amex Gold (...1234)\"\ntotal_this_month: 6801.29"
      },
      {
        "title": "spend-pulse status [--oneline]",
        "body": "Full spending summary, or quick one-liner:\n\nspend-pulse status --oneline\n# Jan: $6.8k of $8k (85%) | $1.2k left | 1 days | > On track"
      },
      {
        "title": "spend-pulse recent [--days N] [--count N]",
        "body": "Recent transactions (default: last 5 days)."
      },
      {
        "title": "spend-pulse config [key] [value]",
        "body": "View or modify settings:\n\nspend-pulse config                  # show all\nspend-pulse config target 8000      # set monthly budget\nspend-pulse config timezone America/Chicago"
      },
      {
        "title": "spend-pulse link [--status] [--remove <id>]",
        "body": "Manage linked bank accounts:\n\nspend-pulse link --status    # show linked accounts\nspend-pulse link             # add another account\nspend-pulse link --remove <item_id>"
      },
      {
        "title": "spend-pulse chart [-o <path>]",
        "body": "Generate a cumulative spending chart as a PNG image showing:\n\nCurrent month spending (solid blue line with gradient fill, ends with a dot at today)\nLast month spending (dashed gray line, full month)\nBudget target (dashed amber horizontal line)\n\nspend-pulse chart                    # Writes to ~/.spend-pulse/chart.png\nspend-pulse chart -o /tmp/chart.png  # Custom output path\n\nOutputs the file path to stdout so you can capture it and attach to messages."
      },
      {
        "title": "spend-pulse check --chart",
        "body": "Generate a chart alongside the alert check. Adds chart_path to the YAML output:\n\nshould_alert: true\nchart_path: /Users/you/.spend-pulse/chart.png\n# ... rest of check output"
      },
      {
        "title": "Recommended Workflow",
        "body": "# 1. Sync latest transactions\nspend-pulse sync\n\n# 2. Check if alert needed, generate chart\nspend-pulse check --chart\n\nIf should_alert: true: Compose a brief, friendly spending update using the data. Attach the chart image from chart_path — it shows current vs. last month spending at a glance.\n\nIf should_alert: false: Stay quiet unless the user asks about spending."
      },
      {
        "title": "Composing Messages",
        "body": "Use the oneline field as the core message, then add context. Always attach the chart image when available — it communicates pace visually better than any text can.\n\nUnder pace (positive):\n\n\"Quick spending pulse: Jan at $6.8k of $8k, $1.2k left with 1 day to go. Under pace by 12% — nice work!\"\n[attach chart.png]\n\nOn track:\n\n\"January update: $5.5k of $8k (69%) with 10 days left. Right on pace. Recent: $125 Amazon, $47 Whole Foods.\"\n[attach chart.png]\n\nOver pace (heads up):\n\n\"Heads up — January's at $7.2k of $8k with 5 days to go. About 10% over pace. The travel charges added up.\"\n[attach chart.png]\n\nOver budget:\n\n\"January budget: $8.5k spent, about $500 over the $8k target. Something to keep in mind for February.\"\n[attach chart.png]\n\nGuidelines:\n\nTone: helpful friend, not nagging accountant\nKeep text under 280 characters when possible\nMention 1-2 notable items from new_items if interesting\nUse reasons array for context\nAlways include the chart image — it's designed to be readable on a phone screen"
      },
      {
        "title": "Pace Explained",
        "body": "Spend Pulse paces against last month's actual cumulative spend curve when available, falling back to a linear budget ramp when no prior month data exists.\n\nexpected_spend: Where you were at this point last month (or linear ramp fallback)\nspent: Actual spending\npace_delta: Difference (negative = under, positive = over)\npace: under | on_track | over\npace_source: last_month (curve-based) or linear (ramp fallback)\n\nThis means early-month bills (rent, subscriptions) won't trigger false \"over pace\" alerts if you had similar bills last month.\n\nExample: Day 15, last month you'd spent $4.2k by this point → expected ~$4.2k."
      },
      {
        "title": "Upgrading to Real Bank Data",
        "body": "After testing with Sandbox, upgrade to Development mode for real transactions:\n\nspend-pulse setup --upgrade\n\nThis clears sandbox data and connects your real bank account."
      },
      {
        "title": "Troubleshooting",
        "body": "\"Plaid credentials not found\": Run spend-pulse setup to configure.\n\n\"Access token not found\": Run spend-pulse setup to re-authenticate.\n\n\"No accounts found\": Check spend-pulse link --status and add account if needed.\n\nStale data: Run spend-pulse sync to refresh from Plaid."
      }
    ],
    "body": "Spend Pulse\n\nProactive spending alerts via Plaid. Track credit card spending against a monthly budget with pace-based alerts.\n\nInstallation\n# Install globally\nnpm install -g spend-pulse\n\n# Or from source\ngit clone https://github.com/jbornhorst1524/spend-pulse.git\ncd spend-pulse\nnpm install && npm run build && npm link\n\n\nVerify installation:\n\nspend-pulse --version\n\nFirst-Time Setup\n\nRun the interactive setup wizard:\n\nspend-pulse setup\n\n\nThis will:\n\nPrompt for Plaid API credentials (get them at https://dashboard.plaid.com/developers/keys)\nAsk to choose Sandbox (test data) or Development (real bank) mode\nSet monthly spending budget\nOpen browser for Plaid Link bank authentication\nStore credentials securely in macOS Keychain\n\nFor Sandbox testing, use these Plaid test credentials when the bank login appears:\n\nUsername: user_good\nPassword: pass_good\n\nAfter setup, run initial sync:\n\nspend-pulse sync\n\nCommands\nspend-pulse check — Primary Command\n\nReturns alert decision with full context. This is the main command to use.\n\nshould_alert: true\nreasons:\n  - 3 new transactions\n  - end of month approaching\nmonth: \"2026-01\"\nbudget: 8000\nspent: 6801.29\nremaining: 1198.71\nday_of_month: 30\ndays_in_month: 31\ndays_remaining: 1\nexpected_spend: 7200.00\npace: under\npace_delta: -398.71\npace_percent: -6\npace_source: last_month\noneline: \"Jan: $6.8k of $8k (85%) | $1.2k left | 1 days | > On track\"\nnew_transactions: 3\nnew_items:\n  - merchant: Whole Foods\n    amount: 47.50\n    category: Groceries\n  - merchant: Amazon\n    amount: 125.00\n    category: Shopping\n\n\nAlert triggers (should_alert: true when any apply):\n\nNew transactions since last check\nOver pace (spending faster than expected)\nRemaining budget < $500\nEnd of month (last 3 days)\nFirst of month (new month started)\nspend-pulse sync\n\nPull latest transactions from Plaid. Run before check for fresh data.\n\nsynced: 16\nnew: 3\naccount: \"Amex Gold (...1234)\"\ntotal_this_month: 6801.29\n\nspend-pulse status [--oneline]\n\nFull spending summary, or quick one-liner:\n\nspend-pulse status --oneline\n# Jan: $6.8k of $8k (85%) | $1.2k left | 1 days | > On track\n\nspend-pulse recent [--days N] [--count N]\n\nRecent transactions (default: last 5 days).\n\nspend-pulse config [key] [value]\n\nView or modify settings:\n\nspend-pulse config                  # show all\nspend-pulse config target 8000      # set monthly budget\nspend-pulse config timezone America/Chicago\n\nspend-pulse link [--status] [--remove <id>]\n\nManage linked bank accounts:\n\nspend-pulse link --status    # show linked accounts\nspend-pulse link             # add another account\nspend-pulse link --remove <item_id>\n\nspend-pulse chart [-o <path>]\n\nGenerate a cumulative spending chart as a PNG image showing:\n\nCurrent month spending (solid blue line with gradient fill, ends with a dot at today)\nLast month spending (dashed gray line, full month)\nBudget target (dashed amber horizontal line)\nspend-pulse chart                    # Writes to ~/.spend-pulse/chart.png\nspend-pulse chart -o /tmp/chart.png  # Custom output path\n\n\nOutputs the file path to stdout so you can capture it and attach to messages.\n\nspend-pulse check --chart\n\nGenerate a chart alongside the alert check. Adds chart_path to the YAML output:\n\nshould_alert: true\nchart_path: /Users/you/.spend-pulse/chart.png\n# ... rest of check output\n\nRecommended Workflow\n# 1. Sync latest transactions\nspend-pulse sync\n\n# 2. Check if alert needed, generate chart\nspend-pulse check --chart\n\n\nIf should_alert: true: Compose a brief, friendly spending update using the data. Attach the chart image from chart_path — it shows current vs. last month spending at a glance.\n\nIf should_alert: false: Stay quiet unless the user asks about spending.\n\nComposing Messages\n\nUse the oneline field as the core message, then add context. Always attach the chart image when available — it communicates pace visually better than any text can.\n\nUnder pace (positive):\n\n\"Quick spending pulse: Jan at $6.8k of $8k, $1.2k left with 1 day to go. Under pace by 12% — nice work!\" [attach chart.png]\n\nOn track:\n\n\"January update: $5.5k of $8k (69%) with 10 days left. Right on pace. Recent: $125 Amazon, $47 Whole Foods.\" [attach chart.png]\n\nOver pace (heads up):\n\n\"Heads up — January's at $7.2k of $8k with 5 days to go. About 10% over pace. The travel charges added up.\" [attach chart.png]\n\nOver budget:\n\n\"January budget: $8.5k spent, about $500 over the $8k target. Something to keep in mind for February.\" [attach chart.png]\n\nGuidelines:\n\nTone: helpful friend, not nagging accountant\nKeep text under 280 characters when possible\nMention 1-2 notable items from new_items if interesting\nUse reasons array for context\nAlways include the chart image — it's designed to be readable on a phone screen\nPace Explained\n\nSpend Pulse paces against last month's actual cumulative spend curve when available, falling back to a linear budget ramp when no prior month data exists.\n\nexpected_spend: Where you were at this point last month (or linear ramp fallback)\nspent: Actual spending\npace_delta: Difference (negative = under, positive = over)\npace: under | on_track | over\npace_source: last_month (curve-based) or linear (ramp fallback)\n\nThis means early-month bills (rent, subscriptions) won't trigger false \"over pace\" alerts if you had similar bills last month.\n\nExample: Day 15, last month you'd spent $4.2k by this point → expected ~$4.2k.\n\nUpgrading to Real Bank Data\n\nAfter testing with Sandbox, upgrade to Development mode for real transactions:\n\nspend-pulse setup --upgrade\n\n\nThis clears sandbox data and connects your real bank account.\n\nTroubleshooting\n\n\"Plaid credentials not found\": Run spend-pulse setup to configure.\n\n\"Access token not found\": Run spend-pulse setup to re-authenticate.\n\n\"No accounts found\": Check spend-pulse link --status and add account if needed.\n\nStale data: Run spend-pulse sync to refresh from Plaid."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/jbornhorst1524/spend-pulse",
    "publisherUrl": "https://clawhub.ai/jbornhorst1524/spend-pulse",
    "owner": "jbornhorst1524",
    "version": "0.1.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/spend-pulse",
    "downloadUrl": "https://openagent3.xyz/downloads/spend-pulse",
    "agentUrl": "https://openagent3.xyz/skills/spend-pulse/agent",
    "manifestUrl": "https://openagent3.xyz/skills/spend-pulse/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/spend-pulse/agent.md"
  }
}