cc-hook-registry 5.5.0 → 5.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/docs/index.html CHANGED
@@ -34,7 +34,7 @@ a{color:#58a6ff;text-decoration:none}
34
34
  <body>
35
35
  <div class="c">
36
36
  <h1>Claude Code Hook Registry</h1>
37
- <p class="sub">54 hooks. Search, browse, install.</p>
37
+ <p class="sub">82 hooks. Search, browse, install.</p>
38
38
 
39
39
  <input id="q" placeholder="Search hooks... (database, git, deploy, secret, docker)" oninput="render()">
40
40
 
@@ -112,7 +112,35 @@ const H=[
112
112
  {id:'compact-reminder',n:'Compact Reminder',c:'utility',d:'Suggest /compact after N tool calls',i:'npx cc-safe-setup --install-example compact-reminder',t:['compact','context','session']},
113
113
  {id:'revert-helper',n:'Revert Helper',c:'utility',d:'Show undo command on session end',i:'npx cc-safe-setup --install-example revert-helper',t:['revert','undo','git']},
114
114
  {id:'auto-stash-before-pull',n:'Auto Stash Before Pull',c:'safety',d:'Warn before pull/merge with dirty tree',i:'npx cc-safe-setup --install-example auto-stash-before-pull',t:['git','stash','pull']},
115
+ {id:'hardcoded-secret-detector',n:'Hardcoded Secret Detector',c:'safety',d:'Detect AWS keys, API keys, passwords, JWT in code',i:'npx cc-safe-setup --install-example hardcoded-secret-detector',t:['secret','key','password','jwt']},
116
+ {id:'no-console-log',n:'No Console.log',c:'quality',d:'Warn on console.log in production code',i:'npx cc-safe-setup --install-example no-console-log',t:['console','log','debug']},
117
+ {id:'no-eval',n:'No Eval',c:'safety',d:'Warn on eval() usage',i:'npx cc-safe-setup --install-example no-eval',t:['eval','security']},
118
+ {id:'file-size-limit',n:'File Size Limit',c:'safety',d:'Block creating files over 1MB',i:'npx cc-safe-setup --install-example file-size-limit',t:['size','large','write']},
119
+ {id:'branch-naming',n:'Branch Naming',c:'quality',d:'Enforce feat/fix/chore branch prefixes',i:'npx cc-safe-setup --install-example branch-naming-convention',t:['branch','naming','convention']},
120
+ {id:'no-todo-ship',n:'No TODO Ship',c:'quality',d:'Warn on TODO/FIXME in commits',i:'npx cc-safe-setup --install-example no-todo-ship',t:['todo','fixme','commit']},
115
121
  {id:'strict-allowlist',n:'Strict Allowlist',c:'safety',d:'Only allow explicitly permitted commands (allowlist mode)',i:'npx cc-safe-setup --install-example strict-allowlist',t:['allowlist','whitelist','strict']},
122
+ {id:'context-snapshot',n:'Context Snapshot',c:'utility',d:'Auto-save branch, files, TODOs before context loss',i:'npx cc-safe-setup --install-example context-snapshot',t:['context','compact','snapshot']},
123
+ {id:'lockfile-guard',n:'Lockfile Guard',c:'quality',d:'Warn when lockfiles are modified in commits',i:'npx cc-safe-setup --install-example lockfile-guard',t:['lock','npm','yarn','cargo']},
124
+ {id:'git-lfs-guard',n:'Git LFS Guard',c:'quality',d:'Suggest Git LFS for large binary files',i:'npx cc-safe-setup --install-example git-lfs-guard',t:['lfs','binary','large']},
125
+ {id:'docker-prune-guard',n:'Docker Prune Guard',c:'safety',d:'Warn before docker system prune',i:'npx cc-safe-setup --install-example docker-prune-guard',t:['docker','prune','cleanup']},
126
+ {id:'pip-venv-guard',n:'Pip Venv Guard',c:'safety',d:'Warn on pip install outside venv',i:'npx cc-safe-setup --install-example pip-venv-guard',t:['pip','venv','python']},
127
+ {id:'no-git-amend-push',n:'No Git Amend Push',c:'safety',d:'Warn on amending pushed commits',i:'npx cc-safe-setup --install-example no-git-amend-push',t:['git','amend','push']},
128
+ {id:'git-blame-context',n:'Git Blame Context',c:'quality',d:'Show file ownership before major edits',i:'npx cc-safe-setup --install-example git-blame-context',t:['git','blame','ownership']},
129
+ {id:'import-cycle-warn',n:'Import Cycle Warn',c:'quality',d:'Detect circular import patterns',i:'npx cc-safe-setup --install-example import-cycle-warn',t:['import','circular','dependency']},
130
+ {id:'env-drift-guard',n:'Env Drift Guard',c:'quality',d:'Detect .env vs .env.example mismatch',i:'npx cc-safe-setup --install-example env-drift-guard',t:['env','drift','config']},
131
+ {id:'package-script-guard',n:'Package Script Guard',c:'quality',d:'Warn when package.json scripts change',i:'npx cc-safe-setup --install-example package-script-guard',t:['npm','scripts','package']},
132
+ {id:'ci-skip-guard',n:'CI Skip Guard',c:'quality',d:'Warn on [skip ci] and --no-verify',i:'npx cc-safe-setup --install-example ci-skip-guard',t:['ci','skip','verify']},
133
+ {id:'debug-leftover-guard',n:'Debug Leftover Guard',c:'quality',d:'Detect debugger/pdb/binding.pry in commits',i:'npx cc-safe-setup --install-example debug-leftover-guard',t:['debug','debugger','pdb']},
134
+ {id:'node-version-guard',n:'Node Version Guard',c:'quality',d:'Detect .nvmrc mismatch',i:'npx cc-safe-setup --install-example node-version-guard',t:['node','nvm','version']},
135
+ {id:'sensitive-regex-guard',n:'ReDoS Guard',c:'security',d:'Detect ReDoS-vulnerable regex patterns',i:'npx cc-safe-setup --install-example sensitive-regex-guard',t:['regex','redos','security']},
136
+ {id:'test-coverage-guard',n:'Test Coverage Guard',c:'quality',d:'Warn when code grows without tests',i:'npx cc-safe-setup --install-example test-coverage-guard',t:['test','coverage','commit']},
137
+ {id:'stale-env-guard',n:'Stale Env Guard',c:'security',d:'Warn when .env is 90+ days old',i:'npx cc-safe-setup --install-example stale-env-guard',t:['env','rotation','security']},
138
+ {id:'typosquat-guard',n:'Typosquat Guard',c:'security',d:'Detect npm/pip typosquatting attacks',i:'npx cc-safe-setup --install-example typosquat-guard',t:['npm','supply-chain','typo']},
139
+ {id:'typescript-strict-guard',n:'TypeScript Strict Guard',c:'quality',d:'Warn when tsconfig strict mode disabled',i:'npx cc-safe-setup --install-example typescript-strict-guard',t:['typescript','strict','tsconfig']},
140
+ {id:'permission-cache',n:'Permission Cache',c:'approve',d:'Auto-approve previously approved commands',i:'npx cc-safe-setup --install-example permission-cache',t:['cache','approve','session']},
141
+ {id:'git-author-guard',n:'Git Author Guard',c:'quality',d:'Verify commit author is configured',i:'npx cc-safe-setup --install-example git-author-guard',t:['git','author','config']},
142
+ {id:'auto-approve-readonly',n:'Auto-Approve Read-Only',c:'approve',d:'Auto-approve 50+ read-only commands (cat, ls, grep, find, git log)',i:'npx cc-safe-setup --install-example auto-approve-readonly',t:['read','approve','permission','cat','grep']},
143
+ {id:'max-session-duration',n:'Max Session Duration',c:'utility',d:'Warn when session exceeds time limit',i:'npx cc-safe-setup --install-example max-session-duration',t:['session','time','cost']},
116
144
  {id:'safety-net',n:'Safety Net (TS)',c:'safety',d:'TypeScript hooks with configurable severity',i:'npx @anthropic-ai/claude-code-safety-net',t:['typescript','configurable'],s:1185},
117
145
  {id:'hooks-mastery',n:'Hooks Mastery (Python)',c:'utility',d:'Python hooks for all events + LLM',i:'git clone',t:['python','framework'],s:3386},
118
146
  ];
package/index.mjs CHANGED
@@ -356,6 +356,24 @@ else if (command === 'recommend') {
356
356
  recommendations.push({ id: 'auto-approve-make', reason: 'Makefile detected', priority: 2 });
357
357
  }
358
358
 
359
+ // CI/CD detection
360
+ if (existsSync(join(cwd, '.github', 'workflows'))) {
361
+ recommendations.push({ id: 'ci-skip-guard', reason: 'GitHub Actions detected — prevent [skip ci]', priority: 2 });
362
+ }
363
+
364
+ // Monorepo detection
365
+ if (existsSync(join(cwd, 'lerna.json')) || existsSync(join(cwd, 'pnpm-workspace.yaml')) || existsSync(join(cwd, 'turbo.json'))) {
366
+ recommendations.push({ id: 'scope-guard', reason: 'Monorepo detected — prevent cross-package operations', priority: 2 });
367
+ }
368
+
369
+ // TypeScript project
370
+ if (existsSync(join(cwd, 'tsconfig.json'))) {
371
+ recommendations.push({ id: 'typescript-strict-guard', reason: 'TypeScript project — protect strict mode', priority: 3 });
372
+ }
373
+
374
+ // Universal quality
375
+ recommendations.push({ id: 'auto-approve-readonly', reason: 'Eliminates 80% of permission prompts', priority: 1 });
376
+
359
377
  // Always useful
360
378
  recommendations.push({ id: 'compound-command-approver', reason: 'Fixes permission matching for cd && commands', priority: 2 });
361
379
  recommendations.push({ id: 'loop-detector', reason: 'Prevents infinite command loops', priority: 3 });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cc-hook-registry",
3
- "version": "5.5.0",
3
+ "version": "5.6.0",
4
4
  "description": "Search, browse, and install Claude Code hooks from the community. GitHub-based registry, no server needed.",
5
5
  "main": "index.mjs",
6
6
  "bin": {