[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6PVDHCZ2MRZ4S1N610PNP4K":3,"skill-same:01M6PVDHCZ2MRZ4S1N610PNP4K":89},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":46,"repositoryHtmlUrl":50,"repositoryHomepageUrl":6,"ownerHtmlUrl":51,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":52,"install":53,"resources":66},"01M6PVDHCZ2MRZ4S1N610PNP4K","tool-call-hygiene",null,"Choose between Bash and dedicated Claude Code tools (Grep\u002FGlob\u002FRead\u002FEdit) and edit files efficiently. Triggers on intent to grep\u002Ffind\u002Fcat\u002Fsed\u002Frg, multiple sequential reads, session-start context restore, codebase discovery, or multiple sequential Edits to one file.","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\u002Fexperimental\u002Fcore\u002Fskills\u002Ftool-call-hygiene\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"tool call hygiene","hygiene","tool","call","files","rg","cat","triggers","intent","codebase discovery","restore","code","session","code tools","find","choose","context restore","Bash","discovery","file","2026-11-10 10:12:30",false,"---\nname: tool-call-hygiene\ndescription: >-\n  Choose between Bash and dedicated Claude Code tools\n  (Grep\u002FGlob\u002FRead\u002FEdit) and edit files efficiently. Triggers on intent to\n  grep\u002Ffind\u002Fcat\u002Fsed\u002Frg, multiple sequential reads, session-start context\n  restore, codebase discovery, or multiple sequential Edits to one file.\nai_hats:\n  schema_version: 1\n  type: skill\nlicense: MIT\n---\n\n# Tool-Call Hygiene\n\nDecide between Bash and dedicated Claude Code tools. Batch and parallelize.\n\n## When to Use\n\n- About to call Bash for anything a dedicated tool expresses — `grep`\u002F`rg`\u002F`find`\u002F`ls -R`\u002F`cat`\u002F`head`\u002F`tail`\u002F`sed`\u002F`awk` and equally `bat`\u002F`fd`\u002F`eza`\u002F`git grep`\n- Restoring context at session start (multiple Reads\u002FGreps\u002FGlobs)\n- Initial codebase exploration (>3 tool calls planned)\n- Noticing 5+ similar sequential calls\n- About to make 3+ Edits to the same existing file (consider one Write)\n\n## Conventions\n\n### Forbidden Bash anti-patterns\n\nThe test is **whether a dedicated tool expresses the operation**, not whether\nthe binary appears below. A newer or fancier spelling of a listed row (`bat`\nfor `cat`, `fd` for `find`, `eza -R` for `ls -R`, `git grep` for `grep`,\n`sed -n '10,40p'` for `head`) is the same violation.\n\n| ❌ Bash                            | ✅ Use instead                 | Why                                                   |\n| ---------------------------------- | ------------------------------ | ----------------------------------------------------- |\n| `grep -rn PATTERN path\u002F`           | **Grep** tool                  | Native, faster, no shell parse                        |\n| `rg PATTERN path\u002F`                 | **Grep** tool                  | Same — Grep wraps ripgrep                             |\n| `find . -name \"*.py\"`              | **Glob** tool                  | Glob handles patterns natively                        |\n| `ls -R dir\u002F`                       | **Glob** tool                  | Recursive listing without shell                       |\n| `cat path\u002Ffile.md` (known path)    | **Read** tool                  | Numbered output, no truncation surprises              |\n| `head -50 file` \u002F `tail -100 file` | **Read** with `offset`\u002F`limit` | Same data, paginated cleanly                          |\n| `sed -i 's\u002FA\u002FB\u002F' file`             | **Edit** tool                  | Edit checks uniqueness; prevents silent multi-replace |\n| `awk -i ...` \u002F inline rewrite      | **Edit** \u002F **Write**           | See above                                             |\n\n### When the right column is not on offer\n\nThe right column assumes the tool exists in this session. Not every session\ncarries every tool, and a tool you do not have is not a tool you are refusing\nto use — there the left column is the correct call.\n\n**Establish absence, never assume it.** It counts as absent when it is missing\nfrom your available tool set, or when calling it comes back *no such tool\navailable*. It does NOT count as absent because a search returned nothing, the\npattern got awkward, or the shell felt faster — those are reasons to fix the\nquery, not to abandon the tool.\n\n**A fallback tightens the budget.** Raw output arrives unstructured and costs\nthe context a dedicated tool would have saved, so batch what you would have\nissued singly, scope each command tighter than the tool call it replaces, and\ntreat a run of one-off shell searches as the smell **Batching and parallelism**\nbelow already names.\n\n**Bash is appropriate for:** `git`, `pytest`, build commands, multi-stage pipes that have no dedicated alternative, anything reading shell-only state (env vars, processes, exit codes).\n\n### Batching and parallelism\n\n- **Session-entry**: independent context reads → a single parallel tool block, never one-by-one.\n- **Parallel by default**: any independent calls → single batch.\n- **Combine shell checks**: merge with `&&` (e.g. `git status && git log --oneline -5`).\n- **5-call threshold**: 5+ similar sequential calls → STOP, batch or use a more targeted tool.\n- **Discovery budget**: initial codebase exploration ≤ 3–5 tool calls; broader → `Agent(Explore)`.\n\n### Edit efficiency\n\n- **New file → Write**, not a sequence of Edits — building a fresh file with incremental Edits wastes turns.\n- **3+ Edits to the same existing file → STOP**; plan all changes and **Write** it once.\n- **Edit is surgical**: targeted, isolated changes to existing files. Read → plan all edits → execute in the fewest operations.\n\nFor ❌\u002F✅ worked examples → `references\u002Fexamples.md`.\n\n## Anti-Patterns\n\n- Reaching for `rg`\u002F`grep` from Bash when Grep tool fits.\n- Sequential Reads when reads are independent — always parallel.\n- Drilling into a codebase via shell `ls`\u002F`find` instead of one `Agent(Explore)` call.\n","# Tool-Call Hygiene\n\nDecide between Bash and dedicated Claude Code tools. Batch and parallelize.\n\n## When to Use\n\n- About to call Bash for anything a dedicated tool expresses — `grep`\u002F`rg`\u002F`find`\u002F`ls -R`\u002F`cat`\u002F`head`\u002F`tail`\u002F`sed`\u002F`awk` and equally `bat`\u002F`fd`\u002F`eza`\u002F`git grep`\n- Restoring context at session start (multiple Reads\u002FGreps\u002FGlobs)\n- Initial codebase exploration (>3 tool calls planned)\n- Noticing 5+ similar sequential calls\n- About to make 3+ Edits to the same existing file (consider one Write)\n\n## Conventions\n\n### Forbidden Bash anti-patterns\n\nThe test is **whether a dedicated tool expresses the operation**, not whether\nthe binary appears below. A newer or fancier spelling of a listed row (`bat`\nfor `cat`, `fd` for `find`, `eza -R` for `ls -R`, `git grep` for `grep`,\n`sed -n '10,40p'` for `head`) is the same violation.\n\n| ❌ Bash                            | ✅ Use instead                 | Why                                                   |\n| ---------------------------------- | ------------------------------ | ----------------------------------------------------- |\n| `grep -rn PATTERN path\u002F`           | **Grep** tool                  | Native, faster, no shell parse                        |\n| `rg PATTERN path\u002F`                 | **Grep** tool                  | Same — Grep wraps ripgrep                             |\n| `find . -name \"*.py\"`              | **Glob** tool                  | Glob handles patterns natively                        |\n| `ls -R dir\u002F`                       | **Glob** tool                  | Recursive listing without shell                       |\n| `cat path\u002Ffile.md` (known path)    | **Read** tool                  | Numbered output, no truncation surprises              |\n| `head -50 file` \u002F `tail -100 file` | **Read** with `offset`\u002F`limit` | Same data, paginated cleanly                          |\n| `sed -i 's\u002FA\u002FB\u002F' file`             | **Edit** tool                  | Edit checks uniqueness; prevents silent multi-replace |\n| `awk -i ...` \u002F inline rewrite      | **Edit** \u002F **Write**           | See above                                             |\n\n### When the right column is not on offer\n\nThe right column assumes the tool exists in this session. Not every session\ncarries every tool, and a tool you do not have is not a tool you are refusing\nto use — there the left column is the correct call.\n\n**Establish absence, never assume it.** It counts as absent when it is missing\nfrom your available tool set, or when calling it comes back *no such tool\navailable*. It does NOT count as absent because a search returned nothing, the\npattern got awkward, or the shell felt faster — those are reasons to fix the\nquery, not to abandon the tool.\n\n**A fallback tightens the budget.** Raw output arrives unstructured and costs\nthe context a dedicated tool would have saved, so batch what you would have\nissued singly, scope each command tighter than the tool call it replaces, and\ntreat a run of one-off shell searches as the smell **Batching and parallelism**\nbelow already names.\n\n**Bash is appropriate for:** `git`, `pytest`, build commands, multi-stage pipes that have no dedicated alternative, anything reading shell-only state (env vars, processes, exit codes).\n\n### Batching and parallelism\n\n- **Session-entry**: independent context reads → a single parallel tool block, never one-by-one.\n- **Parallel by default**: any independent calls → single batch.\n- **Combine shell checks**: merge with `&&` (e.g. `git status && git log --oneline -5`).\n- **5-call threshold**: 5+ similar sequential calls → STOP, batch or use a more targeted tool.\n- **Discovery budget**: initial codebase exploration ≤ 3–5 tool calls; broader → `Agent(Explore)`.\n\n### Edit efficiency\n\n- **New file → Write**, not a sequence of Edits — building a fresh file with incremental Edits wastes turns.\n- **3+ Edits to the same existing file → STOP**; plan all changes and **Write** it once.\n- **Edit is surgical**: targeted, isolated changes to existing files. Read → plan all edits → execute in the fewest operations.\n\nFor ❌\u002F✅ worked examples → `references\u002Fexamples.md`.\n\n## Anti-Patterns\n\n- Reaching for `rg`\u002F`grep` from Bash when Grep tool fits.\n- Sequential Reads when reads are independent — always parallel.\n- Drilling into a codebase via shell `ls`\u002F`find` instead of one `Agent(Explore)` call.\n",{"name":5,"ai_hats":44,"license":15,"description":7},{"type":45,"schema_version":46},"skill",1,"master","f922a7f627276366873d546942d9ad899a86f71a","packages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fcore\u002Fskills\u002Ftool-call-hygiene","https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats","https:\u002F\u002Fgithub.com\u002Fmuratovv","2026-11-05 20:59:10",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add muratovv\u002Fai-hats --skill tool-call-hygiene",{"tool":59,"command":60},"bunx","bunx skills add muratovv\u002Fai-hats --skill tool-call-hygiene",{"tool":62,"command":63},"pnpm","pnpm dlx skills add muratovv\u002Fai-hats --skill tool-call-hygiene","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fcore\u002Fskills\u002Ftool-call-hygiene\u002FSKILL.md",true,[67,73,76,81,85],{"path":68,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"hooks\u002Fbypass_journal.py","SCRIPT","脚本",35,"https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fcore\u002Fskills\u002Ftool-call-hygiene\u002Fhooks\u002Fbypass_journal.py",{"path":74,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":75},"hooks\u002Fbypass_journal.sh","https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fcore\u002Fskills\u002Ftool-call-hygiene\u002Fhooks\u002Fbypass_journal.sh",{"path":77,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":71,"sourceHtmlUrl":80},"hooks\u002Ftest_runners.json","REFERENCE","参考文档","https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fcore\u002Fskills\u002Ftool-call-hygiene\u002Fhooks\u002Ftest_runners.json",{"path":82,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":83,"sourceHtmlUrl":84},"hooks\u002Ftool_call_hygiene_guard.sh",16125,"https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fcore\u002Fskills\u002Ftool-call-hygiene\u002Fhooks\u002Ftool_call_hygiene_guard.sh",{"path":86,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":87,"sourceHtmlUrl":88},"references\u002Fexamples.md",801,"https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fexperimental\u002Fcore\u002Fskills\u002Ftool-call-hygiene\u002Freferences\u002Fexamples.md",[90,116,141,164,188,202],{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":39},"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",[],[97,98,21,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115],"protocol","Evaluation","tool evaluation protocol","testing","ml","libraries","adoption","methodology","Tools","use","dependency","up","frameworks","time","project","recommendation","for","bounded","candidate",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":122,"publishedAt":39},"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",[],[123,124,125,126,97,127,128,129,130,131,106,132,133,134,135,136,137,138,139,140],"systematic debugging","debugging","systematic","test","monitoring","hypothesis","verify","behavior","fix","evidence","bug","reports","pattern","users","error","with","bug-fix","phase",{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":152,"publishedAt":39},"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",[147],{"categoryNo":148,"categoryName":149,"taxonomyType":150,"taxonomyTypeDesc":151},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[153,154,155,156,157,130,158,106,159,135,160,161,162,113,163],"template","skill template","validation","compliance","hats","guide","new skill","structural","canonical","which","Existing",{"skillNo":165,"name":166,"nameZh":6,"description":167,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":168,"categories":169,"keywords":171,"publishedAt":39},"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",[170],{"categoryNo":148,"categoryName":149,"taxonomyType":150,"taxonomyTypeDesc":151},[172,173,174,175,176,177,178,179,180,181,106,182,183,184,185,186,187],"Optimization","skill optimization","components","component","issues","library","audit","refactor","Budget","Rules","periodic","maintenance","token","token budget","role","high",{"skillNo":189,"name":190,"nameZh":6,"description":191,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":192,"categories":193,"keywords":194,"publishedAt":39},"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",[],[195,196,197,198,199,200,106,201,113],"gate","fallback","silent fallback gate","python","write","edit","hook",{"skillNo":203,"name":204,"nameZh":6,"description":205,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":206,"categories":207,"keywords":209,"publishedAt":39},"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",[208],{"categoryNo":148,"categoryName":149,"taxonomyType":150,"taxonomyTypeDesc":151},[210,211,212,213,175,214,215,216,181,130,106,217,218,111,219,220,221,222,223,224],"framework","retro","retro to framework","change","retrospective","projects","convert","incident","across","problem","about","more","skill update","single","generic"]