[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69A09DM2G8FTV00WWQ8QDWE":3,"skill-same:01M69A09DM2G8FTV00WWQ8QDWE":52},{"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":18,"publishedAt":20,"linkOnly":21,"markdownContent":22,"markdownBody":23,"frontMatter":24,"refName":28,"commitSha":29,"skillDirectory":30,"forksCount":31,"repositoryHtmlUrl":32,"repositoryHomepageUrl":33,"ownerHtmlUrl":34,"ownerBlogUrl":35,"ownerDescription":36,"updatedAt":37,"install":38,"resources":51},"01M69A09DM2G8FTV00WWQ8QDWE","resilience",null,"Apply resilience patterns (retry, backoff, circuit breaking) when writing or reviewing code that makes outbound HTTP\u002FREST calls, database operations, or any I\u002FO that can experience transient failures. Use this skill when: (1) writing new code that calls external services or APIs, (2) reviewing code that uses fetch, HTTP clients, or service-to-service calls, (3) adding queue consumers or workers that interact with remote systems, (4) debugging intermittent failures in production.","microsoft\u002Fscope","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69A02AWCPD2P5P1SY08HRG0",86,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fscope\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fresilience\u002FSKILL.md",[],[5,19],"writing","2026-11-10 10:12:30",false,"---\nname: resilience\ndescription: >\n  Apply resilience patterns (retry, backoff, circuit breaking) when writing or reviewing code that makes outbound HTTP\u002FREST calls, database operations, or any I\u002FO that can experience transient failures. Use this skill when:\n  (1) writing new code that calls external services or APIs,\n  (2) reviewing code that uses fetch, HTTP clients, or service-to-service calls,\n  (3) adding queue consumers or workers that interact with remote systems,\n  (4) debugging intermittent failures in production.\nmetadata:\n  version: \"1.0.0\"\n---\n\n# Resilience Patterns\n\nWhen writing or reviewing code that makes outbound calls (REST APIs, database operations, queue interactions), always consider transient failure handling.\n\n## Core Principle\n\n**Every outbound HTTP call should have a retry strategy unless there's a specific reason not to.** Network blips, temporary 503s, and connection resets are normal in distributed systems. Code without retry is fragile by default.\n\n## Available Tools\n\nThis repo provides retry utilities in `packages\u002Fshared\u002Fsrc\u002Futils\u002Fretry.ts`:\n\n### `@Retry` decorator (preferred for methods)\n\n```typescript\nimport { Retry } from \"shared\";\n\nclass MyWorker {\n  @Retry({ maxRetries: 3, baseDelayMs: 1000, isRetryable: () => true })\n  async callExternalService(): Promise\u003Cvoid> {\n    const res = await fetch(\"http:\u002F\u002Fapi\u002Fendpoint\", { method: \"POST\" });\n    if (!res.ok) throw new Error(`HTTP ${res.status}`);\n  }\n}\n```\n\n### `withRetry` function (for inline\u002Fconditional logic)\n\n```typescript\nimport { withRetry } from \"shared\";\n\nconst result = await withRetry(\n  () => fetch(\"http:\u002F\u002Fapi\u002Fdata\").then(r => r.json()),\n  { maxRetries: 3, baseDelayMs: 500, isRetryable: (err) => isTransient(err) }\n);\n```\n\n## Decision Checklist\n\nWhen you encounter an outbound call, ask:\n\n1. **Is this call idempotent?** If yes (GET, PUT, DELETE with idempotency key) -> retry aggressively.\n2. **Is this call non-idempotent?** If yes (POST creating resources) -> retry cautiously, only on network errors (never got a response), not on 5xx (server may have processed it).\n3. **Is this best-effort?** (e.g., triggering reports, sending notifications) -> retry with try\u002Fcatch at call site so failures don't propagate.\n4. **Is this critical path?** (e.g., saving user data) -> retry and propagate failure if exhausted.\n\n## What to Retry\n\n| Condition | Retry? | Reason |\n|-----------|--------|--------|\n| Network error (ECONNREFUSED, ETIMEDOUT) | Yes | Transient connectivity issue |\n| HTTP 429 (Too Many Requests) | Yes | Rate limiting, respect Retry-After header |\n| HTTP 500, 502, 503, 504 | Yes | Server-side transient failures |\n| HTTP 400, 401, 403, 404, 409 | No | Client errors indicate a permanent problem |\n| DNS resolution failure | Yes (limited) | May be temporary DNS propagation |\n\n## Configuration Defaults\n\nFor service-to-service calls within the cluster:\n- `maxRetries: 3`\n- `baseDelayMs: 1000` (1 second)\n- `maxDelayMs: 5000` (5 seconds)\n\nFor external API calls:\n- `maxRetries: 5`\n- `baseDelayMs: 500`\n- `maxDelayMs: 30000` (respect rate limits)\n\n## Anti-patterns\n\n- **No retry at all** on service-to-service calls -- fragile\n- **Retry on 4xx** -- wastes resources, will never succeed\n- **Retry without backoff** -- can overwhelm a recovering service\n- **Retry without a cap** -- can hang indefinitely\n- **Retry non-idempotent POST without checking** -- can create duplicates\n- **Stacking retry layers** -- never combine an HTTP client's built-in retry with `withRetry`\u002F`@Retry` around the same call, or attempts multiply (`maxRetries × client.limit`). See below.\n\n## Single retry layer\n\nRetry belongs to **exactly one** layer per call. The `ky` HTTP clients used by the\nCLI ([apps\u002Fcli\u002Fsrc\u002Futils\u002Fapi-client.ts](..\u002F..\u002F..\u002Fapps\u002Fcli\u002Fsrc\u002Futils\u002Fapi-client.ts)) and Portal\n([apps\u002Fportal\u002Fsrc\u002Flib\u002Fapi-client.ts](..\u002F..\u002F..\u002Fapps\u002Fportal\u002Fsrc\u002Flib\u002Fapi-client.ts)) set `retry: 0`\nprecisely so they never stack with the shared cockatiel retry.\n\nIf a call needs transient-failure retries, pick **one** layer:\n\n- **Enable the HTTP client's own `retry`** (with its own backoff), OR\n- **Wrap the call in `withRetry` \u002F `@Retry`** from `packages\u002Fshared\u002Fsrc\u002Futils\u002Fretry.ts`.\n\nNever both — combining them compounds attempts to `maxRetries × client.limit`.\n\n## Reference\n\nFull API documentation: [docs\u002Farchitecture\u002Fretry.md](..\u002F..\u002Fdocs\u002Farchitecture\u002Fretry.md)\n","# Resilience Patterns\n\nWhen writing or reviewing code that makes outbound calls (REST APIs, database operations, queue interactions), always consider transient failure handling.\n\n## Core Principle\n\n**Every outbound HTTP call should have a retry strategy unless there's a specific reason not to.** Network blips, temporary 503s, and connection resets are normal in distributed systems. Code without retry is fragile by default.\n\n## Available Tools\n\nThis repo provides retry utilities in `packages\u002Fshared\u002Fsrc\u002Futils\u002Fretry.ts`:\n\n### `@Retry` decorator (preferred for methods)\n\n```typescript\nimport { Retry } from \"shared\";\n\nclass MyWorker {\n  @Retry({ maxRetries: 3, baseDelayMs: 1000, isRetryable: () => true })\n  async callExternalService(): Promise\u003Cvoid> {\n    const res = await fetch(\"http:\u002F\u002Fapi\u002Fendpoint\", { method: \"POST\" });\n    if (!res.ok) throw new Error(`HTTP ${res.status}`);\n  }\n}\n```\n\n### `withRetry` function (for inline\u002Fconditional logic)\n\n```typescript\nimport { withRetry } from \"shared\";\n\nconst result = await withRetry(\n  () => fetch(\"http:\u002F\u002Fapi\u002Fdata\").then(r => r.json()),\n  { maxRetries: 3, baseDelayMs: 500, isRetryable: (err) => isTransient(err) }\n);\n```\n\n## Decision Checklist\n\nWhen you encounter an outbound call, ask:\n\n1. **Is this call idempotent?** If yes (GET, PUT, DELETE with idempotency key) -> retry aggressively.\n2. **Is this call non-idempotent?** If yes (POST creating resources) -> retry cautiously, only on network errors (never got a response), not on 5xx (server may have processed it).\n3. **Is this best-effort?** (e.g., triggering reports, sending notifications) -> retry with try\u002Fcatch at call site so failures don't propagate.\n4. **Is this critical path?** (e.g., saving user data) -> retry and propagate failure if exhausted.\n\n## What to Retry\n\n| Condition | Retry? | Reason |\n|-----------|--------|--------|\n| Network error (ECONNREFUSED, ETIMEDOUT) | Yes | Transient connectivity issue |\n| HTTP 429 (Too Many Requests) | Yes | Rate limiting, respect Retry-After header |\n| HTTP 500, 502, 503, 504 | Yes | Server-side transient failures |\n| HTTP 400, 401, 403, 404, 409 | No | Client errors indicate a permanent problem |\n| DNS resolution failure | Yes (limited) | May be temporary DNS propagation |\n\n## Configuration Defaults\n\nFor service-to-service calls within the cluster:\n- `maxRetries: 3`\n- `baseDelayMs: 1000` (1 second)\n- `maxDelayMs: 5000` (5 seconds)\n\nFor external API calls:\n- `maxRetries: 5`\n- `baseDelayMs: 500`\n- `maxDelayMs: 30000` (respect rate limits)\n\n## Anti-patterns\n\n- **No retry at all** on service-to-service calls -- fragile\n- **Retry on 4xx** -- wastes resources, will never succeed\n- **Retry without backoff** -- can overwhelm a recovering service\n- **Retry without a cap** -- can hang indefinitely\n- **Retry non-idempotent POST without checking** -- can create duplicates\n- **Stacking retry layers** -- never combine an HTTP client's built-in retry with `withRetry`\u002F`@Retry` around the same call, or attempts multiply (`maxRetries × client.limit`). See below.\n\n## Single retry layer\n\nRetry belongs to **exactly one** layer per call. The `ky` HTTP clients used by the\nCLI ([apps\u002Fcli\u002Fsrc\u002Futils\u002Fapi-client.ts](..\u002F..\u002F..\u002Fapps\u002Fcli\u002Fsrc\u002Futils\u002Fapi-client.ts)) and Portal\n([apps\u002Fportal\u002Fsrc\u002Flib\u002Fapi-client.ts](..\u002F..\u002F..\u002Fapps\u002Fportal\u002Fsrc\u002Flib\u002Fapi-client.ts)) set `retry: 0`\nprecisely so they never stack with the shared cockatiel retry.\n\nIf a call needs transient-failure retries, pick **one** layer:\n\n- **Enable the HTTP client's own `retry`** (with its own backoff), OR\n- **Wrap the call in `withRetry` \u002F `@Retry`** from `packages\u002Fshared\u002Fsrc\u002Futils\u002Fretry.ts`.\n\nNever both — combining them compounds attempts to `maxRetries × client.limit`.\n\n## Reference\n\nFull API documentation: [docs\u002Farchitecture\u002Fretry.md](..\u002F..\u002Fdocs\u002Farchitecture\u002Fretry.md)\n",{"name":5,"metadata":25,"description":27},{"version":26},"1.0.0","Apply resilience patterns (retry, backoff, circuit breaking) when writing or reviewing code that makes outbound HTTP\u002FREST calls, database operations, or any I\u002FO that can experience transient failures. Use this skill when: (1) writing new code that calls external services or APIs, (2) reviewing code that uses fetch, HTTP clients, or service-to-service calls, (3) adding queue consumers or workers that interact with remote systems, (4) debugging intermittent failures in production.\n","main","05d9435005711a96c63be162044854870e77c242",".agents\u002Fskills\u002Fresilience",32,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fscope","https:\u002F\u002Fmicrosoft.github.io\u002Fscope\u002F","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-14 08:45:02",{"source":8,"skillName":5,"commands":39,"prompt":49,"zipAvailable":50},[40,43,46],{"tool":41,"command":42},"npx","npx skills add microsoft\u002Fscope --skill resilience",{"tool":44,"command":45},"bunx","bunx skills add microsoft\u002Fscope --skill resilience",{"tool":47,"command":48},"pnpm","pnpm dlx skills add microsoft\u002Fscope --skill resilience","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fscope\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fresilience\u002FSKILL.md",true,[],[53,74,93,105,116,127],{"skillNo":54,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":57,"categories":58,"keywords":64,"publishedAt":20},"01M6WEPRSQ7KG1B2FBVTS8B76F","github-actions","Use when creating, editing, reviewing, or troubleshooting GitHub Actions workflows in Scope.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fscope\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub-actions\u002FSKILL.md",[59],{"categoryNo":60,"categoryName":61,"taxonomyType":62,"taxonomyTypeDesc":63},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[65,66,67,68,69,70,71,72,73],"github","actions","github actions","editing","troubleshooting","use","scope","workflows","when",{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":83,"publishedAt":20},"01M69A0MMREMJDBMNJA7YEV5G7","ax-practitioner","This skill should be used when the user asks about AX (agent experience) or the AX Practitioner Playbook, for example \"how do I evaluate my technology's agent experience\", \"write AX eval criteria\", \"design an eval scenario\", \"propensity vs efficacy\", \"lift and drag\", \"which agent profiles should I test\", \"how many eval runs\", \"how do I read an agent trajectory\", \"why does the agent ignore my MCP server or skill\", \"agent uses an outdated SDK version\", \"too many extensions\", \"how to read an AX readout\", \"how to get the owning team to fix the docs\", \"review my eval against the checklist\", or the SPFx worked example. It answers interactively and strictly from the playbook, citing chapters. When the playbook has no answer, it says so and clearly labels any general-knowledge or web content.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fscope\u002Fblob\u002Fmain\u002Fdocs\u002Fax-playbook\u002Fax-practitioner\u002FSKILL.md",[80],{"categoryNo":81,"categoryName":82,"taxonomyType":62,"taxonomyTypeDesc":63},"01JBSEEDCAT000000000000023","Skill与智能体开发",[84,85,86,87,88,89,90,91,92],"ax practitioner","web","test","mcp server","sdk","docs","review","MCP","design",{"skillNo":94,"name":95,"nameZh":6,"description":96,"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":104,"publishedAt":20},"01M69A0JXSYS6CZW0XJAG36C4V","typescript","TypeScript best practices for this monorepo. Use this skill when: (1) writing new TypeScript code, (2) reviewing TypeScript code, (3) working with API responses, fetch calls, or JSON parsing, (4) adding or modifying types and interfaces.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fscope\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Ftypescript\u002FSKILL.md",[99],{"categoryNo":100,"categoryName":101,"taxonomyType":102,"taxonomyTypeDesc":103},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[95,19],{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":111,"publishedAt":20},"01M69A0H0CJ9DVKDA3M4NHV52X","storybook","Maintain the Storybook component catalog for the portal app. Use this skill when: (1) adding new stories for components, (2) updating existing stories after component changes, (3) running a full Storybook refresh\u002Fsync with AI assistance.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fscope\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fstorybook\u002FSKILL.md",[],[107,112,113,114,115],"sync","component","react","components",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":123,"publishedAt":20},"01M69A0F8EJTHV71BSS08BDW45","scope-cli","Interact with the Scope benchmarking platform using the Scope CLI — submit runs, list results, manage criteria, generate reports, and administer agents, skills, and MCP servers.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fscope\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fscope-cli\u002FSKILL.md",[122],{"categoryNo":81,"categoryName":82,"taxonomyType":62,"taxonomyTypeDesc":63},[124,125,126,91],"scope cli","cli","benchmarking",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":137,"publishedAt":20},"01M69A0DF7MM5T42K2TT1S168C","scope-api","Query and control the Scope platform API for analyzing benchmark data, managing runs\u002Frequests, skills, agents, reports, and insights. Use when the user asks about SCOPE data, wants to trigger runs, check status, generate reports, or interact with the SCOPE platform programmatically.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fscope\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fscope-api\u002FSKILL.md",[133,136],{"categoryNo":134,"categoryName":135,"taxonomyType":62,"taxonomyTypeDesc":63},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":100,"categoryName":101,"taxonomyType":102,"taxonomyTypeDesc":103},[138,139],"scope api","status"]