[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F6ZWSH4G6A5JS7MRC71X2P":3,"skill-same:01M6F6ZWSH4G6A5JS7MRC71X2P":79},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":56,"commitSha":57,"skillDirectory":58,"forksCount":59,"repositoryHtmlUrl":60,"repositoryHomepageUrl":61,"ownerHtmlUrl":62,"ownerBlogUrl":6,"ownerDescription":63,"updatedAt":64,"install":65,"resources":78},"01M6F6ZWSH4G6A5JS7MRC71X2P","anth-reliability-patterns",null,"Implement reliability patterns for Claude API: circuit breakers,\ngraceful degradation, idempotency, and fallback strategies.\nTrigger with phrases like \"anthropic reliability\", \"claude circuit breaker\",\n\"claude fallback\", \"anthropic fault tolerance\".","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fanth-reliability-patterns\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"patterns","anth reliability patterns","reliability","claude-code","implement","with","degradation","trigger","io","Circuit Breaker","fault tolerance","strategies","saas","claude api","code","edit","write","read","grep","api","2026-11-10 10:12:30",false,"---\nname: anth-reliability-patterns\ndescription: |\n  Implement reliability patterns for Claude API: circuit breakers,\n  graceful degradation, idempotency, and fallback strategies.\n  Trigger with phrases like \"anthropic reliability\", \"claude circuit breaker\",\n  \"claude fallback\", \"anthropic fault tolerance\".\nallowed-tools: Read, Write, Edit, Grep\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ntags: [saas, ai, anthropic]\ncompatible-with: claude-code\n---\n\n# Anthropic Reliability Patterns\n\n## Overview\n\nProduction reliability patterns for Claude API: circuit breaker (prevent cascading failures), graceful degradation (serve fallbacks), idempotency (safe retries), and timeout management.\n\n## Circuit Breaker\n\n```python\nimport time\nfrom enum import Enum\n\nclass CircuitState(Enum):\n    CLOSED = \"closed\"       # Normal operation\n    OPEN = \"open\"           # Failing, reject requests\n    HALF_OPEN = \"half_open\" # Testing recovery\n\nclass ClaudeCircuitBreaker:\n    def __init__(self, failure_threshold: int = 5, recovery_timeout: int = 60):\n        self.state = CircuitState.CLOSED\n        self.failures = 0\n        self.threshold = failure_threshold\n        self.recovery_timeout = recovery_timeout\n        self.last_failure_time = 0.0\n\n    def call(self, func, *args, **kwargs):\n        if self.state == CircuitState.OPEN:\n            if time.time() - self.last_failure_time > self.recovery_timeout:\n                self.state = CircuitState.HALF_OPEN\n            else:\n                raise Exception(\"Circuit breaker OPEN — Claude API unavailable\")\n\n        try:\n            result = func(*args, **kwargs)\n            if self.state == CircuitState.HALF_OPEN:\n                self.state = CircuitState.CLOSED\n                self.failures = 0\n            return result\n        except Exception as e:\n            self.failures += 1\n            self.last_failure_time = time.time()\n            if self.failures >= self.threshold:\n                self.state = CircuitState.OPEN\n            raise\n\n# Usage\nbreaker = ClaudeCircuitBreaker(failure_threshold=5, recovery_timeout=60)\n\ndef safe_claude_call(prompt: str) -> str:\n    try:\n        return breaker.call(\n            client.messages.create,\n            model=\"claude-sonnet-4-20250514\",\n            max_tokens=1024,\n            messages=[{\"role\": \"user\", \"content\": prompt}]\n        ).content[0].text\n    except Exception:\n        return \"AI assistant is temporarily unavailable.\"\n```\n\n## Graceful Degradation\n\n```python\nimport anthropic\n\ndef complete_with_fallback(prompt: str) -> str:\n    \"\"\"Try Sonnet → Haiku → cached response → static fallback.\"\"\"\n    models = [\"claude-sonnet-4-20250514\", \"claude-haiku-4-20250514\"]\n\n    for model in models:\n        try:\n            msg = client.messages.create(\n                model=model,\n                max_tokens=1024,\n                messages=[{\"role\": \"user\", \"content\": prompt}]\n            )\n            return msg.content[0].text\n        except anthropic.RateLimitError:\n            continue  # Try cheaper model\n        except anthropic.APIStatusError:\n            continue  # Try next model\n\n    # All models failed — return cached or static response\n    cached = cache.get(f\"claude:{hash(prompt)}\")\n    if cached:\n        return f\"[Cached response] {cached}\"\n\n    return \"Our AI assistant is temporarily unavailable. Please try again in a few minutes.\"\n```\n\n## Idempotent Requests\n\n```python\nimport hashlib\nimport json\n\nclass IdempotentClaude:\n    def __init__(self):\n        self.client = anthropic.Anthropic()\n        self.cache = {}  # Use Redis in production\n\n    def create_message(self, idempotency_key: str | None = None, **kwargs) -> str:\n        # Generate deterministic key from request params if not provided\n        if not idempotency_key:\n            idempotency_key = hashlib.sha256(\n                json.dumps(kwargs, sort_keys=True, default=str).encode()\n            ).hexdigest()\n\n        # Return cached result for duplicate requests\n        if idempotency_key in self.cache:\n            return self.cache[idempotency_key]\n\n        msg = self.client.messages.create(**kwargs)\n        result = msg.content[0].text\n        self.cache[idempotency_key] = result\n        return result\n```\n\n## Timeout Configuration\n\n```python\n# Layer timeouts for defense-in-depth\nclient = anthropic.Anthropic(\n    timeout=60.0,      # SDK-level timeout (covers connect + read)\n    max_retries=3,     # Auto-retry on 429\u002F5xx\n)\n\n# Per-request timeout override\nmsg = client.messages.create(\n    model=\"claude-haiku-4-20250514\",\n    max_tokens=64,\n    messages=[{\"role\": \"user\", \"content\": \"Quick question\"}],\n    timeout=10.0  # Override for fast operations\n)\n```\n\n## Reliability Checklist\n\n- [ ] Circuit breaker prevents cascading failures\n- [ ] Graceful degradation serves fallback responses\n- [ ] Idempotency keys prevent duplicate processing\n- [ ] Timeouts configured at SDK and application level\n- [ ] Health check probes API connectivity\n- [ ] Retry logic uses exponential backoff (SDK default)\n- [ ] Rate limit headers monitored for pre-emptive throttling\n\n## Resources\n\n- [API Error Types](https:\u002F\u002Fdocs.anthropic.com\u002Fen\u002Fapi\u002Ferrors)\n- [Rate Limits](https:\u002F\u002Fdocs.anthropic.com\u002Fen\u002Fapi\u002Frate-limits)\n\n## Next Steps\n\nFor policy guardrails, see `anth-policy-guardrails`.\n\n","# Anthropic Reliability Patterns\n\n## Overview\n\nProduction reliability patterns for Claude API: circuit breaker (prevent cascading failures), graceful degradation (serve fallbacks), idempotency (safe retries), and timeout management.\n\n## Circuit Breaker\n\n```python\nimport time\nfrom enum import Enum\n\nclass CircuitState(Enum):\n    CLOSED = \"closed\"       # Normal operation\n    OPEN = \"open\"           # Failing, reject requests\n    HALF_OPEN = \"half_open\" # Testing recovery\n\nclass ClaudeCircuitBreaker:\n    def __init__(self, failure_threshold: int = 5, recovery_timeout: int = 60):\n        self.state = CircuitState.CLOSED\n        self.failures = 0\n        self.threshold = failure_threshold\n        self.recovery_timeout = recovery_timeout\n        self.last_failure_time = 0.0\n\n    def call(self, func, *args, **kwargs):\n        if self.state == CircuitState.OPEN:\n            if time.time() - self.last_failure_time > self.recovery_timeout:\n                self.state = CircuitState.HALF_OPEN\n            else:\n                raise Exception(\"Circuit breaker OPEN — Claude API unavailable\")\n\n        try:\n            result = func(*args, **kwargs)\n            if self.state == CircuitState.HALF_OPEN:\n                self.state = CircuitState.CLOSED\n                self.failures = 0\n            return result\n        except Exception as e:\n            self.failures += 1\n            self.last_failure_time = time.time()\n            if self.failures >= self.threshold:\n                self.state = CircuitState.OPEN\n            raise\n\n# Usage\nbreaker = ClaudeCircuitBreaker(failure_threshold=5, recovery_timeout=60)\n\ndef safe_claude_call(prompt: str) -> str:\n    try:\n        return breaker.call(\n            client.messages.create,\n            model=\"claude-sonnet-4-20250514\",\n            max_tokens=1024,\n            messages=[{\"role\": \"user\", \"content\": prompt}]\n        ).content[0].text\n    except Exception:\n        return \"AI assistant is temporarily unavailable.\"\n```\n\n## Graceful Degradation\n\n```python\nimport anthropic\n\ndef complete_with_fallback(prompt: str) -> str:\n    \"\"\"Try Sonnet → Haiku → cached response → static fallback.\"\"\"\n    models = [\"claude-sonnet-4-20250514\", \"claude-haiku-4-20250514\"]\n\n    for model in models:\n        try:\n            msg = client.messages.create(\n                model=model,\n                max_tokens=1024,\n                messages=[{\"role\": \"user\", \"content\": prompt}]\n            )\n            return msg.content[0].text\n        except anthropic.RateLimitError:\n            continue  # Try cheaper model\n        except anthropic.APIStatusError:\n            continue  # Try next model\n\n    # All models failed — return cached or static response\n    cached = cache.get(f\"claude:{hash(prompt)}\")\n    if cached:\n        return f\"[Cached response] {cached}\"\n\n    return \"Our AI assistant is temporarily unavailable. Please try again in a few minutes.\"\n```\n\n## Idempotent Requests\n\n```python\nimport hashlib\nimport json\n\nclass IdempotentClaude:\n    def __init__(self):\n        self.client = anthropic.Anthropic()\n        self.cache = {}  # Use Redis in production\n\n    def create_message(self, idempotency_key: str | None = None, **kwargs) -> str:\n        # Generate deterministic key from request params if not provided\n        if not idempotency_key:\n            idempotency_key = hashlib.sha256(\n                json.dumps(kwargs, sort_keys=True, default=str).encode()\n            ).hexdigest()\n\n        # Return cached result for duplicate requests\n        if idempotency_key in self.cache:\n            return self.cache[idempotency_key]\n\n        msg = self.client.messages.create(**kwargs)\n        result = msg.content[0].text\n        self.cache[idempotency_key] = result\n        return result\n```\n\n## Timeout Configuration\n\n```python\n# Layer timeouts for defense-in-depth\nclient = anthropic.Anthropic(\n    timeout=60.0,      # SDK-level timeout (covers connect + read)\n    max_retries=3,     # Auto-retry on 429\u002F5xx\n)\n\n# Per-request timeout override\nmsg = client.messages.create(\n    model=\"claude-haiku-4-20250514\",\n    max_tokens=64,\n    messages=[{\"role\": \"user\", \"content\": \"Quick question\"}],\n    timeout=10.0  # Override for fast operations\n)\n```\n\n## Reliability Checklist\n\n- [ ] Circuit breaker prevents cascading failures\n- [ ] Graceful degradation serves fallback responses\n- [ ] Idempotency keys prevent duplicate processing\n- [ ] Timeouts configured at SDK and application level\n- [ ] Health check probes API connectivity\n- [ ] Retry logic uses exponential backoff (SDK default)\n- [ ] Rate limit headers monitored for pre-emptive throttling\n\n## Resources\n\n- [API Error Types](https:\u002F\u002Fdocs.anthropic.com\u002Fen\u002Fapi\u002Ferrors)\n- [Rate Limits](https:\u002F\u002Fdocs.anthropic.com\u002Fen\u002Fapi\u002Frate-limits)\n\n## Next Steps\n\nFor policy guardrails, see `anth-policy-guardrails`.\n\n",{"name":5,"tags":49,"author":52,"license":15,"version":53,"description":54,"allowed-tools":55,"compatible-with":27},[36,50,51],"ai","anthropic","Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Implement reliability patterns for Claude API: circuit breakers,\ngraceful degradation, idempotency, and fallback strategies.\nTrigger with phrases like \"anthropic reliability\", \"claude circuit breaker\",\n\"claude fallback\", \"anthropic fault tolerance\".\n","Read, Write, Edit, Grep","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fanth-reliability-patterns",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":66,"prompt":76,"zipAvailable":77},[67,70,73],{"tool":68,"command":69},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill anth-reliability-patterns",{"tool":71,"command":72},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill anth-reliability-patterns",{"tool":74,"command":75},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill anth-reliability-patterns","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fanth-reliability-patterns\u002FSKILL.md",true,[],[80,94,104,113,119,126],{"skillNo":81,"name":82,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":90,"publishedAt":44},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[85],{"categoryNo":86,"categoryName":87,"taxonomyType":88,"taxonomyTypeDesc":89},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[91,92,93],"model","model hierarchy","model hierarchy skill",{"skillNo":95,"name":96,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":100,"publishedAt":44},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[99],{"categoryNo":86,"categoryName":87,"taxonomyType":88,"taxonomyTypeDesc":89},[101,102,103],"MCP","zoom","zoom mcp",{"skillNo":105,"name":106,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":44},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[110,111,112,102],"sdk","zoom apps sdk","apps",{"skillNo":114,"name":115,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":118,"publishedAt":44},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[115],{"skillNo":120,"name":121,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":125,"publishedAt":44},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[124],{"categoryNo":86,"categoryName":87,"taxonomyType":88,"taxonomyTypeDesc":89},[121],{"skillNo":127,"name":128,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":131,"publishedAt":44},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[128]]