ืžื“ืจื™ืš ื”ืขืฉืจื” ยท Part V ื–ืžืŸ ืงืจื™ืื” ยท 26 ื“ืงื•ืช ืจืžื” ยท ื‘ื™ื ื•ื ื™-ืžืชืงื“ื ืขื•ื“ื›ืŸ ยท 29.04.2026
ยท ื—ืœืง ื”ืณ ื‘ืกื“ืจื” ยท

ืื•ื˜ื•ืžืฆื™ื” ืืžื™ืชื™ืช ืžืชื—ื™ืœื” ื‘- config.

Prompt ื˜ื•ื‘ ืžืงื‘ืœ ืชื•ืฆืื” ื˜ื•ื‘ื” ืคืขื ืื—ืช. Hook ื˜ื•ื‘ ืžืงื‘ืœ ืชื•ืฆืื” ื˜ื•ื‘ื” ื‘ื›ืœ ืคืขื.
ื”ืžืขื‘ืจ ืž-prompt-engineer ืœ-harness-engineer ื”ื•ื ื”ื”ื‘ื“ืœ ื‘ื™ืŸ ืฉื™ืžื•ืฉ ืฉื˜ื—ื™ ื‘-Claude Code ืœื‘ื™ืŸ ืžื›ืคื™ืœ-ื›ื•ื— ืืžื™ืชื™.
ื”ืžื“ืจื™ืš ื”ื–ื” ืžืกื‘ื™ืจ ืื™ืš ืœื‘ื ื•ืช settings.json ืฉืขื•ืฉื” ืืช ื”ืขื‘ื•ื“ื” ื”ืงืฉื” โ€” ืœืคื ื™ ืฉืืชื” ื›ื•ืชื‘ prompt.

ื’ืœื•ืœ ืœื”ืžืฉืš
Hook ืžื‘ื˜ืœ 100 prompts. Permissions ืžื‘ื˜ืœื•ืช 100 ืืกื•ื ื•ืช. ยท The Configuration Principle ยท 2026 ยท
01

user ยท project ยท enterprise

ืœืคื ื™ ืฉืืชื” ื›ื•ืชื‘ 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.

ืกื“ืจ ื”ืขื“ื™ืคื•ื™ื•ืช (Precedence)

ื›ืฉื™ืฉ ืกืชื™ืจื” โ€” ืื™ื–ื• ื”ื’ื“ืจื” ื’ื•ื‘ืจืช? ืžื”ื—ื–ืง ืœื—ืœืฉ: Enterprise (managed-settings.json ืฉืžื ื•ื”ืœ ืžืจื—ื•ืง) โ†’ Project local โ†’ Project โ†’ User. ื‘ืžื™ืœื™ื ืื—ืจื•ืช, ืื ื”ืืจื’ื•ืŸ ืฉืœืš ืืกืจ ืขืœ ืฉื™ืžื•ืฉ ื‘ืžื•ื“ืœ ืžืกื•ื™ื ื‘-enterprise โ€” ืืฃ ื”ื’ื“ืจืช user ืื• project ืœื ืชืขืงื•ืฃ ืืช ื–ื”. ืื ืืชื” ืจื•ืฆื” ืœืขืงื•ืฃ ื”ื’ื“ืจืช project ืœื‘ื“ื™ืงื” ืื™ืฉื™ืช, ื”ืฉืชืžืฉ ื‘-local.

ื˜ืขื•ืช ืงืœืืกื™ืช: ืœื›ืชื•ื‘ hooks ื‘-~/.claude/settings.json ื‘ืžืงื•ื ื‘-.claude/settings.json. ื›ืชื•ืฆืื” โ€” ื”-hooks ืฉืœืš ืคื•ืขืœื™ื ื’ื ื‘ืคืจื•ื™ืงื˜ื™ื ืฉืœื ืฆืจื™ื›ื™ื ืื•ืชื, ื•ื’ืจื•ืข ื™ื•ืชืจ, ื—ื‘ืจื™ ืฆื•ื•ืช ืฉืœืš ืœื ืžืงื‘ืœื™ื ืืช ืื•ืชื” ื”ื’ื ื” ื›ื™ ื”ื”ื’ื“ืจื” ืœื ื ื›ื ืกืช ืœ-git.

ื“ื•ื’ืžื” ยท settings.json ื‘ืกื™ืกื™ ื–ื” ื”-~/.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"
  }
}
02

