[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6JGRZP9FS5Q29GSMXQDX7NG":3,"skill-same:01M6JGRZP9FS5Q29GSMXQDX7NG":102},{"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":54,"commitSha":55,"skillDirectory":56,"forksCount":57,"repositoryHtmlUrl":58,"repositoryHomepageUrl":6,"ownerHtmlUrl":59,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":60,"install":61,"resources":74},"01M6JGRZP9FS5Q29GSMXQDX7NG","golang-samber-hot",null,"In-memory caching in Golang using samber\u002Fhot — eviction algorithms (LRU, LFU, TinyLFU, W-TinyLFU, S3FIFO, ARC, TwoQueue, SIEVE, FIFO), TTL, cache loaders, sharding, stale-while-revalidate, missing key caching, and Prometheus metrics. Apply when using or adopting samber\u002Fhot, when the codebase imports github.com\u002Fsamber\u002Fhot, or when the project repeatedly loads the same medium-to-low cardinality resources at high frequency and needs to reduce latency or backend pressure.","muratovv\u002Fai-hats","muratovv","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F7502801?v=4","01M6JGCBN4KEJX012GPJVSH04T","Fedor Muratov","01M6JGCBSNMN7CW3RGTPPE0MN2",3,"MIT","https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fusage\u002Fskills\u002Fgolang-samber-hot\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"golang","golang samber hot","context7","imports","reduce","at","resources","false","project","caching","query","MCP","edit","write","read","projects","Bash","code","ai coding agents","memory","2026-11-10 10:12:30",false,"---\nname: golang-samber-hot\ndescription: >-\n  In-memory caching in Golang using samber\u002Fhot — eviction algorithms (LRU,\n  LFU, TinyLFU, W-TinyLFU, S3FIFO, ARC, TwoQueue, SIEVE, FIFO), TTL, cache\n  loaders, sharding, stale-while-revalidate, missing key caching, and\n  Prometheus metrics. Apply when using or adopting samber\u002Fhot, when the\n  codebase imports github.com\u002Fsamber\u002Fhot, or when the project repeatedly\n  loads the same medium-to-low cardinality resources at high frequency and\n  needs to reduce latency or backend pressure.\nuser-invocable: false\nlicense: MIT\ncompatibility: Designed for Claude Code or similar AI coding agents, and for projects using Golang.\nmetadata:\n  author: samber\n  version: \"1.0.3\"\nallowed-tools: Read Edit Write Glob Grep Bash(go:*) Bash(golangci-lint:*) Bash(git:*) Agent WebFetch mcp__context7__resolve-library-id mcp__context7__query-docs AskUserQuestion\n---\n\n**Persona:** You are a Go engineer who treats caching as a system design decision. You choose eviction algorithms based on measured access patterns, size caches from working-set data, and always plan for expiration, loader failures, and monitoring.\n\n# Using samber\u002Fhot for In-Memory Caching in Go\n\nGeneric, type-safe in-memory caching library for Go 1.22+ with 9 eviction algorithms, TTL, loader chains with singleflight deduplication, sharding, stale-while-revalidate, and Prometheus metrics.\n\n**Official Resources:**\n\n- [pkg.go.dev\u002Fgithub.com\u002Fsamber\u002Fhot](https:\u002F\u002Fpkg.go.dev\u002Fgithub.com\u002Fsamber\u002Fhot)\n- [github.com\u002Fsamber\u002Fhot](https:\u002F\u002Fgithub.com\u002Fsamber\u002Fhot)\n\nThis skill is not exhaustive. Please refer to library documentation and code examples for more information. Context7 can help as a discoverability platform.\n\n```bash\ngo get -u github.com\u002Fsamber\u002Fhot\n```\n\n## Algorithm Selection\n\nPick based on your access pattern — the wrong algorithm wastes memory or tanks hit rate.\n\n| Algorithm | Constant | Best for | Avoid when |\n| --- | --- | --- | --- |\n| **W-TinyLFU** | `hot.WTinyLFU` | General-purpose, mixed workloads (default) | You need simplicity for debugging |\n| **LRU** | `hot.LRU` | Recency-dominated (sessions, recent queries) | Frequency matters (scan pollution evicts hot items) |\n| **LFU** | `hot.LFU` | Frequency-dominated (popular products, DNS) | Access patterns shift (stale popular items never evict) |\n| **TinyLFU** | `hot.TinyLFU` | Read-heavy with frequency bias | Write-heavy (admission filter overhead) |\n| **S3FIFO** | `hot.S3FIFO` | High throughput, scan-resistant | Small caches (\u003C1000 items) |\n| **ARC** | `hot.ARC` | Self-tuning, unknown patterns | Memory-constrained (2x tracking overhead) |\n| **TwoQueue** | `hot.TwoQueue` | Mixed with hot\u002Fcold split | Tuning complexity is unacceptable |\n| **SIEVE** | `hot.SIEVE` | Simple scan-resistant LRU alternative | Highly skewed access patterns |\n| **FIFO** | `hot.FIFO` | Simple, predictable eviction order | Hit rate matters (no frequency\u002Frecency awareness) |\n\n**Decision shortcut:** Start with `hot.WTinyLFU`. Switch only when profiling shows the miss rate is too high for your SLO.\n\nFor detailed algorithm comparison, benchmarks, and a decision tree, see [Algorithm Guide](.\u002Freferences\u002Falgorithm-guide.md).\n\n## Core Usage\n\n### Basic Cache with TTL\n\n```go\nimport \"github.com\u002Fsamber\u002Fhot\"\n\ncache := hot.NewHotCache[string, *User](hot.WTinyLFU, 10_000).\n    WithTTL(5 * time.Minute).\n    WithJanitor().\n    Build()\ndefer cache.StopJanitor()\n\ncache.Set(\"user:123\", user)\ncache.SetWithTTL(\"session:abc\", session, 30*time.Minute)\n\nvalue, found, err := cache.Get(\"user:123\")\n```\n\n### Loader Pattern (Read-Through)\n\nLoaders fetch missing keys automatically with singleflight deduplication — concurrent `Get()` calls for the same missing key share one loader invocation:\n\n```go\ncache := hot.NewHotCache[int, *User](hot.WTinyLFU, 10_000).\n    WithTTL(5 * time.Minute).\n    WithLoaders(func(ids []int) (map[int]*User, error) {\n        return db.GetUsersByIDs(ctx, ids) \u002F\u002F batch query\n    }).\n    WithJanitor().\n    Build()\ndefer cache.StopJanitor()\n\nuser, found, err := cache.Get(123) \u002F\u002F triggers loader on miss\n```\n\n## Capacity Sizing\n\nBefore setting the cache capacity, estimate how many items fit in the memory budget:\n\n1. **Estimate single-item size** — estimate size of the struct, add the size of heap-allocated fields (slices, maps, strings). Include the key size. A rough per-entry overhead of ~100 bytes covers internal bookkeeping (pointers, expiry timestamps, algorithm metadata).\n2. **Ask the developer** how much memory is dedicated to this cache in production (e.g., 256 MB, 1 GB). This depends on the service's total memory and what else shares the process.\n3. **Compute capacity** — `capacity = memoryBudget \u002F estimatedItemSize`. Round down to leave headroom.\n\n```\nExample: *User struct ~500 bytes + string key ~50 bytes + overhead ~100 bytes = ~650 bytes\u002Fentry\n         256 MB budget → 256_000_000 \u002F 650 ≈ 393,000 items\n```\n\nIf the item size is unknown, ask the developer to measure it with a unit test that allocates N items and checks `runtime.ReadMemStats`. Guessing capacity without measuring leads to OOM or wasted memory.\n\n## Common Mistakes\n\n1. **Forgetting `WithJanitor()`** — without it, expired entries stay in memory until the algorithm evicts them. Always chain `.WithJanitor()` in the builder and `defer cache.StopJanitor()`.\n2. **Calling `SetMissing()` without missing cache config** — panics at runtime. Enable `WithMissingCache(algorithm, capacity)` or `WithMissingSharedCache()` in the builder first.\n3. **`WithoutLocking()` + `WithJanitor()`** — mutually exclusive, panics. `WithoutLocking()` is only safe for single-goroutine access without background cleanup.\n4. **Oversized cache** — a cache holding everything is a map with overhead. Size to your working set (typically 10-20% of total data). Monitor hit rate to validate.\n5. **Ignoring loader errors** — `Get()` returns `(zero, false, err)` on loader failure. Always check `err`, not just `found`.\n\n## Best Practices\n\n1. Always set TTL — unbounded caches serve stale data indefinitely because there is no signal to refresh\n2. Use `WithJitter(lambda, upperBound)` to spread expirations — without jitter, items created together expire together, causing thundering herd on the loader\n3. Monitor with `WithPrometheusMetrics(cacheName)` — hit rate below 80% usually means the cache is undersized or the algorithm is wrong for the workload\n4. Use `WithCopyOnRead(fn)` \u002F `WithCopyOnWrite(fn)` for mutable values — without copies, callers mutate cached objects and corrupt shared state\n\nFor advanced patterns (revalidation, sharding, missing cache, monitoring setup), see [Production Patterns](.\u002Freferences\u002Fproduction-patterns.md).\n\nFor the complete API surface, see [API Reference](.\u002Freferences\u002Fapi-reference.md).\n\nIf you encounter a bug or unexpected behavior in samber\u002Fhot, open an issue at \u003Chttps:\u002F\u002Fgithub.com\u002Fsamber\u002Fhot\u002Fissues>.\n\n## Cross-References\n\n- → See `samber\u002Fcc-skills-golang@golang-performance` skill for general caching strategy and when to use in-memory cache vs Redis vs CDN\n- → See `samber\u002Fcc-skills-golang@golang-observability` skill for Prometheus metrics integration and monitoring\n- → See `samber\u002Fcc-skills-golang@golang-database` skill for database query patterns that pair with cache loaders\n- → See `samber\u002Fcc-skills@promql-cli` skill for querying Prometheus cache metrics via CLI\n","**Persona:** You are a Go engineer who treats caching as a system design decision. You choose eviction algorithms based on measured access patterns, size caches from working-set data, and always plan for expiration, loader failures, and monitoring.\n\n# Using samber\u002Fhot for In-Memory Caching in Go\n\nGeneric, type-safe in-memory caching library for Go 1.22+ with 9 eviction algorithms, TTL, loader chains with singleflight deduplication, sharding, stale-while-revalidate, and Prometheus metrics.\n\n**Official Resources:**\n\n- [pkg.go.dev\u002Fgithub.com\u002Fsamber\u002Fhot](https:\u002F\u002Fpkg.go.dev\u002Fgithub.com\u002Fsamber\u002Fhot)\n- [github.com\u002Fsamber\u002Fhot](https:\u002F\u002Fgithub.com\u002Fsamber\u002Fhot)\n\nThis skill is not exhaustive. Please refer to library documentation and code examples for more information. Context7 can help as a discoverability platform.\n\n```bash\ngo get -u github.com\u002Fsamber\u002Fhot\n```\n\n## Algorithm Selection\n\nPick based on your access pattern — the wrong algorithm wastes memory or tanks hit rate.\n\n| Algorithm | Constant | Best for | Avoid when |\n| --- | --- | --- | --- |\n| **W-TinyLFU** | `hot.WTinyLFU` | General-purpose, mixed workloads (default) | You need simplicity for debugging |\n| **LRU** | `hot.LRU` | Recency-dominated (sessions, recent queries) | Frequency matters (scan pollution evicts hot items) |\n| **LFU** | `hot.LFU` | Frequency-dominated (popular products, DNS) | Access patterns shift (stale popular items never evict) |\n| **TinyLFU** | `hot.TinyLFU` | Read-heavy with frequency bias | Write-heavy (admission filter overhead) |\n| **S3FIFO** | `hot.S3FIFO` | High throughput, scan-resistant | Small caches (\u003C1000 items) |\n| **ARC** | `hot.ARC` | Self-tuning, unknown patterns | Memory-constrained (2x tracking overhead) |\n| **TwoQueue** | `hot.TwoQueue` | Mixed with hot\u002Fcold split | Tuning complexity is unacceptable |\n| **SIEVE** | `hot.SIEVE` | Simple scan-resistant LRU alternative | Highly skewed access patterns |\n| **FIFO** | `hot.FIFO` | Simple, predictable eviction order | Hit rate matters (no frequency\u002Frecency awareness) |\n\n**Decision shortcut:** Start with `hot.WTinyLFU`. Switch only when profiling shows the miss rate is too high for your SLO.\n\nFor detailed algorithm comparison, benchmarks, and a decision tree, see [Algorithm Guide](.\u002Freferences\u002Falgorithm-guide.md).\n\n## Core Usage\n\n### Basic Cache with TTL\n\n```go\nimport \"github.com\u002Fsamber\u002Fhot\"\n\ncache := hot.NewHotCache[string, *User](hot.WTinyLFU, 10_000).\n    WithTTL(5 * time.Minute).\n    WithJanitor().\n    Build()\ndefer cache.StopJanitor()\n\ncache.Set(\"user:123\", user)\ncache.SetWithTTL(\"session:abc\", session, 30*time.Minute)\n\nvalue, found, err := cache.Get(\"user:123\")\n```\n\n### Loader Pattern (Read-Through)\n\nLoaders fetch missing keys automatically with singleflight deduplication — concurrent `Get()` calls for the same missing key share one loader invocation:\n\n```go\ncache := hot.NewHotCache[int, *User](hot.WTinyLFU, 10_000).\n    WithTTL(5 * time.Minute).\n    WithLoaders(func(ids []int) (map[int]*User, error) {\n        return db.GetUsersByIDs(ctx, ids) \u002F\u002F batch query\n    }).\n    WithJanitor().\n    Build()\ndefer cache.StopJanitor()\n\nuser, found, err := cache.Get(123) \u002F\u002F triggers loader on miss\n```\n\n## Capacity Sizing\n\nBefore setting the cache capacity, estimate how many items fit in the memory budget:\n\n1. **Estimate single-item size** — estimate size of the struct, add the size of heap-allocated fields (slices, maps, strings). Include the key size. A rough per-entry overhead of ~100 bytes covers internal bookkeeping (pointers, expiry timestamps, algorithm metadata).\n2. **Ask the developer** how much memory is dedicated to this cache in production (e.g., 256 MB, 1 GB). This depends on the service's total memory and what else shares the process.\n3. **Compute capacity** — `capacity = memoryBudget \u002F estimatedItemSize`. Round down to leave headroom.\n\n```\nExample: *User struct ~500 bytes + string key ~50 bytes + overhead ~100 bytes = ~650 bytes\u002Fentry\n         256 MB budget → 256_000_000 \u002F 650 ≈ 393,000 items\n```\n\nIf the item size is unknown, ask the developer to measure it with a unit test that allocates N items and checks `runtime.ReadMemStats`. Guessing capacity without measuring leads to OOM or wasted memory.\n\n## Common Mistakes\n\n1. **Forgetting `WithJanitor()`** — without it, expired entries stay in memory until the algorithm evicts them. Always chain `.WithJanitor()` in the builder and `defer cache.StopJanitor()`.\n2. **Calling `SetMissing()` without missing cache config** — panics at runtime. Enable `WithMissingCache(algorithm, capacity)` or `WithMissingSharedCache()` in the builder first.\n3. **`WithoutLocking()` + `WithJanitor()`** — mutually exclusive, panics. `WithoutLocking()` is only safe for single-goroutine access without background cleanup.\n4. **Oversized cache** — a cache holding everything is a map with overhead. Size to your working set (typically 10-20% of total data). Monitor hit rate to validate.\n5. **Ignoring loader errors** — `Get()` returns `(zero, false, err)` on loader failure. Always check `err`, not just `found`.\n\n## Best Practices\n\n1. Always set TTL — unbounded caches serve stale data indefinitely because there is no signal to refresh\n2. Use `WithJitter(lambda, upperBound)` to spread expirations — without jitter, items created together expire together, causing thundering herd on the loader\n3. Monitor with `WithPrometheusMetrics(cacheName)` — hit rate below 80% usually means the cache is undersized or the algorithm is wrong for the workload\n4. Use `WithCopyOnRead(fn)` \u002F `WithCopyOnWrite(fn)` for mutable values — without copies, callers mutate cached objects and corrupt shared state\n\nFor advanced patterns (revalidation, sharding, missing cache, monitoring setup), see [Production Patterns](.\u002Freferences\u002Fproduction-patterns.md).\n\nFor the complete API surface, see [API Reference](.\u002Freferences\u002Fapi-reference.md).\n\nIf you encounter a bug or unexpected behavior in samber\u002Fhot, open an issue at \u003Chttps:\u002F\u002Fgithub.com\u002Fsamber\u002Fhot\u002Fissues>.\n\n## Cross-References\n\n- → See `samber\u002Fcc-skills-golang@golang-performance` skill for general caching strategy and when to use in-memory cache vs Redis vs CDN\n- → See `samber\u002Fcc-skills-golang@golang-observability` skill for Prometheus metrics integration and monitoring\n- → See `samber\u002Fcc-skills-golang@golang-database` skill for database query patterns that pair with cache loaders\n- → See `samber\u002Fcc-skills@promql-cli` skill for querying Prometheus cache metrics via CLI\n",{"name":5,"license":15,"metadata":49,"description":7,"allowed-tools":52,"compatibility":53,"user-invocable":45},{"author":50,"version":51},"samber","1.0.3","Read Edit Write Glob Grep Bash(go:*) Bash(golangci-lint:*) Bash(git:*) Agent WebFetch mcp__context7__resolve-library-id mcp__context7__query-docs AskUserQuestion","Designed for Claude Code or similar AI coding agents, and for projects using Golang.","master","b4819add93efbaf4d80627118ec34680406b309b","packages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fusage\u002Fskills\u002Fgolang-samber-hot",1,"https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats","https:\u002F\u002Fgithub.com\u002Fmuratovv","2026-11-05 20:59:10",{"source":8,"skillName":5,"commands":62,"prompt":72,"zipAvailable":73},[63,66,69],{"tool":64,"command":65},"npx","npx skills add muratovv\u002Fai-hats --skill golang-samber-hot",{"tool":67,"command":68},"bunx","bunx skills add muratovv\u002Fai-hats --skill golang-samber-hot",{"tool":70,"command":71},"pnpm","pnpm dlx skills add muratovv\u002Fai-hats --skill golang-samber-hot","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fusage\u002Fskills\u002Fgolang-samber-hot\u002FSKILL.md",true,[75,81,86,90,94,98],{"path":76,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":79,"sourceHtmlUrl":80},"evals\u002Fevals.json","REFERENCE","参考文档",15033,"https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fusage\u002Fskills\u002Fgolang-samber-hot\u002Fevals\u002Fevals.json",{"path":82,"resourceType":82,"resourceTypeDesc":83,"sizeBytes":84,"sourceHtmlUrl":85},"LICENSE","许可证",1070,"https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fusage\u002Fskills\u002Fgolang-samber-hot\u002FLICENSE",{"path":87,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":88,"sourceHtmlUrl":89},"metadata.yaml",667,"https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fusage\u002Fskills\u002Fgolang-samber-hot\u002Fmetadata.yaml",{"path":91,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":92,"sourceHtmlUrl":93},"references\u002Falgorithm-guide.md",8727,"https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fusage\u002Fskills\u002Fgolang-samber-hot\u002Freferences\u002Falgorithm-guide.md",{"path":95,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":96,"sourceHtmlUrl":97},"references\u002Fapi-reference.md",6350,"https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fusage\u002Fskills\u002Fgolang-samber-hot\u002Freferences\u002Fapi-reference.md",{"path":99,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":100,"sourceHtmlUrl":101},"references\u002Fproduction-patterns.md",6878,"https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fusage\u002Fskills\u002Fgolang-samber-hot\u002Freferences\u002Fproduction-patterns.md",[103,129,154,173,197,209],{"skillNo":104,"name":105,"nameZh":6,"description":106,"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},"01M6PVFB1SM738R2SRSRSF7CY6","tool-evaluation-protocol","Time-bounded protocol for evaluating new tools, libraries, or methodologies before adoption. Use when evaluating a candidate dependency for the project, researching a methodology (e.g. ML\u002FLLM frameworks, testing approaches), or following up on a hype-driven recommendation.","https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fusage\u002Fskills\u002Ftool-evaluation-protocol\u002FSKILL.md",[],[110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,32,125,126,127,128],"protocol","Evaluation","tool","tool evaluation protocol","testing","ml","libraries","adoption","methodology","Tools","use","dependency","up","frameworks","time","recommendation","for","bounded","candidate",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":44},"01M6PVF7HATBEX1G7N50E2QT57","systematic-debugging","4-phase bug-fix protocol (evidence, pattern, hypothesis, verify). Use when investigating any error, failure, or unexpected behavior, handling bug reports from users or monitoring, or diagnosing test failures with non-obvious causes.","https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fusage\u002Fskills\u002Fsystematic-debugging\u002FSKILL.md",[],[136,137,138,139,110,140,141,142,143,144,120,145,146,147,148,149,150,151,152,153],"systematic debugging","debugging","systematic","test","monitoring","hypothesis","verify","behavior","fix","evidence","bug","reports","pattern","users","error","with","bug-fix","phase",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":161,"publishedAt":44},"01M6PVF3MTQN3RPF73AN34856J","skill-template","Canonical template and validation guide for ai-hats skills. Use when creating a new skill, reviewing an existing one for structural compliance, or deciding which pattern fits a new behavior.","https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fusage\u002Fskills\u002Fskill-template\u002FSKILL.md",[160],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[162,163,164,165,166,143,167,120,168,148,169,170,171,126,172],"template","skill template","validation","compliance","hats","guide","new skill","structural","canonical","which","Existing",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":180,"publishedAt":44},"01M6PVF06SCV28QARM5MQPANC9","skill-optimization","Audit and refactor library components to eliminate redundancy and staleness. Use during periodic library maintenance, after adding multiple new skills or rules, when a role's token budget is too high, or after retrospectives identify component issues.","https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fusage\u002Fskills\u002Fskill-optimization\u002FSKILL.md",[179],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[181,182,183,184,185,186,187,188,189,190,120,191,192,193,194,195,196],"Optimization","skill optimization","components","component","issues","library","audit","refactor","Budget","Rules","periodic","maintenance","token","token budget","role","high",{"skillNo":198,"name":199,"nameZh":6,"description":200,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":201,"categories":202,"keywords":203,"publishedAt":44},"01M6PVEXM9717016T9MW82HDCT","silent-fallback-gate","PreToolUse hook — refuses an Edit or Write that adds an inert broad except. Use when a Python edit was blocked for a silent fallback.","https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fusage\u002Fskills\u002Fsilent-fallback-gate\u002FSKILL.md",[],[204,205,206,207,37,36,120,208,126],"gate","fallback","silent fallback gate","python","hook",{"skillNo":210,"name":211,"nameZh":6,"description":212,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":213,"categories":214,"keywords":216,"publishedAt":44},"01M6PVESM49C5NT7SB7N3F76VS","retro-to-framework","Convert an observation about agent behavior — from a retrospective or from a single incident — into a framework-level change (hook, rule, skill, skill update). Use after a retrospective identifies problems that are not project-specific, after an incident where an agent misapplied a component it had read, when CLAUDE.md band-aids accumulate (more than 3 per-project rules that could be generic), or when the same problem recurs across multiple projects.","https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fusage\u002Fskills\u002Fretro-to-framework\u002FSKILL.md",[215],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[217,218,219,220,184,221,39,222,190,143,120,223,224,32,225,226,227,228,229,230],"framework","retro","retro to framework","change","retrospective","convert","incident","across","problem","about","more","skill update","single","generic"]