Prompt ืืื ืืงืื ืชืืฆืื ืืืื ืคืขื ืืืช. Hook ืืื ืืงืื ืชืืฆืื ืืืื ืืื ืคืขื.
ืืืขืืจ ื-prompt-engineer ื-harness-engineer ืืื ืืืืื ืืื ืฉืืืืฉ ืฉืืื ื-Claude Code ืืืื ืืืคืื-ืืื ืืืืชื.
ืืืืจืื ืืื ืืกืืืจ ืืื ืืื ืืช settings.json ืฉืขืืฉื ืืช ืืขืืืื ืืงืฉื โ ืืคื ื ืฉืืชื ืืืชื prompt.
ืืคื ื ืฉืืชื ืืืชื prompt ืืื ืืื, ืืฉ ืื ืืืืื ืืช ืืืชืื config ืืื ืืื โ ืฉืืขืืื ืขืืืจื ืืืืช ืคืขืืื. ืื ืืืืื ืืื ืืืื ืืื ืฉืืืืฉ ืฉืืื ื-Claude Code ืืืื ืืื ืืฃ ืืืืชื ืฉืื, ืืื ืื ืืืงืื ืฉืืืื ืจืื ืืืคืชืืื ืคืฉืื ืื ื ืื ืกืื. ืื ืคืืชืืื ืืช ื-CLI, ืืชืืืืื ืืืืจ, ืืืชืคืืืื ืฉืืื ืื "ืืืืจ" ืืช ืืืขืืคืืช ืฉืืื.
ื-Claude Code ืืฉ ืฉืืืฉ ืจืืืช ืืืืจืืช ืฉืืชืขืจืืืืช ืื ืืื ืืคื ืกืืจ ืขืืืคืืืืช ืืจืืจ โ ืืื ืืืืื ืืช ืืกืืจ ืืื ืื ืืืืฉืืื ืืฉืืื ืืืืชืจ ืฉืื ื ืจืืื ืืฆื ืืงืืืืช BDNHOST.
User settings ื ืืฆื ื-~/.claude/settings.json ืืื ืขื ืื ืืคืจืืืงืืื ืฉืื. ืื ืืืงืื ื-theme, ื-model ืืจืืจืช ืืืื, ืืืืขืืคืืช ืืืฉืืืช ืฉืืชื ืื ืจืืฆื ืืืืืจ ืขื ืขืฆืื ืืื ืคืจืืืงื. Project settings ื ืืฆื ื-.claude/settings.json ืืฉืืจืฉ ืืคืจืืืงื โ ื ืืื ื-git, ืื ืขื ืื ืืฆืืืช. ืื ืืืงืื ื-hooks ื-permissions ืฉืืืืืืืื ืืคืจืืืงื: hook ืฉืืืกื git push --force ืขื ื-main, ืื ืืืืจืช ืืืื ืกืคืฆืืคื ืืขืืืื ืืื. Project local ื-.claude/settings.local.json โ ืื ื ืื ืก ื-git, ื ืืขื ืืขืงืืคืืช ืืืฉืืืช ืฉืื ืืขื ื-project settings.
ืืฉืืฉ ืกืชืืจื โ ืืืื ืืืืจื ืืืืจืช? ืืืืืง ืืืืฉ: Enterprise (managed-settings.json ืฉืื ืืื ืืจืืืง) โ Project local โ Project โ User. ืืืืืื ืืืจืืช, ืื ืืืจืืื ืฉืื ืืกืจ ืขื ืฉืืืืฉ ืืืืื ืืกืืื ื-enterprise โ ืืฃ ืืืืจืช user ืื project ืื ืชืขืงืืฃ ืืช ืื. ืื ืืชื ืจืืฆื ืืขืงืืฃ ืืืืจืช project ืืืืืงื ืืืฉืืช, ืืฉืชืืฉ ื-local.
ืืขืืช ืงืืืกืืช: ืืืชืื hooks ื-~/.claude/settings.json ืืืงืื ื-.claude/settings.json. ืืชืืฆืื โ ื-hooks ืฉืื ืคืืขืืื ืื ืืคืจืืืงืืื ืฉืื ืฆืจืืืื ืืืชื, ืืืจืืข ืืืชืจ, ืืืจื ืฆืืืช ืฉืื ืื ืืงืืืื ืืช ืืืชื ืืื ื ืื ืืืืืจื ืื ื ืื ืกืช ื-git.
~/.claude/settings.json ืืืื ืืืื ืฉืื ื ืืืืืฅ ืืื ืืคืชื ืืืชืื ืืขืฉืจ ืืืงืืช ืืจืืฉืื ืืช ืฉืื ืขื Claude Code:
{
"model": "claude-opus-4-7",
"theme": "dark",
"permissions": {
"deny": [
"Bash(rm -rf:*)",
"Bash(git push --force:*)",
"Bash(:*DROP TABLE*)"
]
},
"env": {
"MCP_TIMEOUT": "30000"
}
}
Hooks ืื ืืื ืื ืื ืฉืืืคื ืืช Claude Code ืืืกืืืข ืืืืขืฅ ืขื ืฉืื ืืื. ืื hook ืืื ืกืงืจืืคื ืฉืืชื ืืืชื, ืฉืจืฅ ืืืืืืืืช ืืืืจืืขืื ืฉืืืืจืช โ ืืคื ื ืฉืืื ืืชืืฆืข, ืืืจื ืฉืืื ื ืืืจ, ืืฉืืฉืชืืฉ ืฉืืื ืคืจืืืคื, ืืฉืกืฉื ื ืกืืจ. ื-hook ืืงืื JSON ื-stdin, ืืืืืจ exit code, ืืืืื ืืืกืื ืคืขืืืืช (ืืืงืจื ืฉื PreToolUse) ืื ืจืง ืืชืขื ืืืชื.
ื-Claude Code 2026 ืืฉ ืฉืืื ื ืืืจืืขืื ืฉืืชื ืืืื ืืืืืื ืืื. ืื ืืื ืืื ืคืืชื ืืืช ืืืจืช ืืืืืืืฆืื:
PreToolUse โ ืจืฅ ืืคื ื ืฉ-Claude ืืืฆืข tool call. ืื ื-hook ืืืฆื ืขื exit code ืื-ืืคืก, ืืงืจืืื ื ืืกืืช ืืืืืืื. ืื ื-event ืืื ืืฉืื โ ืืื ืืชื ืืื ืข ืืกืื ืืช. ืืื ืืงืื ื-stdin ืืช tool_name, tool_input, ื-session_id.
PostToolUse โ ืจืฅ ืืืจื ืฉ-tool ืืชืืฆืข. ืื ืืืื ืืืกืื (ืืืจ ืงืจื), ืืื ืืืื ืืืฆืข ืคืขืืืืช ืชืืืื: format-on-save, ืืืืื, ืืชืจืืืช. UserPromptSubmit โ ืจืฅ ืืฉืืฉืชืืฉ ืฉืืื prompt ืืืฉ. ืฉืืืืฉื ื-injection ืฉื context ืืืืืืื ืื ืืกืื ืื. Stop โ ืจืฅ ืืฉืืกืฉื ืืกืชืืื. ืืื ืืืชืืื ืกืืืื ืืืื ืื ืื ืงืื tmpfiles.
Notification โ ืจืฅ ืืฉ-Claude ืฉืืื ืืชืจืื ื-UI. ื ืืืจ ืืื ืฉืืืืฉื ืืืืืืจ ื-Slack/Telegram. SubagentStop โ ืจืฅ ืืฉ-sub-agent (Explore, Plan, ืื custom) ืกืืื ืืช ืขืืืืชื. ืืขืืื ืฉื 2026 ืฉืื ืจืฆืื 5 sub-agents ืืืงืืื, ืื ื-event ืฉ-ืืืคืฉืจ ืืขืงืื ืืืจื ืื ืืื ืื ืคืจื.
SessionStart โ ืจืฅ ืืชืืืืช ืื ืกืฉื ืืืฉ (ืคืชืืื ืจืืฉืื ืืช, --resume, --continue, ืื clear). ืื ืืืงืื ืืืืจืืง context ืืื ืื ืฉืืฉืชื ื โ git status, ืืืืจืืช ืืขืจืืช, ืกืืืืก ืคืจืืกื. ืืคืฉืจ ืืืืืื ืืื ืกืื ืืืคืขืื ืืจื matcher: "startup|resume|clear". PreCompact โ ืจืฅ ืืคื ื ืฉ-Claude ืืืฆืข compaction ืืืืืืื ืื ืืื ื (/compact). ืฉืืืืฉื ืืืืืื ืืจื ืกืงืจืืคื ืืื ืืคื ื ืฉ-context ืืชืืืืฅ, ืื ืืื ืืขืช compaction ืืขืช ืขืืืื ืงืจืืืืช.
ืืืื ื ืฉื hook ื-settings.json ืืื ืชืืื ืืืชื ืืืจ: ืฉืื hooks ืขื ืืขืจื ืืื event, ืืื item ืืืืืจ matcher (regex ืขื ืฉื ืืืื) ื-command (ืืกืงืจืืคื ืฉืืจืืฅ).
git push --force. ืฉืืืจ ืืืชื ื-~/.claude/hooks/block-force-push.sh, ืชื ืืจืฉืื (chmod +x), ืืืืกืฃ ื-settings.json:
{
"hooks": {
"PreToolUse": [{
"matcher": "Bash",
"command": "~/.claude/hooks/block-force-push.sh"
}]
}
}
ืชืืืืจืื ืืื ื ืืืื. ืืื ืืงืกื ืฉื hooks ืืชืืื ืจืง ืืฉืืชื ืจืืื ืืคืืกืื ืืืืชืืื ืืคืขืืื. ืื ื ืืืืฉื ืฉืื ื ืืฉืชืืฉ ืืื ืืขืืืื ืืืืืืืืืช ืฉื BDNHOST โ ืื ืืื ืืื ืืืืืฃ ืื 50+ prompts ืืืืจื ืืื.
#!/bin/bash
# ~/.claude/hooks/block-destructive.sh
input=$(cat)
cmd=$(echo "$input" | jq -r '.tool_input.command // ""')
if echo "$cmd" | grep -qE 'rm -rf|git push --force|DROP TABLE'; then
echo "โ Blocked destructive command: $cmd" >&2
exit 1
fi
exit 0
#!/bin/bash
# ~/.claude/hooks/auto-format.sh (PostToolUse + matcher: "Edit|Write")
input=$(cat)
file=$(echo "$input" | jq -r '.tool_input.file_path // ""')
case "$file" in
*.js|*.ts|*.tsx|*.jsx) prettier --write "$file" ;;
*.py) black "$file" ;;
*.go) gofmt -w "$file" ;;
esac
exit 0
#!/bin/bash
# ~/.claude/hooks/daily-summary.sh (Stop)
date_str=$(date +%Y-%m-%d)
log_dir="$HOME/.claude/logs"
mkdir -p "$log_dir"
input=$(cat)
session=$(echo "$input" | jq -r '.session_id')
echo "[$session] closed at $(date -Is)" >> "$log_dir/$date_str.log"
ืื ืืืคืืก ืฉืื ื ืืฉืชืืฉ ืื ืืคืขืืืืช ืืขืืืช blast radius ืืืฆืื ื โ ืฉืืืืช ืืืืขืืช, ืคืจืกืื ืคืืกืืื, ืืืื ืืจืืืกื ืืฉืจืื. ื-hook ืืืื ืืช ืืืื, ืฉืืื ืืชืจืื ืืืืืจื ืขื ืชืืื ืืคืขืืื, ืืืืื ืืงืืืฅ ืืืฉืืจ. ืื ืชืื 60 ืฉื ืืืช ืื ืงืืื ืืืฉืืจ โ ืืคืขืืื ื ืืกืืช.
#!/bin/bash
# ~/.claude/hooks/approval-gate.sh (PreToolUse + matcher: "mcp__whatsapp__.*")
input=$(cat)
tool=$(echo "$input" | jq -r '.tool_name')
body=$(echo "$input" | jq -r '.tool_input.message // .tool_input.text')
# Notify on Telegram
curl -s "https://api.telegram.org/bot$TG_TOKEN/sendMessage" \
-d chat_id=$TG_CHAT_ID \
-d text="๐ก Approve $tool? Reply /approve or /deny within 60s. Body: $body"
# Wait for approval file
for i in $(seq 1 60); do
[ -f /tmp/claude-approve ] && rm /tmp/claude-approve && exit 0
sleep 1
done
echo "โ No approval โ blocking $tool" >&2
exit 1
#!/bin/bash
# ~/.claude/hooks/lint-before-commit.sh (PreToolUse + matcher: "Bash")
input=$(cat)
cmd=$(echo "$input" | jq -r '.tool_input.command // ""')
if echo "$cmd" | grep -q '^git commit'; then
npm run lint || { echo "โ Lint failed" >&2; exit 1; }
fi
exit 0
matcher ืืื regex ืขื ืฉื ืืืื. ืืืืืืืช ืืงืืืืืช: "Bash" ืืื ืคืงืืืช shell, "Edit|Write" ืืื ืฉืื ืื ืงืืืฅ, "mcp__github__.*" ืืื ืืื ื-GitHub MCP, ".*" ืืื ืืื. ืื ืื ืืฆืืื ืื matcher, ื-hook ืืจืืฅ ืขื ืื tool call โ ืฉืืืืฉื ืืืืืื ื ืืืืืื, ืืื ืืืืจืืช ื-overhead.
Hooks ืื ืืื ื ืืงืืืืืช โ ืื ืจืฆืื, ืืืืงืื, ืืืกืืื. Permissions ืื ืืื ื ืืงืืจืืืืืช โ ืืชื ืืฆืืืจ ืืจืืฉ ืื ืืืชืจ ืืื ืืกืืจ, ื-Claude ืขืฆืื ืืืืฃ ืืช ืื ืืคื ื ืฉืืืื ื ืืืฉ ืืืคืขืื hook. ืฉื ื ืืื ืื ืื ืื ืืฉืืืืื ืื ืืช ืื: permissions ืืืืืื ืฉืืืืื ืืืจืืจืื, hooks ืืืืืืงื ืืื ืืืช.
ื-permissions block ื-settings.json ืืืื ืฉืืืฉื ืืขืจืืื: allow, deny, ื-ask. ืื ืืื ืืงืื patterns ืืคืืจืื ToolName(filter:value). ืืืืืืืช: Bash(rm:*) ืชืืคืก ืื ืคืงืืื ืฉืืชืืืื ื-rm, Bash(git push --force:*) ืชืืคืก push --force ืกืคืฆืืคืืช, Edit(/etc/*) ืชืืคืก ืขืจืืื ืฉื ืื ืงืืืฅ ื-/etc.
ืื ืืืช ืืกืืืืืช ืฉืืืจืืืช ืืื ืืจืื ืืืืืืื. ืืืฉืช allow-list ืืืืจืช: "Claude ืืืื ืืืจืืฅ ืจืง ืืช ืื ืฉืื ื ืืืฉืจืชื ืืืคืืจืฉ". ืืืฉืช deny-list ืืืืจืช: "Claude ืืืื ืืืจืืฅ ืืื ืืืื ืื ืฉืื ื ืืกืจืชื". ืขื ืื ืืืจ, allow-list ื ืจืืืช ืืืืื ืืืชืจ. ืืคืืขื โ ืืื ืืฉืชืงืช.
ืืขืืืื ืืืืชืืช, ืืชื ืื ืืืืข ืืจืืฉ ืืืื ืืืื ืชืฆืืจื. ืื ืชืืชืื allow: [Bash(npm:*), Bash(git status:*), Bash(ls:*)] โ ืืื ืคืขื ืฉ-Claude ืืฆืืจื ืืืืืง process ืื ืืงืจืื ืงืืืฅ ืืื ืืืชืงืข ืืืืงืฉ ืืืฉืืจ. ืื ืืืื ืืช ืื ืืืชืจืื ืฉื agentic AI. ืืคืชืจืื ืื ืืื ืืื deny-list ืืืืงื โ ืืืกืืื ืืช ืืกืคืฆืืคื ืืืกืืื (rm -rf, force push, drop table, ืืฉืืคืช secrets) ืื ืืชื ืื ื-Claude ืืขืืื ืืืคืฉื ืืื ืืฉืืจ.
ื-baseline ืฉืื ื ื ืืชื ืืื ืืงืื BDNHOST: deny ื-rm -rf, ื-git push --force, ื-DROP TABLE, ืืืขืจืืื ืฉื .env ืื id_rsa. ืื ืืืกื 95% ืืืืกืื ืืช ืืจืืืืืื. ืืช ื-5% ืื ืืชืจืื โ ืืชื ืชืืคืก ืขื hooks ืืื ืืืื.
ask ืืื ืืืืฆืข โ ืคืขืืืืช ืฉืืชื ืจืืฆื ืฉืืชืืฆืขื ืืื ืขื ืืืฉืืจ ืคืจ-ืืงืจื. ืืืืื: Bash(npm install:*) โ ืืฉืขืืืืื ืืคืจืืืงื ืขื dependencies ืืืฆืื ืืื, ืืชื ืจืืฆื ืืจืืืช ืื ืืืชืงื ืืคื ื ืฉืื ืงืืจื.
~/.claude/settings.json ืืงืืืืช baseline ืฉืืืกื ืืช ืจืื ืืืกืื ืืช:
{
"permissions": {
"deny": [
"Bash(rm -rf:*)",
"Bash(git push --force:*)",
"Bash(git push -f:*)",
"Bash(:*DROP TABLE*)",
"Bash(:*DROP DATABASE*)",
"Edit(.env)",
"Edit(.env.*)",
"Edit(*id_rsa*)",
"Write(.env)",
"Read(*credentials*)"
],
"ask": [
"Bash(npm install:*)",
"Bash(pip install:*)",
"Bash(rm:*)"
]
}
}
ืืคืขืืื, ืืฉืืืื ืืื ืืืงื ื-Claude Code ืืืืขื ืื ื-hook ืืื ื-permission, ืืื ืืืฉืชื ื ืกืืืื ืืื ืคืฉืื. Env vars ืื ืืืชื ืืกืืื ืฉืืฉื ื ืืช ืืชื ืืืืช ื-CLI ืืจืื ืืืกืืกืืช โ ืืืืื API key ืืื ืืฉืชืืฉ, ืืื ืืื ืืชืืืจ ื-MCP servers, ืืืื ืืื ืืชืืืจ ื-Bedrock ืื Vertex.
ANTHROPIC_API_KEY โ ืืืกืืืื ืฉืื. ืืคืฉืจ ืืฉืื ื-shell env ืื ื-settings.json ืชืืช "env". ืื ื ืืขืืืฃ shell env ืืื ืื ืืกืื commit ืืืขืืช. ANTHROPIC_BASE_URL โ ืื ืืชื ืขืืื ืืืืืจื proxy ืืจืืื ื ืื ืืจื OpenRouter, ืืื ืืชื ืืืืืจ ืืช ื-endpoint. ืฉืืืืฉื ืื ื-Bedrock ืขื CLAUDE_CODE_USE_BEDROCK=1.
MCP_TIMEOUT โ ืืจืืจืช ืืืื ืืื 30 ืฉื ืืืช, ืืื ืืกืคืืง ื-90% ืื-MCP servers. ืืื ืื ืืชื ืจืฅ ืขื Asana MCP ืื Canva MCP ืฉืืืฆืขืื API calls ืืจืืืื, ืืชื ืจืืฆื ืืืขืืืช ืืช ืื ื-60000 (ืืืืืฉื ืืืช). MCP_TOOL_TIMEOUT โ ืืื MCP_TIMEOUT ืืื ืกืคืฆืืคื ืืื ืงืจืืืช tool, ืื ืืืชืืืจืืช ืืจืืฉืื ืืช.
MCP_DEBUG=true โ ืืฆื ืืืืื. ืืฉื-MCP server ื ืืคื ืืฉืงื (ืืื ืงืืจื), ืืคืขืืช ืื ืชืจืื ืื ืืืืืง ืื ื ืฉืื ื-stdio ืืืื ืืฉืจืช ืื ืขื ื. ืืฆืืชื ืืืชื ืขืฉืจืืช ืฉืขืืช ืฉื ืืืืื. DISABLE_TELEMETRY=1 โ ืื ืืชื ืื ืจืืฆื ืฉืืืื ืืืืื ืื ืื ืืื ื-Anthropic. DISABLE_AUTOUPDATER=1 โ ืืกืืืืืช CI ืฉืืชื ืื ืจืืฆื ืฉ-Claude ืืขืืื ืืช ืขืฆืื ืืืืฆืข ืจืืฆื.
~/.claude/settings.json ืืคืชื ืกืฉื ืืืฉ. ืื ืืงืจืืืืช ืืืฆืื ื-stderr:
{
"env": {
"MCP_DEBUG": "true",
"MCP_TIMEOUT": "60000",
"MCP_TOOL_TIMEOUT": "120000"
}
}
/statusline-setupClaude Code TUI ืฉืื ืืืื ืฉืืจืช status ืืชืืชืืช. ืืจืืจืช ืืืืื ืืื ืืืฉื โ ืฉื ืืืื ืืฉืขื. ืืื ืื ืืืืื ืืช ืืืืคืืืืืืฆืื ืืืืืืืืช ืฉืจืื ืืืคืชืืื ืืคืกืคืกืื: shell ืฉื ืืืืข ืฉืืชื ืจืืื ืื ืืืื ืืื ืืขืฆืืจ ืืช ืืขืืืื.
ืืื ืื ืื ืคืฉืื: ืืชื ืืืชื ืกืงืจืืคื (bash/python/node) ืฉืืืคืืก ืฉืืจื ืืืช ื-stdout. Claude ืงืืจื ืืืชื ืืืฆืื. ืืกืงืจืืคื ืจืฅ ืืื update ืฉื ื-UI, ืื ืฉืืืจ ืขื ืืืืจืืช (ืคืืืช ื-100ms).
ืืืจื ืืืืืจื ืืืืชืจ ืืื ื-skill ืืจืฉืื /statusline-setup โ ืืคืขืื wizard ืืื ืืจืืงืืืื ืฉืืฆืื ืืื ืชืื ืืืช (default, git-aware, cost-aware) ืืืืืืจ ืืช settings.json ืขืืืจื. ืืืจื ืืืื ืืช: ืืืกืฃ ืฉืื statusLine ื-settings.json ืขื "command" ืฉืืฆืืืข ืขื ืืกืงืจืืคื ืฉืื.
ืื ืื ื ืฉื ืืกืืืืก ืฉืื: ืคืจืืืงื (ืฉื ืืชืืงืืื), git branch, cost ืขื ืื (ืกื ืืืืงื ืื ืฉืฆืจืืชื ืืกืฉื ืืื * ืืืืจ Opus), ื-ืฆืืข ืืืืจื ืื ืืงืืกื ืขืืจ $5. ืื ืืืจื ืื ืืืืืช ืืืืข ืืืืืจ ืืื ืืืคืืจ ื-logs.
#!/bin/bash
# ~/.claude/statusline.sh
project=$(basename "$PWD")
branch=$(git branch --show-current 2>/dev/null || echo "no-git")
cost=$(jq -r '.session.cost_usd // 0' < /dev/stdin)
printf "๐ %s ยท ๐ฟ %s ยท ๐ฐ \$%.2f" "$project" "$branch" "$cost"
ื-settings.json:
{
"statusLine": {
"command": "~/.claude/statusline.sh"
}
}
ื-hook ืฉืื ืื ืจืฅ. ืืชื ืื ืืืืข ืืื. ืืื ืืืืขืช ืฉืืืื. ืืจืื ืืื ืืคืื ืช ืืืืืื ืฉื Claude Code hooks โ ืืงืื ืฉืื ืืืืชื ืฉืขืืช, ืืฉืืฉ ืื ืขืืฉืื checklist ืฉื 5 ืืขืืืช ื ืคืืฆืืช.
ืื ืืฉ ืคืกืืง ืืกืจ ืื ืืจืืื ืื ืกืืืจื ื-~/.claude/settings.json โ Claude Code ืื ืืฆืื ืฉืืืื. ืืื ืคืฉืื ืืชืขืื ืืื ื-hooks ืืืืฉืื ืืขืืื ืืจืืื. ืชืืื ืชืืืื ืขื:
jq . ~/.claude/settings.json
ืื ืื ืืืืืจ parse error โ ืชืงื ืืคื ื ืฉืืชื ืืืฉืื ืืืื.
ืืกืงืจืืคื ืฉืื ืขืืื ืคืจืคืงื ื-shell, ืืื ืื ืจืฅ ื-Claude Code? ืื ืจืื ืฉืืืช chmod +x. Claude ืื ืกื ืืืคืขืื ืืืชื ืืืื ืืื ืืจื shell, ืื ืืื ืฆืจืื ืืจืฉืืช ืืจืฆื.
ืื ืืืคืกื ื-echo ืื print ืจืืืืื ืืืืืช ื-stdout. Claude ืื ืืฆืื stdout ืฉื hooks. ืื ืืชื ืจืืฆื ืืจืืืช ืืืืขืช ืฉืืืื โ ืืืื ืืืชืื ื-stderr:
echo "Error: command blocked" >&2 # ื ืจืื
echo "Some debug info" # ืื ื ืจืื
ืืจืืจืช ืืืืื ืืื 60 ืฉื ืืืช. ืื ื-hook ืฉืื ืขืืฉื I/O ืจืฉืชื ืื ืืืื ืืงืื โ ืกืืืจ ืฉืชืขืืืจ ืืช ืื. ืืืกืฃ timeout ืืคืืจืฉ ืงืฆืจ ืืืชืจ ื-settings.json ืชืืช "timeout", ืื ืืคืื ืืช ื-hook ืืืกืื ืืจืื ื (ืืชืื ืชืืืื ื-background ืืืฆื ืืื).
ื-hook ืืงืื JSON ื-stdin. ืื ืืชื ืืฉืชืืฉ ื-cat ืืื ืืคืขื ื โ ืืชื ืืงืื ืืช ืืืงืกื ืืืืืื, ืื ืขืจืืื ืฉืืืช. ืชืืื ืชืืื jq:
input=$(cat)
cmd=$(echo "$input" | jq -r '.tool_input.command')
/tmp/:
#!/bin/bash
set -euo pipefail
LOG=/tmp/claude-hook-$(date +%Y%m%d).log
input=$(cat)
echo "[$(date -Is)] $0: $input" >> "$LOG"
# Parse what you need
tool=$(echo "$input" | jq -r '.tool_name // ""')
cmd=$(echo "$input" | jq -r '.tool_input.command // ""')
# Your logic here
# echo "Error message" >&2 ; exit 1 # to block
# exit 0 # to allow
exit 0
ืืืขืืจ ืืืืื ื-2026 ืืื ืื ืืื ืืืืื โ ืืื ืื ืืื. ืืคืชืืื ืฉืขืืืื ืื ืกืื ืืขืงืืฃ ืืขืืืช ืขื prompt-engineering ืืคืกืืืื ื-ืืคืชืืื ืฉืืื ืื harness ืืงืฆืืขื โ settings.json ืฉืขืืฉื ืืืืคื, hooks ืฉืขืืฉืื ืืืืืืฆืื, permissions ืฉืืื ืขืื ืืกืื.
ืืชื ืืืจ ืืฉืื ืขื Claude Code. ืชืคืกืืง ืืืฉืชืืฉ ืื ืืื ื-chat. ืชืืชืื ืืขืฆืื 10 ืฉืืจืืช ื-~/.claude/settings.json โ ืืืืืื ืืืื ืืจืืื. ืืืจื ืฉืืืข, ืืชืื hooks. ืืืจื ืืืืฉ, ืืืื ืื harness ืฉืขืืื ืขืืื 24/7.
ื-2027, ืขืืื ื-settings.json ืฉื ืืคืชื ืืืื ืืื ืขืืื ื-.bashrc ืฉืื ื-2010. ืื ืืจืื ืื ืืช ืืกืื ืืจืืื ืฉืื, ืืช ืืืืืจืืช ืฉืื, ืืืช ืจืืช ืืืื ื ืฉืื ืืืื. ืชืชืืื ืืืชืื ืืช ืฉืื ืขืืฉืื.
User: ~/.claude/settings.json โ ืื ืขื ืื ืืคืจืืืงืืื. ืฉื ืฉืืื ืืขืืคืืช ืืืฉืืืช (theme, model). Project: .claude/settings.json ืืฉืืจืฉ ืืคืจืืืงื โ ื ืืื ื-git, ืื ืขื ืื ืืฆืืืช. ืฉื ืฉืืื hooks ื-permissions ืกืคืฆืืคืืื ืืคืจืืืงื. Project local: .claude/settings.local.json โ ืื ื ืื ืก ื-git, ืืขืงืืคืืช ืืืฉืืืช. Enterprise: /Library/Application Support/ClaudeCode/managed-settings.json โ ืื ืืื ืืจืืืง, ืืืืจ ืขื ืืื.
PreToolUse ืจืฅ ืืคื ื ืฉ-Claude ืืืฆืข tool call. ืื ื-hook ืืืฆื ืขื exit code ืื-ืืคืก, ืืงืจืืื ื ืืกืืช. ืืืืื ืงืืืกืืช: ืืืกืืื git push --force ืข"ื ืืืืงื ืื tool_input.command ืืืื --force ืืืฆืืื ืขื 1. ืื ืืืืื ืืื ืืขืจืืช ืฉืืกืื ืช ืืืืจื ืืืจื ืฉืืืกืื ืงืจื ืืืื ืืขืจืืช ืฉืื ื ืืชื ืช ืืืกืื ืืงืจืืช.
(1) ืืื ืฉ-JSON ืชืงืื โ jq . ~/.claude/settings.json. ืฉืืืื ืืืช ืืฉืืืชื ืืื. (2) ืืืกืฃ ืืืืื: echo "$1" >> /tmp/hook.log ืืชืืืืช ื-hook. (3) ืืืืง exit codes โ Claude Code ืืฆืื ืจืง stderr, ืื stdout. (4) ืืื ืืจืฉืืืช ืืจืฆื: chmod +x. (5) ืืื ืจืืฆื โ hook ืืขื timeout ืืืืฉื ืืฉืงื.
Deny ื-ืืกืืื. ืชืืื. ืืืฉืช "allow ื-* + deny ืืจืฉืืื" ืืื ืืืืื ืืืชืจ ื-"allow ืืจืฉืืื ืกืคืฆืืคืืช" ืื ืืื ืืืคืฉืจืช ื-Claude ืืขืืื ืืืคืฉื ืขื ืืืจืื ืืืืืื, ืืื ืืืกืืช ืืช ืืืกืืื. ืืืืืืืช ืืืืจืืืช ื-deny: rm -rf, git push --force origin main, DROP TABLE. ืืื ืืื ืขื regex ืืืืืง.
ื-~/.claude/settings.json: { "env": { "MCP_TIMEOUT": "30000" } } (millisec). ืืืง ื-MCP servers (ืืืืืื stdio-based) ื ืืคืืื ืืฉืงื ืืืื timeout ืืคืืจืฉ Claude ืืืื ืืื ืกืืฃ. ืื MCP_TOOL_TIMEOUT ื-MCP_DEBUG=true ืฉืืืืฉืืื ืืขืช ืืืืงืืช.
Hook ืืกืื PreToolUse ืฉืืืื ืืช ืืืื ืืกืคืฆืืคื (ืืืืืื mcp__whatsapp__send), ืฉืืื ืืชืจืขื ื-Telegram ืขื ืคืจืื ืืืืืขื, ืืืืื ืืืืฉืืจ (ืงืืืฅ ืืื, ืื response API). ืื ืืื ืืืฉืืจ ืชืื 60 ืฉื ืืืช โ exit 1 ืืืงืจืืื ื ืืกืืช. ืืคืืก ืื ืืฆืื ืืช ืืืฉืืื WhatsApp ืฉืื ืื ืคืขื ืืืช.
ื-2027, ืขืืื ื-settings.json ืฉื ืืคืชื ืืืื ืืื ืขืืื ื-.bashrc ืฉืื ื-2010. ืื ืืจืื ืื ืืช ืืกืื ืืจืืื ืฉืื.
ืื ืืืง ืืณ ืืกืืจื. ืืกืืจื ืืืืืช 6 ืืืงืื โ Track A: Commands, Routines, Memory ยท Track B: Skills, Hooks, MCP. ื-Bootcamp Pro ืชืื ื harness ืืื ืืคืจืืืงืฉื.
ืืืืชื: ืืขืงื ืืืื ื, ืืืืกื ืืื ื"ื BDNHOST Group. ืืจืฆื ืืืืจ ื-AI ืืืืขื ืืืืฉื ืืืืืืืช ืืืฉืจืื. ืืื ื ืคืืจืืคืืืื SaaS ืฉื 10+ ืืคืืืงืฆืืืช ื-Base44 ื-VPS.
#ClaudeCode ยท #AgenticMemory ยท #AIArchitecture ยท #DevTools ยท #AI2026
ืืฉืืขืืจ ืขื ืงืื ืคืืืืจืฆืื ื-hooks, ืืฉืืขืืจ ืืกืืืืก ืืืื โ ืืชืื ืืงืืจืก ืฉื BDNHOST Academy.
โ ืื ืืกืจืืื ืื ืืขืจืืฅ EduManage AI Bootcamp ื-YouTube