ืžืชื™ ื‘ื“ื™ื•ืง ืจืฅ ื”-hook

Hooks ื”ื ื”ืžื ื’ื ื•ืŸ ืฉื”ื•ืคืš ืืช Claude Code ืžืžืกื™ื™ืข ืœื™ื•ืขืฅ ืขื ืฉื™ื ื™ื™ื. ื›ืœ hook ื”ื•ื ืกืงืจื™ืคื˜ ืฉืืชื” ื›ื•ืชื‘, ืฉืจืฅ ืื•ื˜ื•ืžื˜ื™ืช ื‘ืื™ืจื•ืขื™ื ืฉื”ื’ื“ืจืช โ€” ืœืคื ื™ ืฉื›ืœื™ ืžืชื‘ืฆืข, ืื—ืจื™ ืฉื”ื•ื ื ื’ืžืจ, ื›ืฉืžืฉืชืžืฉ ืฉื•ืœื— ืคืจื•ืžืคื˜, ื›ืฉืกืฉืŸ ื ืกื’ืจ. ื”-hook ืžืงื‘ืœ JSON ื‘-stdin, ืžื—ื–ื™ืจ exit code, ื•ื™ื›ื•ืœ ืœื—ืกื•ื ืคืขื•ืœื•ืช (ื‘ืžืงืจื” ืฉืœ PreToolUse) ืื• ืจืง ืœืชืขื“ ืื•ืชืŸ.

ื‘-Claude Code 2026 ื™ืฉ ืฉืžื•ื ื” ืื™ืจื•ืขื™ื ืฉืืชื” ื™ื›ื•ืœ ืœื”ืื–ื™ืŸ ืœื”ื. ื›ืœ ืื—ื“ ืžื”ื ืคื•ืชื— ื“ืœืช ืื—ืจืช ืœืื•ื˜ื•ืžืฆื™ื”:

ืฉืžื•ื ืช ื”-Events

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 (ื”ืกืงืจื™ืคื˜ ืฉื™ืจื•ืฅ).

ื“ื•ื’ืžื” ยท PreToolUse hook ืžืœื ื”-hook ื”ื‘ื ื—ื•ืกื ื›ืœ ื ื™ืกื™ื•ืŸ ืœื”ืจื™ืฅ git push --force. ืฉืžื•ืจ ืื•ืชื• ื›-~/.claude/hooks/block-force-push.sh, ืชืŸ ื”ืจืฉืื” (chmod +x), ื•ื”ื•ืกืฃ ืœ-settings.json:
{
  "hooks": {
    "PreToolUse": [{
      "matcher": "Bash",
      "command": "~/.claude/hooks/block-force-push.sh"
    }]
  }
}
03

block, format, summary, gate, lint

ืชื™ืื•ืจื™ื” ื”ื™ื ื ื—ืžื“ื”. ืื‘ืœ ื”ืงืกื ืฉืœ hooks ืžืชื’ืœื” ืจืง ื›ืฉืืชื” ืจื•ืื” ื“ืคื•ืกื™ื ืืžื™ืชื™ื™ื ื‘ืคืขื•ืœื”. ื”ื ื” ื—ืžื™ืฉื” ืฉืื ื™ ืžืฉืชืžืฉ ื‘ื”ื ื‘ืขื‘ื•ื“ื” ื”ื™ื•ืžื™ื•ืžื™ืช ืฉืœ BDNHOST โ€” ื›ืœ ืื—ื“ ืžื”ื ื”ื—ืœื™ืฃ ืœื™ 50+ prompts ื—ื•ื–ืจื ื™ื™ื.

(ื) Block Destructive โ€” ื—ื•ืกื ืžื—ื™ืงื” / push --force / DROP TABLE

#!/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

(ื‘) Auto-Format on Save โ€” ืžืจื™ืฅ prettier/black ืื—ืจื™ ื›ืœ Edit

#!/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

(ื’) Daily Summary โ€” Stop hook ืฉื›ื•ืชื‘ ืกื™ื›ื•ื ื™ื•ืžื™

#!/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"

(ื“) Approval Gate โ€” ื”ื”ื•ืง ืฉ-ื”ืฆื™ืœ ืœื™ ืืช ื—ืฉื‘ื•ืŸ ื”-WhatsApp

ื–ื” ื”ื“ืคื•ืก ืฉืื ื™ ืžืฉืชืžืฉ ื‘ื• ืœืคืขื•ืœื•ืช ื‘ืขืœื•ืช 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

