diff --git a/hooks/hooks.json b/hooks/hooks.json index d40bde1..2d62dcd 100644 --- a/hooks/hooks.json +++ b/hooks/hooks.json @@ -1,18 +1,9 @@ { "hooks": { - "SessionStart": [{ + "Stop": [{ "hooks": [{ - "type": "command", - "command": "bash \"$CLAUDE_PLUGIN_ROOT/hooks/scripts/detect-project.sh\"", - "timeout": 10 - }] - }], - "PreToolUse": [{ - "matcher": "Write|Edit", - "hooks": [{ - "type": "command", - "command": "bash \"$CLAUDE_PLUGIN_ROOT/hooks/scripts/detect-file-type.sh\" \"$TOOL_INPUT\"", - "timeout": 10 + "type": "prompt", + "prompt": "--- skill detect ---\nRead the user's prompt. Detect what language, framework, tool, or topic they are asking about. If it matches any hub-guide skill concept (see available skills), activate that skill's rules for your response.\n\nDetection is concept-based, not keyword-based — works regardless of what language the user speaks.\n---" }] }] } diff --git a/hooks/scripts/detect-file-type.sh b/hooks/scripts/detect-file-type.sh deleted file mode 100755 index 2677d60..0000000 --- a/hooks/scripts/detect-file-type.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# hub-guide: detect file extension from tool input and suggest language-specific rules -# Runs before Write/Edit to inject best-practice context - -TOOL_INPUT="$1" - -# Extract file path from tool input (looks for "file_path" in JSON) -FILE_PATH=$(echo "$TOOL_INPUT" | grep -o '"file_path"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"file_path"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/') -EXT="${FILE_PATH##*.}" - -case "$EXT" in - ts|tsx) echo "📐 .${EXT} → typescript:strict" ;; - py) echo "📐 .py → python:strict" ;; - rs) echo "📐 .rs → rust:strict" ;; - go) echo "📐 .go → go:strict" ;; - js|jsx) echo "📐 .${EXT} → typescript:esm" ;; - Dockerfile|dockerfile) echo "📐 Dockerfile → docker:minimal" ;; - yml|yaml) echo "📐 .${EXT} → ci-cd+docker" ;; -esac diff --git a/hooks/scripts/detect-project.sh b/hooks/scripts/detect-project.sh deleted file mode 100755 index 16938fb..0000000 --- a/hooks/scripts/detect-project.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/bin/bash -# hub-guide: detect project type and suggest relevant skills -# Runs at SessionStart to prime best-practice skills - -PROJECT_DIR="$(pwd)" -SKILLS="" - -# Helper: check if a package.json field contains a dependency name -has_dep() { - local name="$1" - grep -q "\"$name\"" package.json 2>/dev/null -} - -# Monorepo indicators -if [ -f "pnpm-workspace.yaml" ] || [ -f "lerna.json" ] || [ -f "nx.json" ] || [ -f "rush.json" ] || [ -f "turborepo.json" ]; then - SKILLS="$SKILLS, monorepo" -fi - -# TypeScript / JavaScript -if [ -f "tsconfig.json" ] || [ -f "jsconfig.json" ]; then - SKILLS="$SKILLS, typescript" - # Framework detection from package.json dependencies - if has_dep "next"; then SKILLS="$SKILLS, nextjs"; fi - if has_dep "elysia"; then SKILLS="$SKILLS, elysiajs"; fi - if has_dep "hono"; then SKILLS="$SKILLS, hono-backend"; fi - if has_dep "drizzle-orm"; then SKILLS="$SKILLS, drizzle-database"; fi -fi - -# React (detect even without tsconfig) -if [ -f "vite.config.ts" ] || [ -f "vite.config.js" ] || has_dep "react" 2>/dev/null; then - # avoid double-adding if already caught by typescript block - case "$SKILLS" in *react-frontend*) ;; *) SKILLS="$SKILLS, react-frontend" ;; esac -fi - -# Next.js config file — catches JS-only projects too -if [ -f "next.config.js" ] || [ -f "next.config.ts" ] || [ -f "next.config.mjs" ]; then - case "$SKILLS" in *nextjs*) ;; *) SKILLS="$SKILLS, nextjs" ;; esac -fi - -# Python -if [ -f "pyproject.toml" ] || [ -f "setup.py" ] || [ -f "setup.cfg" ] || [ -f "requirements.txt" ] || [ -f "Pipfile" ] || [ -f "poetry.lock" ] || [ -f "uv.lock" ]; then - SKILLS="$SKILLS, python" -fi - -# Rust -if [ -f "Cargo.toml" ]; then - SKILLS="$SKILLS, rust" -fi - -# Go -if [ -f "go.mod" ]; then - SKILLS="$SKILLS, go" -fi - -# Docker -if [ -f "Dockerfile" ] || [ -f "docker-compose.yml" ] || [ -f "compose.yml" ] || ls Dockerfile.* 2>/dev/null | grep -q .; then - SKILLS="$SKILLS, docker" -fi - -# CI/CD -if [ -d ".github/workflows" ] || [ -f ".gitlab-ci.yml" ] || [ -f "Jenkinsfile" ] || [ -f "bitbucket-pipelines.yml" ]; then - SKILLS="$SKILLS, ci-cd" -fi - -# Always-active core skills (loaded every session) -CORE="engineering-principles, clean-code, clean-architecture, testing, error-handling, security, git-workflow, api-design" - -SKILLS="${SKILLS#, }" # strip leading ", " - -echo "📐 [hub-guide] ${PROJECT_DIR}" -echo "📐 core: ${CORE}" -if [ -n "$SKILLS" ]; then - echo "📐 active: ${SKILLS}" -fi