#!/bin/bash # PreToolUse hook 範本骨架 —— 專案自訂禁令 # wishlist §2 可選:讓使用者自訂專案禁令(例:「KBDB 禁動表」「某目錄唯讀」)。 # # 預設不啟用。要用時: # 1. 在下面 FORBIDDEN_PATTERNS 填入禁改的路徑/檔名 pattern # 2. 到 .claude/settings.json 的 PreToolUse 加掛這支 # # 掛在 PreToolUse(matcher: Write|Edit)。stdin 收到 JSON:{ tool_name, tool_input: { file_path } } # 命中禁令 → exit 2 擋。 # # 誠實限制:只擋直接寫檔。bash 繞道、helper 間接改動擋不到。留痕可審 ≠ 技術防偽。 set -euo pipefail # ── 專案自訂:禁改的 pattern(一行一個,case glob 語法)────── # 範例(已註解,啟用前請改成自己的): # "*/db/schema.sql" # 禁手改 schema # "*/migrations/*" # migration 一旦建立不可改 FORBIDDEN_PATTERNS=( # "*/your/protected/path/*" ) # 沒設任何禁令 → 直接放行(骨架預設狀態) [ ${#FORBIDDEN_PATTERNS[@]} -eq 0 ] && exit 0 INPUT=$(cat) if command -v jq >/dev/null 2>&1; then FILE_PATH=$(printf '%s' "$INPUT" | jq -r '.tool_input.file_path // empty') else FILE_PATH=$(printf '%s' "$INPUT" | grep -o '"file_path"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"file_path"[[:space:]]*:[[:space:]]*"//;s/"$//') fi [ -z "$FILE_PATH" ] && exit 0 for pattern in "${FORBIDDEN_PATTERNS[@]}"; do # shellcheck disable=SC2254 case "$FILE_PATH" in $pattern) cat >&2 <