(ื”) Lint Before Commit

#!/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 ื”-matcher ื”ื•ื regex ืขืœ ืฉื ื”ื›ืœื™. ื“ื•ื’ืžืื•ืช ืžืงื•ื‘ืœื•ืช: "Bash" ืœื›ืœ ืคืงื•ื“ืช shell, "Edit|Write" ืœื›ืœ ืฉื™ื ื•ื™ ืงื•ื‘ืฅ, "mcp__github__.*" ืœื›ืœ ื›ืœื™ ืž-GitHub MCP, ".*" ืœื›ืœ ื›ืœื™. ืื ืœื ืžืฆื™ื™ื ื™ื matcher, ื”-hook ื™ืจื•ืฅ ืขืœ ื›ืœ tool call โ€” ืฉื™ืžื•ืฉื™ ืœืœื•ื’ื™ื ื’ ื’ืœื•ื‘ืœื™, ืื‘ืœ ื–ื”ื™ืจื•ืช ืž-overhead.
04

allow ยท deny ยท ask ยท regex

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.

ืœืžื” Deny-list ื•ืœื Allow-list

ื–ื• ืื—ืช ื”ืกื•ื’ื™ื•ืช ืฉื’ื•ืจืžื•ืช ื”ื›ื™ ื”ืจื‘ื” ื•ื™ื›ื•ื—ื™ื. ื’ื™ืฉืช 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 ื—ื™ืฆื•ื ื™ื™ื, ืืชื” ืจื•ืฆื” ืœืจืื•ืช ืžื” ืžื•ืชืงืŸ ืœืคื ื™ ืฉื–ื” ืงื•ืจื”.

ื“ื•ื’ืžื” ยท permissions block ืžื•ืžืœืฅ ืฉืžื•ืจ ืืช ื”ื‘ืœื•ืง ื”ื–ื” ื‘-~/.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:*)"
    ]
  }
}
05

DEBUG, BASE_URL, MCP timeouts

ืœืคืขืžื™ื, ื”ืฉืœื™ื˜ื” ื”ื›ื™ ื—ื–ืงื” ื‘-Claude Code ืžื’ื™ืขื” ืœื ืž-hook ื•ืœื ืž-permission, ืืœื ืžืžืฉืชื ื” ืกื‘ื™ื‘ื” ืื—ื“ ืคืฉื•ื˜. Env vars ื”ื ื”ืžืชื’ ื”ืกืžื•ื™ ืฉืžืฉื ื” ืืช ื”ืชื ื”ื’ื•ืช ื”-CLI ื‘ืจืžื” ื”ื‘ืกื™ืกื™ืช โ€” ืžืื™ื–ื” API key ื”ื•ื ืžืฉืชืžืฉ, ืื™ืš ื”ื•ื ืžืชื—ื‘ืจ ืœ-MCP servers, ื•ืื™ืš ื”ื•ื ืžืชื—ื‘ืจ ืœ-Bedrock ืื• Vertex.

ื”-vars ืฉืื ื™ ืžืฉืชืžืฉ ื‘ื”ื ื”ื›ื™ ื”ืจื‘ื”

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 ื™ืขื“ื›ืŸ ืืช ืขืฆืžื• ื‘ืืžืฆืข ืจื™ืฆื”.

ื“ื•ื’ืžื” ยท env block ืœื“ื™ื‘ืื’ MCP ื›ืฉื™ืฉ ืœืš MCP server ืฉืœื ืžืชื—ื‘ืจ ืื• ืฉืžื—ื–ื™ืจ ืชืฉื•ื‘ื•ืช ืจื™ืงื•ืช, ื”ื•ืกืฃ ืืช ื”ื‘ืœื•ืง ื”ื–ื” ืœ-~/.claude/settings.json ื•ืคืชื— ืกืฉืŸ ื—ื“ืฉ. ื›ืœ ื”ืงืจื™ืื•ืช ื™ื•ืฆื’ื• ื‘-stderr:
{
  "env": {
    "MCP_DEBUG": "true",
    "MCP_TIMEOUT": "60000",
    "MCP_TOOL_TIMEOUT": "120000"
  }
}
06

ืžื•ืชืื ืื™ืฉื™ืช ืขื /statusline-setup

Claude 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.

