c2638668e3
leo 2026-08-20:「同一個 plugin 你用,薄殼也用,保證兩邊同步」
「我要你幫雲端做薄殼,永遠都有問題,你要做的就是這組設定
你自己可以 dogfooding」
搬進來:41 支 hook(51 條註冊)/7 支 command/2 支 skill/23 支腳本。
不搬 .env、wiki、docs——那些是知識不是環境。
51 條 hook 路徑全部從 $CLAUDE_PROJECT_DIR/.claude/hooks/ 改成 ${CLAUDE_PLUGIN_ROOT}/hooks/,
零漏網。那正是薄殼一直壞掉的根:雲端 cwd 不是真身,寫死路徑就斷。
尚未驗證:Claude Code 能不能從私有 Gitea repo 裝 marketplace(要憑證)。
下一步就是在本機實際裝一次,通了才動雲端 bootstrap.sh。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
53 lines
1.7 KiB
Bash
Executable File
53 lines
1.7 KiB
Bash
Executable File
#!/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 <<EOF
|
||
🚫 專案禁令攔截:$FILE_PATH 命中禁改規則($pattern)。
|
||
|
||
這是本專案 .claude/hooks/pre-write-guard.sh 設定的硬底線。
|
||
要動 → 先和負責人確認,並更新禁令設定。
|
||
EOF
|
||
exit 2
|
||
;;
|
||
esac
|
||
done
|
||
|
||
exit 0
|