{
  "schemaVersion": "1.0",
  "item": {
    "slug": "shelter",
    "name": "Shelter",
    "source": "tencent",
    "type": "skill",
    "category": "数据分析",
    "sourceUrl": "https://clawhub.ai/code-with-brian/shelter",
    "canonicalUrl": "https://clawhub.ai/code-with-brian/shelter",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/shelter",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=shelter",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "clawhub.json",
      "install-skill.js",
      "package.json",
      "references/DATA_MODEL.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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.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/shelter"
    },
    "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/shelter",
    "agentPageUrl": "https://openagent3.xyz/skills/shelter/agent",
    "manifestUrl": "https://openagent3.xyz/skills/shelter/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/shelter/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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Shelter",
        "body": "Connect to a user's Shelter financial data via the Agent API. All endpoints return JSON. You are a financial coach — interpret the data, don't just dump it."
      },
      {
        "title": "Authentication",
        "body": "Every request needs two things:\n\nHeader: X-Shelter-Key: $SHELTER_API_KEY\nBase URL: $SHELTER_API_URL (default: https://api.shelter.money/agent)\n\nAll examples below use these variables. Confirm they're set before making any call."
      },
      {
        "title": "Decision Tree",
        "body": "Use this to pick the right endpoint for the user's question:\n\nUser wants to know...EndpointCost\"How am I doing?\" / \"Can I spend today?\"GET /v1/statusCheap\"When do I run out of money?\"GET /v1/runwayCheap\"What does next week look like?\"GET /v1/forecastMedium\"Any problems I should know about?\"GET /v1/alertsMedium\"Where am I wasting money?\"GET /v1/opportunitiesMedium\"Give me the full picture\"GET /v1/contextMedium\"Can I afford X?\"POST /v1/affordabilityMedium\"Give me today's coaching\"GET /v1/coach/dailyMedium\"Help me with [debt/savings/bills]\"GET /v1/coach/advice?topic=MediumComplex/nuanced questionPOST /v1/askExpensive\n\nAlways start with the cheapest endpoint that answers the question. Only use /v1/ask when structured endpoints can't answer it."
      },
      {
        "title": "Quick Checks",
        "body": "These are fast, cached, and cheap. Use them first.\n\nGET /v1/status\n\nThe user's current financial health snapshot.\n\nWhen to use: User asks how they're doing, wants safe-to-spend, or you need a quick health check before answering.\n\nWhen NOT to use: User wants a multi-day forecast or detailed breakdown.\n\ncurl -s -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/status\"\n\nKey response fields:\n\nsafeToSpend — dollars available after upcoming commitments\nsafeDays — days of runway at current burn rate\nstressLevel — low | medium | high | critical\nupcomingIncome — { amount, date, source } or null\nnextCommitment — { name, amount, dueDate } or null\nconfidence — 0-100 data quality score\nexplanation — human-readable summary\n\nHow to summarize: Lead with safe-to-spend and stress level. Mention next income if it's within 3 days. Flag low confidence (<50) as \"limited data.\"\n\nGET /v1/runway\n\nHow long until the money runs out.\n\nWhen to use: User asks about runway, burn rate, or when they'll be broke.\n\nWhen NOT to use: User wants day-by-day detail (use forecast instead).\n\ncurl -s -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/runway\"\n\nKey response fields:\n\nsafeDays — days of remaining runway\nburnRate — average daily spending (last 30 days)\nbreathingRoom — buffer after commitments\nnextCrunchDate — ISO date when balance goes negative (or null)\nnextCrunchAmount — commitments due around the crunch\ndaysUntilCrunch — days until the crunch (or null)\nexplanation — human-readable summary\n\nHow to summarize: State days of runway and daily burn rate. If a crunch is coming, warn with the date and amount. If no crunch, reassure them."
      },
      {
        "title": "Deep Analysis",
        "body": "More detailed endpoints. Use when quick checks aren't enough.\n\nGET /v1/forecast\n\n14-day day-by-day financial projection.\n\nWhen to use: User asks what the next week/two weeks look like, or wants to see when specific bills hit.\n\nWhen NOT to use: User just wants today's snapshot (use status).\n\ncurl -s -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/forecast\"\n\nKey response fields:\n\nforecast[] — array of daily projections: { date, projectedBalance, events[], isCrunch, isTight }\nsummary — { crunchDays, tightDays, lowestBalance, highestBalance }\n\nHow to summarize: Highlight crunch days (negative balance) and tight days first. Mention the lowest balance and when it occurs. List significant events (big bills, income).\n\nGET /v1/alerts\n\nActive warnings: zombie subscriptions, spending spikes, upcoming bills.\n\nWhen to use: User asks what needs attention, or you want to proactively surface problems.\n\nWhen NOT to use: User is asking about a specific topic (use advice instead).\n\ncurl -s -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/alerts\"\n\nKey response fields:\n\nalerts[] — { id, type, severity, title, description, amount?, daysUntil?, evidence? }\ncount — total alerts\nhasCritical — boolean\n\nHow to summarize: Critical alerts first, then warnings, then info. Be specific about amounts and dates. If hasCritical is true, lead with urgency.\n\nGET /v1/opportunities\n\nPlaces the user is wasting money or could save.\n\nWhen to use: User asks about saving money, zombie subscriptions, or spending optimization.\n\nWhen NOT to use: User needs a forecast or health check.\n\ncurl -s -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/opportunities\"\n\nKey response fields:\n\nopportunities[] — { id, type, title, description, potentialSavings, difficulty, actionUrl? }\ntotalPotentialSavings — annual savings if all opportunities are acted on\n\nHow to summarize: Lead with total potential savings. List opportunities easiest-first. Include action URLs when available.\n\nGET /v1/context\n\nFull financial overview combining status, alerts, spending insights, and upcoming events.\n\nWhen to use: User wants the big picture, or you need comprehensive context to answer a complex question.\n\nWhen NOT to use: A more specific endpoint can answer the question. This is heavy.\n\ncurl -s -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/context\"\n\nKey response fields:\n\nsnapshot — { availableBalance, breathingRoom, daysOfBreathingRoom, upcomingIncome, commitments[] }\nhighlights — { urgentActions, biggestOpportunities, recentWins }\nalerts[] — same format as alerts endpoint\nspendingInsights — { summary, byCategory, topMerchants, anomalies }\nupcomingEvents[] — { type, name, amount, currentDate, priority }\n\nHow to summarize: Start with available balance and breathing room. Highlight urgent actions. Mention recent wins (positive reinforcement). Dive into spending insights only if the user asks.\n\nPOST /v1/affordability\n\nSimulate whether the user can afford a specific purchase.\n\nWhen to use: User asks \"Can I afford X?\" with a specific dollar amount.\n\nWhen NOT to use: User is asking generally about spending (use status).\n\ncurl -s -X POST -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"amount\": 200, \"description\": \"New headphones\"}' \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/affordability\"\n\nKey response fields:\n\ncanAfford — boolean\nsafeToSpendAfter — remaining safe-to-spend after the purchase\nimpactOnRunway — how many fewer days of runway\nrecommendation — AI-generated advice\nconfidence — 0-100\n\nHow to summarize: Give a clear yes/no first, then explain the impact on their runway and safe-to-spend."
      },
      {
        "title": "Coaching",
        "body": "AI-generated coaching messages tailored to the user's financial situation.\n\nGET /v1/coach/daily\n\nToday's personalized coaching message.\n\nWhen to use: Start of a session, or user asks for their daily update.\n\ncurl -s -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/coach/daily\"\n\nKey response fields:\n\nmessageType — daily_checkin | alert | celebration | suggestion | warning\nheadline — short headline\nbody — 2-4 sentences of coaching with specific numbers\nactions[] — { label, actionType, actionTarget }\ntone — encouraging | urgent | celebratory | supportive\n\nHow to summarize: Present the headline and body naturally. Suggest the actions conversationally. Match the tone.\n\nGET /v1/coach/advice?topic=\n\nDeep-dive coaching on a specific financial topic.\n\nWhen to use: User asks for help with a specific area.\n\nTopics: debt, savings, bills, subscriptions, negotiation, general\n\ncurl -s -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/coach/advice?topic=debt\"\n\nResponse format: Same as daily coaching (headline, body, actions, tone).\n\nHow to summarize: Present the advice naturally. If the user didn't specify a topic, ask which area they want help with or default to general."
      },
      {
        "title": "Guardian AI Chat",
        "body": "POST /v1/ask\n\nAsk Guardian AI a free-form question about the user's finances. This is the most expensive endpoint — use it as a last resort when structured endpoints can't answer.\n\nWhen to use: Nuanced questions, planning advice, or follow-ups that need reasoning.\n\nWhen NOT to use: Questions answerable by structured endpoints above. Always try those first.\n\ncurl -s -X POST -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"question\": \"What should I prioritize right now?\"}' \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/ask\"\n\nKey response fields:\n\nresponse — Guardian AI's natural language answer\nconfidence — 0-100\nrelatedAlerts[] — IDs of relevant alerts\nlimitRemaining — remaining /ask calls for the day\n\nHow to summarize: Present Guardian's response directly. If confidence is low (<50), note the uncertainty. If limitRemaining is low, mention it so the user knows."
      },
      {
        "title": "Rate Limits",
        "body": "Endpoint groupFree tierPremium tierStatus, Runway60/hour60/hourForecast, Alerts, Opportunities, Context, Affordability60/hour60/hourCoach (daily, advice)60/hour60/hourAsk (Guardian AI)5/day100/day"
      },
      {
        "title": "Error Codes",
        "body": "CodeMeaningWhat to do401Invalid or missing API keyCheck SHELTER_API_KEY is set and valid403Key lacks required scopeUser needs to update key permissions at shelter.money429Rate limit exceededWait and retry. Check Retry-After header500Server errorWait a moment and retry\n\nIf you get a 401, tell the user to check their API key. Don't retry auth errors."
      },
      {
        "title": "Setup",
        "body": "Sign up at shelter.money\nConnect bank accounts via Plaid (takes ~60 seconds)\nCreate an Agent API key at shelter.money/settings/api-keys\nSet your environment variable:\nexport SHELTER_API_KEY=\"wv_your_key_here\"\n\n\nTest the connection:\ncurl -s -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/status\""
      },
      {
        "title": "Security",
        "body": "Read-only — Shelter can see transactions and balances but can never move money\nScoped API keys — you choose exactly what the key can access\nNo raw bank data — the API returns computed insights (safe-to-spend, alerts), not raw transactions\nKeys are hashed — the secret is never stored in plain text\nAudit logging — every API call is logged\nInstant revocation — disable any key from your settings"
      },
      {
        "title": "Data Reference",
        "body": "For field-by-field documentation of all response shapes, see references/DATA_MODEL.md."
      }
    ],
    "body": "Shelter\n\nConnect to a user's Shelter financial data via the Agent API. All endpoints return JSON. You are a financial coach — interpret the data, don't just dump it.\n\nAuthentication\n\nEvery request needs two things:\n\nHeader: X-Shelter-Key: $SHELTER_API_KEY\nBase URL: $SHELTER_API_URL (default: https://api.shelter.money/agent)\n\nAll examples below use these variables. Confirm they're set before making any call.\n\nDecision Tree\n\nUse this to pick the right endpoint for the user's question:\n\nUser wants to know...\tEndpoint\tCost\n\"How am I doing?\" / \"Can I spend today?\"\tGET /v1/status\tCheap\n\"When do I run out of money?\"\tGET /v1/runway\tCheap\n\"What does next week look like?\"\tGET /v1/forecast\tMedium\n\"Any problems I should know about?\"\tGET /v1/alerts\tMedium\n\"Where am I wasting money?\"\tGET /v1/opportunities\tMedium\n\"Give me the full picture\"\tGET /v1/context\tMedium\n\"Can I afford X?\"\tPOST /v1/affordability\tMedium\n\"Give me today's coaching\"\tGET /v1/coach/daily\tMedium\n\"Help me with [debt/savings/bills]\"\tGET /v1/coach/advice?topic=\tMedium\nComplex/nuanced question\tPOST /v1/ask\tExpensive\n\nAlways start with the cheapest endpoint that answers the question. Only use /v1/ask when structured endpoints can't answer it.\n\nEndpoints\nQuick Checks\n\nThese are fast, cached, and cheap. Use them first.\n\nGET /v1/status\n\nThe user's current financial health snapshot.\n\nWhen to use: User asks how they're doing, wants safe-to-spend, or you need a quick health check before answering.\n\nWhen NOT to use: User wants a multi-day forecast or detailed breakdown.\n\ncurl -s -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/status\"\n\n\nKey response fields:\n\nsafeToSpend — dollars available after upcoming commitments\nsafeDays — days of runway at current burn rate\nstressLevel — low | medium | high | critical\nupcomingIncome — { amount, date, source } or null\nnextCommitment — { name, amount, dueDate } or null\nconfidence — 0-100 data quality score\nexplanation — human-readable summary\n\nHow to summarize: Lead with safe-to-spend and stress level. Mention next income if it's within 3 days. Flag low confidence (<50) as \"limited data.\"\n\nGET /v1/runway\n\nHow long until the money runs out.\n\nWhen to use: User asks about runway, burn rate, or when they'll be broke.\n\nWhen NOT to use: User wants day-by-day detail (use forecast instead).\n\ncurl -s -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/runway\"\n\n\nKey response fields:\n\nsafeDays — days of remaining runway\nburnRate — average daily spending (last 30 days)\nbreathingRoom — buffer after commitments\nnextCrunchDate — ISO date when balance goes negative (or null)\nnextCrunchAmount — commitments due around the crunch\ndaysUntilCrunch — days until the crunch (or null)\nexplanation — human-readable summary\n\nHow to summarize: State days of runway and daily burn rate. If a crunch is coming, warn with the date and amount. If no crunch, reassure them.\n\nDeep Analysis\n\nMore detailed endpoints. Use when quick checks aren't enough.\n\nGET /v1/forecast\n\n14-day day-by-day financial projection.\n\nWhen to use: User asks what the next week/two weeks look like, or wants to see when specific bills hit.\n\nWhen NOT to use: User just wants today's snapshot (use status).\n\ncurl -s -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/forecast\"\n\n\nKey response fields:\n\nforecast[] — array of daily projections: { date, projectedBalance, events[], isCrunch, isTight }\nsummary — { crunchDays, tightDays, lowestBalance, highestBalance }\n\nHow to summarize: Highlight crunch days (negative balance) and tight days first. Mention the lowest balance and when it occurs. List significant events (big bills, income).\n\nGET /v1/alerts\n\nActive warnings: zombie subscriptions, spending spikes, upcoming bills.\n\nWhen to use: User asks what needs attention, or you want to proactively surface problems.\n\nWhen NOT to use: User is asking about a specific topic (use advice instead).\n\ncurl -s -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/alerts\"\n\n\nKey response fields:\n\nalerts[] — { id, type, severity, title, description, amount?, daysUntil?, evidence? }\ncount — total alerts\nhasCritical — boolean\n\nHow to summarize: Critical alerts first, then warnings, then info. Be specific about amounts and dates. If hasCritical is true, lead with urgency.\n\nGET /v1/opportunities\n\nPlaces the user is wasting money or could save.\n\nWhen to use: User asks about saving money, zombie subscriptions, or spending optimization.\n\nWhen NOT to use: User needs a forecast or health check.\n\ncurl -s -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/opportunities\"\n\n\nKey response fields:\n\nopportunities[] — { id, type, title, description, potentialSavings, difficulty, actionUrl? }\ntotalPotentialSavings — annual savings if all opportunities are acted on\n\nHow to summarize: Lead with total potential savings. List opportunities easiest-first. Include action URLs when available.\n\nGET /v1/context\n\nFull financial overview combining status, alerts, spending insights, and upcoming events.\n\nWhen to use: User wants the big picture, or you need comprehensive context to answer a complex question.\n\nWhen NOT to use: A more specific endpoint can answer the question. This is heavy.\n\ncurl -s -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/context\"\n\n\nKey response fields:\n\nsnapshot — { availableBalance, breathingRoom, daysOfBreathingRoom, upcomingIncome, commitments[] }\nhighlights — { urgentActions, biggestOpportunities, recentWins }\nalerts[] — same format as alerts endpoint\nspendingInsights — { summary, byCategory, topMerchants, anomalies }\nupcomingEvents[] — { type, name, amount, currentDate, priority }\n\nHow to summarize: Start with available balance and breathing room. Highlight urgent actions. Mention recent wins (positive reinforcement). Dive into spending insights only if the user asks.\n\nPOST /v1/affordability\n\nSimulate whether the user can afford a specific purchase.\n\nWhen to use: User asks \"Can I afford X?\" with a specific dollar amount.\n\nWhen NOT to use: User is asking generally about spending (use status).\n\ncurl -s -X POST -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"amount\": 200, \"description\": \"New headphones\"}' \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/affordability\"\n\n\nKey response fields:\n\ncanAfford — boolean\nsafeToSpendAfter — remaining safe-to-spend after the purchase\nimpactOnRunway — how many fewer days of runway\nrecommendation — AI-generated advice\nconfidence — 0-100\n\nHow to summarize: Give a clear yes/no first, then explain the impact on their runway and safe-to-spend.\n\nCoaching\n\nAI-generated coaching messages tailored to the user's financial situation.\n\nGET /v1/coach/daily\n\nToday's personalized coaching message.\n\nWhen to use: Start of a session, or user asks for their daily update.\n\ncurl -s -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/coach/daily\"\n\n\nKey response fields:\n\nmessageType — daily_checkin | alert | celebration | suggestion | warning\nheadline — short headline\nbody — 2-4 sentences of coaching with specific numbers\nactions[] — { label, actionType, actionTarget }\ntone — encouraging | urgent | celebratory | supportive\n\nHow to summarize: Present the headline and body naturally. Suggest the actions conversationally. Match the tone.\n\nGET /v1/coach/advice?topic=\n\nDeep-dive coaching on a specific financial topic.\n\nWhen to use: User asks for help with a specific area.\n\nTopics: debt, savings, bills, subscriptions, negotiation, general\n\ncurl -s -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/coach/advice?topic=debt\"\n\n\nResponse format: Same as daily coaching (headline, body, actions, tone).\n\nHow to summarize: Present the advice naturally. If the user didn't specify a topic, ask which area they want help with or default to general.\n\nGuardian AI Chat\nPOST /v1/ask\n\nAsk Guardian AI a free-form question about the user's finances. This is the most expensive endpoint — use it as a last resort when structured endpoints can't answer.\n\nWhen to use: Nuanced questions, planning advice, or follow-ups that need reasoning.\n\nWhen NOT to use: Questions answerable by structured endpoints above. Always try those first.\n\ncurl -s -X POST -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"question\": \"What should I prioritize right now?\"}' \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/ask\"\n\n\nKey response fields:\n\nresponse — Guardian AI's natural language answer\nconfidence — 0-100\nrelatedAlerts[] — IDs of relevant alerts\nlimitRemaining — remaining /ask calls for the day\n\nHow to summarize: Present Guardian's response directly. If confidence is low (<50), note the uncertainty. If limitRemaining is low, mention it so the user knows.\n\nRate Limits\nEndpoint group\tFree tier\tPremium tier\nStatus, Runway\t60/hour\t60/hour\nForecast, Alerts, Opportunities, Context, Affordability\t60/hour\t60/hour\nCoach (daily, advice)\t60/hour\t60/hour\nAsk (Guardian AI)\t5/day\t100/day\nError Codes\nCode\tMeaning\tWhat to do\n401\tInvalid or missing API key\tCheck SHELTER_API_KEY is set and valid\n403\tKey lacks required scope\tUser needs to update key permissions at shelter.money\n429\tRate limit exceeded\tWait and retry. Check Retry-After header\n500\tServer error\tWait a moment and retry\n\nIf you get a 401, tell the user to check their API key. Don't retry auth errors.\n\nSetup\nSign up at shelter.money\nConnect bank accounts via Plaid (takes ~60 seconds)\nCreate an Agent API key at shelter.money/settings/api-keys\nSet your environment variable:\nexport SHELTER_API_KEY=\"wv_your_key_here\"\n\nTest the connection:\ncurl -s -H \"X-Shelter-Key: $SHELTER_API_KEY\" \\\n  \"${SHELTER_API_URL:-https://api.shelter.money/agent}/v1/status\"\n\nSecurity\nRead-only — Shelter can see transactions and balances but can never move money\nScoped API keys — you choose exactly what the key can access\nNo raw bank data — the API returns computed insights (safe-to-spend, alerts), not raw transactions\nKeys are hashed — the secret is never stored in plain text\nAudit logging — every API call is logged\nInstant revocation — disable any key from your settings\nData Reference\n\nFor field-by-field documentation of all response shapes, see references/DATA_MODEL.md."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/code-with-brian/shelter",
    "publisherUrl": "https://clawhub.ai/code-with-brian/shelter",
    "owner": "code-with-brian",
    "version": "1.0.3",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/shelter",
    "downloadUrl": "https://openagent3.xyz/downloads/shelter",
    "agentUrl": "https://openagent3.xyz/skills/shelter/agent",
    "manifestUrl": "https://openagent3.xyz/skills/shelter/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/shelter/agent.md"
  }
}