ื“ื•ื’ืžื” ยท status line ืžื™ื ื™ืžืœื™ ื‘ืขื‘ืจื™ืช
#!/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"
  }
}
07

logs, exit codes, silent failures

ื”-hook ืฉืœืš ืœื ืจืฅ. ืืชื” ืœื ื™ื•ื“ืข ืœืžื”. ืื™ืŸ ื”ื•ื“ืขืช ืฉื’ื™ืื”. ื‘ืจื•ืš ื”ื‘ื ืœืคื™ื ืช ื”ื“ื™ื‘ืื’ ืฉืœ Claude Code hooks โ€” ืžืงื•ื ืฉื‘ื• ืื›ืœืชื™ ืฉืขื•ืช, ื•ืฉื™ืฉ ืœื• ืขื›ืฉื™ื• checklist ืฉืœ 5 ื‘ืขื™ื•ืช ื ืคื•ืฆื•ืช.

(1) JSON syntax error ืžืฉื‘ื™ืช ืืช ื”ื›ืœ

ืื ื™ืฉ ืคืกื™ืง ื—ืกืจ ืื• ืžืจื›ืื” ืœื ืกื’ื•ืจื” ื‘-~/.claude/settings.json โ€” Claude Code ืœื ื™ืฆื™ื’ ืฉื’ื™ืื”. ื”ื•ื ืคืฉื•ื˜ ื™ืชืขืœื ืžื›ืœ ื”-hooks ื•ื™ืžืฉื™ืš ืœืขื‘ื•ื“ ื›ืจื’ื™ืœ. ืชืžื™ื“ ืชื•ื•ื“ื ืขื:

jq . ~/.claude/settings.json
ืื ื–ื” ืžื—ื–ื™ืจ parse error โ€” ืชืงืŸ ืœืคื ื™ ืฉืืชื” ืžืžืฉื™ืš ืœื“ื‘ื’.

(2) ื”ืงื•ื‘ืฅ ืœื executable

ื”ืกืงืจื™ืคื˜ ืฉืœืš ืขื•ื‘ื“ ืคืจืคืงื˜ ื‘-shell, ืื‘ืœ ืœื ืจืฅ ืž-Claude Code? ื›ื ืจืื” ืฉื›ื—ืช chmod +x. Claude ืžื ืกื” ืœื”ืคืขื™ืœ ืื•ืชื• ื›ื›ืœื™ ื•ืœื ื“ืจืš shell, ืื– ื”ื•ื ืฆืจื™ืš ื”ืจืฉืืช ื”ืจืฆื”.

(3) stdout invisible

ื›ืœ ื”ื“ืคืกื” ื‘-echo ืื• print ืจื’ื™ืœื™ื ื”ื•ืœื›ืช ืœ-stdout. Claude ืœื ืžืฆื™ื’ stdout ืฉืœ hooks. ืื ืืชื” ืจื•ืฆื” ืœืจืื•ืช ื”ื•ื“ืขืช ืฉื’ื™ืื” โ€” ื—ื™ื™ื‘ ืœื›ืชื•ื‘ ืœ-stderr:

echo "Error: command blocked" >&2  # ื ืจืื”
echo "Some debug info"             # ืœื ื ืจืื”

(4) Timeout ืžืกืœืง ืืช ื”-hook ื‘ืฉืงื˜

ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื 60 ืฉื ื™ื•ืช. ืื ื”-hook ืฉืœืš ืขื•ืฉื” I/O ืจืฉืชื™ ืื• ืžื—ื›ื” ืœืงืœื˜ โ€” ืกื‘ื™ืจ ืฉืชืขื‘ื•ืจ ืืช ื–ื”. ื”ื•ืกืฃ timeout ืžืคื•ืจืฉ ืงืฆืจ ื™ื•ืชืจ ื‘-settings.json ืชื—ืช "timeout", ืื• ื”ืคื•ืš ืืช ื”-hook ืœืืกื™ื ื›ืจื•ื ื™ (ื”ืชื—ืœ ืชื”ืœื™ืš ื‘-background ื•ื™ืฆื ืžื™ื“).

(5) Input parsing ื ื›ืฉืœ ื‘ืฉืงื˜

ื”-hook ืžืงื‘ืœ JSON ื‘-stdin. ืื ืืชื” ืžืฉืชืžืฉ ื‘-cat ื‘ืœื™ ืœืคืขื ื— โ€” ืืชื” ืžืงื‘ืœ ืืช ื”ื˜ืงืกื˜ ื”ื’ื•ืœืžื™, ืœื ืขืจื›ื™ื ืฉื“ื•ืช. ืชืžื™ื“ ืชื—ื™ืœ jq:

