[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BV9688T6S472J19XZAFV0C":3,"skill-same:01M6BV9688T6S472J19XZAFV0C":106},{"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":28,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":14,"repositoryHtmlUrl":51,"repositoryHomepageUrl":6,"ownerHtmlUrl":52,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":53,"install":54,"resources":67},"01M6BV9688T6S472J19XZAFV0C","zig-async-skill",null,"Zig 0.16.0 async I\u002FO programming with the new std.Io interface. Use when working with Zig 0.16.0+ async code, event loops, concurrent tasks, or non-blocking I\u002FO.","bnferguson\u002Fdotfiles","bnferguson","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F47749?v=4","01M6BV4H2TJKK8P14W86V1ZCPP","Brandon Ferguson","01M6BV4H7GJWTZJ1BVHQ1TX11Y",0,"MIT","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzig-async-skill\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42],"zig async skill","async","zig","tasks","code","programming","use","io","loops","event","with","interface","when","new","2026-11-10 10:12:30",false,"---\nname: zig-async-skill\ndescription: \"Zig 0.16.0 async I\u002FO programming with the new std.Io interface. Use when working with Zig 0.16.0+ async code, event loops, concurrent tasks, or non-blocking I\u002FO.\"\n---\n\n# Zig Async I\u002FO Skill (0.16.0+)\n\n## Overview\n\nZig 0.16.0 introduces a redesigned async I\u002FO system based on the `std.Io` interface. Unlike the old async\u002Fawait (removed in 0.11), the new design **decouples concurrency expression from execution models**, allowing code to work optimally across synchronous, multi-threaded, and event-driven contexts.\n\n**Critical Concept**: **Asynchrony ≠ Concurrency**\n- `async`: Operations *can* proceed out-of-order (sequential awaiting is valid)\n- `concurrent`: Operations *must* proceed simultaneously (requires parallelism)\n\n## Table of Contents\n\n- [Bundled Resources](#bundled-resources)\n- [Core Concepts](#core-concepts)\n- [Workflows](#workflows)\n- [Common Patterns](#common-patterns)\n\n## Bundled Resources\n\n### References\n\n**Fundamentals**:\n- `references\u002Fasync-overview.md` - New async I\u002FO design philosophy\n- `references\u002Fio-interface.md` - std.Io interface and primitives\n- `references\u002Fasync-vs-concurrent.md` - Critical distinction explained\n\n**Patterns**:\n- `references\u002Ffuture-handling.md` - Future.await() and Future.cancel()\n- `references\u002Fresource-management.md` - Defer patterns for async resources\n- `references\u002Fio-implementations.md` - Blocking, ThreadPool, EventLoop, Stackless\n\n**Advanced**:\n- `references\u002Fmessage-passing.md` - Io.Queue for synchronization\n- `references\u002Fvectorized-io.md` - sendFile() and drain() operations\n- `references\u002Fmigration-guide.md` - From old async or sync code\n\n### Examples\n\nComplete async I\u002FO demonstrations:\n- `examples\u002Fbasic_async.zig` - Simple async operations with io.async()\n- `examples\u002Fconcurrent_tasks.zig` - True concurrency with io.concurrent()\n- `examples\u002Ffile_operations.zig` - Async file I\u002FO patterns\n- `examples\u002Fhttp_server.zig` - Async HTTP server with event loop\n- `examples\u002Fproducer_consumer.zig` - Message passing with Io.Queue\n- `examples\u002Fcancellation.zig` - Proper task cancellation patterns\n\n### Templates\n\nStarting points for async code:\n- `assets\u002Ftemplates\u002Fasync-function.zig` - Async function template\n- `assets\u002Ftemplates\u002Fasync-server.zig` - Async server template\n- `assets\u002Ftemplates\u002Fasync-client.zig` - Async client template\n- `assets\u002Ftemplates\u002Fthreaded-io.zig` - Thread pool I\u002FO setup\n\n## Core Concepts\n\n### The std.Io Interface\n\n```zig\nconst Io = struct {\n    \u002F\u002F\u002F Spawn async work (may execute immediately or be scheduled)\n    fn async(self: *Io, func: anytype, args: anytype) Future\n\n    \u002F\u002F\u002F Spawn concurrent work (fails if parallelism unavailable)\n    fn concurrent(self: *Io, func: anytype, args: anytype) !Future\n\n    \u002F\u002F\u002F Message passing primitive\n    fn Queue(comptime T: type) type\n};\n```\n\n### Future Operations\n\n```zig\nconst Future = struct {\n    \u002F\u002F\u002F Wait for result (idempotent)\n    fn await(self: *Future, io: *Io) !T\n\n    \u002F\u002F\u002F Cancel and retrieve result (idempotent)\n    fn cancel(self: *Future, io: *Io) !T\n};\n```\n\n### I\u002FO Implementations\n\n1. **Blocking I\u002FO** - Standard syscalls, zero overhead\n2. **Thread Pool** - `std.Io.Threaded` multiplexes across OS threads\n3. **Event Loop** - `io_uring`\u002F`kqueue` with green threads (future)\n4. **Stackless Coroutines** - State machine rewriting (future)\n\n## Workflows\n\n### Writing Async Code\n\n1. **Accept Io parameter** - Functions take `io: *std.Io` like allocators\n2. **Spawn async work** - Use `io.async()` for potentially concurrent operations\n3. **Await results** - Call `future.await(io)` when needed\n4. **Handle cancellation** - Use `defer future.cancel(io)` for cleanup\n5. **Choose concurrent carefully** - Only use `io.concurrent()` when simultaneous execution required\n\n### Async vs Concurrent Decision\n\n**Use `io.async()` when:**\n- Operations can proceed in any order\n- Sequential awaiting is acceptable\n- Want to work with blocking I\u002FO implementations\n\n**Use `io.concurrent()` when:**\n- Operations MUST run simultaneously\n- Solving producer-consumer deadlocks\n- Require true parallelism\n\n### Resource Management Pattern\n\n```zig\nvar future = io.async(operation, .{io, args});\ndefer if (future.cancel(io)) |result| {\n    cleanup(result);\n} else |_| {};\n\n\u002F\u002F Use future...\ntry future.await(io);\n```\n\nThis single pattern handles both success and failure cases.\n\n## Common Patterns\n\n### Pattern 1: Parallel File Operations\n\n```zig\nfn saveFiles(io: *std.Io, data: []const u8) !void {\n    var fut_a = io.async(saveFile, .{io, data, \"a.txt\"});\n    var fut_b = io.async(saveFile, .{io, data, \"b.txt\"});\n\n    try fut_a.await(io);\n    try fut_b.await(io);\n}\n```\n\n### Pattern 2: Producer-Consumer with Queue\n\n```zig\nvar queue = io.Queue(Task).init();\n\n\u002F\u002F Producer\nvar producer = try io.concurrent(produce, .{io, &queue});\n\n\u002F\u002F Consumer\nvar consumer = try io.concurrent(consume, .{io, &queue});\n\ntry producer.await(io);\ntry consumer.await(io);\n```\n\n### Pattern 3: Cancellation on Timeout\n\n```zig\nvar work = io.async(longOperation, .{io});\nvar timeout = io.async(sleep, .{io, 5000});\n\nconst result = io.race(&.{work, timeout});\nif (result == 1) { \u002F\u002F timeout won\n    _ = work.cancel(io) catch {};\n    return error.Timeout;\n}\n```\n\n### Pattern 4: Passing Io Like Allocator\n\n```zig\npub fn processData(io: *std.Io, allocator: Allocator, data: []const u8) !void {\n    \u002F\u002F Use io just like allocator\n    var future = io.async(helper, .{io, allocator, data});\n    try future.await(io);\n}\n```\n\n## Key Differences from Old Async\n\n**Old Model (0.10.x and earlier)**:\n- `async` and `await` keywords\n- Stackless coroutines baked into language\n- Execution model virality\n- Removed in 0.11 for redesign\n\n**New Model (0.16.0+)**:\n- `io.async()` and `future.await(io)` methods\n- Execution model as runtime parameter\n- No function coloring\n- Works with synchronous code\n\n## Migration Guide\n\n**From synchronous code:**\n```zig\n\u002F\u002F Before (sync)\ntry saveFile(data, \"a.txt\");\ntry saveFile(data, \"b.txt\");\n\n\u002F\u002F After (async)\nvar fut_a = io.async(saveFile, .{io, data, \"a.txt\"});\nvar fut_b = io.async(saveFile, .{io, data, \"b.txt\"});\ntry fut_a.await(io);\ntry fut_b.await(io);\n```\n\n**From old async\u002Fawait:**\n```zig\n\u002F\u002F Before (old async - removed)\nvar frame_a = async saveFile(data, \"a.txt\");\nvar frame_b = async saveFile(data, \"b.txt\");\ntry await frame_a;\ntry await frame_b;\n\n\u002F\u002F After (new async)\nvar fut_a = io.async(saveFile, .{io, data, \"a.txt\"});\nvar fut_b = io.async(saveFile, .{io, data, \"b.txt\"});\ntry fut_a.await(io);\ntry fut_b.await(io);\n```\n\n## Best Practices\n\n1. **Pass Io explicitly** - Like allocators, pass as parameter not global\n2. **Default to async** - Use `io.async()` unless concurrent truly needed\n3. **Always handle cancellation** - Use defer pattern for resource cleanup\n4. **Understand async ≠ concurrent** - Async allows out-of-order, concurrent requires simultaneous\n5. **Test with multiple implementations** - Verify code works with Blocking and ThreadPool\n6. **Use Queue for synchronization** - Io.Queue handles producer-consumer patterns\n7. **Avoid blocking in async** - Don't call blocking syscalls directly in async functions\n8. **Leverage idempotency** - await and cancel can be called multiple times safely\n\n## Version Information\n\n**Minimum Zig Version**: 0.16.0 (unreleased as of writing)\n\nThis skill targets the new async I\u002FO design planned for Zig 0.16.0 based on:\n- Loris Cro's blog post: \"Zig's New Async I\u002FO\"\n- Andrew Kelley's post: \"Zig's New Async I\u002FO (Text Version)\"\n\n**Status**: Implementation in progress, API subject to change\n\n## Additional Resources\n\nLoad references for deep dives:\n- `references\u002Fasync-overview.md` - Complete design philosophy\n- `references\u002Fio-implementations.md` - Implementation strategies\n- `references\u002Fmessage-passing.md` - Advanced synchronization\n","# Zig Async I\u002FO Skill (0.16.0+)\n\n## Overview\n\nZig 0.16.0 introduces a redesigned async I\u002FO system based on the `std.Io` interface. Unlike the old async\u002Fawait (removed in 0.11), the new design **decouples concurrency expression from execution models**, allowing code to work optimally across synchronous, multi-threaded, and event-driven contexts.\n\n**Critical Concept**: **Asynchrony ≠ Concurrency**\n- `async`: Operations *can* proceed out-of-order (sequential awaiting is valid)\n- `concurrent`: Operations *must* proceed simultaneously (requires parallelism)\n\n## Table of Contents\n\n- [Bundled Resources](#bundled-resources)\n- [Core Concepts](#core-concepts)\n- [Workflows](#workflows)\n- [Common Patterns](#common-patterns)\n\n## Bundled Resources\n\n### References\n\n**Fundamentals**:\n- `references\u002Fasync-overview.md` - New async I\u002FO design philosophy\n- `references\u002Fio-interface.md` - std.Io interface and primitives\n- `references\u002Fasync-vs-concurrent.md` - Critical distinction explained\n\n**Patterns**:\n- `references\u002Ffuture-handling.md` - Future.await() and Future.cancel()\n- `references\u002Fresource-management.md` - Defer patterns for async resources\n- `references\u002Fio-implementations.md` - Blocking, ThreadPool, EventLoop, Stackless\n\n**Advanced**:\n- `references\u002Fmessage-passing.md` - Io.Queue for synchronization\n- `references\u002Fvectorized-io.md` - sendFile() and drain() operations\n- `references\u002Fmigration-guide.md` - From old async or sync code\n\n### Examples\n\nComplete async I\u002FO demonstrations:\n- `examples\u002Fbasic_async.zig` - Simple async operations with io.async()\n- `examples\u002Fconcurrent_tasks.zig` - True concurrency with io.concurrent()\n- `examples\u002Ffile_operations.zig` - Async file I\u002FO patterns\n- `examples\u002Fhttp_server.zig` - Async HTTP server with event loop\n- `examples\u002Fproducer_consumer.zig` - Message passing with Io.Queue\n- `examples\u002Fcancellation.zig` - Proper task cancellation patterns\n\n### Templates\n\nStarting points for async code:\n- `assets\u002Ftemplates\u002Fasync-function.zig` - Async function template\n- `assets\u002Ftemplates\u002Fasync-server.zig` - Async server template\n- `assets\u002Ftemplates\u002Fasync-client.zig` - Async client template\n- `assets\u002Ftemplates\u002Fthreaded-io.zig` - Thread pool I\u002FO setup\n\n## Core Concepts\n\n### The std.Io Interface\n\n```zig\nconst Io = struct {\n    \u002F\u002F\u002F Spawn async work (may execute immediately or be scheduled)\n    fn async(self: *Io, func: anytype, args: anytype) Future\n\n    \u002F\u002F\u002F Spawn concurrent work (fails if parallelism unavailable)\n    fn concurrent(self: *Io, func: anytype, args: anytype) !Future\n\n    \u002F\u002F\u002F Message passing primitive\n    fn Queue(comptime T: type) type\n};\n```\n\n### Future Operations\n\n```zig\nconst Future = struct {\n    \u002F\u002F\u002F Wait for result (idempotent)\n    fn await(self: *Future, io: *Io) !T\n\n    \u002F\u002F\u002F Cancel and retrieve result (idempotent)\n    fn cancel(self: *Future, io: *Io) !T\n};\n```\n\n### I\u002FO Implementations\n\n1. **Blocking I\u002FO** - Standard syscalls, zero overhead\n2. **Thread Pool** - `std.Io.Threaded` multiplexes across OS threads\n3. **Event Loop** - `io_uring`\u002F`kqueue` with green threads (future)\n4. **Stackless Coroutines** - State machine rewriting (future)\n\n## Workflows\n\n### Writing Async Code\n\n1. **Accept Io parameter** - Functions take `io: *std.Io` like allocators\n2. **Spawn async work** - Use `io.async()` for potentially concurrent operations\n3. **Await results** - Call `future.await(io)` when needed\n4. **Handle cancellation** - Use `defer future.cancel(io)` for cleanup\n5. **Choose concurrent carefully** - Only use `io.concurrent()` when simultaneous execution required\n\n### Async vs Concurrent Decision\n\n**Use `io.async()` when:**\n- Operations can proceed in any order\n- Sequential awaiting is acceptable\n- Want to work with blocking I\u002FO implementations\n\n**Use `io.concurrent()` when:**\n- Operations MUST run simultaneously\n- Solving producer-consumer deadlocks\n- Require true parallelism\n\n### Resource Management Pattern\n\n```zig\nvar future = io.async(operation, .{io, args});\ndefer if (future.cancel(io)) |result| {\n    cleanup(result);\n} else |_| {};\n\n\u002F\u002F Use future...\ntry future.await(io);\n```\n\nThis single pattern handles both success and failure cases.\n\n## Common Patterns\n\n### Pattern 1: Parallel File Operations\n\n```zig\nfn saveFiles(io: *std.Io, data: []const u8) !void {\n    var fut_a = io.async(saveFile, .{io, data, \"a.txt\"});\n    var fut_b = io.async(saveFile, .{io, data, \"b.txt\"});\n\n    try fut_a.await(io);\n    try fut_b.await(io);\n}\n```\n\n### Pattern 2: Producer-Consumer with Queue\n\n```zig\nvar queue = io.Queue(Task).init();\n\n\u002F\u002F Producer\nvar producer = try io.concurrent(produce, .{io, &queue});\n\n\u002F\u002F Consumer\nvar consumer = try io.concurrent(consume, .{io, &queue});\n\ntry producer.await(io);\ntry consumer.await(io);\n```\n\n### Pattern 3: Cancellation on Timeout\n\n```zig\nvar work = io.async(longOperation, .{io});\nvar timeout = io.async(sleep, .{io, 5000});\n\nconst result = io.race(&.{work, timeout});\nif (result == 1) { \u002F\u002F timeout won\n    _ = work.cancel(io) catch {};\n    return error.Timeout;\n}\n```\n\n### Pattern 4: Passing Io Like Allocator\n\n```zig\npub fn processData(io: *std.Io, allocator: Allocator, data: []const u8) !void {\n    \u002F\u002F Use io just like allocator\n    var future = io.async(helper, .{io, allocator, data});\n    try future.await(io);\n}\n```\n\n## Key Differences from Old Async\n\n**Old Model (0.10.x and earlier)**:\n- `async` and `await` keywords\n- Stackless coroutines baked into language\n- Execution model virality\n- Removed in 0.11 for redesign\n\n**New Model (0.16.0+)**:\n- `io.async()` and `future.await(io)` methods\n- Execution model as runtime parameter\n- No function coloring\n- Works with synchronous code\n\n## Migration Guide\n\n**From synchronous code:**\n```zig\n\u002F\u002F Before (sync)\ntry saveFile(data, \"a.txt\");\ntry saveFile(data, \"b.txt\");\n\n\u002F\u002F After (async)\nvar fut_a = io.async(saveFile, .{io, data, \"a.txt\"});\nvar fut_b = io.async(saveFile, .{io, data, \"b.txt\"});\ntry fut_a.await(io);\ntry fut_b.await(io);\n```\n\n**From old async\u002Fawait:**\n```zig\n\u002F\u002F Before (old async - removed)\nvar frame_a = async saveFile(data, \"a.txt\");\nvar frame_b = async saveFile(data, \"b.txt\");\ntry await frame_a;\ntry await frame_b;\n\n\u002F\u002F After (new async)\nvar fut_a = io.async(saveFile, .{io, data, \"a.txt\"});\nvar fut_b = io.async(saveFile, .{io, data, \"b.txt\"});\ntry fut_a.await(io);\ntry fut_b.await(io);\n```\n\n## Best Practices\n\n1. **Pass Io explicitly** - Like allocators, pass as parameter not global\n2. **Default to async** - Use `io.async()` unless concurrent truly needed\n3. **Always handle cancellation** - Use defer pattern for resource cleanup\n4. **Understand async ≠ concurrent** - Async allows out-of-order, concurrent requires simultaneous\n5. **Test with multiple implementations** - Verify code works with Blocking and ThreadPool\n6. **Use Queue for synchronization** - Io.Queue handles producer-consumer patterns\n7. **Avoid blocking in async** - Don't call blocking syscalls directly in async functions\n8. **Leverage idempotency** - await and cancel can be called multiple times safely\n\n## Version Information\n\n**Minimum Zig Version**: 0.16.0 (unreleased as of writing)\n\nThis skill targets the new async I\u002FO design planned for Zig 0.16.0 based on:\n- Loris Cro's blog post: \"Zig's New Async I\u002FO\"\n- Andrew Kelley's post: \"Zig's New Async I\u002FO (Text Version)\"\n\n**Status**: Implementation in progress, API subject to change\n\n## Additional Resources\n\nLoad references for deep dives:\n- `references\u002Fasync-overview.md` - Complete design philosophy\n- `references\u002Fio-implementations.md` - Implementation strategies\n- `references\u002Fmessage-passing.md` - Advanced synchronization\n",{"name":5,"description":7},"main","e63965e4644984470d4cc8b3014a8b001f0c2666",".agents\u002Fskills\u002Fzig-async-skill","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles","https:\u002F\u002Fgithub.com\u002Fbnferguson","2026-11-11 03:04:59",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add bnferguson\u002Fdotfiles --skill zig-async-skill",{"tool":60,"command":61},"bunx","bunx skills add bnferguson\u002Fdotfiles --skill zig-async-skill",{"tool":63,"command":64},"pnpm","pnpm dlx skills add bnferguson\u002Fdotfiles --skill zig-async-skill","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzig-async-skill\u002FSKILL.md",true,[68,74,80,86,90,94,98,102],{"path":69,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":73},".claude-plugin\u002Fplugin.json","REFERENCE","参考文档",566,"https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzig-async-skill\u002F.claude-plugin\u002Fplugin.json",{"path":75,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":78,"sourceHtmlUrl":79},"assets\u002Ftemplates\u002Fasync-function.zig","ASSET","资产文件",10203,"https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzig-async-skill\u002Fassets\u002Ftemplates\u002Fasync-function.zig",{"path":81,"resourceType":82,"resourceTypeDesc":83,"sizeBytes":84,"sourceHtmlUrl":85},"examples\u002Fbasic_async.zig","OTHER","其他",7296,"https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzig-async-skill\u002Fexamples\u002Fbasic_async.zig",{"path":87,"resourceType":82,"resourceTypeDesc":83,"sizeBytes":88,"sourceHtmlUrl":89},"examples\u002Fcancellation.zig",9835,"https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzig-async-skill\u002Fexamples\u002Fcancellation.zig",{"path":91,"resourceType":82,"resourceTypeDesc":83,"sizeBytes":92,"sourceHtmlUrl":93},"examples\u002Fconcurrent_tasks.zig",10343,"https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzig-async-skill\u002Fexamples\u002Fconcurrent_tasks.zig",{"path":95,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":96,"sourceHtmlUrl":97},"README.md",7952,"https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzig-async-skill\u002FREADME.md",{"path":99,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":100,"sourceHtmlUrl":101},"references\u002Fasync-overview.md",7245,"https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzig-async-skill\u002Freferences\u002Fasync-overview.md",{"path":103,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":104,"sourceHtmlUrl":105},"references\u002Fasync-vs-concurrent.md",8760,"https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzig-async-skill\u002Freferences\u002Fasync-vs-concurrent.md",[107,133,148,178,187,200],{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":111,"licenseFileUrl":112,"sourceHtmlUrl":113,"categories":114,"keywords":116,"publishedAt":43},"01M6BVA3RS3M016FANZ6792F9H","skill-creator","Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002Fclaude\u002Fconfig\u002Fskills\u002Fskill-creator\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002Fclaude\u002Fconfig\u002Fskills\u002Fskill-creator\u002FSKILL.md",[115],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[117,118,119,120,121,122,123,124,125,126,127,128,129,130,39,131,132,41,42],"creator","skill creator","specialized","workflows","create","update","capabilities","knowledge","tool","integrations","guide","new skill","existing skill","users","for","Existing",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":145,"publishedAt":43},"01M6BV94WN2RPYM8N6PN8TBNT8","writing-shape","Writing, exploit: shape raw material into an article, paragraph by paragraph.","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwriting-shape\u002FSKILL.md",[139,142],{"categoryNo":140,"categoryName":141,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":143,"categoryName":144,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000036","内容创作者",[146,147],"writing shape","writing",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":111,"licenseFileUrl":152,"sourceHtmlUrl":153,"categories":154,"keywords":161,"publishedAt":43},"01M6BV8QDFJ6PXBVK5NFBZT5M7","webapp-testing","Test local web applications using Playwright. Use when verifying frontend functionality, debugging UI behavior, capturing browser screenshots, or viewing browser logs.","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwebapp-testing\u002FSKILL.md",[155,158],{"categoryNo":156,"categoryName":157,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":159,"categoryName":160,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[162,163,164,165,166,167,168,169,170,171,172,173,174,175,35,176,177,41],"webapp","webapp testing","testing","browser","frontend","screenshots","playwright","test","web","debugging","ui","logs","applications","behavior","local","test local",{"skillNo":179,"name":180,"nameZh":6,"description":181,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":182,"categories":183,"keywords":184,"publishedAt":43},"01M6BV8MDXKXNVHKS3QF3YDFTF","wait-what","Stop. That last message did not land: re-pitch it.","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwait-what\u002FSKILL.md",[],[185,186],"wait what","land",{"skillNo":188,"name":189,"nameZh":6,"description":190,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":191,"categories":192,"keywords":196,"publishedAt":43},"01M6BV756DJHT5BDA1HVRVHJJ7","prototype","Build a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fprototype\u002FSKILL.md",[193],{"categoryNo":194,"categoryName":195,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000032","设计师",[189,197,198,172,199],"design","explore","state",{"skillNo":201,"name":202,"nameZh":6,"description":203,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":204,"categories":205,"keywords":207,"publishedAt":43},"01M6BV6SBW166685KVBPWM2K4N","improve-codebase-architecture","Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.","https:\u002F\u002Fgithub.com\u002Fbnferguson\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fimprove-codebase-architecture\u002FSKILL.md",[206],{"categoryNo":159,"categoryName":160,"taxonomyType":21,"taxonomyTypeDesc":22},[208,209,210,211],"architecture","improve","improve codebase architecture","report"]