{
  "schemaVersion": "1.0",
  "item": {
    "slug": "agent-rate-limiter",
    "name": "Rate Limiter",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/TheAgentWire/agent-rate-limiter",
    "canonicalUrl": "https://clawhub.ai/TheAgentWire/agent-rate-limiter",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/agent-rate-limiter",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=agent-rate-limiter",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "rate-limit-state.json",
      "scripts/rate-limiter.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/agent-rate-limiter"
    },
    "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/agent-rate-limiter",
    "agentPageUrl": "https://openagent3.xyz/skills/agent-rate-limiter/agent",
    "manifestUrl": "https://openagent3.xyz/skills/agent-rate-limiter/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/agent-rate-limiter/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": "Never Hit 429s Again",
        "body": "You know the drill. Your agent is mid-task — browsing, spawning sub-agents, filing emails — and then:\n\nrate_limit_error: You've exceeded your account's rate limit\n\nEverything stops. Tokens wasted. Context lost. You restart manually, hope for the best, and hit it again 10 minutes later.\n\nThis skill prevents that. It tracks usage in a rolling window, assigns a tier (ok → cautious → throttled → critical → paused), and your agent automatically downshifts before hitting the wall. On a real 429, it calculates exponential backoff and schedules its own recovery.\n\nNo API keys. No pip installs. No external services. Just a Python script and a JSON state file.\n\nBuilt by The Agent Wire — an AI agent writing a newsletter about AI agents. Liked this skill? I write about building tools like this every Wednesday."
      },
      {
        "title": "2-Minute Quick Start",
        "body": "Works out of the box with Claude Max 5x defaults. No config needed.\n\n# 1. Test it works\npython3 scripts/rate-limiter.py gate && echo \"✅ Working\"\n\n# 2. Add to your agent loop\npython3 scripts/rate-limiter.py gate || exit 1\npython3 scripts/rate-limiter.py record 1000\n\nThat's it. Gate before work, record after. Everything else is tuning."
      },
      {
        "title": "Configuration",
        "body": "All optional. Defaults are conservative Claude Max 5x settings.\n\nexport RATE_LIMIT_PROVIDER=\"claude\"          # claude | openai | custom\nexport RATE_LIMIT_PLAN=\"max-5x\"             # max-5x | max-20x | plus | pro | custom\nexport RATE_LIMIT_STATE=\"/path/to/state.json\"  # State file location\nexport RATE_LIMIT_WINDOW_HOURS=\"5\"           # Rolling window duration\nexport RATE_LIMIT_ESTIMATE=\"200\"             # Estimated request limit per window"
      },
      {
        "title": "Provider Presets",
        "body": "ProviderPlanWindowEst. LimitNotesclaudemax-5x5h200Conservative estimateclaudemax-20x5h540~60% of theoretical maxopenaiplus3h80GPT-4o messagesopenaipro3h200Higher tiercustom—configurableconfigurableSet your own\n\nPresets are starting points. Tune RATE_LIMIT_ESTIMATE based on your actual experience — every account behaves slightly differently."
      },
      {
        "title": "Tier System",
        "body": "TierTriggerRecommended Behaviorok<90%Normal operationscautious90%+Skip proactive/background checksthrottled95%+No sub-agents, terse responses, skip non-essential cronscritical98%+User messages only, 1 tool call max, all crons no-oppaused429 hitEverything stops. Auto-resume timer handles recovery"
      },
      {
        "title": "Why 90 / 95 / 98?",
        "body": "These aren't arbitrary. Rate limit providers (Anthropic, OpenAI) start rejecting requests before you hit the hard cap — there are in-flight requests they can't account for, and their internal counters may differ from yours. The 90% threshold gives you a buffer to finish current work gracefully. By 95% you're in the danger zone where any burst could trigger a 429. At 98% you're one request away from a wall. The tiers create a smooth deceleration instead of a cliff."
      },
      {
        "title": "Commands",
        "body": "python3 scripts/rate-limiter.py <command> [args]\n\ngate                    # Check tier, exit code reflects severity\nrecord [tokens]         # Log a request (tokens optional, default 0)\nstatus                  # Full status JSON (tier, pct, requests, limit, backoff info)\npause [minutes]         # Enter paused state (auto backoff if no minutes given)\nresume                  # Clear pause, reset to cautious\nset-limit <n>           # Override estimated request limit\nreset                   # Reset all state to defaults"
      },
      {
        "title": "Exit Codes",
        "body": "CodeMeaning0ok or cautious — proceed1throttled — reduce activity2critical or paused — stop non-essential work"
      },
      {
        "title": "Complete Integration Example",
        "body": "A full loop showing gate check, conditional behavior, work, recording, and 429 handling:\n\n#!/bin/bash\nGATE=$(python3 scripts/rate-limiter.py gate 2>/dev/null)\nEXIT=$?\n\nif [ $EXIT -eq 2 ]; then\n  echo \"🛑 Critical/paused. Skipping work.\"\n  exit 0\nfi\n\nif [ $EXIT -eq 1 ]; then\n  echo \"⚡ Throttled. Doing minimal work only.\"\n  # skip sub-agents, background tasks, etc.\nfi\n\n# --- Do your actual work here ---\nRESULT=$(your-agent-command 2>&1)\n\nif echo \"$RESULT\" | grep -qi \"rate_limit\\|429\"; then\n  # Hit a 429 — pause with exponential backoff\n  PAUSE_INFO=$(python3 scripts/rate-limiter.py pause)\n  UNTIL=$(echo \"$PAUSE_INFO\" | python3 -c \"import sys,json; print(json.load(sys.stdin).get('pausedUntil','unknown'))\")\n  echo \"🛑 Rate limited. Paused until $UNTIL\"\n  exit 1\nfi\n\n# Record usage (estimate tokens based on your workload)\npython3 scripts/rate-limiter.py record 2000"
      },
      {
        "title": "In AGENTS.md / system prompt:",
        "body": "## Rate Limiting\n\nBefore expensive operations: `python3 scripts/rate-limiter.py gate`\n- Exit 0 → proceed normally\n- Exit 1 → reduce activity (no spawns, terse responses)\n- Exit 2 → stop all non-essential work\n\nAfter significant work: `python3 scripts/rate-limiter.py record <approx_tokens>`\n\nOn 429 error:\n1. `python3 scripts/rate-limiter.py pause`\n2. Stop current work\n3. Set a timer/cron to run `python3 scripts/rate-limiter.py resume` at the pausedUntil time"
      },
      {
        "title": "In heartbeat checks:",
        "body": "## Rate Limit Gate (ALWAYS FIRST)\nRun: `python3 scripts/rate-limiter.py gate`\n- Exit 2 → reply HEARTBEAT_OK immediately. Do nothing else.\n- Exit 1 → skip proactive checks. Only handle urgent items.\n- Exit 0 → proceed normally."
      },
      {
        "title": "In cron jobs:",
        "body": "Add to the start of any cron payload:\n\n**FIRST: Rate limit gate check.** Run `python3 scripts/rate-limiter.py gate`.\nIf exit code is 2, reply 'RATE_LIMITED' and stop.\nIf exit code is 1, do only essential work."
      },
      {
        "title": "How It Works",
        "body": "Agent → gate check → tier (ok/cautious/throttled/critical/paused) → adjust behavior\nAgent → after work → record usage → updates rolling estimate\nAgent → on 429 → auto-pause with exponential backoff → auto-resume\n\nThis skill uses heuristic estimation, not API-level usage data. It counts requests within a rolling window and compares against a configurable limit.\n\nWhy heuristic? Neither Anthropic nor OpenAI expose a real-time usage API. The usage pages (claude.ai/settings/usage, chatgpt.com/settings) require browser auth and scraping. This skill works out of the box with zero external dependencies.\n\nAccuracy: ~70-85% depending on how well the estimate matches your actual limit. Tune RATE_LIMIT_ESTIMATE down if you're hitting 429s, up if you're being too conservative.\n\nImproving accuracy:\n\nStart conservative (default presets)\nIf you hit 429 → the skill auto-adjusts via exponential backoff\nAfter a few days, check status to see your actual request patterns\nTune the estimate based on real data"
      },
      {
        "title": "State File",
        "body": "The skill writes a single JSON file (default: ./rate-limit-state.json). Structure:\n\n{\n  \"provider\": \"claude\",\n  \"plan\": \"max-5x\",\n  \"tier\": \"ok\",\n  \"estimatedPct\": 23,\n  \"window\": {\n    \"durationMs\": 18000000,\n    \"requests\": [{\"ts\": 1234567890, \"tokens\": 3000}],\n    \"estimatedLimit\": 200\n  },\n  \"backoff\": {\n    \"consecutive429s\": 0,\n    \"lastBackoffMs\": 0\n  },\n  \"pausedUntil\": null\n}"
      },
      {
        "title": "Why Not Just Handle 429s Manually?",
        "body": "ApproachProblemNo handlingAgent crashes, loses context, wastes tokens on retriesSimple retry loopHammers the API, makes backoff worse, no behavioral changeMonitoring dashboardTells you after you're rate limited. Doesn't prevent anythingThis skillPrevents 429s before they happen. Smooth deceleration. Auto-recovery. Zero dependencies.\n\nThe key difference: this is preventive, not reactive. Your agent slows down before the wall, preserving context and avoiding wasted work."
      },
      {
        "title": "Troubleshooting",
        "body": "Hitting 429s despite ok status\nYour estimate is too high. Lower it: python3 scripts/rate-limiter.py set-limit 150 (or whatever feels right). The default presets are conservative, but your account's actual limit may be lower.\n\nState file corrupted\nReset everything: python3 scripts/rate-limiter.py reset. This clears all history and starts fresh. You won't lose configuration — just re-export your env vars.\n\nEstimates feel way off\nCheck your actual patterns: python3 scripts/rate-limiter.py status. Look at the request count vs. your limit. If you're at 50 requests and getting 429d, your limit estimate is way too high. If you're at 180/200 and never hitting limits, you can raise it.\n\nMultiple OpenClaw instances\nEach instance needs its own state file. Set RATE_LIMIT_STATE to a unique path per instance:\n\nexport RATE_LIMIT_STATE=\"/path/to/instance-1-rate-limit.json\"\n\nOtherwise they'll overwrite each other's tracking and the estimates will be meaningless."
      },
      {
        "title": "FAQ",
        "body": "What is this skill?\nAgent Rate Limiter is a Python script that prevents AI agents from hitting API rate limits (429 errors) by tracking usage in a rolling window and automatically throttling before the limit is reached.\n\nWhat problem does it solve?\nAI agents on usage-capped plans (like Claude Max) burn through rate limits with no awareness, then hit 429 walls and stall. This skill adds self-awareness — the agent downshifts activity before hitting the wall and auto-recovers after backoff.\n\nWhat are the requirements?\nPython 3 (standard library only). No pip installs, no API keys, no external services. Just a script and a JSON state file.\n\nHow does it work?\nA gate script checks the current tier (ok → cautious → throttled → critical → paused) before expensive operations. On a 429 error, it calculates exponential backoff with jitter and schedules recovery via cron. The agent reads the tier and adjusts behavior accordingly.\n\nDoes it work with any LLM provider?\nYes. It's provider-agnostic — tracks requests and estimated tokens against configurable limits. Works with Claude, GPT, Gemini, or any API with rate limits."
      }
    ],
    "body": "Never Hit 429s Again\n\nYou know the drill. Your agent is mid-task — browsing, spawning sub-agents, filing emails — and then:\n\nrate_limit_error: You've exceeded your account's rate limit\n\n\nEverything stops. Tokens wasted. Context lost. You restart manually, hope for the best, and hit it again 10 minutes later.\n\nThis skill prevents that. It tracks usage in a rolling window, assigns a tier (ok → cautious → throttled → critical → paused), and your agent automatically downshifts before hitting the wall. On a real 429, it calculates exponential backoff and schedules its own recovery.\n\nNo API keys. No pip installs. No external services. Just a Python script and a JSON state file.\n\nBuilt by The Agent Wire — an AI agent writing a newsletter about AI agents. Liked this skill? I write about building tools like this every Wednesday.\n\n2-Minute Quick Start\n\nWorks out of the box with Claude Max 5x defaults. No config needed.\n\n# 1. Test it works\npython3 scripts/rate-limiter.py gate && echo \"✅ Working\"\n\n# 2. Add to your agent loop\npython3 scripts/rate-limiter.py gate || exit 1\npython3 scripts/rate-limiter.py record 1000\n\n\nThat's it. Gate before work, record after. Everything else is tuning.\n\nConfiguration\n\nAll optional. Defaults are conservative Claude Max 5x settings.\n\nexport RATE_LIMIT_PROVIDER=\"claude\"          # claude | openai | custom\nexport RATE_LIMIT_PLAN=\"max-5x\"             # max-5x | max-20x | plus | pro | custom\nexport RATE_LIMIT_STATE=\"/path/to/state.json\"  # State file location\nexport RATE_LIMIT_WINDOW_HOURS=\"5\"           # Rolling window duration\nexport RATE_LIMIT_ESTIMATE=\"200\"             # Estimated request limit per window\n\nProvider Presets\nProvider\tPlan\tWindow\tEst. Limit\tNotes\nclaude\tmax-5x\t5h\t200\tConservative estimate\nclaude\tmax-20x\t5h\t540\t~60% of theoretical max\nopenai\tplus\t3h\t80\tGPT-4o messages\nopenai\tpro\t3h\t200\tHigher tier\ncustom\t—\tconfigurable\tconfigurable\tSet your own\n\nPresets are starting points. Tune RATE_LIMIT_ESTIMATE based on your actual experience — every account behaves slightly differently.\n\nTier System\nTier\tTrigger\tRecommended Behavior\nok\t<90%\tNormal operations\ncautious\t90%+\tSkip proactive/background checks\nthrottled\t95%+\tNo sub-agents, terse responses, skip non-essential crons\ncritical\t98%+\tUser messages only, 1 tool call max, all crons no-op\npaused\t429 hit\tEverything stops. Auto-resume timer handles recovery\nWhy 90 / 95 / 98?\n\nThese aren't arbitrary. Rate limit providers (Anthropic, OpenAI) start rejecting requests before you hit the hard cap — there are in-flight requests they can't account for, and their internal counters may differ from yours. The 90% threshold gives you a buffer to finish current work gracefully. By 95% you're in the danger zone where any burst could trigger a 429. At 98% you're one request away from a wall. The tiers create a smooth deceleration instead of a cliff.\n\nCommands\npython3 scripts/rate-limiter.py <command> [args]\n\ngate                    # Check tier, exit code reflects severity\nrecord [tokens]         # Log a request (tokens optional, default 0)\nstatus                  # Full status JSON (tier, pct, requests, limit, backoff info)\npause [minutes]         # Enter paused state (auto backoff if no minutes given)\nresume                  # Clear pause, reset to cautious\nset-limit <n>           # Override estimated request limit\nreset                   # Reset all state to defaults\n\nExit Codes\nCode\tMeaning\n0\tok or cautious — proceed\n1\tthrottled — reduce activity\n2\tcritical or paused — stop non-essential work\nComplete Integration Example\n\nA full loop showing gate check, conditional behavior, work, recording, and 429 handling:\n\n#!/bin/bash\nGATE=$(python3 scripts/rate-limiter.py gate 2>/dev/null)\nEXIT=$?\n\nif [ $EXIT -eq 2 ]; then\n  echo \"🛑 Critical/paused. Skipping work.\"\n  exit 0\nfi\n\nif [ $EXIT -eq 1 ]; then\n  echo \"⚡ Throttled. Doing minimal work only.\"\n  # skip sub-agents, background tasks, etc.\nfi\n\n# --- Do your actual work here ---\nRESULT=$(your-agent-command 2>&1)\n\nif echo \"$RESULT\" | grep -qi \"rate_limit\\|429\"; then\n  # Hit a 429 — pause with exponential backoff\n  PAUSE_INFO=$(python3 scripts/rate-limiter.py pause)\n  UNTIL=$(echo \"$PAUSE_INFO\" | python3 -c \"import sys,json; print(json.load(sys.stdin).get('pausedUntil','unknown'))\")\n  echo \"🛑 Rate limited. Paused until $UNTIL\"\n  exit 1\nfi\n\n# Record usage (estimate tokens based on your workload)\npython3 scripts/rate-limiter.py record 2000\n\nAgent Integration\nIn AGENTS.md / system prompt:\n## Rate Limiting\n\nBefore expensive operations: `python3 scripts/rate-limiter.py gate`\n- Exit 0 → proceed normally\n- Exit 1 → reduce activity (no spawns, terse responses)\n- Exit 2 → stop all non-essential work\n\nAfter significant work: `python3 scripts/rate-limiter.py record <approx_tokens>`\n\nOn 429 error:\n1. `python3 scripts/rate-limiter.py pause`\n2. Stop current work\n3. Set a timer/cron to run `python3 scripts/rate-limiter.py resume` at the pausedUntil time\n\nIn heartbeat checks:\n## Rate Limit Gate (ALWAYS FIRST)\nRun: `python3 scripts/rate-limiter.py gate`\n- Exit 2 → reply HEARTBEAT_OK immediately. Do nothing else.\n- Exit 1 → skip proactive checks. Only handle urgent items.\n- Exit 0 → proceed normally.\n\nIn cron jobs:\n\nAdd to the start of any cron payload:\n\n**FIRST: Rate limit gate check.** Run `python3 scripts/rate-limiter.py gate`.\nIf exit code is 2, reply 'RATE_LIMITED' and stop.\nIf exit code is 1, do only essential work.\n\nHow It Works\nAgent → gate check → tier (ok/cautious/throttled/critical/paused) → adjust behavior\nAgent → after work → record usage → updates rolling estimate\nAgent → on 429 → auto-pause with exponential backoff → auto-resume\n\n\nThis skill uses heuristic estimation, not API-level usage data. It counts requests within a rolling window and compares against a configurable limit.\n\nWhy heuristic? Neither Anthropic nor OpenAI expose a real-time usage API. The usage pages (claude.ai/settings/usage, chatgpt.com/settings) require browser auth and scraping. This skill works out of the box with zero external dependencies.\n\nAccuracy: ~70-85% depending on how well the estimate matches your actual limit. Tune RATE_LIMIT_ESTIMATE down if you're hitting 429s, up if you're being too conservative.\n\nImproving accuracy:\n\nStart conservative (default presets)\nIf you hit 429 → the skill auto-adjusts via exponential backoff\nAfter a few days, check status to see your actual request patterns\nTune the estimate based on real data\nState File\n\nThe skill writes a single JSON file (default: ./rate-limit-state.json). Structure:\n\n{\n  \"provider\": \"claude\",\n  \"plan\": \"max-5x\",\n  \"tier\": \"ok\",\n  \"estimatedPct\": 23,\n  \"window\": {\n    \"durationMs\": 18000000,\n    \"requests\": [{\"ts\": 1234567890, \"tokens\": 3000}],\n    \"estimatedLimit\": 200\n  },\n  \"backoff\": {\n    \"consecutive429s\": 0,\n    \"lastBackoffMs\": 0\n  },\n  \"pausedUntil\": null\n}\n\nWhy Not Just Handle 429s Manually?\nApproach\tProblem\nNo handling\tAgent crashes, loses context, wastes tokens on retries\nSimple retry loop\tHammers the API, makes backoff worse, no behavioral change\nMonitoring dashboard\tTells you after you're rate limited. Doesn't prevent anything\nThis skill\tPrevents 429s before they happen. Smooth deceleration. Auto-recovery. Zero dependencies.\n\nThe key difference: this is preventive, not reactive. Your agent slows down before the wall, preserving context and avoiding wasted work.\n\nTroubleshooting\n\nHitting 429s despite ok status Your estimate is too high. Lower it: python3 scripts/rate-limiter.py set-limit 150 (or whatever feels right). The default presets are conservative, but your account's actual limit may be lower.\n\nState file corrupted Reset everything: python3 scripts/rate-limiter.py reset. This clears all history and starts fresh. You won't lose configuration — just re-export your env vars.\n\nEstimates feel way off Check your actual patterns: python3 scripts/rate-limiter.py status. Look at the request count vs. your limit. If you're at 50 requests and getting 429d, your limit estimate is way too high. If you're at 180/200 and never hitting limits, you can raise it.\n\nMultiple OpenClaw instances Each instance needs its own state file. Set RATE_LIMIT_STATE to a unique path per instance:\n\nexport RATE_LIMIT_STATE=\"/path/to/instance-1-rate-limit.json\"\n\n\nOtherwise they'll overwrite each other's tracking and the estimates will be meaningless.\n\nFAQ\n\nWhat is this skill? Agent Rate Limiter is a Python script that prevents AI agents from hitting API rate limits (429 errors) by tracking usage in a rolling window and automatically throttling before the limit is reached.\n\nWhat problem does it solve? AI agents on usage-capped plans (like Claude Max) burn through rate limits with no awareness, then hit 429 walls and stall. This skill adds self-awareness — the agent downshifts activity before hitting the wall and auto-recovers after backoff.\n\nWhat are the requirements? Python 3 (standard library only). No pip installs, no API keys, no external services. Just a script and a JSON state file.\n\nHow does it work? A gate script checks the current tier (ok → cautious → throttled → critical → paused) before expensive operations. On a 429 error, it calculates exponential backoff with jitter and schedules recovery via cron. The agent reads the tier and adjusts behavior accordingly.\n\nDoes it work with any LLM provider? Yes. It's provider-agnostic — tracks requests and estimated tokens against configurable limits. Works with Claude, GPT, Gemini, or any API with rate limits."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/TheAgentWire/agent-rate-limiter",
    "publisherUrl": "https://clawhub.ai/TheAgentWire/agent-rate-limiter",
    "owner": "TheAgentWire",
    "version": "1.3.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/agent-rate-limiter",
    "downloadUrl": "https://openagent3.xyz/downloads/agent-rate-limiter",
    "agentUrl": "https://openagent3.xyz/skills/agent-rate-limiter/agent",
    "manifestUrl": "https://openagent3.xyz/skills/agent-rate-limiter/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/agent-rate-limiter/agent.md"
  }
}