[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6JGS4KX8Q40AMPEK4TAXQ9F":3,"skill-same:01M6JGS4KX8Q40AMPEK4TAXQ9F":107},{"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":49,"linkOnly":50,"markdownContent":51,"markdownBody":52,"frontMatter":53,"refName":59,"commitSha":60,"skillDirectory":61,"forksCount":62,"repositoryHtmlUrl":63,"repositoryHomepageUrl":6,"ownerHtmlUrl":64,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":65,"install":66,"resources":79},"01M6JGS4KX8Q40AMPEK4TAXQ9F","golang-samber-lo",null,"Functional programming helpers for Golang using samber\u002Flo — 500+ type-safe generic functions for slices, maps, channels, strings, math, tuples, and concurrency (Map, Filter, Reduce, GroupBy, Chunk, Flatten, Find, Uniq, etc.). Core immutable package (lo), concurrent variants (lo\u002Fparallel aka lop), in-place mutations (lo\u002Fmutable aka lom), lazy iterators (lo\u002Fit aka loi for Go 1.23+), and experimental SIMD (lo\u002Fexp\u002Fsimd). Apply when using or adopting samber\u002Flo, when the codebase imports github.com\u002Fsamber\u002Flo, or when implementing functional-style data transformations in Go. Not for streaming pipelines (→ See golang-samber-ro skill).","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-lo\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,43,44,45,46,47,48],"golang","golang samber lo","imports","MCP","reduce","implementing","strings","functional","filter","false","map","query","maps","math","projects","Bash","streaming","chunk","code","ai coding agents","2026-11-10 10:12:30",false,"---\nname: golang-samber-lo\ndescription: >-\n  Functional programming helpers for Golang using samber\u002Flo — 500+\n  type-safe generic functions for slices, maps, channels, strings, math,\n  tuples, and concurrency (Map, Filter, Reduce, GroupBy, Chunk, Flatten,\n  Find, Uniq, etc.). Core immutable package (lo), concurrent variants\n  (lo\u002Fparallel aka lop), in-place mutations (lo\u002Fmutable aka lom), lazy\n  iterators (lo\u002Fit aka loi for Go 1.23+), and experimental SIMD\n  (lo\u002Fexp\u002Fsimd). Apply when using or adopting samber\u002Flo, when the codebase\n  imports github.com\u002Fsamber\u002Flo, or when implementing functional-style data\n  transformations in Go. Not for streaming pipelines (→ See\n  golang-samber-ro skill).\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:*) mcp__context7__resolve-library-id mcp__context7__query-docs AskUserQuestion\n---\n\n**Persona:** You are a Go engineer who prefers declarative collection transforms over manual loops. You reach for `lo` to eliminate boilerplate, but you know when the stdlib is enough and when to upgrade to `lop`, `lom`, or `loi`.\n\n# samber\u002Flo — Functional Utilities for Go\n\nLodash-inspired, generics-first utility library with 500+ type-safe helpers for slices, maps, strings, math, channels, tuples, and concurrency. Zero external dependencies. Immutable by default.\n\n**Official Resources:**\n\n- [github.com\u002Fsamber\u002Flo](https:\u002F\u002Fgithub.com\u002Fsamber\u002Flo)\n- [lo.samber.dev](https:\u002F\u002Flo.samber.dev)\n- [pkg.go.dev\u002Fgithub.com\u002Fsamber\u002Flo](https:\u002F\u002Fpkg.go.dev\u002Fgithub.com\u002Fsamber\u002Flo)\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## Why samber\u002Flo\n\nGo's stdlib `slices` and `maps` packages cover ~10 basic helpers (sort, contains, keys). Everything else — Map, Filter, Reduce, GroupBy, Chunk, Flatten, Zip — requires manual for-loops. `lo` fills this gap:\n\n- **Type-safe generics** — no `interface{}` casts, no reflection, compile-time checking, no interface boxing overhead\n- **Immutable by default** — returns new collections, safe for concurrent reads, easier to reason about\n- **Composable** — functions take and return slices\u002Fmaps, so they chain without wrapper types\n- **Zero dependencies** — only Go stdlib, no transitive dependency risk\n- **Progressive complexity** — start with `lo`, upgrade to `lop`\u002F`lom`\u002F`loi` only when profiling demands it\n- **Error variants** — most functions have `Err` suffixes (`MapErr`, `FilterErr`, `ReduceErr`) that stop on first error\n\n## Installation\n\n```bash\ngo get github.com\u002Fsamber\u002Flo\n```\n\n| Package | Import | Alias | Go version |\n| --- | --- | --- | --- |\n| Core (immutable) | `github.com\u002Fsamber\u002Flo` | `lo` | 1.18+ |\n| Parallel | `github.com\u002Fsamber\u002Flo\u002Fparallel` | `lop` | 1.18+ |\n| Mutable | `github.com\u002Fsamber\u002Flo\u002Fmutable` | `lom` | 1.18+ |\n| Iterator | `github.com\u002Fsamber\u002Flo\u002Fit` | `loi` | 1.23+ |\n| SIMD (experimental) | `github.com\u002Fsamber\u002Flo\u002Fexp\u002Fsimd` | — | 1.25+ (amd64 only) |\n\n## Choose the Right Package\n\nStart with `lo`. Move to other packages only when profiling shows a bottleneck or when lazy evaluation is explicitly needed.\n\n| Package | Use when | Trade-off |\n| --- | --- | --- |\n| `lo` | Default for all transforms | Allocates new collections (safe, predictable) |\n| `lop` | CPU-bound work on large datasets (1000+ items) | Goroutine overhead; not for I\u002FO or small slices |\n| `lom` | Hot path confirmed by `pprof -alloc_objects` | Mutates input — caller must understand side effects |\n| `loi` | Large datasets with chained transforms (Go 1.23+) | Lazy evaluation saves memory but adds iterator complexity |\n| `simd` | Numeric bulk ops after benchmarking (experimental) | Unstable API, may break between versions |\n\n**Key rules:**\n\n- `lop` is for CPU parallelism, not I\u002FO concurrency — for I\u002FO fan-out, use `errgroup` instead\n- `lom` breaks immutability — only use when allocation pressure is measured, never assumed\n- `loi` eliminates intermediate allocations in chains like `Map → Filter → Take` by evaluating lazily\n- For reactive\u002Fstreaming pipelines over infinite event streams, → see `samber\u002Fcc-skills-golang@golang-samber-ro` skill + `samber\u002Fro` package\n\nFor detailed package comparison and decision flowchart, see [Package Guide](.\u002Freferences\u002Fpackage-guide.md).\n\n## Core Patterns\n\n### Transform a slice\n\n```go\n\u002F\u002F ✓ lo — declarative, type-safe\nnames := lo.Map(users, func(u User, _ int) string {\n    return u.Name\n})\n\n\u002F\u002F ✗ Manual — boilerplate, error-prone\nnames := make([]string, 0, len(users))\nfor _, u := range users {\n    names = append(names, u.Name)\n}\n```\n\n### Filter + Reduce\n\n```go\ntotal := lo.Reduce(\n    lo.Filter(orders, func(o Order, _ int) bool {\n        return o.Status == \"paid\"\n    }),\n    func(sum float64, o Order, _ int) float64 {\n        return sum + o.Amount\n    },\n    0,\n)\n```\n\n### GroupBy\n\n```go\nbyStatus := lo.GroupBy(tasks, func(t Task, _ int) string {\n    return t.Status\n})\n\u002F\u002F map[string][]Task{\"open\": [...], \"closed\": [...]}\n```\n\n### Error variant — stop on first error\n\n```go\nresults, err := lo.MapErr(urls, func(url string, _ int) (Response, error) {\n    return http.Get(url)\n})\n```\n\n## Common Mistakes\n\n| Mistake | Why it fails | Fix |\n| --- | --- | --- |\n| Using `lo.Contains` when `slices.Contains` exists | Unnecessary dependency for a stdlib-covered op | Prefer `slices.Contains`, `slices.Sort`, `maps.Keys` since Go 1.21+ |\n| Using `lop.Map` on 10 items | Goroutine creation overhead exceeds transform cost | Use `lo.Map` — `lop` benefits start at ~1000+ items for CPU-bound work |\n| Assuming `lo.Filter` modifies the input | `lo` is immutable by default — it returns a new slice | Use `lom.Filter` if you explicitly need in-place mutation |\n| Using `lo.Must` in production code paths | `Must` panics on error — fine in tests and init, dangerous in request handlers | Use the non-Must variant and handle the error |\n| Chaining many eager transforms on large data | Each step allocates an intermediate slice | Use `loi` (lazy iterators) to avoid intermediate allocations |\n\n## Best Practices\n\n1. **Prefer stdlib when available** — `slices.Contains`, `slices.Sort`, `maps.Keys` carry no dependency. Use `lo` for transforms the stdlib doesn't offer (Map, Filter, Reduce, GroupBy, Chunk, Flatten)\n2. **Compose lo functions** — chain `lo.Filter` → `lo.Map` → `lo.GroupBy` instead of writing nested loops. Each function is a building block\n3. **Profile before optimizing** — switch from `lo` to `lom`\u002F`lop` only after `go tool pprof` confirms allocation or CPU as the bottleneck\n4. **Use error variants** — prefer `lo.MapErr` over `lo.Map` + manual error collection. Error variants stop early and propagate cleanly\n5. **Use `lo.Must` only in tests and init** — in production, handle errors explicitly\n\n## Quick Reference\n\n| Function | What it does |\n| --- | --- |\n| `lo.Map` | Transform each element |\n| `lo.Filter` \u002F `lo.Reject` | Keep \u002F remove elements matching predicate |\n| `lo.Reduce` | Fold elements into a single value |\n| `lo.ForEach` | Side-effect iteration |\n| `lo.GroupBy` | Group elements by key |\n| `lo.Chunk` | Split into fixed-size batches |\n| `lo.Flatten` | Flatten nested slices one level |\n| `lo.Uniq` \u002F `lo.UniqBy` | Remove duplicates |\n| `lo.Find` \u002F `lo.FindOrElse` | First match or default |\n| `lo.Contains` \u002F `lo.Every` \u002F `lo.Some` | Membership tests |\n| `lo.Keys` \u002F `lo.Values` | Extract map keys or values |\n| `lo.PickBy` \u002F `lo.OmitBy` | Filter map entries |\n| `lo.Zip2` \u002F `lo.Unzip2` | Pair\u002Funpair two slices |\n| `lo.Range` \u002F `lo.RangeFrom` | Generate number sequences |\n| `lo.Ternary` \u002F `lo.If` | Inline conditionals |\n| `lo.ToPtr` \u002F `lo.FromPtr` | Pointer helpers |\n| `lo.Must` \u002F `lo.Try` | Panic-on-error \u002F recover-as-bool |\n| `lo.Async` \u002F `lo.Attempt` | Async execution \u002F retry with backoff |\n| `lo.Debounce` \u002F `lo.Throttle` | Rate limiting |\n| `lo.ChannelDispatcher` | Fan-out to multiple channels |\n\nFor the complete function catalog (300+ functions), see [API Reference](.\u002Freferences\u002Fapi-reference.md).\n\nFor composition patterns, stdlib interop, and iterator pipelines, see [Advanced Patterns](.\u002Freferences\u002Fadvanced-patterns.md).\n\nIf you encounter a bug or unexpected behavior in samber\u002Flo, open an issue at [github.com\u002Fsamber\u002Flo\u002Fissues](https:\u002F\u002Fgithub.com\u002Fsamber\u002Flo\u002Fissues).\n\n## Cross-References\n\n- → See `samber\u002Fcc-skills-golang@golang-samber-ro` skill for reactive\u002Fstreaming pipelines over infinite event streams (`samber\u002Fro` package)\n- → See `samber\u002Fcc-skills-golang@golang-samber-mo` skill for monadic types (Option, Result, Either) that compose with lo transforms\n- → See `samber\u002Fcc-skills-golang@golang-data-structures` skill for choosing the right underlying data structure\n- → See `samber\u002Fcc-skills-golang@golang-performance` skill for profiling methodology before switching to `lom`\u002F`lop`\n","**Persona:** You are a Go engineer who prefers declarative collection transforms over manual loops. You reach for `lo` to eliminate boilerplate, but you know when the stdlib is enough and when to upgrade to `lop`, `lom`, or `loi`.\n\n# samber\u002Flo — Functional Utilities for Go\n\nLodash-inspired, generics-first utility library with 500+ type-safe helpers for slices, maps, strings, math, channels, tuples, and concurrency. Zero external dependencies. Immutable by default.\n\n**Official Resources:**\n\n- [github.com\u002Fsamber\u002Flo](https:\u002F\u002Fgithub.com\u002Fsamber\u002Flo)\n- [lo.samber.dev](https:\u002F\u002Flo.samber.dev)\n- [pkg.go.dev\u002Fgithub.com\u002Fsamber\u002Flo](https:\u002F\u002Fpkg.go.dev\u002Fgithub.com\u002Fsamber\u002Flo)\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## Why samber\u002Flo\n\nGo's stdlib `slices` and `maps` packages cover ~10 basic helpers (sort, contains, keys). Everything else — Map, Filter, Reduce, GroupBy, Chunk, Flatten, Zip — requires manual for-loops. `lo` fills this gap:\n\n- **Type-safe generics** — no `interface{}` casts, no reflection, compile-time checking, no interface boxing overhead\n- **Immutable by default** — returns new collections, safe for concurrent reads, easier to reason about\n- **Composable** — functions take and return slices\u002Fmaps, so they chain without wrapper types\n- **Zero dependencies** — only Go stdlib, no transitive dependency risk\n- **Progressive complexity** — start with `lo`, upgrade to `lop`\u002F`lom`\u002F`loi` only when profiling demands it\n- **Error variants** — most functions have `Err` suffixes (`MapErr`, `FilterErr`, `ReduceErr`) that stop on first error\n\n## Installation\n\n```bash\ngo get github.com\u002Fsamber\u002Flo\n```\n\n| Package | Import | Alias | Go version |\n| --- | --- | --- | --- |\n| Core (immutable) | `github.com\u002Fsamber\u002Flo` | `lo` | 1.18+ |\n| Parallel | `github.com\u002Fsamber\u002Flo\u002Fparallel` | `lop` | 1.18+ |\n| Mutable | `github.com\u002Fsamber\u002Flo\u002Fmutable` | `lom` | 1.18+ |\n| Iterator | `github.com\u002Fsamber\u002Flo\u002Fit` | `loi` | 1.23+ |\n| SIMD (experimental) | `github.com\u002Fsamber\u002Flo\u002Fexp\u002Fsimd` | — | 1.25+ (amd64 only) |\n\n## Choose the Right Package\n\nStart with `lo`. Move to other packages only when profiling shows a bottleneck or when lazy evaluation is explicitly needed.\n\n| Package | Use when | Trade-off |\n| --- | --- | --- |\n| `lo` | Default for all transforms | Allocates new collections (safe, predictable) |\n| `lop` | CPU-bound work on large datasets (1000+ items) | Goroutine overhead; not for I\u002FO or small slices |\n| `lom` | Hot path confirmed by `pprof -alloc_objects` | Mutates input — caller must understand side effects |\n| `loi` | Large datasets with chained transforms (Go 1.23+) | Lazy evaluation saves memory but adds iterator complexity |\n| `simd` | Numeric bulk ops after benchmarking (experimental) | Unstable API, may break between versions |\n\n**Key rules:**\n\n- `lop` is for CPU parallelism, not I\u002FO concurrency — for I\u002FO fan-out, use `errgroup` instead\n- `lom` breaks immutability — only use when allocation pressure is measured, never assumed\n- `loi` eliminates intermediate allocations in chains like `Map → Filter → Take` by evaluating lazily\n- For reactive\u002Fstreaming pipelines over infinite event streams, → see `samber\u002Fcc-skills-golang@golang-samber-ro` skill + `samber\u002Fro` package\n\nFor detailed package comparison and decision flowchart, see [Package Guide](.\u002Freferences\u002Fpackage-guide.md).\n\n## Core Patterns\n\n### Transform a slice\n\n```go\n\u002F\u002F ✓ lo — declarative, type-safe\nnames := lo.Map(users, func(u User, _ int) string {\n    return u.Name\n})\n\n\u002F\u002F ✗ Manual — boilerplate, error-prone\nnames := make([]string, 0, len(users))\nfor _, u := range users {\n    names = append(names, u.Name)\n}\n```\n\n### Filter + Reduce\n\n```go\ntotal := lo.Reduce(\n    lo.Filter(orders, func(o Order, _ int) bool {\n        return o.Status == \"paid\"\n    }),\n    func(sum float64, o Order, _ int) float64 {\n        return sum + o.Amount\n    },\n    0,\n)\n```\n\n### GroupBy\n\n```go\nbyStatus := lo.GroupBy(tasks, func(t Task, _ int) string {\n    return t.Status\n})\n\u002F\u002F map[string][]Task{\"open\": [...], \"closed\": [...]}\n```\n\n### Error variant — stop on first error\n\n```go\nresults, err := lo.MapErr(urls, func(url string, _ int) (Response, error) {\n    return http.Get(url)\n})\n```\n\n## Common Mistakes\n\n| Mistake | Why it fails | Fix |\n| --- | --- | --- |\n| Using `lo.Contains` when `slices.Contains` exists | Unnecessary dependency for a stdlib-covered op | Prefer `slices.Contains`, `slices.Sort`, `maps.Keys` since Go 1.21+ |\n| Using `lop.Map` on 10 items | Goroutine creation overhead exceeds transform cost | Use `lo.Map` — `lop` benefits start at ~1000+ items for CPU-bound work |\n| Assuming `lo.Filter` modifies the input | `lo` is immutable by default — it returns a new slice | Use `lom.Filter` if you explicitly need in-place mutation |\n| Using `lo.Must` in production code paths | `Must` panics on error — fine in tests and init, dangerous in request handlers | Use the non-Must variant and handle the error |\n| Chaining many eager transforms on large data | Each step allocates an intermediate slice | Use `loi` (lazy iterators) to avoid intermediate allocations |\n\n## Best Practices\n\n1. **Prefer stdlib when available** — `slices.Contains`, `slices.Sort`, `maps.Keys` carry no dependency. Use `lo` for transforms the stdlib doesn't offer (Map, Filter, Reduce, GroupBy, Chunk, Flatten)\n2. **Compose lo functions** — chain `lo.Filter` → `lo.Map` → `lo.GroupBy` instead of writing nested loops. Each function is a building block\n3. **Profile before optimizing** — switch from `lo` to `lom`\u002F`lop` only after `go tool pprof` confirms allocation or CPU as the bottleneck\n4. **Use error variants** — prefer `lo.MapErr` over `lo.Map` + manual error collection. Error variants stop early and propagate cleanly\n5. **Use `lo.Must` only in tests and init** — in production, handle errors explicitly\n\n## Quick Reference\n\n| Function | What it does |\n| --- | --- |\n| `lo.Map` | Transform each element |\n| `lo.Filter` \u002F `lo.Reject` | Keep \u002F remove elements matching predicate |\n| `lo.Reduce` | Fold elements into a single value |\n| `lo.ForEach` | Side-effect iteration |\n| `lo.GroupBy` | Group elements by key |\n| `lo.Chunk` | Split into fixed-size batches |\n| `lo.Flatten` | Flatten nested slices one level |\n| `lo.Uniq` \u002F `lo.UniqBy` | Remove duplicates |\n| `lo.Find` \u002F `lo.FindOrElse` | First match or default |\n| `lo.Contains` \u002F `lo.Every` \u002F `lo.Some` | Membership tests |\n| `lo.Keys` \u002F `lo.Values` | Extract map keys or values |\n| `lo.PickBy` \u002F `lo.OmitBy` | Filter map entries |\n| `lo.Zip2` \u002F `lo.Unzip2` | Pair\u002Funpair two slices |\n| `lo.Range` \u002F `lo.RangeFrom` | Generate number sequences |\n| `lo.Ternary` \u002F `lo.If` | Inline conditionals |\n| `lo.ToPtr` \u002F `lo.FromPtr` | Pointer helpers |\n| `lo.Must` \u002F `lo.Try` | Panic-on-error \u002F recover-as-bool |\n| `lo.Async` \u002F `lo.Attempt` | Async execution \u002F retry with backoff |\n| `lo.Debounce` \u002F `lo.Throttle` | Rate limiting |\n| `lo.ChannelDispatcher` | Fan-out to multiple channels |\n\nFor the complete function catalog (300+ functions), see [API Reference](.\u002Freferences\u002Fapi-reference.md).\n\nFor composition patterns, stdlib interop, and iterator pipelines, see [Advanced Patterns](.\u002Freferences\u002Fadvanced-patterns.md).\n\nIf you encounter a bug or unexpected behavior in samber\u002Flo, open an issue at [github.com\u002Fsamber\u002Flo\u002Fissues](https:\u002F\u002Fgithub.com\u002Fsamber\u002Flo\u002Fissues).\n\n## Cross-References\n\n- → See `samber\u002Fcc-skills-golang@golang-samber-ro` skill for reactive\u002Fstreaming pipelines over infinite event streams (`samber\u002Fro` package)\n- → See `samber\u002Fcc-skills-golang@golang-samber-mo` skill for monadic types (Option, Result, Either) that compose with lo transforms\n- → See `samber\u002Fcc-skills-golang@golang-data-structures` skill for choosing the right underlying data structure\n- → See `samber\u002Fcc-skills-golang@golang-performance` skill for profiling methodology before switching to `lom`\u002F`lop`\n",{"name":5,"license":15,"metadata":54,"description":7,"allowed-tools":57,"compatibility":58,"user-invocable":50},{"author":55,"version":56},"samber","1.0.3","Read Edit Write Glob Grep Bash(go:*) Bash(golangci-lint:*) Bash(git:*) 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-lo",1,"https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats","https:\u002F\u002Fgithub.com\u002Fmuratovv","2026-11-05 20:59:10",{"source":8,"skillName":5,"commands":67,"prompt":77,"zipAvailable":78},[68,71,74],{"tool":69,"command":70},"npx","npx skills add muratovv\u002Fai-hats --skill golang-samber-lo",{"tool":72,"command":73},"bunx","bunx skills add muratovv\u002Fai-hats --skill golang-samber-lo",{"tool":75,"command":76},"pnpm","pnpm dlx skills add muratovv\u002Fai-hats --skill golang-samber-lo","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fusage\u002Fskills\u002Fgolang-samber-lo\u002FSKILL.md",true,[80,86,91,95,99,103],{"path":81,"resourceType":82,"resourceTypeDesc":83,"sizeBytes":84,"sourceHtmlUrl":85},"evals\u002Fevals.json","REFERENCE","参考文档",17701,"https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fusage\u002Fskills\u002Fgolang-samber-lo\u002Fevals\u002Fevals.json",{"path":87,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":89,"sourceHtmlUrl":90},"LICENSE","许可证",1070,"https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fusage\u002Fskills\u002Fgolang-samber-lo\u002FLICENSE",{"path":92,"resourceType":82,"resourceTypeDesc":83,"sizeBytes":93,"sourceHtmlUrl":94},"metadata.yaml",646,"https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fusage\u002Fskills\u002Fgolang-samber-lo\u002Fmetadata.yaml",{"path":96,"resourceType":82,"resourceTypeDesc":83,"sizeBytes":97,"sourceHtmlUrl":98},"references\u002Fadvanced-patterns.md",4491,"https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fusage\u002Fskills\u002Fgolang-samber-lo\u002Freferences\u002Fadvanced-patterns.md",{"path":100,"resourceType":82,"resourceTypeDesc":83,"sizeBytes":101,"sourceHtmlUrl":102},"references\u002Fapi-reference.md",18070,"https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fusage\u002Fskills\u002Fgolang-samber-lo\u002Freferences\u002Fapi-reference.md",{"path":104,"resourceType":82,"resourceTypeDesc":83,"sizeBytes":105,"sourceHtmlUrl":106},"references\u002Fpackage-guide.md",6293,"https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fusage\u002Fskills\u002Fgolang-samber-lo\u002Freferences\u002Fpackage-guide.md",[108,135,160,179,203,217],{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":114,"publishedAt":49},"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",[],[115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134],"protocol","Evaluation","tool","tool evaluation protocol","testing","ml","libraries","adoption","methodology","Tools","use","dependency","up","frameworks","time","project","recommendation","for","bounded","candidate",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":141,"publishedAt":49},"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",[],[142,143,144,145,115,146,147,148,149,150,125,151,152,153,154,155,156,157,158,159],"systematic debugging","debugging","systematic","test","monitoring","hypothesis","verify","behavior","fix","evidence","bug","reports","pattern","users","error","with","bug-fix","phase",{"skillNo":161,"name":162,"nameZh":6,"description":163,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":164,"categories":165,"keywords":167,"publishedAt":49},"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",[166],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[168,169,170,171,172,149,173,125,174,154,175,176,177,132,178],"template","skill template","validation","compliance","hats","guide","new skill","structural","canonical","which","Existing",{"skillNo":180,"name":181,"nameZh":6,"description":182,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":183,"categories":184,"keywords":186,"publishedAt":49},"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",[185],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[187,188,189,190,191,192,193,194,195,196,125,197,198,199,200,201,202],"Optimization","skill optimization","components","component","issues","library","audit","refactor","Budget","Rules","periodic","maintenance","token","token budget","role","high",{"skillNo":204,"name":205,"nameZh":6,"description":206,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":207,"categories":208,"keywords":209,"publishedAt":49},"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",[],[210,211,212,213,214,215,125,216,132],"gate","fallback","silent fallback gate","python","write","edit","hook",{"skillNo":218,"name":219,"nameZh":6,"description":220,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":221,"categories":222,"keywords":224,"publishedAt":49},"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",[223],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[225,226,227,228,190,229,43,230,196,149,125,231,232,130,233,234,235,236,237,238],"framework","retro","retro to framework","change","retrospective","convert","incident","across","problem","about","more","skill update","single","generic"]