ការកំណត់កុំព្យូទ័រ Copy-paste from production for pre-commit validation, PII scanning, deploy safeguards, and session logging ។ 6 months ago I kept a sticky note on my monitor. វាត្រូវបាននិយាយថា: "អ្នកបានស្លាក? អ្នកបានត្រួតពិនិត្យស្លាក? អ្នកបានមើលអ្វីដែលវាត្រូវបានចែកចាយ?" នៅពេលដែល Claude បានសរសេរឯកសារមួយគត់ខ្ញុំនឹងផ្លាស់ប្តូរទៅកុំព្យូទ័រផ្សេងទៀតនិងដំណើរការ formater ។ នៅពេលដែលវាបានធ្វើដំណើរការបញ្ជា Bash, ខ្ញុំនឹងសរសេរនៅលើការចេញផ្សាយគួរឱ្យដឹងថានៅពេលដែលអ្វីមួយគត់បានទាក់ទងនឹងការផលិត។ នៅពេលវេលាដែលវាបានធ្វើតេស្តថានៅពេលវេលាដែលវាបានធ្វើតេស្តថានៅពេលវេលាដែលខ្ញុំបានធ្វើតេស្តថានៅលើបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តាលមុន។ សៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅ បន្ទាប់មកខ្ញុំនឹងរកឃើញ Claude Code បានបញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់បញ្ឈប់ កុំព្យូទ័រនេះបានកាត់បន្ថយ។ នេះជាអ្វីដែលបានផ្លាស់ប្តូរវា។ ប្រព័ន្ធ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ Claude Code មិនមែនគ្រាន់តែជាប្រព័ន្ធប្រតិបត្តិការ chat ដែលបានសរសេរកូដប៉ុណ្ណោះ។ នៅខាងក្រោមផ្ទៃវាវាបានធ្វើដំណើរប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រវត្តិប្រ នៅពេលគ្រប់ការផ្លាស់ប្តូរនៅក្នុងខ្សែភាពយន្តនេះ Claude Code បានកំណត់សកម្មភាពមួយហើយអ្នកអាចបន្ថែមការដោះស្រាយជាមួយនឹងការគ្រប់គ្នា។ នេះគឺជាដំណោះស្រាយពីរដែលមានសំខាន់បំផុត: អ្នកគ្រប់គ្រងរបស់អ្នកអាចត្រួតពិនិត្យការត្រួតពិនិត្យនិងផ្លាស់ប្តូរ JSON: អនុញ្ញាតឱ្យវា, មិនអនុញ្ញាតឱ្យវា, ឬមិនអនុញ្ញាតឱ្យដំណោះស្រាយអនុញ្ញាតដំណោះស្រាយធម្មតានិងអនុញ្ញាតឱ្យវាគ្រប់គ្រង។ PostToolUse បិទបន្ទាប់ពីការទូរស័ព្ទឧបករណ៍បានជោគជ័យ អ្នកគ្រប់គ្រងរបស់អ្នកទទួលបានផលិតផលពេញលេញ ធ្វើអ្វីគ្រប់យ៉ាងដែលអ្នកចង់ជាមួយវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវាមានវ អ្នកគ្រប់គ្រងបានចុះឈ្មោះនៅក្នុង ពួកគេអាចជាការបញ្ជា Shell, HTTP endpoints, ឬ LLM prompts ។ ខ្ញុំប្រើការបញ្ជា Shell ដោយសារតែពួកគេមានល្បឿនលឿន, debuggable និងមិនត្រូវការវិជ្ជាជីវៈ។ .claude/settings.json ប្រព័ន្ធប្រតិបត្តិការទាំងអស់គឺ: Claude Code បំពង់ JSON ទៅជា stdin នៃ script របស់អ្នក. ប្រព័ន្ធប្រតិបត្តិការរបស់អ្នកបំពង់ JSON ទៅជា stdout. That is it. If your script exits without output, Claude Code proceeds normally. សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ ខ្ញុំបានសរសេរអត្ថបទនេះបន្ទាប់ពីលោក Claude បានធ្វើការ កុំព្យូទ័ររបស់ខ្ញុំបានបង្កើតកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យូទ័រកុំព្យ rm -rf #!/bin/bash # .claude/hooks/guard.sh # Blocks destructive commands before they execute CMD=$(jq -r '.tool_input.command // empty') [ -z "$CMD" ] && exit 0 # Patterns I never want to run unreviewed BLOCKED_PATTERNS=( 'rm -rf' 'rm -r /' 'DROP TABLE' 'DROP DATABASE' 'truncate ' '> /dev/sd' 'mkfs\.' 'dd if=' ) for pattern in "${BLOCKED_PATTERNS[@]}"; do if echo "$CMD" | grep -qi "$pattern"; then jq -n --arg reason "Blocked: command matches dangerous pattern '$pattern'" '{ hookSpecificOutput: { hookEventName: "PreToolUse", permissionDecision: "deny", permissionDecisionReason: $reason } }' exit 0 fi done សំនួរនេះគឺមិនមែនជាការចែកចាយបញ្ហាទាំងអស់។ សំនួរនេះគឺជាការចែកចាយបញ្ហាទាំងអស់ដែលមានសុវត្ថិភាពទាំងអស់។ សំនួរនេះគឺជាការចែកចាយបញ្ហាទាំងអស់ដែលអ្នកមានដោយខ្លួនឯងបានធ្វើដោយជោគជ័យ។ ការចែកចាយបញ្ហារបស់ខ្ញុំបង្ហាញពីការចែកចាយបញ្ហារបស់ខ្ញុំ។ ការចែកចាយបញ្ហារបស់អ្នកនឹងបង្ហាញពីការចាត់បញ្ហារបស់អ្នក។ ការចុះឈ្មោះនៅក្នុង : .claude/settings.json "PreToolUse": [ { "matcher": "Bash", "hooks": [{ "type": "command", "command": ".claude/hooks/guard.sh" }] } ] នេះ នេះជា regex នៅលើឈ្មោះឧបករណ៍។ វាត្រូវបានធ្វើឱ្យប្រសិនបើប្រព័ន្ធប្រតិបត្តិការនេះមិនអាចធ្វើឱ្យប្រសិនបើប្រព័ន្ធប្រតិបត្តិការនេះអាចធ្វើឱ្យប្រសិនបើប្រព័ន្ធប្រតិបត្តិការនេះមិនអាចធ្វើឱ្យប្រសិនបើប្រព័ន្ធប្រតិបត្តិការនេះអាចធ្វើឱ្យប្រសិនបើប្រសិនបើប្រព័ន្ធប្រតិបត្តិការនេះអាចធ្វើឱ្យប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើ matcher "Bash" សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ មុនពេលវេលានេះ, ការដំណើរការការងាររបស់ខ្ញុំគឺ: Claude ធ្វើការឯកសារ, ខ្ញុំមើលឃើញការដំឡើងគឺមិនត្រឹមត្រូវ, ខ្ញុំចង់ Claude ដើម្បីដំឡើងវា, Claude ធ្វើការ formater, ខ្ញុំពិនិត្យមើលកំណែដែលបានដំឡើង។ ការដំឡើងបួនដំណោះស្រាយសម្រាប់អ្វីដែលគួរតែជាដំណោះស្រាយខ្ពស់។ #!/bin/bash # .claude/hooks/fmt.sh # Formats files immediately after Claude edits them TOOL=$(jq -r '.tool_name // empty') [ "$TOOL" != "Edit" ] && [ "$TOOL" != "Write" ] && exit 0 FP=$(jq -r '.tool_input.file_path // .tool_input.path // empty') [ -z "$FP" ] || [ ! -f "$FP" ] && exit 0 case "${FP##*.}" in js|ts|jsx|tsx|mjs) if [ -f node_modules/.bin/prettier ]; then node_modules/.bin/prettier --write "$FP" 2>/dev/null elif command -v npx &>/dev/null; then npx prettier --write "$FP" 2>/dev/null fi ;; rs) rustfmt "$FP" 2>/dev/null ;; py) command -v ruff &>/dev/null && ruff format "$FP" 2>/dev/null command -v ruff &>/dev/null && ruff check --fix "$FP" 2>/dev/null ;; go) gofmt -w "$FP" 2>/dev/null ;; css|scss) command -v stylelint &>/dev/null && stylelint --fix "$FP" 2>/dev/null ;; esac exit 0 កំណែនេះគឺជាដំណោះស្រាយប្រសើរជាងឧទាហរណ៍ទាបដែលអ្នករកឃើញនៅក្នុងឯកសារ។ វាត្រូវបានត្រួតពិនិត្យថាតើ formater មានពិតប្រាកដមុនពេលទូរស័ព្ទវា។ វាត្រូវបានគ្រប់គ្រងដោយ Prettier តាមរយៈការដំឡើងផ្ទាល់ឬ npx ។ វាត្រូវបានគ្រប់គ្រងទាំងពីរ និង សម្រាប់ Python ដោយសារតែការដំឡើងនិង linting គឺជាអ្វីផ្សេងគ្នា។ ruff format ruff check --fix ការចុះឈ្មោះវាជា PostToolUse ជាមួយនឹង វាត្រូវបានប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែ "Edit|Write" អស្ចារ្យនៃការរួមបញ្ចូលគឺមានប្រសិទ្ធិភាព។ ក្នុងរយៈពេលមួយសប្តាហ៍ខ្ញុំបានកំណត់វា។ ដោយគ្មានការកាត់បន្ថយខ្ញុំបានចំណាយពេលវេលាប្រមាណ 4 នាទីក្នុងមួយសប្តាហ៍ដែលបានសួរលោក Claude ដើម្បីកាត់បន្ថយបញ្ហានេះ។ ជាមួយនឹងការកាត់បន្ថយការកាត់បន្ថយការកាត់បន្ថយការកាត់បន្ថយការកាត់បន្ថយការកាត់បន្ថយការកាត់បន្ថយការកាត់បន្ថយការកាត់បន្ថយការកាត់បន្ថយការកាត់បន្ថយការកាត់បន្ថយការកាត់បន្ថយ។ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ លោក Claude បានដោះស្រាយការរួមបញ្ចូល API ដែលបានអានឯកសារ config ដែលមានគោលបំណង API ការធ្វើតេស្ត និងរួមបញ្ចូលគោលបំណងនៅក្នុងការឆ្លើយតបរបស់គាត់ ។ គោលបំណងនេះគឺសម្រាប់បរិស្ថានដោះស្រាយនិងត្រូវបានដោះស្រាយនៅថ្ងៃបន្ទាប់។ ប៉ុន្តែគោលបំណងបានបាត់បង់ខ្ញុំ។ ការដោះស្រាយឧបករណ៍ដោះស្រាយតាមរយៈការជួញដូរ, ទទួលបានការកាត់បន្ថយ, អាចទទួលបានការកាត់បន្ថយ។ ខ្ញុំមិនចង់មានវិញ្ញាបនប័ត្រនៅក្នុងដោះស្រាយនេះ។ #!/bin/bash # .claude/hooks/secrets.sh # Scans tool output for credential-shaped strings OUTPUT=$(jq -r '.tool_output // empty') [ -z "$OUTPUT" ] && exit 0 ALERTS="" # AWS keys (AKIA...) echo "$OUTPUT" | grep -qE 'AKIA[0-9A-Z]{16}' && ALERTS="$ALERTS aws_key" # Generic API key patterns (long hex/base64 after common key names) echo "$OUTPUT" | grep -qiE '(api_key|apikey|secret_key|access_token|auth_token)["\x27: =]+[A-Za-z0-9+/]{20,}' && ALERTS="$ALERTS api_credential" # Private key headers echo "$OUTPUT" | grep -q 'BEGIN.*PRIVATE KEY' && ALERTS="$ALERTS private_key" # JWT tokens echo "$OUTPUT" | grep -qE 'eyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.' && ALERTS="$ALERTS jwt_token" # Connection strings with passwords echo "$OUTPUT" | grep -qiE '(postgresql|mysql|mongodb|redis)://[^:]+:[^@]+@' && ALERTS="$ALERTS connection_string" if [ -n "$ALERTS" ]; then TS=$(date '+%H:%M:%S') TOOL=$(jq -r '.tool_name // unknown') echo "[$TS] SECRET_ALERT in $TOOL:$ALERTS" >> .claude/secret-alerts.log echo "WARNING: potential credential in $TOOL output ($ALERTS)" >&2 fi exit 0 នេះមិនមែនជាការផ្លាស់ប្តូរសម្រាប់ការគ្រប់គ្រងសញ្ញាបនប័ត្រត្រឹមត្រូវ។ វាគឺជា tripwire ។ វាត្រូវបានកាត់បន្ថយគំរូដែលមានប្រសិទ្ធិភាព: គោលដៅការចូល AWS, អ្វីដែលគួរឱ្យចាប់អារម្មណ៍ដូចជាវិញ្ញាបនប័ត្រ API, ប្លុកគោលដៅឯកជន, JWTs, ស៊េរីតំណភ្ជាប់ទិន្នន័យជាមួយនឹងសញ្ញាបនប័ត្រដំឡើង។ ប្រសិនបើវាមានការឆ្លងកាត់វាមាន និងបោះពុម្ពអំណាចដើម្បី stderr ។ វាមិនកាត់បន្ថយអ្វីគ្រប់យ៉ាង។ ការកាត់បន្ថយអំណាចស្អាតនឹងកាត់បន្ថយអំណាចរបស់អ្នក។ ការកាត់បន្ថយអំណាចស្អាតពិតប្រាកដផ្តល់ឱ្យអ្នកនូវអ្វីដែលអ្នកអាចស្រាវជ្រាវនៅចុងបញ្ចប់នៃសកម្មភាព។ .claude/secret-alerts.log យោបល់ ពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេលានៅពេលវេល secret-alerts.log សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ កម្រិតខ្ពស់, កម្រិតខ្ពស់, កម្រិតខ្ពស់, កម្រិតខ្ពស់, កម្រិតខ្ពស់, កម្រិតខ្ពស់, កម្រិតខ្ពស់, កម្រិតខ្ពស់ សូមអរគុណចំពោះលោក Claude ដើម្បីបង្វិលកំណត់យ៉ាងឆាប់រហ័សហើយវាបានធ្វើបាន មុនពេលដែលខ្ញុំបានចុះឈ្មោះអ្វីដែលកំពុងធ្វើ។ ការបំបែកបានតាមរយៈ។ CI គឺជាពណ៌ខ្មៅ។ មិនមានកាត់បន្ថយបានទេប៉ុន្តែការបំបែកនេះមិនគួរឱ្យកើនឡើងនៅលើមជ្ឈមណ្ឌលដោយគ្មានការ PR ។ main git push origin main #!/bin/bash # .claude/hooks/no-push-main.sh # Prevents git push to main/master/production branches CMD=$(jq -r '.tool_input.command // empty') echo "$CMD" | grep -q 'git push' || exit 0 BRANCH=$(git branch --show-current 2>/dev/null) PROTECTED="main master production release" for b in $PROTECTED; do if [ "$BRANCH" = "$b" ]; then jq -n --arg branch "$BRANCH" '{ hookSpecificOutput: { hookEventName: "PreToolUse", permissionDecision: "deny", permissionDecisionReason: ("Push to " + $branch + " blocked. Create a feature branch first.") } }' exit 0 fi done # Also block force push to any branch if echo "$CMD" | grep -qE 'push.*(-f|--force)'; then jq -n '{ hookSpecificOutput: { hookEventName: "PreToolUse", permissionDecision: "deny", permissionDecisionReason: "Force push blocked. Use --force-with-lease if you must." } }' fi អ្នកគ្រប់គ្រងទាំងពីរនៅក្នុងសៀវភៅមួយ។ គ្មានការផ្លាស់ប្តូរទៅនឹងសៀវភៅដែលមានការពារ។ គ្មានការផ្លាស់ប្តូរទៅនឹងសៀវភៅណាមួយ។ សៀវភៅទីពីរគឺជាការផ្លាស់ប្តូរដោយឥតគិតថ្លៃប៉ុន្តែខ្ញុំរក្សាទុកវាដោយសារតែការផ្លាស់ប្តូរដោយឥតគិតថ្លៃគឺជាប្រភេទនៃអ្វីដែលគួរឱ្យអ្នកសរសេរការផ្លាស់ប្តូរដោយខ្លួនឯងដោយមានការយល់ដឹងពេញលេញអំពីអ្វីដែលអ្នកធ្វើ។ លោក Claude បានដោះស្រាយជាមួយនឹងការបាត់បង់ដោយគួរឱ្យចាប់អារម្មណ៍។ វាត្រូវបានរកឃើញគោលបំណងដែលបានជំរុញការបង្កើតផ្នែកលក្ខណៈនិងដំណើរការនៅលើដំណើរការដែលត្រឹមត្រូវ។ ការបាត់បង់មិនបាត់បង់ដំណើរការ។ វាត្រូវបានផ្លាស់ប្តូរវា។ ប្រព័ន្ធ ប្រតិបត្តិការ Black Box Recorder រាល់ឧបករណ៍បានសរសេរ។ រាល់ការចូល។ រាល់ការនាំចេញ។ សរសេរពេលវេលានិងបន្ថែមទៅជាឯកសារប្រហែល។ នេះគឺជាការសរសេរដែលខ្ញុំផ្តល់អនុសាសន៍ជាទូទៅបំផុតដល់ក្រុមប្រឹក្សាភិបាលដោយសារតែវាគឺជាការឆ្លើយតបទៅនឹងសំណួរដែលអ្នកចង់បានបន្ទាប់ពីអ្វីដែលបានជំងឺ: "អ្វីដែល Claude បានធ្វើដូច្នេះ?" #!/bin/bash # .claude/hooks/record.sh # Logs every tool call to a structured audit file TS=$(date '+%Y-%m-%d %H:%M:%S') TOOL=$(jq -r '.tool_name // "unknown"') SESSION=$(jq -r '.session_id // "unknown"') # Compact input (one line, no whitespace bloat) INPUT=$(jq -c '.tool_input // {}') # Truncate output to prevent log bloat (first 500 chars) OUTPUT=$(jq -r '.tool_output // empty' | head -c 500) # Tab-separated for easy parsing with awk/cut printf '%s\t%s\t%s\t%s\t%s\n' \ "$TS" "$SESSION" "$TOOL" "$INPUT" "$OUTPUT" \ >> .claude/session-log.tsv exit 0 សៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវ grep "$(date +%Y-%m-%d)" .claude/session-log.tsv | grep "Bash" | cut -f4 តើអ្នកត្រូវកំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់? grep -c "Edit\|Write" .claude/session-log.tsv វាត្រូវបានកាត់បន្ថយទៅ 500 សៀវភៅដើម្បីជួសជុលឯកសារប្រហែលជាច្រើននៅពេលដែល Claude បានអានឯកសារធំ។ ប្រសិនបើអ្នកត្រូវការដំណោះស្រាយពេញលេញអ្នកត្រូវផ្លាស់ប្តូរទៅឯកសារប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែល . .claude/logs/session-${SESSION}.tsv សម្រាប់ក្រុមដែលត្រូវការការកំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់ ប្រតិបត្តិការ Combined Settings File សៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅ { "hooks": { "PreToolUse": [ { "matcher": "Bash", "hooks": [ { "type": "command", "command": ".claude/hooks/guard.sh" }, { "type": "command", "command": ".claude/hooks/no-push-main.sh" } ] } ], "PostToolUse": [ { "matcher": "Edit|Write", "hooks": [ { "type": "command", "command": ".claude/hooks/fmt.sh" } ] }, { "matcher": "", "hooks": [ { "type": "command", "command": ".claude/hooks/secrets.sh" }, { "type": "command", "command": ".claude/hooks/record.sh" } ] } ] } } ចម្លង JSON ទៅ បានបង្កើតសៀវភៅទី 5 ក្នុង ការលេង លោក Done .claude/settings.json .claude/hooks/ chmod +x .claude/hooks/*.sh ហ្វេសប៊ុកប៊ុកប៊ុកប៊ុកប៊ុកប៊ុកប៊ុកប៊ុកប៊ុកប៊ុកប៊ុកប៊ុកប៊ុកប៊ុក និង ប្រព័ន្ធ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ guard.sh no-push-main.sh ការចូលដំណោះស្រាយស្អាតនៅលើការចូលដំណោះស្រាយ PostToolUse ដំបូងមានន័យថា និង ខ្ញុំនៅក្នុងការសរសេរឧបករណ៍ទាំងអស់, មិនមែនគ្រាន់តែការសរសេរឯកសារ។ វាជាការគិតថ្លៃ។ ខ្ញុំចង់សាកល្បងដំណោះស្រាយ Bash សម្រាប់វិញ្ញាបនប័ត្រហើយខ្ញុំចង់សាកល្បងការសរសេរទាំងអស់ដោយគ្មានការប្រភេទឧបករណ៍។ secrets.sh record.sh អ្វីដែលខ្ញុំបានរៀនដើម្បីដំណើរការទាំងនេះក្នុងរយៈពេល 6 ខែ ទាំងអស់ផ្សេងទៀតគឺជាការធានារ៉ាប់រង។ ឧបករណ៍កំណត់នេះគឺជាការរក្សាទុកពេលវេលាដែលអាចកំណត់បានយ៉ាងឆាប់រហ័ស។ ទាញយកវាជាលើកដំបូងប៉ុណ្ណោះប៉ុណ្ណោះប៉ុណ្ណោះប៉ុណ្ណោះប៉ុណ្ណោះ។ The formatter hook pays for itself on day one. ខ្ញុំចង់ពិនិត្យមើលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែលប្រហែល False positives in the secret scanner are fine. ក្នុងមួយសប្តាហ៍មួយខ្ញុំបានបន្ថែមគំរូបន្ទាប់ពីការបាត់បង់។ វាគឺចាប់ផ្តើមជាមួយ ឥឡូវនេះវាមានគំរូ 8 ។ ក្នុងរយៈពេល 6 ខែវាវាមានគំរូ 20 ។ វាមានគោលបំណង។ វាមានការកើនឡើងគួរឱ្យចាប់អារម្មណ៍របស់ក្រុមរបស់អ្នកអំពីអ្វីដែលគួរតែធ្វើដោយគ្មានការត្រួតពិនិត្យ។ The guard script needs to evolve. rm -rf ទោះជាយ៉ាងណា, នៅពេលដែលអ្វីមួយគត់ខុសត្រូវ, ការរក្សាទុកសៀវភៅពេញលេញនៃការដោះស្រាយទាំងអស់ Claude បានធ្វើឱ្យការស្រាវជ្រាវរយៈពេល ២ ម៉ោងទៅនឹងការរក្សាទុករយៈពេល ១៥ នាទី។ The audit log is most valuable after incidents. សៀវភៅ PreToolUse របស់ខ្ញុំនិងសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវ Keep hooks fast. សៀវភៅ សៀវភៅ Sticky Note is gone ការត្រួតពិនិត្យដែលបានរស់នៅនៅក្នុងគោលបំណងរបស់ខ្ញុំឥឡូវនេះមានជីវិតនៅក្នុងគោលបំណងគោលបំណងគោលបំណងគោលបំណងគោលបំណងគោលបំណងគោលបំណងគោលបំណងគោលបំណងគោលបំណងគោលបំណងគោលបំណងគោលបំណងគោលបំណងគោលបំណងគោលបំណងគោលបំណងគោលបំណងគោលបំណងគោលបំណងគោលបំណងគោលបំណងគោលបំណង អ្នកជំនួយកូដ AI គឺមានប្រសិទ្ធិភាព។ ប៉ុន្តែថាមពលដោយគ្មានការគាំទ្រគឺគ្រាន់តែមានសុវត្ថិភាពដែលអ្នកមិនបានកាត់បន្ថយបានទេ។ សៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅស សៀវភៅនេះបានផ្លាស់ប្តូរដោយសៀវភៅដែលគួរឱ្យចាប់អារម្មណ៍ថាខ្ញុំមិនចង់មើលវា។