Pre-commit validation, PII scanning, deploy safeguards, and session logging සඳහා නිෂ්පාදන සිට copy-paste හුවමාරු සැකසුම් මාස 6කට පෙර මම මගේ පරිගණකය මත ඇඳෙන සටහනක් තබාගෙන තිබුණා: "ඔබ ලින්ට් කළාද?ඔබ විෂය පරීක්ෂා කළාද?ඔබ එය ඉවත් කළ දේ දිහා බැලුවාද?" සෑම Claude කේතය සැසිවාරයක්ම, එකම අතින් පරීක්ෂා කරයි. සෑම අවස්ථාවකදීම Claude ගොනු සංස්කරණය, මම වෙනත් තිරය වෙත මාරු හා formatter ක්රියාත්මක. සෑම අවස්ථාවකදීම එය Bash නියෝගයක් ක්රියාත්මක, මම ප්රතිඵලයක් හෝ නිෂ්පාදන කිසිවක් සම්බන්ධ කර ඇති බව ප්රශ්නය. සෑම අවස්ථාවකදීම එය කැප කිරීමට උත්සාහ කරන විට, මම මුලින්ම මම නිවැරදි අංශය මත සිටියා පරීක්ෂා කරන්න. මම පරිගණකයේ රැකියාවක් කරන බව ප්රශ්නය විය. සෑම ක්රියාවලියකටම, දිනකට සිය ගණනක් ගැලපෙන ප්රතිපත්තිය. පසුව මම Claude කේතය සිදුවීම් ගිනි. සෑම ක්රියාවලියකටම. මෙවලම් ඇමතුම්, ගොනු සංස්කරණය, Bash නියෝග, සැසිය ආරම්භ, සැසිය අවසන්. අකුරු අකුරු අකුරු අකුරු අකුරු අකුරු අකුරු අකුරු කවුරුත් කතා කරන්නේ නැති Event System ගැන Claude Code යනු කේතය ලියන චැට් පරිගණකයක් පමණක් නොවේ. පෘථිවියේ යටින්, එය ජීවන චක්රයක් සකස් කරයි. පරිශීලකයා ප්රවේශයක් එවනවා. Claude භාවිතා කරන මෙවලම තීරණය කරයි. මෙවලම ක්රියාත්මක කරයි. Claude ප්රතිඵල කියවනවා. සෑම පරිවර්තනයකටම ක්ලෝඩ් කේතය සිදුවීමකට ගිනි තබයි.ඔබට ඕනෑම සිදුවීමකට මෘදුකාංගයක් එකතු කළ හැකිය. වැදගත්ම සිදුවීම් දෙකක්: PreToolUse මෙවලමක් ඇමතුමක් සිදු කිරීමට පෙර ගිනි තැබිය හැකිය.ඔබේ පරිපාලකයා ඇමතුම පරීක්ෂා කළ හැකි අතර JSON විනිශ්චය ආපසු ලබා ගත හැකිය: එය අවසර, එය ප්රතික්ෂේප කිරීම, හෝ නිහඬව සිටීම සහ සාමාන්ය අවසර ප්රවාහය එය කළමනාකරණය කළ හැකිය. PostToolUse මෙවලමක් ඇමතුමක් සාර්ථක වීමෙන් පසු ගිනි තැබේ. ඔබේ පරිපාලකයා සම්පූර්ණ ප්රතිඵලයක් ලබා ගනී. එය සමඟ ඔබට අවශ්ය ඕනෑම දෙයක් කරන්න. ගොනුව ලින්ට් කරන්න. නියෝග ලින්ක් කරන්න. webhook යවන්න. මෙවලම දැනටමත් ක්රියාත්මක කර ඇත, එබැවින් මෙය ප්රතිඵලයක් නොවේ. ගනුදෙනුකරුවන් ලියාපදිංචි වී ඇත ඒවා shell commands, HTTP endpoints, හෝ LLM prompts විය හැක.මම shell commands භාවිතා කරන්නේ, ඔවුන් වේගවත්, debuggable වන අතර, පද්ධති අවශ්ය නොවේ. .claude/settings.json මුළු පරිගණකය වන්නේ: ක්ලෝඩ් කේතය JSON ඔබේ ස්ක් රිප්ටයේ stdin වෙත යැපෙනු ඇත. ඔබේ ස්ක් රිප්ටය තෝරාගැනීමකට JSON යැපෙනු ඇත. ඒකයි. ඔබේ ස්ක් රිප්ටය ප්රතිඵලයක් නොමැතිව පිටතට එන්නේ නම්, ක්ලෝඩ් කේතය සාමාන්යයෙන් ක්රියා කරයි. Screenshot 1: අනතුර ප් රතික්ෂේප කිරීම මම මේ ලිපිය ලිව්වේ ක්ලෝඩ් උත්සාහ කළ පසු මගේ ගෙදර ගොනුවකට symlink එකක් තිබියදී සිදුවූ build directory එකක්. කිසිවක් නරක නැහැ. මම අවසර ප්රවේශය තුළ එය අල්ලපු නිසා. නමුත් මට එය අල්ලන්න අවශ්ය නැහැ. 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 අට ආකෘති විය හැක අටක්. අදහස සෑම භයානක නියෝග ලැයිස්තුගත කිරීම නොවේ. අදහස ඔබ පුද්ගලිකව බොහෝ විට අසාමාන්යව ක්රියා කරන අය අල්ලා ගැනීමට වේ. මගේ ලැයිස්තුව මගේ තුවාල ප්රදර්ශනය කරයි. ඔබගේ ඔබේ ප්රදර්ශනය වනු ඇත. ලියාපදිංචි වීම in : .claude/settings.json "PreToolUse": [ { "matcher": "Bash", "hooks": [{ "type": "command", "command": ".claude/hooks/guard.sh" }] } ] ඒ tool name එකේ regex එකක් තියනවා. මෙම හූක් යනු Bash නියෝග සඳහා පමණක් වෙඩි තැබීමකි, ෆයිල් සංස්කරණය හෝ කියවීමක් නොවේ. matcher "Bash" Screenplay 2: කවදාවත් අමතක නොකරන Formatatter මෙම හුවමාරුවකට පෙර, මගේ වැඩ ක්රියාවලිය: ක්ලෝඩ් ගොනුව සංස්කරණය කරයි, මම ප්රමාණය වැරදියි, මම ක්ලෝඩ් එය නිවැරදි කිරීමට ඉල්ලා, ක්ලෝඩ් ප්රමාණය ක්රියාත්මක කරයි, මම ප්රමාණය කරන ලද අනුවාදය සමාලෝචනය කරයි. #!/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 මෙම අනුවාදය ලේඛනවල ඔබට ලැබෙන අවම උදාහරණයට වඩා සම්පූර්ණ වේ.එය එය ඇමතුම් කිරීමට පෙර Formatter සැබවින්ම තිබේද යන්න පරීක්ෂා කරයි.එය local install හෝ npx හරහා Prettier පාලනය කරයි.එය දෙකම ක්රියා කරයි සහ Python සඳහා, ආකෘති කිරීම සහ ලින්ටන් කිරීම වෙනස් දේවල් නිසා. ruff format ruff check --fix එය PostToolUse ලෙස ලියාපදිංචි කරන්න සෑම ෆයිල් සංස්කරණය කිරීමකටම පසුව එය ගිනි තැබේ.ෆයිල් එක ක්ලෝඩ් එය නැවත කියවීමට හෝ ඊළඟ සංස්කරණය වෙත ගමන් කිරීමට පෙර ප්රමාණවත් වේ. "Edit|Write" සතියකට වඩා මම එය ප්රමාණය කරමි. හුවමාරු නොමැතිව, මම සතියකට පැය 4 ක් පමණ ක්ලෝඩ්ව ප්රමාණය ගැටළු විසඳීමට ඉල්ලා සිටියා. හුවමාරු සමග, අර්බුදයක්. සතියකට සති 30 ක් පමණ, එනම් පැය දෙකක් ආපසු ලබා ඇත. සංකල්පය 3: Secret Detector මෙම ක්රෝඩ් API සම්මත කිරීම debugging, විභාග API යතුර ඇතුළත් config ගොනුවක් කියවා, එහි ප්රතිචාරයේ යතුර ඇතුළත්. යතුර ස්ථාවර පරිසරය සඳහා විය හා ඊළඟ දවසේ rotated විය. නමුත් මූලධර්මය මට කරදර. මෙවලම් ප්රතිඵල සංවාදය හරහා ක්රියාත්මක, cached, ප්රතිඵල ලියාපදිංචි. #!/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 සමාලෝචනය දිනකට එක් වරක්. බොහෝ ලියාපදිංචිය බොරු ප්රතිඵලයක් වේ (විභාග ලියාපදිංචිය, ලේඛන උදාහරණ). සතියකට එක් වරක්, එක් සැබෑ ප්රතිඵලයක් .gitignore ක්රියාත්මක කිරීම හෝ යාවත්කාලීන කිරීම සඳහා සාධාරණ වේ. secret-alerts.log ප් රවර්ගය: The Branch Cop කෙටි, කෙටි, සහ සැබෑ වරදකින් ඉපදුණ. ක්ලෝඩ් ඉක්මනින් නිවැරදි කිරීමට ඉල්ලා, එය ක්රියා මම සිදුවන දේ ලියාපදිංචි කිරීමට පෙර. පීඩනය හරහා ගියා. CI රතු විය. කිසිදු හානි සිදු නොවේ. නමුත් පොරොන්දුව ප්රමුඛ ප්රතිපත්තියක් නොමැතිව ප්රධාන මත නැඟී තිබුණේ නැත. 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 එක් ස්කෑන්ට් දෙකක ආරක්ෂක අංශවලට තල්ලු නොකරන්න. කිසිදු බලයක් කිසිදු අංශයට තල්ලු නොකරන්න. දෙවන නීතිය විකල්පයක් වේ, නමුත් මම එය තබා ගනිමි, මොකද ශක්තිය තල්ලු කිරීම ඔබට ඔබ කරන දේ පිළිබඳ සම්පූර්ණ අවබෝධයක් සහිතව නියෝගයක් තැබීමට අවශ්ය වන ආකාරයයි. ක්ලෝඩ් ගෞරවයෙන් ප් රතික්ෂේප කිරීම ප්රතික්ෂේප කරයි. එය හේතුවක් දකිනු ඇත, විශේෂාංග අංශයක් නිර්මාණය කිරීමට යෝජනා කරයි, සහ නිවැරදි මාර්ගය මත ක්රියා කරයි. 5 The Black Box Recorder - කළු පෙට්ටිය සෑම මෙවලමක් ඇමතුමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, සෑම ආදායමක්, #!/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 TAB-Separated, not JSON. Deliberate choice. TSV files are greppable, sortable, and cuttable with standard Unix tools. අද සිට සෑම Bash command බලන්න අවශ්යද? grep "$(date +%Y-%m-%d)" .claude/session-log.tsv | grep "Bash" | cut -f4 මේ සතියේ ක්ලෝඩ් විසින් සිදු කර ඇති ගොනු කීයක් ගණනය කිරීමට අවශ්යද? grep -c "Edit\|Write" .claude/session-log.tsv ප්රතිඵල ක්ෂේත් රයේ අංකය 500 දක්වා අඩු කර ඇත, ප්රමාණවත් ගොනු කියවන විට ප්රතිඵල ගොනු බොහෝ මෙගාබයිට් ප්රතිඵල ගොනු වළක්වා ගැනීම සඳහා.If you need full output, switch to per-session log files: replace the file name with . .claude/logs/session-${SESSION}.tsv මධ්යම ලියාපදිංචි කිරීම අවශ්ය කණ්ඩායම් සඳහා, ඔබගේ ලියාපදිංචි උපාංගය මත පෙන්වන HTTP හවුක් සමඟ ගොනුව උපාංගය මාරු කරන්න.JSON ප්රයෝජනවත් ප්රමාණය Claude Code යැවීම මෙම ස්ක්රිප්ටරය අල්ලා ගන්නා සියල්ල, වැඩ කළ ලිපිගොනු සහ මෙවලම් සැකසුම් වැනි අමතර සබැඳිය ඇතුළත් වේ. Combined Settings ගොනුව පස්දෙනාම එකතුවෙලා, එකතුවෙලා: { "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 එක Copy කරන්න පස් දෙනෙකුගේ ලිඛිතව ලිඛිතව ධාවනය ඩොන් .claude/settings.json .claude/hooks/ chmod +x .claude/hooks/*.sh සෝදිසි ක්ෂේත් රයේ සෝදිසි ක්ෂේත් රයේ සෝදිසි ක්ෂේත් ර දෙක සහ සෑම Bash නියෝගයක්ම විනිශ්චය කරනු ලැබුවහොත්, නියෝගය බිල්පත් කරනු ලැබේ. PostToolUse හෙක්ස් ද ක් රියාත්මක වන නමුත් කිසිවක් බිල්පත් කළ නොහැක; මෙවලම දැනටමත් ක් රියාත්මක කර ඇත. guard.sh no-push-main.sh දෙවන PostToolUse ප්රවේශය මත හිස් ගැලපෙන ප්රවේශය සහ සෑම මෙවලමක් ඇමතුමකටම ගිනි තැබීම, ෆයිල් සංස්කරණය පමණක් නොවේ.එය සැලකිලිමත් වේ.මම උපදෙස් සඳහා Bash ප්රතිඵල සඳහා ස්කෑන් කිරීමට අවශ්ය වන අතර මම මෙවලම වර්ගය වෙනුවට සියල්ල ලියාපදිංචි කිරීමට අවශ්ය වේ. secrets.sh record.sh මම මාස හයක් තුළ මෙම ක්රියා කිරීම ඉගෙන ගත්තේ කුමක්ද අනිත් හැම දෙයක්ම රක්ෂණයක්. Formatter එක වේගවත්, ප්රමාණවත් කාලය ඉතිරි කිරීමකි. The formatter hook pays for itself on day one. මම සතියකට බොරු අනතුරු ඇඟවීමක් දහයක් පරීක්ෂා කිරීමට වඩා සැබෑ සම්මතයක් අහිමි වනු ඇත. log file review takes 30 seconds. rotating a leaked credential takes an hour. False positives in the secret scanner are fine. සති කීපයකට වරක් මම මාතෘකාවක් එකතු කරන ලදී.එය පටන් ගත්තේ දැන් එය අට ආකෘති ඇත. මාස හයක් ඇතුළත එය විස්සක් වනු ඇත. ඒකයි අදහස. එය ඔබගේ කණ්ඩායමේ ආයතනික දැනුම කවදාවත් නිරීක්ෂණය නොකළ යුතු දේ ගැන එකතු කරයි. The guard script needs to evolve. rm -rf නමුත් යමක් වැරදි වුණොත්, සෑම ක් රියාවකටම සම්පූර්ණ ලියාපදිංචිය ලබා ගැනීමෙන් ක්ලෝඩ් පැය දෙකක පර්යේෂණයක් විනාඩි පහක ගබඩාවක් බවට පත් කරයි. The audit log is most valuable after incidents. සෑම PreToolUse හුවමාරුවකටම සෑම මෙවලමක් ඇමතුමකටම වේගවත්තාවක් එකතු කරයි. මගේ ආරක්ෂක සහ විෂය-කැප් ස්ක්රිප්ස් සෑම විටකම 5ms ට අඩු වේගයෙන් ක්රියා කරයි. Formatter ෆයිල් ප්රමාණයට අනුව 50-200ms හි වේගවත්ම වේගවත්තාවක් ඇත, නමුත් එය PostToolUse ක්රියා කරයි. Keep hooks fast. The Sticky Note නැතිවෙලා මගේ ඔලුව තුළ ජීවත් වීමට පෙර ජීවත් වූ අධීක්ෂණය දැන් මුළුමනින්ම 150 රේඛාවක් සහිත පස් දෙනෙකුගේ මුද් රණය තුළ ජීවත් වේ. ඔවුන් මගේ සහභාගීතාවයකින් තොරව සෑම මෙවලමක් ඇමතුමකටම ක් රියාත්මක වේ. AI coding assistants බලවත්.But power without guardrails is just risk you haven’t measured yet.Five scripts, ten minutes of setup, and the risk drops to zero. ඒ වෙනුවට මට වඩා හොඳ දෙයක් ලැබුනා.මගේ මතකය මතක් කරන්න එපා කියලා හිතනවා.