input=$(cat)
cmd=$(echo "$input" | jq -r '.tool_input.command')
ืชื‘ื ื™ืช ยท hook starter ืขื logging ืฉืžื•ืจ ื›ืชื‘ื ื™ืช ืœ-hooks ื—ื“ืฉื™ื. ื›ื•ืœืœ debug log ืื•ื˜ื•ืžื˜ื™ ืœ-/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
08

Configuration is the new prompt

ื”ืžืขื‘ืจ ื”ื’ื“ื•ืœ ื‘-2026 ื”ื•ื ืœื ื˜ื›ื ื•ืœื•ื’ื™ โ€” ื”ื•ื ืžื ื˜ืœื™. ืžืคืชื—ื™ื ืฉืขื“ื™ื™ืŸ ืžื ืกื™ื ืœืขืงื•ืฃ ื‘ืขื™ื•ืช ืขื prompt-engineering ืžืคืกื™ื“ื™ื ืœ-ืžืคืชื—ื™ื ืฉื‘ื•ื ื™ื harness ืžืงืฆื•ืขื™ โ€” settings.json ืฉืขื•ืฉื” ืื›ื™ืคื”, hooks ืฉืขื•ืฉื™ื ืื•ื˜ื•ืžืฆื™ื”, permissions ืฉืžื•ื ืขื™ื ืืกื•ืŸ.

ืืชื” ื›ื‘ืจ ืžืฉืœื ืขืœ Claude Code. ืชืคืกื™ืง ืœื”ืฉืชืžืฉ ื‘ื• ื›ืžื• ื‘-chat. ืชื›ืชื•ื‘ ืœืขืฆืžืš 10 ืฉื•ืจื•ืช ื‘-~/.claude/settings.json โ€” ื•ื”ื”ื‘ื“ืœ ื™ื”ื™ื” ื“ืจืžื˜ื™. ืื—ืจื™ ืฉื‘ื•ืข, ื”ืชืื hooks. ืื—ืจื™ ื—ื•ื“ืฉ, ื™ื”ื™ื” ืœืš harness ืฉืขื•ื‘ื“ ืขืœื™ืš 24/7.

ื‘-2027, ืขื™ื•ืŸ ื‘-settings.json ืฉืœ ืžืคืชื— ื™ื”ื™ื” ื›ืžื• ืขื™ื•ืŸ ื‘-.bashrc ืฉืœื• ื‘-2010. ื–ื” ื™ืจืื” ืœืš ืืช ื”ืกื˜ื ื“ืจื˜ื™ื ืฉืœื•, ืืช ื”ื–ื”ื™ืจื•ืช ืฉืœื•, ื•ืืช ืจืžืช ื”ื”ื‘ื ื” ืฉืœื• ื‘ื›ืœื™. ืชืชื—ื™ืœ ืœื›ืชื•ื‘ ืืช ืฉืœืš ืขื›ืฉื™ื•.

ื›ืœ ืคืขื ืฉืืชื” ื›ื•ืชื‘ ืืช ืื•ืชื” ื”ื•ืจืื” ืœ-Claude โ€” ืืชื” ืฆืจื™ืš hook, ืœื memory. ยท The Automation Test ยท
09

ืฉืืœื•ืช ื ืคื•ืฆื•ืช

ืžื” ื”ื”ื‘ื“ืœ ื‘ื™ืŸ user, project ื•-enterprise settings?

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 hook ื•ืœืžื” ื–ื” ื—ืฉื•ื‘?

PreToolUse ืจืฅ ืœืคื ื™ ืฉ-Claude ืžื‘ืฆืข tool call. ืื ื”-hook ื™ื•ืฆื ืขื exit code ืœื-ืืคืก, ื”ืงืจื™ืื” ื ื—ืกืžืช. ื“ื•ื’ืžื” ืงืœืืกื™ืช: ื—ื•ืกืžื™ื git push --force ืข"ื™ ื‘ื“ื™ืงื” ืื tool_input.command ืžื›ื™ืœ --force ื•ื™ืฆื™ืื” ืขื 1. ื–ื” ื”ื”ื‘ื“ืœ ื‘ื™ืŸ ืžืขืจื›ืช ืฉืžืกืžื ืช ืื–ื”ืจื” ืื—ืจื™ ืฉื”ืืกื•ืŸ ืงืจื” ืœื‘ื™ืŸ ืžืขืจื›ืช ืฉืœื ื ื•ืชื ืช ืœืืกื•ืŸ ืœืงืจื•ืช.

