[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6JGDWMMBDPRWSHNE709CMAC":3,"skill-same:01M6JGDWMMBDPRWSHNE709CMAC":77},{"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":26,"publishedAt":42,"linkOnly":43,"markdownContent":44,"markdownBody":45,"frontMatter":46,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":54,"repositoryHtmlUrl":55,"repositoryHomepageUrl":6,"ownerHtmlUrl":56,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":57,"install":58,"resources":71},"01M6JGDWMMBDPRWSHNE709CMAC","skill-lint-gate",null,"Pre-commit gate over staged library `SKILL.md`. Use when composing a role that carries the `ai-hats-dev` trait, or when diagnosing why the skill-lint hook blocked a commit.","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\u002Fai-hats-dev\u002Fskills\u002Fskill-lint-gate\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"lint","gate","skill lint gate","commit","git","dev","library","pre-commit","why","hats","use","hooks","hook","role","staged","2026-11-10 10:12:30",false,"---\nname: skill-lint-gate\ndescription: >-\n  Pre-commit gate over staged library `SKILL.md`. Use when composing a\n  role that carries the `ai-hats-dev` trait, or when diagnosing why the\n  skill-lint hook blocked a commit.\nai_hats:\n  # hook-carrier skill. The assembler installs the script below\n  # into `.githooks\u002Fpre-commit.d\u002F` at composition time. Over STAGED\n  # `{ai_hats_library,library}\u002F**\u002FSKILL.md` it runs two checks: (1) license\u002Fprovenance\n  # regression-guard (always-on, pure bash, covers golang-*); (2) agnix\n  # spec-lint against the repo-root `.agnix.toml` (excludes golang-*, fail-open\n  # if agnix\u002Fnode absent). Per-commit override AI_HATS_SKILL_LINT_ACK=1.\n  git_hooks:\n    pre-commit:\n      - git_hooks\u002Fpre-commit-skill-lint.sh\nlicense: MIT\n---\n\n# Skill Lint Gate\n\nPure-infrastructure hook-carrier skill. It contributes one git pre-commit hook\nthat runs two checks over the SKILL.md files a commit touches and blocks on\neither. There is no agent-side decision logic here — the value is delivered\nentirely through composition.\n\n## What it gates\n\nOver STAGED `{ai_hats_library,library}\u002F**\u002FSKILL.md` (changed-files scope, so the gate never\nretro-blocks the pre-existing backlog), the hook runs, in order. A consumer's\n`libraries\u002F` is out of scope: this skill ships in the `ai-hats-dev` layer, which\nis addressed to the ai-hats repository, not to a consuming project.\n\n1. **License\u002Fprovenance regression-guard** (pure bash, always-on, NOT\n   fail-open). Blocks when a skill has no non-empty `license:` frontmatter, or is\n   declared-derived (sibling `metadata.yaml` has an `upstream:` block) but is\n   missing its co-located `LICENSE` file. Its scope deliberately **includes** the\n   `golang-*` pack — that pack is exactly the third-party derived content this\n   guard protects. It exists to keep the licensing backfill from\n   silently regressing.\n2. **agnix spec-lint** ([agnix](https:\u002F\u002Fgithub.com\u002Favifenesh\u002Fagnix)\n   against the repo-root `.agnix.toml`; target `claude-code`; rules `XML-001` \u002F\n   `XP-SK-001` \u002F `VER-001` disabled as convention false positives). **Excludes**\n   the `golang-*` pack (drift handled separately). Fail-open if\n   agnix\u002Fnode is absent. agnix non-zero exit blocks the commit.\n\n## Who gets it\n\nWhatever composes this skill, and nothing else: the hook is written into\n`.githooks\u002Fpre-commit.d\u002F` at composition time, so a role that does not carry\nit never sees the gate. The server-side counterpart is the CI `lint-skills` job.\n\n## How to bypass\n\nFix the flagged issue, or — after confirming the skill is intentionally\nnon-conforming — ask the supervisor to skip the gate for a single commit:\n`AI_HATS_SKILL_LINT_ACK=1`, exported in the shell that runs the commit. Writing\nit onto your own command line is refused — see **safety-guard**.\n\nIf `agnix` \u002F `node` is not installed, only the **agnix** check is a loud no-op\n(fail-open): it prints a SKIPPED notice and allows the commit, so a missing\noptional dev tool never wedges work. The license\u002Fprovenance guard is pure bash\nand always runs. Inside an ai-hats agent node is present, so both checks are live.\n\n## Overrides\n\n- `AI_HATS_SKILL_LINT_ACK=1` — allow the current commit despite findings.\n- `AI_HATS_SKILL_LINT_CMD` — override the agnix invocation (default\n  `npx --yes agnix@0.29.0`); used by the test suite to inject a stub.\n","# Skill Lint Gate\n\nPure-infrastructure hook-carrier skill. It contributes one git pre-commit hook\nthat runs two checks over the SKILL.md files a commit touches and blocks on\neither. There is no agent-side decision logic here — the value is delivered\nentirely through composition.\n\n## What it gates\n\nOver STAGED `{ai_hats_library,library}\u002F**\u002FSKILL.md` (changed-files scope, so the gate never\nretro-blocks the pre-existing backlog), the hook runs, in order. A consumer's\n`libraries\u002F` is out of scope: this skill ships in the `ai-hats-dev` layer, which\nis addressed to the ai-hats repository, not to a consuming project.\n\n1. **License\u002Fprovenance regression-guard** (pure bash, always-on, NOT\n   fail-open). Blocks when a skill has no non-empty `license:` frontmatter, or is\n   declared-derived (sibling `metadata.yaml` has an `upstream:` block) but is\n   missing its co-located `LICENSE` file. Its scope deliberately **includes** the\n   `golang-*` pack — that pack is exactly the third-party derived content this\n   guard protects. It exists to keep the licensing backfill from\n   silently regressing.\n2. **agnix spec-lint** ([agnix](https:\u002F\u002Fgithub.com\u002Favifenesh\u002Fagnix)\n   against the repo-root `.agnix.toml`; target `claude-code`; rules `XML-001` \u002F\n   `XP-SK-001` \u002F `VER-001` disabled as convention false positives). **Excludes**\n   the `golang-*` pack (drift handled separately). Fail-open if\n   agnix\u002Fnode is absent. agnix non-zero exit blocks the commit.\n\n## Who gets it\n\nWhatever composes this skill, and nothing else: the hook is written into\n`.githooks\u002Fpre-commit.d\u002F` at composition time, so a role that does not carry\nit never sees the gate. The server-side counterpart is the CI `lint-skills` job.\n\n## How to bypass\n\nFix the flagged issue, or — after confirming the skill is intentionally\nnon-conforming — ask the supervisor to skip the gate for a single commit:\n`AI_HATS_SKILL_LINT_ACK=1`, exported in the shell that runs the commit. Writing\nit onto your own command line is refused — see **safety-guard**.\n\nIf `agnix` \u002F `node` is not installed, only the **agnix** check is a loud no-op\n(fail-open): it prints a SKIPPED notice and allows the commit, so a missing\noptional dev tool never wedges work. The license\u002Fprovenance guard is pure bash\nand always runs. Inside an ai-hats agent node is present, so both checks are live.\n\n## Overrides\n\n- `AI_HATS_SKILL_LINT_ACK=1` — allow the current commit despite findings.\n- `AI_HATS_SKILL_LINT_CMD` — override the agnix invocation (default\n  `npx --yes agnix@0.29.0`); used by the test suite to inject a stub.\n",{"name":5,"ai_hats":47,"license":15,"description":7},{"git_hooks":48},{"pre-commit":49},[50],"git_hooks\u002Fpre-commit-skill-lint.sh","master","b4819add93efbaf4d80627118ec34680406b309b","packages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fai-hats-dev\u002Fskills\u002Fskill-lint-gate",1,"https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats","https:\u002F\u002Fgithub.com\u002Fmuratovv","2026-11-05 20:59:10",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add muratovv\u002Fai-hats --skill skill-lint-gate",{"tool":64,"command":65},"bunx","bunx skills add muratovv\u002Fai-hats --skill skill-lint-gate",{"tool":67,"command":68},"pnpm","pnpm dlx skills add muratovv\u002Fai-hats --skill skill-lint-gate","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fai-hats-dev\u002Fskills\u002Fskill-lint-gate\u002FSKILL.md",true,[72],{"path":50,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"SCRIPT","脚本",6115,"https:\u002F\u002Fgithub.com\u002Fmuratovv\u002Fai-hats\u002Fblob\u002Fmaster\u002Fpackages\u002Fai-hats-library\u002Fsrc\u002Fai_hats_library\u002Fai-hats-dev\u002Fskills\u002Fskill-lint-gate\u002Fgit_hooks\u002Fpre-commit-skill-lint.sh",[78,104,129,147,169,181],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":84,"publishedAt":42},"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",[],[85,86,87,88,89,90,91,92,93,94,37,95,96,97,98,99,100,101,102,103],"protocol","Evaluation","tool","tool evaluation protocol","testing","ml","libraries","adoption","methodology","Tools","dependency","up","frameworks","time","project","recommendation","for","bounded","candidate",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":110,"publishedAt":42},"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",[],[111,112,113,114,85,115,116,117,118,119,37,120,121,122,123,124,125,126,127,128],"systematic debugging","debugging","systematic","test","monitoring","hypothesis","verify","behavior","fix","evidence","bug","reports","pattern","users","error","with","bug-fix","phase",{"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":136,"publishedAt":42},"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",[135],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[137,138,139,140,36,118,141,37,142,123,143,144,145,101,146],"template","skill template","validation","compliance","guide","new skill","structural","canonical","which","Existing",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":154,"publishedAt":42},"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",[153],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[155,156,157,158,159,33,160,161,162,163,37,164,165,166,167,40,168],"Optimization","skill optimization","components","component","issues","audit","refactor","Budget","Rules","periodic","maintenance","token","token budget","high",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":175,"publishedAt":42},"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",[],[28,176,177,178,179,180,37,39,101],"fallback","silent fallback gate","python","write","edit",{"skillNo":182,"name":183,"nameZh":6,"description":184,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":185,"categories":186,"keywords":188,"publishedAt":42},"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",[187],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[189,190,191,192,158,193,194,195,163,118,37,196,197,99,198,199,200,201,202,203],"framework","retro","retro to framework","change","retrospective","projects","convert","incident","across","problem","about","more","skill update","single","generic"]