@hivehub/rulebook 5.4.1 → 5.5.1
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/.claude/commands/analysis.md +35 -35
- package/.claude/commands/continue.md +33 -33
- package/.claude/commands/ralph-config.md +112 -112
- package/.claude/commands/ralph-history.md +110 -110
- package/.claude/commands/ralph-init.md +72 -72
- package/.claude/commands/ralph-pause-resume.md +105 -105
- package/.claude/commands/ralph-run.md +101 -101
- package/.claude/commands/ralph-status.md +76 -76
- package/.claude/commands/rulebook-decision-create.md +55 -55
- package/.claude/commands/rulebook-decision-list.md +15 -15
- package/.claude/commands/rulebook-knowledge-add.md +41 -41
- package/.claude/commands/rulebook-knowledge-list.md +15 -15
- package/.claude/commands/rulebook-learn-capture.md +48 -48
- package/.claude/commands/rulebook-learn-list.md +13 -13
- package/.claude/commands/rulebook-memory-save.md +48 -48
- package/.claude/commands/rulebook-memory-search.md +47 -47
- package/.claude/commands/rulebook-task-apply.md +67 -67
- package/.claude/commands/rulebook-task-archive.md +94 -94
- package/.claude/commands/rulebook-task-create.md +93 -93
- package/.claude/commands/rulebook-task-list.md +42 -42
- package/.claude/commands/rulebook-task-show.md +52 -52
- package/.claude/commands/rulebook-task-validate.md +53 -53
- package/.claude-plugin/marketplace.json +28 -28
- package/.claude-plugin/plugin.json +8 -8
- package/README.md +394 -393
- package/dist/core/generator.d.ts +1 -1
- package/dist/core/generator.d.ts.map +1 -1
- package/dist/core/generator.js +1 -0
- package/dist/core/generator.js.map +1 -1
- package/dist/hooks/terse-activate.d.ts +59 -0
- package/dist/hooks/terse-activate.d.ts.map +1 -0
- package/dist/hooks/terse-activate.js +149 -0
- package/dist/hooks/terse-activate.js.map +1 -0
- package/dist/hooks/terse-config.d.ts +51 -0
- package/dist/hooks/terse-config.d.ts.map +1 -0
- package/dist/hooks/terse-config.js +130 -0
- package/dist/hooks/terse-config.js.map +1 -0
- package/dist/hooks/terse-mode-tracker.d.ts +78 -0
- package/dist/hooks/terse-mode-tracker.d.ts.map +1 -0
- package/dist/hooks/terse-mode-tracker.js +213 -0
- package/dist/hooks/terse-mode-tracker.js.map +1 -0
- package/dist/index.js +0 -0
- package/dist/mcp/rulebook-server.js +0 -0
- package/package.json +21 -22
- package/templates/agents/accessibility-reviewer.md +43 -43
- package/templates/agents/api-designer.md +42 -42
- package/templates/agents/architect.md +51 -51
- package/templates/agents/build-engineer.md +36 -36
- package/templates/agents/code-reviewer.md +47 -47
- package/templates/agents/compiler/codegen-debugger.md +34 -34
- package/templates/agents/compiler/stdlib-engineer.md +28 -28
- package/templates/agents/compiler/test-coverage-guardian.md +31 -31
- package/templates/agents/context-intelligence.md +52 -52
- package/templates/agents/database-architect.md +41 -41
- package/templates/agents/devops-engineer.md +42 -42
- package/templates/agents/docs-writer.md +38 -38
- package/templates/agents/game-engine/cpp-core-expert.md +35 -35
- package/templates/agents/game-engine/render-engineer.md +22 -22
- package/templates/agents/game-engine/shader-engineer.md +38 -38
- package/templates/agents/game-engine/systems-integration.md +43 -43
- package/templates/agents/generic/code-reviewer.md +41 -41
- package/templates/agents/generic/docs-writer.md +25 -25
- package/templates/agents/generic/project-manager.md +36 -36
- package/templates/agents/generic/researcher.md +34 -34
- package/templates/agents/generic/test-engineer.md +41 -41
- package/templates/agents/i18n-engineer.md +42 -42
- package/templates/agents/implementer.md +42 -42
- package/templates/agents/migration-engineer.md +42 -42
- package/templates/agents/mobile/platform-specialist.md +22 -22
- package/templates/agents/mobile/ui-engineer.md +22 -22
- package/templates/agents/performance-engineer.md +49 -49
- package/templates/agents/refactoring-agent.md +41 -41
- package/templates/agents/researcher.md +38 -38
- package/templates/agents/security-reviewer.md +40 -40
- package/templates/agents/team-lead.md +37 -37
- package/templates/agents/tester.md +48 -48
- package/templates/agents/ux-reviewer.md +43 -43
- package/templates/agents/web-app/api-designer.md +22 -22
- package/templates/agents/web-app/backend-engineer.md +30 -30
- package/templates/agents/web-app/database-engineer.md +22 -22
- package/templates/agents/web-app/frontend-engineer.md +29 -29
- package/templates/agents/web-app/security-reviewer.md +32 -32
- package/templates/ci/rulebook-review.yml +26 -26
- package/templates/cli/AIDER.md +49 -49
- package/templates/cli/AMAZON_Q.md +25 -25
- package/templates/cli/AUGGIE.md +32 -32
- package/templates/cli/CLAUDE.md +117 -117
- package/templates/cli/CLINE.md +99 -99
- package/templates/cli/CODEBUDDY.md +20 -20
- package/templates/cli/CODEIUM.md +20 -20
- package/templates/cli/CODEX.md +21 -21
- package/templates/cli/CONTINUE.md +34 -34
- package/templates/cli/CURSOR_CLI.md +62 -62
- package/templates/cli/FACTORY.md +18 -18
- package/templates/cli/GEMINI.md +35 -35
- package/templates/cli/KILOCODE.md +18 -18
- package/templates/cli/OPENCODE.md +18 -18
- package/templates/cli/_GENERIC_TEMPLATE.md +29 -29
- package/templates/commands/rulebook-decision-create.md +55 -55
- package/templates/commands/rulebook-decision-list.md +15 -15
- package/templates/commands/rulebook-knowledge-add.md +41 -41
- package/templates/commands/rulebook-knowledge-list.md +15 -15
- package/templates/commands/rulebook-learn-capture.md +48 -48
- package/templates/commands/rulebook-learn-list.md +13 -13
- package/templates/commands/rulebook-memory-save.md +48 -48
- package/templates/commands/rulebook-memory-search.md +47 -47
- package/templates/commands/rulebook-task-apply.md +67 -67
- package/templates/commands/rulebook-task-archive.md +94 -94
- package/templates/commands/rulebook-task-create.md +93 -93
- package/templates/commands/rulebook-task-list.md +42 -42
- package/templates/commands/rulebook-task-show.md +52 -52
- package/templates/commands/rulebook-task-validate.md +53 -53
- package/templates/compact-context/_default.md +23 -23
- package/templates/compact-context/cpp.md +26 -26
- package/templates/compact-context/go.md +26 -26
- package/templates/compact-context/python.md +26 -26
- package/templates/compact-context/rust.md +28 -28
- package/templates/compact-context/typescript.md +29 -29
- package/templates/core/AGENTS_LEAN.md +26 -1
- package/templates/core/AGENTS_OVERRIDE.md +16 -16
- package/templates/core/AGENT_AUTOMATION.md +296 -296
- package/templates/core/CLAUDE_MD_v2.md +90 -71
- package/templates/core/DAG.md +304 -304
- package/templates/core/DECISIONS.md +38 -38
- package/templates/core/DOCUMENTATION_RULES.md +36 -36
- package/templates/core/KNOWLEDGE.md +49 -49
- package/templates/core/MULTI_AGENT.md +74 -74
- package/templates/core/PLANS.md +28 -28
- package/templates/core/QUALITY_ENFORCEMENT.md +68 -68
- package/templates/core/RALPH.md +471 -471
- package/templates/core/RULEBOOK.md +1947 -1947
- package/templates/core/TIER1_PROHIBITIONS.md +154 -154
- package/templates/core/TOKEN_OPTIMIZATION.md +49 -49
- package/templates/frameworks/ANGULAR.md +36 -36
- package/templates/frameworks/DJANGO.md +83 -83
- package/templates/frameworks/ELECTRON.md +147 -147
- package/templates/frameworks/FLASK.md +38 -38
- package/templates/frameworks/FLUTTER.md +55 -55
- package/templates/frameworks/JQUERY.md +32 -32
- package/templates/frameworks/LARAVEL.md +38 -38
- package/templates/frameworks/NESTJS.md +43 -43
- package/templates/frameworks/NEXTJS.md +127 -127
- package/templates/frameworks/NUXT.md +40 -40
- package/templates/frameworks/RAILS.md +66 -66
- package/templates/frameworks/REACT.md +38 -38
- package/templates/frameworks/REACT_NATIVE.md +47 -47
- package/templates/frameworks/SPRING.md +39 -39
- package/templates/frameworks/SYMFONY.md +36 -36
- package/templates/frameworks/VUE.md +36 -36
- package/templates/frameworks/ZEND.md +35 -35
- package/templates/git/CI_CD_PATTERNS.md +661 -661
- package/templates/git/GITHUB_ACTIONS.md +728 -728
- package/templates/git/GITLAB_CI.md +730 -730
- package/templates/git/GIT_WORKFLOW.md +1192 -1192
- package/templates/git/SECRETS_MANAGEMENT.md +585 -585
- package/templates/hooks/COMMIT_MSG.md +530 -530
- package/templates/hooks/POST_CHECKOUT.md +546 -546
- package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -619
- package/templates/hooks/PRE_COMMIT.md +414 -414
- package/templates/hooks/PRE_PUSH.md +601 -601
- package/templates/hooks/check-context-and-handoff.ps1 +58 -58
- package/templates/hooks/check-context-and-handoff.sh +76 -76
- package/templates/hooks/enforce-team-for-background-agents.ps1 +63 -63
- package/templates/hooks/enforce-team-for-background-agents.sh +55 -55
- package/templates/hooks/on-compact-reinject.sh +34 -34
- package/templates/hooks/resume-from-handoff.ps1 +40 -40
- package/templates/hooks/resume-from-handoff.sh +61 -61
- package/templates/hooks/terse-activate.ps1 +143 -143
- package/templates/hooks/terse-activate.sh +197 -197
- package/templates/hooks/terse-mode-tracker.ps1 +153 -153
- package/templates/hooks/terse-mode-tracker.sh +187 -187
- package/templates/ides/CONTINUE_RULES.md +16 -16
- package/templates/ides/COPILOT.md +37 -37
- package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -23
- package/templates/ides/CURSOR.md +43 -43
- package/templates/ides/GEMINI_RULES.md +17 -17
- package/templates/ides/JETBRAINS_AI.md +35 -35
- package/templates/ides/REPLIT.md +36 -36
- package/templates/ides/TABNINE.md +29 -29
- package/templates/ides/VSCODE.md +40 -40
- package/templates/ides/WINDSURF.md +36 -36
- package/templates/ides/WINDSURF_RULES.md +14 -14
- package/templates/ides/ZED.md +32 -32
- package/templates/ides/cursor-mdc/go.mdc +24 -24
- package/templates/ides/cursor-mdc/python.mdc +24 -24
- package/templates/ides/cursor-mdc/quality.mdc +25 -25
- package/templates/ides/cursor-mdc/ralph.mdc +39 -39
- package/templates/ides/cursor-mdc/rulebook.mdc +38 -38
- package/templates/ides/cursor-mdc/rust.mdc +24 -24
- package/templates/ides/cursor-mdc/typescript.mdc +25 -25
- package/templates/languages/C.md +333 -333
- package/templates/languages/CPP.md +743 -743
- package/templates/languages/CSHARP.md +417 -417
- package/templates/languages/ELIXIR.md +454 -454
- package/templates/languages/ERLANG.md +361 -361
- package/templates/languages/GO.md +645 -645
- package/templates/languages/HASKELL.md +177 -177
- package/templates/languages/JAVA.md +607 -607
- package/templates/languages/JAVASCRIPT.md +631 -631
- package/templates/languages/JULIA.md +97 -97
- package/templates/languages/KOTLIN.md +511 -511
- package/templates/languages/LISP.md +100 -100
- package/templates/languages/LUA.md +74 -74
- package/templates/languages/OBJECTIVEC.md +90 -90
- package/templates/languages/PHP.md +416 -416
- package/templates/languages/PYTHON.md +682 -682
- package/templates/languages/RUBY.md +421 -421
- package/templates/languages/RUST.md +477 -477
- package/templates/languages/SAS.md +73 -73
- package/templates/languages/SCALA.md +348 -348
- package/templates/languages/SOLIDITY.md +580 -580
- package/templates/languages/SQL.md +137 -137
- package/templates/languages/SWIFT.md +466 -466
- package/templates/languages/TYPESCRIPT.md +591 -591
- package/templates/languages/ZIG.md +265 -265
- package/templates/modules/ATLASSIAN.md +255 -255
- package/templates/modules/CONTEXT7.md +54 -54
- package/templates/modules/FIGMA.md +267 -267
- package/templates/modules/GITHUB_MCP.md +64 -64
- package/templates/modules/GRAFANA.md +328 -328
- package/templates/modules/MEMORY.md +126 -126
- package/templates/modules/NOTION.md +247 -247
- package/templates/modules/PLAYWRIGHT.md +90 -90
- package/templates/modules/RULEBOOK_MCP.md +208 -208
- package/templates/modules/SERENA.md +337 -337
- package/templates/modules/SUPABASE.md +223 -223
- package/templates/modules/SYNAP.md +69 -69
- package/templates/modules/VECTORIZER.md +63 -63
- package/templates/modules/sequential-thinking.md +42 -42
- package/templates/ralph/ralph-history.bat +4 -4
- package/templates/ralph/ralph-history.sh +5 -5
- package/templates/ralph/ralph-init.bat +5 -5
- package/templates/ralph/ralph-init.sh +5 -5
- package/templates/ralph/ralph-pause.bat +5 -5
- package/templates/ralph/ralph-pause.sh +5 -5
- package/templates/ralph/ralph-run.bat +5 -5
- package/templates/ralph/ralph-run.sh +5 -5
- package/templates/ralph/ralph-status.bat +4 -4
- package/templates/ralph/ralph-status.sh +5 -5
- package/templates/rules/consult-analysis-before-implementing.md +23 -23
- package/templates/rules/cpp.md +46 -46
- package/templates/rules/csharp.md +44 -44
- package/templates/rules/diagnostic-first.md +39 -39
- package/templates/rules/fail-twice-escalate.md +46 -46
- package/templates/rules/follow-task-sequence.md +36 -36
- package/templates/rules/git-safety.md +29 -29
- package/templates/rules/go.md +40 -40
- package/templates/rules/incremental-implementation.md +56 -56
- package/templates/rules/incremental-tests.md +29 -29
- package/templates/rules/java.md +43 -43
- package/templates/rules/javascript.md +39 -39
- package/templates/rules/knowledge-base-usage.md +41 -41
- package/templates/rules/multi-agent-teams.md +75 -75
- package/templates/rules/no-deferred.md +31 -31
- package/templates/rules/no-shortcuts.md +30 -30
- package/templates/rules/python.md +43 -43
- package/templates/rules/research-first.md +30 -30
- package/templates/rules/respect-handoff-trigger.md +41 -41
- package/templates/rules/rust.md +40 -40
- package/templates/rules/sequential-editing.md +21 -21
- package/templates/rules/session-workflow.md +24 -24
- package/templates/rules/task-decomposition.md +32 -32
- package/templates/rules/typescript.md +40 -40
- package/templates/services/AZURE_BLOB.md +184 -184
- package/templates/services/CASSANDRA.md +239 -239
- package/templates/services/DATADOG.md +26 -26
- package/templates/services/DOCKER.md +124 -124
- package/templates/services/DOCKER_COMPOSE.md +168 -168
- package/templates/services/DYNAMODB.md +308 -308
- package/templates/services/ELASTICSEARCH.md +347 -347
- package/templates/services/GCS.md +178 -178
- package/templates/services/HELM.md +194 -194
- package/templates/services/INFLUXDB.md +265 -265
- package/templates/services/KAFKA.md +341 -341
- package/templates/services/KUBERNETES.md +208 -208
- package/templates/services/MARIADB.md +183 -183
- package/templates/services/MEMCACHED.md +242 -242
- package/templates/services/MINIO.md +201 -201
- package/templates/services/MONGODB.md +268 -268
- package/templates/services/MYSQL.md +358 -358
- package/templates/services/NEO4J.md +247 -247
- package/templates/services/OPENTELEMETRY.md +25 -25
- package/templates/services/ORACLE.md +290 -290
- package/templates/services/PINO.md +24 -24
- package/templates/services/POSTGRESQL.md +326 -326
- package/templates/services/PROMETHEUS.md +33 -33
- package/templates/services/RABBITMQ.md +286 -286
- package/templates/services/REDIS.md +292 -292
- package/templates/services/S3.md +298 -298
- package/templates/services/SENTRY.md +23 -23
- package/templates/services/SQLITE.md +294 -294
- package/templates/services/SQLSERVER.md +294 -294
- package/templates/services/WINSTON.md +30 -30
- package/templates/skills/cli/aider/SKILL.md +59 -59
- package/templates/skills/cli/amazon-q/SKILL.md +35 -35
- package/templates/skills/cli/auggie/SKILL.md +42 -42
- package/templates/skills/cli/claude/SKILL.md +42 -42
- package/templates/skills/cli/cline/SKILL.md +42 -42
- package/templates/skills/cli/codebuddy/SKILL.md +30 -30
- package/templates/skills/cli/codeium/SKILL.md +30 -30
- package/templates/skills/cli/codex/SKILL.md +31 -31
- package/templates/skills/cli/continue/SKILL.md +44 -44
- package/templates/skills/cli/cursor-cli/SKILL.md +38 -38
- package/templates/skills/cli/factory/SKILL.md +28 -28
- package/templates/skills/cli/gemini/SKILL.md +45 -45
- package/templates/skills/cli/kilocode/SKILL.md +28 -28
- package/templates/skills/cli/opencode/SKILL.md +28 -28
- package/templates/skills/core/agent-automation/SKILL.md +194 -194
- package/templates/skills/core/dag/SKILL.md +314 -314
- package/templates/skills/core/documentation-rules/SKILL.md +46 -46
- package/templates/skills/core/karpathy-guidelines/SKILL.md +93 -0
- package/templates/skills/core/quality-enforcement/SKILL.md +78 -78
- package/templates/skills/core/rulebook/SKILL.md +176 -176
- package/templates/skills/core/rulebook-terse/SKILL.md +116 -116
- package/templates/skills/core/rulebook-terse-commit/SKILL.md +96 -96
- package/templates/skills/core/rulebook-terse-review/SKILL.md +112 -112
- package/templates/skills/dev/accessibility/SKILL.md +17 -17
- package/templates/skills/dev/analysis/SKILL.md +19 -19
- package/templates/skills/dev/api-design/SKILL.md +15 -15
- package/templates/skills/dev/architect/SKILL.md +17 -17
- package/templates/skills/dev/build-fix/SKILL.md +17 -17
- package/templates/skills/dev/db-design/SKILL.md +15 -15
- package/templates/skills/dev/debug/SKILL.md +16 -16
- package/templates/skills/dev/deploy/SKILL.md +17 -17
- package/templates/skills/dev/docs/SKILL.md +17 -17
- package/templates/skills/dev/handoff/SKILL.md +27 -27
- package/templates/skills/dev/migrate/SKILL.md +15 -15
- package/templates/skills/dev/perf/SKILL.md +17 -17
- package/templates/skills/dev/refactor/SKILL.md +17 -17
- package/templates/skills/dev/research/SKILL.md +14 -14
- package/templates/skills/dev/review/SKILL.md +18 -18
- package/templates/skills/dev/security-audit/SKILL.md +17 -17
- package/templates/skills/frameworks/angular/SKILL.md +46 -46
- package/templates/skills/frameworks/django/SKILL.md +93 -93
- package/templates/skills/frameworks/electron/SKILL.md +157 -157
- package/templates/skills/frameworks/flask/SKILL.md +48 -48
- package/templates/skills/frameworks/flutter/SKILL.md +65 -65
- package/templates/skills/frameworks/jquery/SKILL.md +42 -42
- package/templates/skills/frameworks/laravel/SKILL.md +48 -48
- package/templates/skills/frameworks/nestjs/SKILL.md +53 -53
- package/templates/skills/frameworks/nextjs/SKILL.md +137 -137
- package/templates/skills/frameworks/nuxt/SKILL.md +50 -50
- package/templates/skills/frameworks/rails/SKILL.md +76 -76
- package/templates/skills/frameworks/react/SKILL.md +48 -48
- package/templates/skills/frameworks/react-native/SKILL.md +57 -57
- package/templates/skills/frameworks/spring/SKILL.md +49 -49
- package/templates/skills/frameworks/symfony/SKILL.md +46 -46
- package/templates/skills/frameworks/vue/SKILL.md +46 -46
- package/templates/skills/frameworks/zend/SKILL.md +45 -45
- package/templates/skills/ides/copilot/SKILL.md +47 -47
- package/templates/skills/ides/cursor/SKILL.md +53 -53
- package/templates/skills/ides/jetbrains-ai/SKILL.md +45 -45
- package/templates/skills/ides/replit/SKILL.md +46 -46
- package/templates/skills/ides/tabnine/SKILL.md +39 -39
- package/templates/skills/ides/vscode/SKILL.md +50 -50
- package/templates/skills/ides/windsurf/SKILL.md +46 -46
- package/templates/skills/ides/zed/SKILL.md +42 -42
- package/templates/skills/languages/c/SKILL.md +343 -343
- package/templates/skills/languages/cpp/SKILL.md +753 -753
- package/templates/skills/languages/csharp/SKILL.md +427 -427
- package/templates/skills/languages/elixir/SKILL.md +464 -464
- package/templates/skills/languages/erlang/SKILL.md +371 -371
- package/templates/skills/languages/go/SKILL.md +655 -655
- package/templates/skills/languages/haskell/SKILL.md +187 -187
- package/templates/skills/languages/java/SKILL.md +617 -617
- package/templates/skills/languages/javascript/SKILL.md +641 -641
- package/templates/skills/languages/julia/SKILL.md +107 -107
- package/templates/skills/languages/kotlin/SKILL.md +521 -521
- package/templates/skills/languages/lisp/SKILL.md +110 -110
- package/templates/skills/languages/lua/SKILL.md +84 -84
- package/templates/skills/languages/objectivec/SKILL.md +100 -100
- package/templates/skills/languages/php/SKILL.md +426 -426
- package/templates/skills/languages/python/SKILL.md +692 -692
- package/templates/skills/languages/ruby/SKILL.md +431 -431
- package/templates/skills/languages/rust/SKILL.md +487 -487
- package/templates/skills/languages/sas/SKILL.md +83 -83
- package/templates/skills/languages/scala/SKILL.md +358 -358
- package/templates/skills/languages/solidity/SKILL.md +590 -590
- package/templates/skills/languages/sql/SKILL.md +147 -147
- package/templates/skills/languages/swift/SKILL.md +476 -476
- package/templates/skills/languages/typescript/SKILL.md +302 -302
- package/templates/skills/languages/zig/SKILL.md +275 -275
- package/templates/skills/modules/atlassian/SKILL.md +265 -265
- package/templates/skills/modules/context7/SKILL.md +64 -64
- package/templates/skills/modules/figma/SKILL.md +277 -277
- package/templates/skills/modules/github-mcp/SKILL.md +74 -74
- package/templates/skills/modules/grafana/SKILL.md +338 -338
- package/templates/skills/modules/memory/SKILL.md +73 -73
- package/templates/skills/modules/notion/SKILL.md +257 -257
- package/templates/skills/modules/playwright/SKILL.md +100 -100
- package/templates/skills/modules/rulebook-mcp/SKILL.md +166 -166
- package/templates/skills/modules/serena/SKILL.md +347 -347
- package/templates/skills/modules/supabase/SKILL.md +233 -233
- package/templates/skills/modules/synap/SKILL.md +79 -79
- package/templates/skills/modules/vectorizer/SKILL.md +73 -73
- package/templates/skills/services/azure-blob/SKILL.md +194 -194
- package/templates/skills/services/cassandra/SKILL.md +249 -249
- package/templates/skills/services/dynamodb/SKILL.md +318 -318
- package/templates/skills/services/elasticsearch/SKILL.md +357 -357
- package/templates/skills/services/gcs/SKILL.md +188 -188
- package/templates/skills/services/influxdb/SKILL.md +275 -275
- package/templates/skills/services/kafka/SKILL.md +351 -351
- package/templates/skills/services/mariadb/SKILL.md +193 -193
- package/templates/skills/services/memcached/SKILL.md +252 -252
- package/templates/skills/services/minio/SKILL.md +211 -211
- package/templates/skills/services/mongodb/SKILL.md +278 -278
- package/templates/skills/services/mysql/SKILL.md +368 -368
- package/templates/skills/services/neo4j/SKILL.md +257 -257
- package/templates/skills/services/oracle/SKILL.md +300 -300
- package/templates/skills/services/postgresql/SKILL.md +336 -336
- package/templates/skills/services/rabbitmq/SKILL.md +296 -296
- package/templates/skills/services/redis/SKILL.md +302 -302
- package/templates/skills/services/s3/SKILL.md +308 -308
- package/templates/skills/services/sqlite/SKILL.md +304 -304
- package/templates/skills/services/sqlserver/SKILL.md +304 -304
- package/templates/skills/workflows/ralph/SKILL.md +309 -309
- package/templates/skills/workflows/ralph/install.sh +87 -87
- package/templates/skills/workflows/ralph/manifest.json +158 -158
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
# Claude Code Stop hook — context freshness monitor (PowerShell).
|
|
2
|
-
# See check-context-and-handoff.sh for the full design rationale.
|
|
3
|
-
|
|
4
|
-
$ErrorActionPreference = 'Stop'
|
|
5
|
-
|
|
6
|
-
# Read hook input from stdin to get the actual project cwd
|
|
7
|
-
$hookInput = [Console]::In.ReadToEnd()
|
|
8
|
-
$ProjectRoot = $null
|
|
9
|
-
if ($hookInput) {
|
|
10
|
-
try { $ProjectRoot = ($hookInput | ConvertFrom-Json).cwd } catch {}
|
|
11
|
-
}
|
|
12
|
-
if (-not $ProjectRoot) { $ProjectRoot = $env:CLAUDE_PROJECT_DIR }
|
|
13
|
-
if (-not $ProjectRoot) { $ProjectRoot = (Get-Location).Path }
|
|
14
|
-
|
|
15
|
-
$ConfigFile = Join-Path $ProjectRoot '.rulebook/rulebook.json'
|
|
16
|
-
$HandoffDir = Join-Path $ProjectRoot '.rulebook/handoff'
|
|
17
|
-
|
|
18
|
-
$WarnPct = 75
|
|
19
|
-
$ForcePct = 90
|
|
20
|
-
$MaxContextChars = 1600000
|
|
21
|
-
|
|
22
|
-
if (Test-Path $ConfigFile) {
|
|
23
|
-
try {
|
|
24
|
-
$cfg = Get-Content $ConfigFile -Raw | ConvertFrom-Json
|
|
25
|
-
if ($cfg.handoff.warnThresholdPct) { $WarnPct = $cfg.handoff.warnThresholdPct }
|
|
26
|
-
if ($cfg.handoff.forceThresholdPct) { $ForcePct = $cfg.handoff.forceThresholdPct }
|
|
27
|
-
} catch {}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
$TranscriptSize = 0
|
|
31
|
-
$ClaudeDir = Join-Path $env:USERPROFILE '.claude/projects'
|
|
32
|
-
if (Test-Path $ClaudeDir) {
|
|
33
|
-
$latest = Get-ChildItem $ClaudeDir -Recurse -Filter '*.jsonl' -File |
|
|
34
|
-
Sort-Object LastWriteTime -Descending | Select-Object -First 1
|
|
35
|
-
if ($latest) { $TranscriptSize = $latest.Length }
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
if ($TranscriptSize -eq 0) {
|
|
39
|
-
Write-Output '{}'
|
|
40
|
-
exit 0
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
$Pct = [math]::Floor($TranscriptSize * 100 / $MaxContextChars)
|
|
44
|
-
|
|
45
|
-
if ($Pct -ge $ForcePct) {
|
|
46
|
-
if (-not (Test-Path $HandoffDir)) { New-Item -ItemType Directory -Path $HandoffDir -Force | Out-Null }
|
|
47
|
-
New-Item -ItemType File -Path (Join-Path $HandoffDir '.urgent') -Force | Out-Null
|
|
48
|
-
$msg = "CONTEXT AT ${Pct}% (FORCE THRESHOLD). You MUST invoke /handoff NOW."
|
|
49
|
-
$out = @{ hookSpecificOutput = @{ hookEventName = 'Stop'; additionalContext = $msg } } | ConvertTo-Json -Compress -Depth 4
|
|
50
|
-
Write-Output $out
|
|
51
|
-
} elseif ($Pct -ge $WarnPct) {
|
|
52
|
-
$msg = "Context at ${Pct}%. Recommended: invoke /handoff to save session state."
|
|
53
|
-
$out = @{ hookSpecificOutput = @{ hookEventName = 'Stop'; additionalContext = $msg } } | ConvertTo-Json -Compress -Depth 4
|
|
54
|
-
Write-Output $out
|
|
55
|
-
} else {
|
|
56
|
-
Write-Output '{}'
|
|
57
|
-
}
|
|
58
|
-
exit 0
|
|
1
|
+
# Claude Code Stop hook — context freshness monitor (PowerShell).
|
|
2
|
+
# See check-context-and-handoff.sh for the full design rationale.
|
|
3
|
+
|
|
4
|
+
$ErrorActionPreference = 'Stop'
|
|
5
|
+
|
|
6
|
+
# Read hook input from stdin to get the actual project cwd
|
|
7
|
+
$hookInput = [Console]::In.ReadToEnd()
|
|
8
|
+
$ProjectRoot = $null
|
|
9
|
+
if ($hookInput) {
|
|
10
|
+
try { $ProjectRoot = ($hookInput | ConvertFrom-Json).cwd } catch {}
|
|
11
|
+
}
|
|
12
|
+
if (-not $ProjectRoot) { $ProjectRoot = $env:CLAUDE_PROJECT_DIR }
|
|
13
|
+
if (-not $ProjectRoot) { $ProjectRoot = (Get-Location).Path }
|
|
14
|
+
|
|
15
|
+
$ConfigFile = Join-Path $ProjectRoot '.rulebook/rulebook.json'
|
|
16
|
+
$HandoffDir = Join-Path $ProjectRoot '.rulebook/handoff'
|
|
17
|
+
|
|
18
|
+
$WarnPct = 75
|
|
19
|
+
$ForcePct = 90
|
|
20
|
+
$MaxContextChars = 1600000
|
|
21
|
+
|
|
22
|
+
if (Test-Path $ConfigFile) {
|
|
23
|
+
try {
|
|
24
|
+
$cfg = Get-Content $ConfigFile -Raw | ConvertFrom-Json
|
|
25
|
+
if ($cfg.handoff.warnThresholdPct) { $WarnPct = $cfg.handoff.warnThresholdPct }
|
|
26
|
+
if ($cfg.handoff.forceThresholdPct) { $ForcePct = $cfg.handoff.forceThresholdPct }
|
|
27
|
+
} catch {}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
$TranscriptSize = 0
|
|
31
|
+
$ClaudeDir = Join-Path $env:USERPROFILE '.claude/projects'
|
|
32
|
+
if (Test-Path $ClaudeDir) {
|
|
33
|
+
$latest = Get-ChildItem $ClaudeDir -Recurse -Filter '*.jsonl' -File |
|
|
34
|
+
Sort-Object LastWriteTime -Descending | Select-Object -First 1
|
|
35
|
+
if ($latest) { $TranscriptSize = $latest.Length }
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if ($TranscriptSize -eq 0) {
|
|
39
|
+
Write-Output '{}'
|
|
40
|
+
exit 0
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
$Pct = [math]::Floor($TranscriptSize * 100 / $MaxContextChars)
|
|
44
|
+
|
|
45
|
+
if ($Pct -ge $ForcePct) {
|
|
46
|
+
if (-not (Test-Path $HandoffDir)) { New-Item -ItemType Directory -Path $HandoffDir -Force | Out-Null }
|
|
47
|
+
New-Item -ItemType File -Path (Join-Path $HandoffDir '.urgent') -Force | Out-Null
|
|
48
|
+
$msg = "CONTEXT AT ${Pct}% (FORCE THRESHOLD). You MUST invoke /handoff NOW."
|
|
49
|
+
$out = @{ hookSpecificOutput = @{ hookEventName = 'Stop'; additionalContext = $msg } } | ConvertTo-Json -Compress -Depth 4
|
|
50
|
+
Write-Output $out
|
|
51
|
+
} elseif ($Pct -ge $WarnPct) {
|
|
52
|
+
$msg = "Context at ${Pct}%. Recommended: invoke /handoff to save session state."
|
|
53
|
+
$out = @{ hookSpecificOutput = @{ hookEventName = 'Stop'; additionalContext = $msg } } | ConvertTo-Json -Compress -Depth 4
|
|
54
|
+
Write-Output $out
|
|
55
|
+
} else {
|
|
56
|
+
Write-Output '{}'
|
|
57
|
+
}
|
|
58
|
+
exit 0
|
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Claude Code Stop hook — context freshness monitor.
|
|
3
|
-
#
|
|
4
|
-
# Runs after every model turn. Estimates the current context usage
|
|
5
|
-
# from the JSONL transcript and, when it exceeds the configured
|
|
6
|
-
# threshold, emits additionalContext instructing the model to invoke
|
|
7
|
-
# the /handoff skill and tell the user to type /clear.
|
|
8
|
-
#
|
|
9
|
-
# Thresholds are read from .rulebook/rulebook.json `handoff` section.
|
|
10
|
-
# Defaults: warn=75, force=90 (percentage of estimated max context).
|
|
11
|
-
|
|
12
|
-
set -euo pipefail
|
|
13
|
-
|
|
14
|
-
# Read the hook input from stdin (Claude Code passes it as JSON)
|
|
15
|
-
input="$(cat)"
|
|
16
|
-
|
|
17
|
-
# Resolve project root from hook input cwd, NOT $(pwd) — the hook may be
|
|
18
|
-
# invoked from a sub-directory the user is currently editing.
|
|
19
|
-
PROJECT_ROOT=""
|
|
20
|
-
if [[ -n "$input" ]] && command -v jq &>/dev/null; then
|
|
21
|
-
PROJECT_ROOT="$(printf '%s' "$input" | jq -r '.cwd // empty' 2>/dev/null || true)"
|
|
22
|
-
fi
|
|
23
|
-
[[ -z "$PROJECT_ROOT" ]] && PROJECT_ROOT="${CLAUDE_PROJECT_DIR:-$(pwd)}"
|
|
24
|
-
|
|
25
|
-
CONFIG_FILE="${PROJECT_ROOT}/.rulebook/rulebook.json"
|
|
26
|
-
HANDOFF_DIR="${PROJECT_ROOT}/.rulebook/handoff"
|
|
27
|
-
|
|
28
|
-
# Defaults
|
|
29
|
-
WARN_PCT=75
|
|
30
|
-
FORCE_PCT=90
|
|
31
|
-
MAX_CONTEXT_CHARS=1600000 # ~400k tokens ≈ 1.6M chars (rough 1:4 ratio)
|
|
32
|
-
|
|
33
|
-
# Override from config if available
|
|
34
|
-
if [[ -f "$CONFIG_FILE" ]] && command -v jq &>/dev/null; then
|
|
35
|
-
WARN_PCT=$(jq -r '.handoff.warnThresholdPct // 75' "$CONFIG_FILE" 2>/dev/null || echo 75)
|
|
36
|
-
FORCE_PCT=$(jq -r '.handoff.forceThresholdPct // 90' "$CONFIG_FILE" 2>/dev/null || echo 90)
|
|
37
|
-
fi
|
|
38
|
-
|
|
39
|
-
# Try to find the transcript path from the session
|
|
40
|
-
# Claude Code stores transcripts as JSONL in ~/.claude/projects/<hash>/
|
|
41
|
-
# The hook input may or may not contain session info; we fall back to
|
|
42
|
-
# estimating from the input itself.
|
|
43
|
-
transcript_size=0
|
|
44
|
-
|
|
45
|
-
# Strategy 1: check the most recent JSONL in the project-specific Claude dir
|
|
46
|
-
CLAUDE_PROJECTS_DIR="${HOME}/.claude/projects"
|
|
47
|
-
if [[ -d "$CLAUDE_PROJECTS_DIR" ]]; then
|
|
48
|
-
latest_jsonl=$(find "$CLAUDE_PROJECTS_DIR" -name "*.jsonl" -type f -printf '%T@ %p\n' 2>/dev/null | sort -rn | head -1 | awk '{print $2}' || true)
|
|
49
|
-
if [[ -n "$latest_jsonl" && -f "$latest_jsonl" ]]; then
|
|
50
|
-
transcript_size=$(stat -c%s "$latest_jsonl" 2>/dev/null || stat -f%z "$latest_jsonl" 2>/dev/null || echo 0)
|
|
51
|
-
fi
|
|
52
|
-
fi
|
|
53
|
-
|
|
54
|
-
# If we couldn't get transcript size, emit nothing (no-op)
|
|
55
|
-
if [[ "$transcript_size" -eq 0 ]]; then
|
|
56
|
-
printf '%s' '{}'
|
|
57
|
-
exit 0
|
|
58
|
-
fi
|
|
59
|
-
|
|
60
|
-
# Estimate context percentage
|
|
61
|
-
pct=$(( transcript_size * 100 / MAX_CONTEXT_CHARS ))
|
|
62
|
-
|
|
63
|
-
if [[ "$pct" -ge "$FORCE_PCT" ]]; then
|
|
64
|
-
# Force mode: write urgent sentinel + emit strong instruction
|
|
65
|
-
mkdir -p "$HANDOFF_DIR"
|
|
66
|
-
touch "${HANDOFF_DIR}/.urgent"
|
|
67
|
-
msg="⚠️ CONTEXT AT ${pct}% (FORCE THRESHOLD). You MUST invoke /handoff NOW to save session state to .rulebook/handoff/_pending.md. After it succeeds, tell the user: '>>> TYPE /clear NOW — your context will be auto-restored in the next session <<<'. Do NOT continue working until the user has typed /clear."
|
|
68
|
-
jq -nc --arg msg "$msg" '{ hookSpecificOutput: { hookEventName: "Stop", additionalContext: $msg } }'
|
|
69
|
-
elif [[ "$pct" -ge "$WARN_PCT" ]]; then
|
|
70
|
-
msg="⚠️ Context at ${pct}%. Recommended: invoke /handoff to save session state. After it succeeds, tell the user to type /clear for a fresh session."
|
|
71
|
-
jq -nc --arg msg "$msg" '{ hookSpecificOutput: { hookEventName: "Stop", additionalContext: $msg } }'
|
|
72
|
-
else
|
|
73
|
-
# Below threshold — no-op
|
|
74
|
-
printf '%s' '{}'
|
|
75
|
-
fi
|
|
76
|
-
exit 0
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Claude Code Stop hook — context freshness monitor.
|
|
3
|
+
#
|
|
4
|
+
# Runs after every model turn. Estimates the current context usage
|
|
5
|
+
# from the JSONL transcript and, when it exceeds the configured
|
|
6
|
+
# threshold, emits additionalContext instructing the model to invoke
|
|
7
|
+
# the /handoff skill and tell the user to type /clear.
|
|
8
|
+
#
|
|
9
|
+
# Thresholds are read from .rulebook/rulebook.json `handoff` section.
|
|
10
|
+
# Defaults: warn=75, force=90 (percentage of estimated max context).
|
|
11
|
+
|
|
12
|
+
set -euo pipefail
|
|
13
|
+
|
|
14
|
+
# Read the hook input from stdin (Claude Code passes it as JSON)
|
|
15
|
+
input="$(cat)"
|
|
16
|
+
|
|
17
|
+
# Resolve project root from hook input cwd, NOT $(pwd) — the hook may be
|
|
18
|
+
# invoked from a sub-directory the user is currently editing.
|
|
19
|
+
PROJECT_ROOT=""
|
|
20
|
+
if [[ -n "$input" ]] && command -v jq &>/dev/null; then
|
|
21
|
+
PROJECT_ROOT="$(printf '%s' "$input" | jq -r '.cwd // empty' 2>/dev/null || true)"
|
|
22
|
+
fi
|
|
23
|
+
[[ -z "$PROJECT_ROOT" ]] && PROJECT_ROOT="${CLAUDE_PROJECT_DIR:-$(pwd)}"
|
|
24
|
+
|
|
25
|
+
CONFIG_FILE="${PROJECT_ROOT}/.rulebook/rulebook.json"
|
|
26
|
+
HANDOFF_DIR="${PROJECT_ROOT}/.rulebook/handoff"
|
|
27
|
+
|
|
28
|
+
# Defaults
|
|
29
|
+
WARN_PCT=75
|
|
30
|
+
FORCE_PCT=90
|
|
31
|
+
MAX_CONTEXT_CHARS=1600000 # ~400k tokens ≈ 1.6M chars (rough 1:4 ratio)
|
|
32
|
+
|
|
33
|
+
# Override from config if available
|
|
34
|
+
if [[ -f "$CONFIG_FILE" ]] && command -v jq &>/dev/null; then
|
|
35
|
+
WARN_PCT=$(jq -r '.handoff.warnThresholdPct // 75' "$CONFIG_FILE" 2>/dev/null || echo 75)
|
|
36
|
+
FORCE_PCT=$(jq -r '.handoff.forceThresholdPct // 90' "$CONFIG_FILE" 2>/dev/null || echo 90)
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
# Try to find the transcript path from the session
|
|
40
|
+
# Claude Code stores transcripts as JSONL in ~/.claude/projects/<hash>/
|
|
41
|
+
# The hook input may or may not contain session info; we fall back to
|
|
42
|
+
# estimating from the input itself.
|
|
43
|
+
transcript_size=0
|
|
44
|
+
|
|
45
|
+
# Strategy 1: check the most recent JSONL in the project-specific Claude dir
|
|
46
|
+
CLAUDE_PROJECTS_DIR="${HOME}/.claude/projects"
|
|
47
|
+
if [[ -d "$CLAUDE_PROJECTS_DIR" ]]; then
|
|
48
|
+
latest_jsonl=$(find "$CLAUDE_PROJECTS_DIR" -name "*.jsonl" -type f -printf '%T@ %p\n' 2>/dev/null | sort -rn | head -1 | awk '{print $2}' || true)
|
|
49
|
+
if [[ -n "$latest_jsonl" && -f "$latest_jsonl" ]]; then
|
|
50
|
+
transcript_size=$(stat -c%s "$latest_jsonl" 2>/dev/null || stat -f%z "$latest_jsonl" 2>/dev/null || echo 0)
|
|
51
|
+
fi
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
# If we couldn't get transcript size, emit nothing (no-op)
|
|
55
|
+
if [[ "$transcript_size" -eq 0 ]]; then
|
|
56
|
+
printf '%s' '{}'
|
|
57
|
+
exit 0
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
# Estimate context percentage
|
|
61
|
+
pct=$(( transcript_size * 100 / MAX_CONTEXT_CHARS ))
|
|
62
|
+
|
|
63
|
+
if [[ "$pct" -ge "$FORCE_PCT" ]]; then
|
|
64
|
+
# Force mode: write urgent sentinel + emit strong instruction
|
|
65
|
+
mkdir -p "$HANDOFF_DIR"
|
|
66
|
+
touch "${HANDOFF_DIR}/.urgent"
|
|
67
|
+
msg="⚠️ CONTEXT AT ${pct}% (FORCE THRESHOLD). You MUST invoke /handoff NOW to save session state to .rulebook/handoff/_pending.md. After it succeeds, tell the user: '>>> TYPE /clear NOW — your context will be auto-restored in the next session <<<'. Do NOT continue working until the user has typed /clear."
|
|
68
|
+
jq -nc --arg msg "$msg" '{ hookSpecificOutput: { hookEventName: "Stop", additionalContext: $msg } }'
|
|
69
|
+
elif [[ "$pct" -ge "$WARN_PCT" ]]; then
|
|
70
|
+
msg="⚠️ Context at ${pct}%. Recommended: invoke /handoff to save session state. After it succeeds, tell the user to type /clear for a fresh session."
|
|
71
|
+
jq -nc --arg msg "$msg" '{ hookSpecificOutput: { hookEventName: "Stop", additionalContext: $msg } }'
|
|
72
|
+
else
|
|
73
|
+
# Below threshold — no-op
|
|
74
|
+
printf '%s' '{}'
|
|
75
|
+
fi
|
|
76
|
+
exit 0
|
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
# Claude Code PreToolUse hook for the Agent tool (PowerShell variant).
|
|
2
|
-
#
|
|
3
|
-
# Policy enforced by @hivehub/rulebook v5.3.0:
|
|
4
|
-
# - A single Agent call is fine (foreground or background).
|
|
5
|
-
# - Spawning multiple standalone background Agents is FORBIDDEN.
|
|
6
|
-
# Parallel multi-agent work MUST go through a Team so agents can
|
|
7
|
-
# communicate via SendMessage.
|
|
8
|
-
#
|
|
9
|
-
# Block any Agent invocation with run_in_background=true UNLESS it
|
|
10
|
-
# targets subagent_type=team-lead or provides a team_name. This forces
|
|
11
|
-
# background parallel work through a Team.
|
|
12
|
-
|
|
13
|
-
$ErrorActionPreference = 'Stop'
|
|
14
|
-
|
|
15
|
-
$input = [Console]::In.ReadToEnd()
|
|
16
|
-
$data = $null
|
|
17
|
-
try { $data = $input | ConvertFrom-Json } catch {}
|
|
18
|
-
|
|
19
|
-
$toolName = $null
|
|
20
|
-
if ($data -and $data.PSObject.Properties.Name -contains 'tool_name') { $toolName = $data.tool_name }
|
|
21
|
-
|
|
22
|
-
if ($toolName -ne 'Agent') {
|
|
23
|
-
Write-Output '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
|
|
24
|
-
exit 0
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
$runInBackground = $false
|
|
28
|
-
$subagentType = ''
|
|
29
|
-
$teamName = ''
|
|
30
|
-
if ($data.tool_input) {
|
|
31
|
-
if ($data.tool_input.PSObject.Properties.Name -contains 'run_in_background') {
|
|
32
|
-
$runInBackground = [bool]$data.tool_input.run_in_background
|
|
33
|
-
}
|
|
34
|
-
if ($data.tool_input.PSObject.Properties.Name -contains 'subagent_type') {
|
|
35
|
-
$subagentType = [string]$data.tool_input.subagent_type
|
|
36
|
-
}
|
|
37
|
-
if ($data.tool_input.PSObject.Properties.Name -contains 'team_name') {
|
|
38
|
-
$teamName = [string]$data.tool_input.team_name
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
if (-not $runInBackground) {
|
|
43
|
-
Write-Output '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
|
|
44
|
-
exit 0
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if ($subagentType -eq 'team-lead' -or $teamName) {
|
|
48
|
-
Write-Output '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
|
|
49
|
-
exit 0
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
$reason = 'POLICY VIOLATION: Spawning standalone background Agents is forbidden. Multi-agent parallel work MUST use a Team so agents can communicate via SendMessage. Either (a) use TeamCreate to create a team, (b) spawn a team-lead that creates the team, or (c) set team_name on the Agent call. See .claude/rules/multi-agent-teams.md for the policy.'
|
|
53
|
-
|
|
54
|
-
$out = @{
|
|
55
|
-
hookSpecificOutput = @{
|
|
56
|
-
hookEventName = 'PreToolUse'
|
|
57
|
-
permissionDecision = 'deny'
|
|
58
|
-
permissionDecisionReason = $reason
|
|
59
|
-
}
|
|
60
|
-
} | ConvertTo-Json -Compress -Depth 4
|
|
61
|
-
|
|
62
|
-
Write-Output $out
|
|
63
|
-
exit 0
|
|
1
|
+
# Claude Code PreToolUse hook for the Agent tool (PowerShell variant).
|
|
2
|
+
#
|
|
3
|
+
# Policy enforced by @hivehub/rulebook v5.3.0:
|
|
4
|
+
# - A single Agent call is fine (foreground or background).
|
|
5
|
+
# - Spawning multiple standalone background Agents is FORBIDDEN.
|
|
6
|
+
# Parallel multi-agent work MUST go through a Team so agents can
|
|
7
|
+
# communicate via SendMessage.
|
|
8
|
+
#
|
|
9
|
+
# Block any Agent invocation with run_in_background=true UNLESS it
|
|
10
|
+
# targets subagent_type=team-lead or provides a team_name. This forces
|
|
11
|
+
# background parallel work through a Team.
|
|
12
|
+
|
|
13
|
+
$ErrorActionPreference = 'Stop'
|
|
14
|
+
|
|
15
|
+
$input = [Console]::In.ReadToEnd()
|
|
16
|
+
$data = $null
|
|
17
|
+
try { $data = $input | ConvertFrom-Json } catch {}
|
|
18
|
+
|
|
19
|
+
$toolName = $null
|
|
20
|
+
if ($data -and $data.PSObject.Properties.Name -contains 'tool_name') { $toolName = $data.tool_name }
|
|
21
|
+
|
|
22
|
+
if ($toolName -ne 'Agent') {
|
|
23
|
+
Write-Output '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
|
|
24
|
+
exit 0
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
$runInBackground = $false
|
|
28
|
+
$subagentType = ''
|
|
29
|
+
$teamName = ''
|
|
30
|
+
if ($data.tool_input) {
|
|
31
|
+
if ($data.tool_input.PSObject.Properties.Name -contains 'run_in_background') {
|
|
32
|
+
$runInBackground = [bool]$data.tool_input.run_in_background
|
|
33
|
+
}
|
|
34
|
+
if ($data.tool_input.PSObject.Properties.Name -contains 'subagent_type') {
|
|
35
|
+
$subagentType = [string]$data.tool_input.subagent_type
|
|
36
|
+
}
|
|
37
|
+
if ($data.tool_input.PSObject.Properties.Name -contains 'team_name') {
|
|
38
|
+
$teamName = [string]$data.tool_input.team_name
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (-not $runInBackground) {
|
|
43
|
+
Write-Output '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
|
|
44
|
+
exit 0
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if ($subagentType -eq 'team-lead' -or $teamName) {
|
|
48
|
+
Write-Output '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
|
|
49
|
+
exit 0
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
$reason = 'POLICY VIOLATION: Spawning standalone background Agents is forbidden. Multi-agent parallel work MUST use a Team so agents can communicate via SendMessage. Either (a) use TeamCreate to create a team, (b) spawn a team-lead that creates the team, or (c) set team_name on the Agent call. See .claude/rules/multi-agent-teams.md for the policy.'
|
|
53
|
+
|
|
54
|
+
$out = @{
|
|
55
|
+
hookSpecificOutput = @{
|
|
56
|
+
hookEventName = 'PreToolUse'
|
|
57
|
+
permissionDecision = 'deny'
|
|
58
|
+
permissionDecisionReason = $reason
|
|
59
|
+
}
|
|
60
|
+
} | ConvertTo-Json -Compress -Depth 4
|
|
61
|
+
|
|
62
|
+
Write-Output $out
|
|
63
|
+
exit 0
|
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Claude Code PreToolUse hook for the Agent tool.
|
|
3
|
-
#
|
|
4
|
-
# Policy enforced by @hivehub/rulebook v5.3.0:
|
|
5
|
-
# - A single Agent call is fine (foreground or background).
|
|
6
|
-
# - Spawning multiple standalone Agents for parallel work is FORBIDDEN.
|
|
7
|
-
# Parallel multi-agent work MUST go through a Team so agents can
|
|
8
|
-
# communicate via SendMessage.
|
|
9
|
-
#
|
|
10
|
-
# Enforcement strategy:
|
|
11
|
-
# Block any Agent invocation with `run_in_background: true` UNLESS it
|
|
12
|
-
# targets `subagent_type: team-lead` or provides a `team_name`. This
|
|
13
|
-
# forces background parallel work to be coordinated through a Team.
|
|
14
|
-
#
|
|
15
|
-
# The hook reads the tool input JSON from stdin and emits a permission
|
|
16
|
-
# decision JSON on stdout, per Claude Code's PreToolUse hook contract.
|
|
17
|
-
|
|
18
|
-
set -euo pipefail
|
|
19
|
-
|
|
20
|
-
input="$(cat)"
|
|
21
|
-
|
|
22
|
-
tool_name="$(printf '%s' "$input" | jq -r '.tool_name // empty' 2>/dev/null || true)"
|
|
23
|
-
if [[ "$tool_name" != "Agent" ]]; then
|
|
24
|
-
# Not our concern — allow.
|
|
25
|
-
printf '%s' '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
|
|
26
|
-
exit 0
|
|
27
|
-
fi
|
|
28
|
-
|
|
29
|
-
run_in_background="$(printf '%s' "$input" | jq -r '.tool_input.run_in_background // false' 2>/dev/null || echo false)"
|
|
30
|
-
subagent_type="$(printf '%s' "$input" | jq -r '.tool_input.subagent_type // empty' 2>/dev/null || true)"
|
|
31
|
-
team_name="$(printf '%s' "$input" | jq -r '.tool_input.team_name // empty' 2>/dev/null || true)"
|
|
32
|
-
|
|
33
|
-
# Foreground single agent → always allowed.
|
|
34
|
-
if [[ "$run_in_background" != "true" ]]; then
|
|
35
|
-
printf '%s' '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
|
|
36
|
-
exit 0
|
|
37
|
-
fi
|
|
38
|
-
|
|
39
|
-
# Background agents must be part of a team OR be the team-lead coordinator.
|
|
40
|
-
if [[ "$subagent_type" == "team-lead" ]] || [[ -n "$team_name" ]]; then
|
|
41
|
-
printf '%s' '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
|
|
42
|
-
exit 0
|
|
43
|
-
fi
|
|
44
|
-
|
|
45
|
-
# Block standalone background agent.
|
|
46
|
-
reason="POLICY VIOLATION: Spawning standalone background Agents is forbidden. Multi-agent parallel work MUST use a Team so agents can communicate via SendMessage. Either (a) use TeamCreate to create a team, (b) spawn a team-lead that creates the team, or (c) set team_name on the Agent call. See .claude/rules/multi-agent-teams.md for the policy."
|
|
47
|
-
|
|
48
|
-
jq -nc --arg reason "$reason" '{
|
|
49
|
-
hookSpecificOutput: {
|
|
50
|
-
hookEventName: "PreToolUse",
|
|
51
|
-
permissionDecision: "deny",
|
|
52
|
-
permissionDecisionReason: $reason
|
|
53
|
-
}
|
|
54
|
-
}'
|
|
55
|
-
exit 0
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Claude Code PreToolUse hook for the Agent tool.
|
|
3
|
+
#
|
|
4
|
+
# Policy enforced by @hivehub/rulebook v5.3.0:
|
|
5
|
+
# - A single Agent call is fine (foreground or background).
|
|
6
|
+
# - Spawning multiple standalone Agents for parallel work is FORBIDDEN.
|
|
7
|
+
# Parallel multi-agent work MUST go through a Team so agents can
|
|
8
|
+
# communicate via SendMessage.
|
|
9
|
+
#
|
|
10
|
+
# Enforcement strategy:
|
|
11
|
+
# Block any Agent invocation with `run_in_background: true` UNLESS it
|
|
12
|
+
# targets `subagent_type: team-lead` or provides a `team_name`. This
|
|
13
|
+
# forces background parallel work to be coordinated through a Team.
|
|
14
|
+
#
|
|
15
|
+
# The hook reads the tool input JSON from stdin and emits a permission
|
|
16
|
+
# decision JSON on stdout, per Claude Code's PreToolUse hook contract.
|
|
17
|
+
|
|
18
|
+
set -euo pipefail
|
|
19
|
+
|
|
20
|
+
input="$(cat)"
|
|
21
|
+
|
|
22
|
+
tool_name="$(printf '%s' "$input" | jq -r '.tool_name // empty' 2>/dev/null || true)"
|
|
23
|
+
if [[ "$tool_name" != "Agent" ]]; then
|
|
24
|
+
# Not our concern — allow.
|
|
25
|
+
printf '%s' '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
|
|
26
|
+
exit 0
|
|
27
|
+
fi
|
|
28
|
+
|
|
29
|
+
run_in_background="$(printf '%s' "$input" | jq -r '.tool_input.run_in_background // false' 2>/dev/null || echo false)"
|
|
30
|
+
subagent_type="$(printf '%s' "$input" | jq -r '.tool_input.subagent_type // empty' 2>/dev/null || true)"
|
|
31
|
+
team_name="$(printf '%s' "$input" | jq -r '.tool_input.team_name // empty' 2>/dev/null || true)"
|
|
32
|
+
|
|
33
|
+
# Foreground single agent → always allowed.
|
|
34
|
+
if [[ "$run_in_background" != "true" ]]; then
|
|
35
|
+
printf '%s' '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
|
|
36
|
+
exit 0
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
# Background agents must be part of a team OR be the team-lead coordinator.
|
|
40
|
+
if [[ "$subagent_type" == "team-lead" ]] || [[ -n "$team_name" ]]; then
|
|
41
|
+
printf '%s' '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
|
|
42
|
+
exit 0
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
# Block standalone background agent.
|
|
46
|
+
reason="POLICY VIOLATION: Spawning standalone background Agents is forbidden. Multi-agent parallel work MUST use a Team so agents can communicate via SendMessage. Either (a) use TeamCreate to create a team, (b) spawn a team-lead that creates the team, or (c) set team_name on the Agent call. See .claude/rules/multi-agent-teams.md for the policy."
|
|
47
|
+
|
|
48
|
+
jq -nc --arg reason "$reason" '{
|
|
49
|
+
hookSpecificOutput: {
|
|
50
|
+
hookEventName: "PreToolUse",
|
|
51
|
+
permissionDecision: "deny",
|
|
52
|
+
permissionDecisionReason: $reason
|
|
53
|
+
}
|
|
54
|
+
}'
|
|
55
|
+
exit 0
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Claude Code SessionStart hook (matcher: "compact").
|
|
3
|
-
#
|
|
4
|
-
# Re-injects critical architectural context after a conversation
|
|
5
|
-
# compaction. Claude Code already re-loads CLAUDE.md on compact, so
|
|
6
|
-
# this hook is defense-in-depth: it outputs a short, always-fresh
|
|
7
|
-
# cheat sheet from `.rulebook/COMPACT_CONTEXT.md` so the model has
|
|
8
|
-
# the load-bearing reminders immediately available without waiting
|
|
9
|
-
# for the CLAUDE.md re-read.
|
|
10
|
-
#
|
|
11
|
-
# The file is user-editable. Rulebook seeds it during `init` from a
|
|
12
|
-
# stack-specific template and never overwrites it afterward.
|
|
13
|
-
|
|
14
|
-
set -euo pipefail
|
|
15
|
-
|
|
16
|
-
PROJECT_ROOT="$(pwd)"
|
|
17
|
-
CONTEXT_FILE="${PROJECT_ROOT}/.rulebook/COMPACT_CONTEXT.md"
|
|
18
|
-
|
|
19
|
-
if [[ ! -f "$CONTEXT_FILE" ]]; then
|
|
20
|
-
# Nothing to inject — emit a benign empty additionalContext.
|
|
21
|
-
printf '%s' '{"hookSpecificOutput":{"hookEventName":"SessionStart","additionalContext":""}}'
|
|
22
|
-
exit 0
|
|
23
|
-
fi
|
|
24
|
-
|
|
25
|
-
content="$(cat "$CONTEXT_FILE")"
|
|
26
|
-
|
|
27
|
-
# Emit as additionalContext via jq so we correctly escape newlines/quotes.
|
|
28
|
-
jq -nc --arg ctx "$content" '{
|
|
29
|
-
hookSpecificOutput: {
|
|
30
|
-
hookEventName: "SessionStart",
|
|
31
|
-
additionalContext: $ctx
|
|
32
|
-
}
|
|
33
|
-
}'
|
|
34
|
-
exit 0
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Claude Code SessionStart hook (matcher: "compact").
|
|
3
|
+
#
|
|
4
|
+
# Re-injects critical architectural context after a conversation
|
|
5
|
+
# compaction. Claude Code already re-loads CLAUDE.md on compact, so
|
|
6
|
+
# this hook is defense-in-depth: it outputs a short, always-fresh
|
|
7
|
+
# cheat sheet from `.rulebook/COMPACT_CONTEXT.md` so the model has
|
|
8
|
+
# the load-bearing reminders immediately available without waiting
|
|
9
|
+
# for the CLAUDE.md re-read.
|
|
10
|
+
#
|
|
11
|
+
# The file is user-editable. Rulebook seeds it during `init` from a
|
|
12
|
+
# stack-specific template and never overwrites it afterward.
|
|
13
|
+
|
|
14
|
+
set -euo pipefail
|
|
15
|
+
|
|
16
|
+
PROJECT_ROOT="$(pwd)"
|
|
17
|
+
CONTEXT_FILE="${PROJECT_ROOT}/.rulebook/COMPACT_CONTEXT.md"
|
|
18
|
+
|
|
19
|
+
if [[ ! -f "$CONTEXT_FILE" ]]; then
|
|
20
|
+
# Nothing to inject — emit a benign empty additionalContext.
|
|
21
|
+
printf '%s' '{"hookSpecificOutput":{"hookEventName":"SessionStart","additionalContext":""}}'
|
|
22
|
+
exit 0
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
content="$(cat "$CONTEXT_FILE")"
|
|
26
|
+
|
|
27
|
+
# Emit as additionalContext via jq so we correctly escape newlines/quotes.
|
|
28
|
+
jq -nc --arg ctx "$content" '{
|
|
29
|
+
hookSpecificOutput: {
|
|
30
|
+
hookEventName: "SessionStart",
|
|
31
|
+
additionalContext: $ctx
|
|
32
|
+
}
|
|
33
|
+
}'
|
|
34
|
+
exit 0
|