ืื™ืš ืœื“ื‘ื’ hook ืฉืœื ืคื•ืขืœ?

(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 ื™ื™ื›ืฉืœ ื‘ืฉืงื˜.

ืžื” ืขื“ื™ืฃ โ€” allow ืœ-* ืื• deny ืœ-ืžืกื•ื›ืŸ?

Deny ืœ-ืžืกื•ื›ืŸ. ืชืžื™ื“. ื’ื™ืฉืช "allow ืœ-* + deny ืœืจืฉื™ืžื”" ื”ื™ื ื‘ื˜ื•ื—ื” ื™ื•ืชืจ ืž-"allow ืœืจืฉื™ืžื” ืกืคืฆื™ืคื™ืช" ื›ื™ ื”ื™ื ืžืืคืฉืจืช ืœ-Claude ืœืขื‘ื•ื“ ื—ื•ืคืฉื™ ืขืœ ื“ื‘ืจื™ื ื‘ื˜ื•ื—ื™ื, ืื‘ืœ ื—ื•ืกืžืช ืืช ื”ืžืกื•ื›ืŸ. ื“ื•ื’ืžืื•ืช ืžื•ื›ืจื—ื•ืช ื‘-deny: rm -rf, git push --force origin main, DROP TABLE. ืœื›ืœ ืื—ื“ ืขื regex ืžื“ื•ื™ืง.

ืื™ืš ืžื’ื“ื™ืจื™ื timeout ืœ-MCP server ืฉืชืงื•ืข?

ื‘-~/.claude/settings.json: { "env": { "MCP_TIMEOUT": "30000" } } (millisec). ื—ืœืง ืž-MCP servers (ื‘ืžื™ื•ื—ื“ stdio-based) ื ื•ืคืœื™ื ื‘ืฉืงื˜ ื•ื‘ืœื™ timeout ืžืคื•ืจืฉ Claude ืžื—ื›ื” ืื™ื ืกื•ืฃ. ื’ื MCP_TOOL_TIMEOUT ื•-MCP_DEBUG=true ืฉื™ืžื•ืฉื™ื™ื ื‘ืขืช ื‘ื“ื™ืงื•ืช.

ืื™ืš ืขื•ืฉื™ื approval gate (ืœื“ื•ื’ืžื” ืœืคื ื™ ืฉืœื™ื—ืช WhatsApp)?

Hook ืžืกื•ื’ PreToolUse ืฉืžื–ื”ื” ืืช ื”ื›ืœื™ ื”ืกืคืฆื™ืคื™ (ืœื“ื•ื’ืžื” mcp__whatsapp__send), ืฉื•ืœื— ื”ืชืจืขื” ืœ-Telegram ืขื ืคืจื˜ื™ ื”ื”ื•ื“ืขื”, ื•ืžื—ื›ื” ืœืื™ืฉื•ืจ (ืงื•ื‘ืฅ ื“ื’ืœ, ืื• response API). ืื ืื™ืŸ ืื™ืฉื•ืจ ืชื•ืš 60 ืฉื ื™ื•ืช โ€” exit 1 ื•ื”ืงืจื™ืื” ื ื—ืกืžืช. ื“ืคื•ืก ื–ื” ื”ืฆื™ืœ ืืช ื”ื—ืฉื‘ื•ืŸ WhatsApp ืฉืœื™ ืœื ืคืขื ืื—ืช.

Configuration is the new prompt

ื‘-2027, ืขื™ื•ืŸ ื‘-settings.json ืฉืœ ืžืคืชื— ื™ื”ื™ื” ื›ืžื• ืขื™ื•ืŸ ื‘-.bashrc ืฉืœื• ื‘-2010. ื–ื” ื™ืจืื” ืœืš ืืช ื”ืกื˜ื ื“ืจื˜ื™ื ืฉืœื•.

ื”ืžืฉืš ื‘ืกื“ืจืช Claude Code

ื–ื” ื—ืœืง ื”ืณ ื‘ืกื“ืจื”. ื”ืกื“ืจื” ื›ื•ืœืœืช 6 ื—ืœืงื™ื โ€” Track A: Commands, Routines, Memory ยท Track B: Skills, Hooks, MCP. ื‘-Bootcamp Pro ืชื‘ื ื” harness ืžืœื ืœืคืจื•ื“ืงืฉืŸ.

Bootcamp Pro Part IV ยท Skills Part VI ยท MCP Part III ยท Memory

๐Ÿ“š ืงืจื“ื™ื˜ ื˜ื›ื ื™ ื•ืžืงื•ืจื•ืช

ื”ื›ื•ืชื‘: ื™ืขืงื‘ ื‘ื™ื“ื ื™, ืžื™ื™ืกื“ ื•ืžื ื›"ืœ BDNHOST Group. ืžืจืฆื” ื‘ื›ื™ืจ ืœ-AI ื•ืžื“ืขื™ ื”ืžื—ืฉื‘ ื‘ืžื›ืœืœื•ืช ื‘ื™ืฉืจืืœ. ื‘ื•ื ื” ืคื•ืจื˜ืคื•ืœื™ื• SaaS ืฉืœ 10+ ืืคืœื™ืงืฆื™ื•ืช ื‘-Base44 ื•-VPS.

#ClaudeCode ยท #AgenticMemory ยท #AIArchitecture ยท #DevTools ยท #AI2026

ืฆืคื•: Hooks ื•-settings.json ื‘ืคืขื•ืœื”

ื”ืฉื™ืขื•ืจ ืขืœ ืงื•ื ืคื™ื’ื•ืจืฆื™ื” ื•-hooks, ื•ืฉื™ืขื•ืจ ื”ืกื˜ื˜ื•ืก ืœื™ื™ืŸ โ€” ืžืชื•ืš ื”ืงื•ืจืก ืฉืœ BDNHOST Academy.

ืฉื™ืขื•ืจ 4: ื”ืงื•ื‘ืฅ ื”ืกื•ื“ื™ ืฉืžืฉื ื” ื”ื›ืœ โ€” CLAUDE.md | ืงื•ืจืก ืงืœื•ื“ ืงื•ื“ ืœืžืงืฆื•ืขื ื™ื โ€” BDNHOST Academy
โ–ถ
ืฉื™ืขื•ืจ 4: ื”ืงื•ื‘ืฅ ื”ืกื•ื“ื™ ืฉืžืฉื ื” ื”ื›ืœ โ€” CLAUDE.md | ืงื•ืจืก ืงืœื•ื“ ืงื•ื“ ืœืžืงืฆื•ืขื ื™ื โ€” BDNHOST Academy
YouTube ยท BDNHOST ยท EduManage
ืฉื™ืขื•ืจ 7: Skills โ€” ื”ื›ืœื™ ืฉื”ื•ืคืš ืืชื›ื ืœืžืชืงื“ืžื™ื | ืงื•ืจืก ืงืœื•ื“ ืงื•ื“ ืœืžืงืฆื•ืขื ื™ื โ€” BDNHOST Academy
โ–ถ
ืฉื™ืขื•ืจ 7: Skills โ€” ื”ื›ืœื™ ืฉื”ื•ืคืš ืืชื›ื ืœืžืชืงื“ืžื™ื | ืงื•ืจืก ืงืœื•ื“ ืงื•ื“ ืœืžืงืฆื•ืขื ื™ื โ€” BDNHOST Academy
YouTube ยท BDNHOST ยท EduManage
ืฉื™ืขื•ืจ 10: MCP โ€” ื—ื™ื‘ื•ืจ ืœื›ืœื™ื ืฉืืชื ื›ื‘ืจ ืžืฉืชืžืฉื™ื | ืงื•ืจืก ืงืœื•ื“ ืงื•ื“ ืœืžืงืฆื•ืขื ื™ื โ€” BDNHOST Academy
โ–ถ
ืฉื™ืขื•ืจ 10: MCP โ€” ื—ื™ื‘ื•ืจ ืœื›ืœื™ื ืฉืืชื ื›ื‘ืจ ืžืฉืชืžืฉื™ื | ืงื•ืจืก ืงืœื•ื“ ืงื•ื“ ืœืžืงืฆื•ืขื ื™ื โ€” BDNHOST Academy
YouTube ยท BDNHOST ยท EduManage

โ†’ ื›ืœ ื”ืกืจื˜ื•ื ื™ื ื‘ืขืจื•ืฅ EduManage AI Bootcamp ื‘-YouTube