[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DRRE0AEJB9HXEHFS1THKBN":3,"skill-same:01M6DRRE0AEJB9HXEHFS1THKBN":104},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":27,"publishedAt":48,"linkOnly":49,"markdownContent":50,"markdownBody":51,"frontMatter":52,"refName":61,"commitSha":62,"skillDirectory":63,"forksCount":64,"repositoryHtmlUrl":65,"repositoryHomepageUrl":6,"ownerHtmlUrl":66,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":67,"install":68,"resources":81},"01M6DRRE0AEJB9HXEHFS1THKBN","websocket-engineer",null,"Use when building real-time communication systems with WebSockets or Socket.IO. Invoke for bidirectional messaging, horizontal scaling with Redis, presence tracking, room management.","AntifragileTech\u002Fantifragile-claude-code","AntifragileTech","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F174357194?v=4","01M6DQCYMK4CDSQQAN0ZC72NTV","01M6DQCYS9YPW1WKMQ5TJMPQ43",9,"MIT","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fwebsocket-engineer\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47],"websocket engineer","websocket","engineer","fastapi","io","scaling","time","chat","nestjs","expert","use","architecture","reviewer","api","real-time","redis","monitoring","messaging","push","code","2026-11-10 10:12:30",false,"---\nname: websocket-engineer\ndescription: Use when building real-time communication systems with WebSockets or Socket.IO. Invoke for bidirectional messaging, horizontal scaling with Redis, presence tracking, room management.\nlicense: MIT\nmetadata:\n  author: https:\u002F\u002Fgithub.com\u002FJeffallan\n  version: \"1.1.0\"\n  domain: api-architecture\n  triggers: WebSocket, Socket.IO, real-time communication, bidirectional messaging, pub\u002Fsub, server push, live updates, chat systems, presence tracking\n  role: specialist\n  scope: implementation\n  output-format: code\n  related-skills: fastapi-expert, nestjs-expert, devops-engineer, monitoring-expert, security-reviewer\n---\n\n# WebSocket Engineer\n\n## Core Workflow\n\n1. **Analyze requirements** — Identify connection scale, message volume, latency needs\n2. **Design architecture** — Plan clustering, pub\u002Fsub, state management, failover\n3. **Implement** — Build WebSocket server with authentication, rooms, events\n4. **Validate locally** — Test connection handling, auth, and room behavior before scaling (e.g., `npx wscat -c ws:\u002F\u002Flocalhost:3000`); confirm auth rejection on missing\u002Finvalid tokens, room join\u002Fleave events, and message delivery\n5. **Scale** — Verify Redis connection and pub\u002Fsub round-trip before enabling the adapter; configure sticky sessions and confirm with test connections across multiple instances; set up load balancing\n6. **Monitor** — Track connections, latency, throughput, error rates; add alerts for connection-count spikes and error-rate thresholds\n\n## Reference Guide\n\nLoad detailed guidance based on context:\n\n| Topic | Reference | Load When |\n|-------|-----------|-----------|\n| Protocol | `references\u002Fprotocol.md` | WebSocket handshake, frames, ping\u002Fpong, close codes |\n| Scaling | `references\u002Fscaling.md` | Horizontal scaling, Redis pub\u002Fsub, sticky sessions |\n| Patterns | `references\u002Fpatterns.md` | Rooms, namespaces, broadcasting, acknowledgments |\n| Security | `references\u002Fsecurity.md` | Authentication, authorization, rate limiting, CORS |\n| Alternatives | `references\u002Falternatives.md` | SSE, long polling, when to choose WebSockets |\n\n## Code Examples\n\n### Server Setup (Socket.IO with Auth and Room Management)\n\n```js\nimport { createServer } from \"http\";\nimport { Server } from \"socket.io\";\nimport { createAdapter } from \"@socket.io\u002Fredis-adapter\";\nimport { createClient } from \"redis\";\nimport jwt from \"jsonwebtoken\";\n\nconst httpServer = createServer();\nconst io = new Server(httpServer, {\n  cors: { origin: process.env.ALLOWED_ORIGIN, credentials: true },\n  pingTimeout: 20000,\n  pingInterval: 25000,\n});\n\n\u002F\u002F Authentication middleware — runs before connection is established\nio.use((socket, next) => {\n  const token = socket.handshake.auth.token;\n  if (!token) return next(new Error(\"Authentication required\"));\n  try {\n    socket.data.user = jwt.verify(token, process.env.JWT_SECRET);\n    next();\n  } catch {\n    next(new Error(\"Invalid token\"));\n  }\n});\n\n\u002F\u002F Redis adapter for horizontal scaling\nconst pubClient = createClient({ url: process.env.REDIS_URL });\nconst subClient = pubClient.duplicate();\nawait Promise.all([pubClient.connect(), subClient.connect()]);\nio.adapter(createAdapter(pubClient, subClient));\n\nio.on(\"connection\", (socket) => {\n  const { userId } = socket.data.user;\n  console.log(`connected: ${userId} (${socket.id})`);\n\n  \u002F\u002F Presence: mark user online\n  pubClient.hSet(\"presence\", userId, socket.id);\n\n  socket.on(\"join-room\", (roomId) => {\n    socket.join(roomId);\n    socket.to(roomId).emit(\"user-joined\", { userId });\n  });\n\n  socket.on(\"message\", ({ roomId, text }) => {\n    io.to(roomId).emit(\"message\", { userId, text, ts: Date.now() });\n  });\n\n  socket.on(\"disconnect\", () => {\n    pubClient.hDel(\"presence\", userId);\n    console.log(`disconnected: ${userId}`);\n  });\n});\n\nhttpServer.listen(3000);\n```\n\n### Client-Side Reconnection with Exponential Backoff\n\n```js\nimport { io } from \"socket.io-client\";\n\nconst socket = io(\"wss:\u002F\u002Fapi.example.com\", {\n  auth: { token: getAuthToken() },\n  reconnection: true,\n  reconnectionAttempts: 10,\n  reconnectionDelay: 1000,       \u002F\u002F initial delay (ms)\n  reconnectionDelayMax: 30000,   \u002F\u002F cap at 30 s\n  randomizationFactor: 0.5,      \u002F\u002F jitter to avoid thundering herd\n});\n\n\u002F\u002F Queue messages while disconnected\nlet messageQueue = [];\n\nsocket.on(\"connect\", () => {\n  console.log(\"connected:\", socket.id);\n  \u002F\u002F Flush queued messages\n  messageQueue.forEach((msg) => socket.emit(\"message\", msg));\n  messageQueue = [];\n});\n\nsocket.on(\"disconnect\", (reason) => {\n  console.warn(\"disconnected:\", reason);\n  if (reason === \"io server disconnect\") socket.connect(); \u002F\u002F manual reconnect\n});\n\nsocket.on(\"connect_error\", (err) => {\n  console.error(\"connection error:\", err.message);\n});\n\nfunction sendMessage(roomId, text) {\n  const msg = { roomId, text };\n  if (socket.connected) {\n    socket.emit(\"message\", msg);\n  } else {\n    messageQueue.push(msg); \u002F\u002F buffer until reconnected\n  }\n}\n```\n\n## Constraints\n\n### MUST DO\n- Use sticky sessions for load balancing (WebSocket connections are stateful — requests must route to the same server instance)\n- Implement heartbeat\u002Fping-pong to detect dead connections (TCP keepalive alone is insufficient)\n- Use rooms\u002Fnamespaces for message scoping rather than filtering in application logic\n- Queue messages during disconnection windows to avoid silent data loss\n- Plan connection limits per instance before scaling horizontally\n\n### MUST NOT DO\n- Store large state in memory without a clustering strategy (use Redis or an external store)\n- Mix WebSocket and HTTP on the same port without explicit upgrade handling\n- Forget to handle connection cleanup (presence records, room membership, in-flight timers)\n- Skip load testing before production — connection-count spikes behave differently from HTTP traffic spikes\n\n## Output Templates\n\nWhen implementing WebSocket features, provide:\n1. Server setup (Socket.IO\u002Fws configuration)\n2. Event handlers (connection, message, disconnect)\n3. Client library (connection, events, reconnection)\n4. Brief explanation of scaling strategy\n\n## Knowledge Reference\n\nSocket.IO, ws, uWebSockets.js, Redis adapter, sticky sessions, nginx WebSocket proxy, JWT over WebSocket, rooms\u002Fnamespaces, acknowledgments, binary data, compression, heartbeat, backpressure, horizontal pod autoscaling\n","# WebSocket Engineer\n\n## Core Workflow\n\n1. **Analyze requirements** — Identify connection scale, message volume, latency needs\n2. **Design architecture** — Plan clustering, pub\u002Fsub, state management, failover\n3. **Implement** — Build WebSocket server with authentication, rooms, events\n4. **Validate locally** — Test connection handling, auth, and room behavior before scaling (e.g., `npx wscat -c ws:\u002F\u002Flocalhost:3000`); confirm auth rejection on missing\u002Finvalid tokens, room join\u002Fleave events, and message delivery\n5. **Scale** — Verify Redis connection and pub\u002Fsub round-trip before enabling the adapter; configure sticky sessions and confirm with test connections across multiple instances; set up load balancing\n6. **Monitor** — Track connections, latency, throughput, error rates; add alerts for connection-count spikes and error-rate thresholds\n\n## Reference Guide\n\nLoad detailed guidance based on context:\n\n| Topic | Reference | Load When |\n|-------|-----------|-----------|\n| Protocol | `references\u002Fprotocol.md` | WebSocket handshake, frames, ping\u002Fpong, close codes |\n| Scaling | `references\u002Fscaling.md` | Horizontal scaling, Redis pub\u002Fsub, sticky sessions |\n| Patterns | `references\u002Fpatterns.md` | Rooms, namespaces, broadcasting, acknowledgments |\n| Security | `references\u002Fsecurity.md` | Authentication, authorization, rate limiting, CORS |\n| Alternatives | `references\u002Falternatives.md` | SSE, long polling, when to choose WebSockets |\n\n## Code Examples\n\n### Server Setup (Socket.IO with Auth and Room Management)\n\n```js\nimport { createServer } from \"http\";\nimport { Server } from \"socket.io\";\nimport { createAdapter } from \"@socket.io\u002Fredis-adapter\";\nimport { createClient } from \"redis\";\nimport jwt from \"jsonwebtoken\";\n\nconst httpServer = createServer();\nconst io = new Server(httpServer, {\n  cors: { origin: process.env.ALLOWED_ORIGIN, credentials: true },\n  pingTimeout: 20000,\n  pingInterval: 25000,\n});\n\n\u002F\u002F Authentication middleware — runs before connection is established\nio.use((socket, next) => {\n  const token = socket.handshake.auth.token;\n  if (!token) return next(new Error(\"Authentication required\"));\n  try {\n    socket.data.user = jwt.verify(token, process.env.JWT_SECRET);\n    next();\n  } catch {\n    next(new Error(\"Invalid token\"));\n  }\n});\n\n\u002F\u002F Redis adapter for horizontal scaling\nconst pubClient = createClient({ url: process.env.REDIS_URL });\nconst subClient = pubClient.duplicate();\nawait Promise.all([pubClient.connect(), subClient.connect()]);\nio.adapter(createAdapter(pubClient, subClient));\n\nio.on(\"connection\", (socket) => {\n  const { userId } = socket.data.user;\n  console.log(`connected: ${userId} (${socket.id})`);\n\n  \u002F\u002F Presence: mark user online\n  pubClient.hSet(\"presence\", userId, socket.id);\n\n  socket.on(\"join-room\", (roomId) => {\n    socket.join(roomId);\n    socket.to(roomId).emit(\"user-joined\", { userId });\n  });\n\n  socket.on(\"message\", ({ roomId, text }) => {\n    io.to(roomId).emit(\"message\", { userId, text, ts: Date.now() });\n  });\n\n  socket.on(\"disconnect\", () => {\n    pubClient.hDel(\"presence\", userId);\n    console.log(`disconnected: ${userId}`);\n  });\n});\n\nhttpServer.listen(3000);\n```\n\n### Client-Side Reconnection with Exponential Backoff\n\n```js\nimport { io } from \"socket.io-client\";\n\nconst socket = io(\"wss:\u002F\u002Fapi.example.com\", {\n  auth: { token: getAuthToken() },\n  reconnection: true,\n  reconnectionAttempts: 10,\n  reconnectionDelay: 1000,       \u002F\u002F initial delay (ms)\n  reconnectionDelayMax: 30000,   \u002F\u002F cap at 30 s\n  randomizationFactor: 0.5,      \u002F\u002F jitter to avoid thundering herd\n});\n\n\u002F\u002F Queue messages while disconnected\nlet messageQueue = [];\n\nsocket.on(\"connect\", () => {\n  console.log(\"connected:\", socket.id);\n  \u002F\u002F Flush queued messages\n  messageQueue.forEach((msg) => socket.emit(\"message\", msg));\n  messageQueue = [];\n});\n\nsocket.on(\"disconnect\", (reason) => {\n  console.warn(\"disconnected:\", reason);\n  if (reason === \"io server disconnect\") socket.connect(); \u002F\u002F manual reconnect\n});\n\nsocket.on(\"connect_error\", (err) => {\n  console.error(\"connection error:\", err.message);\n});\n\nfunction sendMessage(roomId, text) {\n  const msg = { roomId, text };\n  if (socket.connected) {\n    socket.emit(\"message\", msg);\n  } else {\n    messageQueue.push(msg); \u002F\u002F buffer until reconnected\n  }\n}\n```\n\n## Constraints\n\n### MUST DO\n- Use sticky sessions for load balancing (WebSocket connections are stateful — requests must route to the same server instance)\n- Implement heartbeat\u002Fping-pong to detect dead connections (TCP keepalive alone is insufficient)\n- Use rooms\u002Fnamespaces for message scoping rather than filtering in application logic\n- Queue messages during disconnection windows to avoid silent data loss\n- Plan connection limits per instance before scaling horizontally\n\n### MUST NOT DO\n- Store large state in memory without a clustering strategy (use Redis or an external store)\n- Mix WebSocket and HTTP on the same port without explicit upgrade handling\n- Forget to handle connection cleanup (presence records, room membership, in-flight timers)\n- Skip load testing before production — connection-count spikes behave differently from HTTP traffic spikes\n\n## Output Templates\n\nWhen implementing WebSocket features, provide:\n1. Server setup (Socket.IO\u002Fws configuration)\n2. Event handlers (connection, message, disconnect)\n3. Client library (connection, events, reconnection)\n4. Brief explanation of scaling strategy\n\n## Knowledge Reference\n\nSocket.IO, ws, uWebSockets.js, Redis adapter, sticky sessions, nginx WebSocket proxy, JWT over WebSocket, rooms\u002Fnamespaces, acknowledgments, binary data, compression, heartbeat, backpressure, horizontal pod autoscaling\n",{"name":5,"license":14,"metadata":53,"description":7},{"role":54,"scope":55,"author":56,"domain":57,"version":58,"triggers":59,"output-format":47,"related-skills":60},"specialist","implementation","https:\u002F\u002Fgithub.com\u002FJeffallan","api-architecture","1.1.0","WebSocket, Socket.IO, real-time communication, bidirectional messaging, pub\u002Fsub, server push, live updates, chat systems, presence tracking","fastapi-expert, nestjs-expert, devops-engineer, monitoring-expert, security-reviewer","master","c73386b305dec167db7654e0e6feacb462d4f9dc","assets\u002Fskills\u002Fdev\u002Fwebsocket-engineer",1,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code","https:\u002F\u002Fgithub.com\u002FAntifragileTech","2026-10-02 14:22:14",{"source":8,"skillName":5,"commands":69,"prompt":79,"zipAvailable":80},[70,73,76],{"tool":71,"command":72},"npx","npx skills add AntifragileTech\u002Fantifragile-claude-code --skill websocket-engineer",{"tool":74,"command":75},"bunx","bunx skills add AntifragileTech\u002Fantifragile-claude-code --skill websocket-engineer",{"tool":77,"command":78},"pnpm","pnpm dlx skills add AntifragileTech\u002Fantifragile-claude-code --skill websocket-engineer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fwebsocket-engineer\u002FSKILL.md",true,[82,88,92,96,100],{"path":83,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":86,"sourceHtmlUrl":87},"references\u002Falternatives.md","REFERENCE","参考文档",8505,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fwebsocket-engineer\u002Freferences\u002Falternatives.md",{"path":89,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":90,"sourceHtmlUrl":91},"references\u002Fpatterns.md",9601,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fwebsocket-engineer\u002Freferences\u002Fpatterns.md",{"path":93,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":94,"sourceHtmlUrl":95},"references\u002Fprotocol.md",4896,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fwebsocket-engineer\u002Freferences\u002Fprotocol.md",{"path":97,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":98,"sourceHtmlUrl":99},"references\u002Fscaling.md",7514,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fwebsocket-engineer\u002Freferences\u002Fscaling.md",{"path":101,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":102,"sourceHtmlUrl":103},"references\u002Fsecurity.md",10203,"https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fdev\u002Fwebsocket-engineer\u002Freferences\u002Fsecurity.md",[105,126,140,155,168,181],{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":120,"publishedAt":48},"01M6DT9Q6VYA615SCXR757TZZ7","writing-skills","Use when creating new skills, editing existing skills, or verifying skills work before deployment","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwriting-skills\u002FSKILL.md",[111,114,117],{"categoryNo":112,"categoryName":113,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":115,"categoryName":116,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":118,"categoryName":119,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000036","内容创作者",[121,122,38,123,124,125],"writing skills","writing","editing","work","deployment",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":134,"publishedAt":48},"01M6DT9GFHDNY90P41WGAE1TV0","writing-plans","Use when you have a spec or requirements for a multi-step task, before touching code","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwriting-plans\u002FSKILL.md",[132,133],{"categoryNo":115,"categoryName":116,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":118,"categoryName":119,"taxonomyType":25,"taxonomyTypeDesc":26},[135,136,122,137,138,38,47,139],"plans","writing plans","requirements","task","spec",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":148,"publishedAt":48},"01M6DT9C6PFGD86WS3HY7YE3XG","docs:write-concisely","Apply writing rules to any documentation that humans will read. Makes your writing clearer, stronger, and more professional.","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwrite-concisely\u002FSKILL.md",[146,147],{"categoryNo":115,"categoryName":116,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":118,"categoryName":119,"taxonomyType":25,"taxonomyTypeDesc":26},[149,150,151,152,153,154,122],"docs:write concisely","write","docs","read","Rules","documentation",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":161,"publishedAt":48},"01M6DT98AWQ27P0N1CG97WAG66","kaizen:why","Iterative Five Whys root cause analysis drilling from symptoms to fundamentals","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fwhy\u002FSKILL.md",[],[157,162,163,164,165,166,167],"why","kaizen","issue","five whys","analysis","root cause analysis",{"skillNo":169,"name":170,"nameZh":6,"description":171,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":172,"categories":173,"keywords":174,"publishedAt":48},"01M6DT93EH25NAX19R3WGE1P53","verification-loop","A comprehensive verification system for Claude Code sessions.","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fverification-loop\u002FSKILL.md",[],[175,176,177,178,47,179,180],"verification loop","verification","loop","sessions","claude code sessions","system",{"skillNo":182,"name":183,"nameZh":6,"description":184,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":185,"categories":186,"keywords":187,"publishedAt":48},"01M6DT90GW7Z7VCN98P9DVYSNC","verification-before-completion","Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always","https:\u002F\u002Fgithub.com\u002FAntifragileTech\u002Fantifragile-claude-code\u002Fblob\u002Fmaster\u002Fassets\u002Fskills\u002Fthinking\u002Fverification-before-completion\u002FSKILL.md",[],[188,176,189,124,38,190,191,192],"verification before completion","commands","evidence","claim","complete"]