Pre-commit تصدیق، PII اسکننگ، ڈپازٹ تحفظات، اور سیشن لاگ ان کے لئے پروڈکشن سے کاپی-پاسٹ ہیک کی ترتیبات چھ ماہ پہلے میں نے اپنے ڈیزائن پر ایک لچکدار نوٹ رکھا تھا جس میں کہا گیا تھا: "آپ نے لینٹ کیا؟ آپ نے زون کو چیک کیا؟ کیا آپ نے دیکھا کہ اس نے کیا حذف کیا؟" ہر کلود کوڈ سیشن، اسی دستی چیک. ہر بار کلود نے ایک فائل کو ترمیم کیا، میں نے ایک اور ٹرمینل پر سوئچ کیا اور فارمیٹر کو چلایا. ہر بار جب یہ ایک بیش کمانڈ چلتا تھا، میں نے پیداوار پر غور کیا کہ کیا کچھ پیداوار پر اثر انداز ہوتا ہے. ہر وقت یہ کام کرنے کی کوشش کرتا تھا، میں چیک کرتا تھا کہ میں سب سے پہلے صحیح فریم پر تھا. مشکل یہ تھا کہ میں ایک کمپیوٹر کا کام کر رہا تھا ۔ ہر کارروائی پر تکرار شدہ نمونہ ، ایک دن میں ہزاروں مرتبہ ۔ اس لئے سکرپٹ ہیں ۔ اس کے بعد میں نے پتہ چلا کہ کلود کوڈ واقعات کو آگاہ کرتا ہے. ہر ایک کارروائی. آلہ کالز، فائل ایڈیٹس، بیش کمانڈز، سیشن شروع، سیشن ختم. ان سب. اور آپ ایک shell سکرپٹ کے ساتھ ان میں سے کسی کو قبضہ کر سکتے ہیں. ہوم ترجمہ کریں - یہ وہی ہے جو اسے تبدیل کر دیا گیا ہے اس واقعے کے بارے میں کوئی بات نہیں کرتا کلود کوڈ صرف ایک چیٹ انٹرفیس نہیں ہے جو کوڈ لکھتا ہے. سطح کے نیچے، یہ ایک لائیو سائیکل لنک چلتا ہے. صارف کو ایک نوٹ بھیجتا ہے. کلود فیصلہ کرتا ہے کہ کس آلے کو استعمال کرنے کے لئے. آلے کو چلتا ہے. کلود نتائج کو پڑھتا ہے. مکمل تک دوبارہ کریں. اس لنک میں ہر ٹرانزیشن پر، کلود کوڈ ایک واقعہ کھولتا ہے.اور آپ ان میں سے کسی بھی میں ایک ڈرائر شامل کرسکتے ہیں. دو چیزیں جو سب سے زیادہ اہم ہیں: PreToolUse ایک آلہ کال کو چلانے سے پہلے آگ لگاتا ہے. آپ کے ڈرائیور کو کال کی جانچ پڑتال کر سکتے ہیں اور ایک JSON فیصلہ واپس کرسکتے ہیں: اسے اجازت دیں، اس سے انکار کریں، یا خاموش رہیں اور معمول کی اجازت کے بہاؤ کو اس سے نمٹنے کی اجازت دیں. PostToolUse ایک ٹول کال کی کامیابی کے بعد آگ لگتی ہے. آپ کا ڈرائیور مکمل پیداوار حاصل کرتا ہے. اس کے ساتھ جو بھی آپ چاہتے ہیں. فائل کو لینٹ. کمانڈ لاگ. ایک ویب ہاک بھیجیں. آلہ پہلے سے ہی چل رہا ہے، لہذا یہ ردعمل ہے، پیشہ ورانہ نہیں ہے. صارفین کو رجسٹر کیا گیا ہے یہ shell کمانڈز، HTTP endpoints، یا LLM prompts ہوسکتے ہیں۔ میں shell کمانڈز استعمال کرتا ہوں کیونکہ وہ تیزی سے، ڈبگنگ کے قابل ہیں اور انٹرفیس کی ضرورت نہیں ہے. .claude/settings.json کل انٹرفیس یہ ہے: کلود کوڈ آپ کے سکرپٹ کے stdin میں JSON کو پائپ کرتا ہے. آپ کے سکرپٹ اختیاری طور پر stdout کے لئے JSON لکھتا ہے. یہ وہی ہے. اگر آپ کے سکرپٹ بغیر باہر نکلتا ہے تو، کلود کوڈ معمول سے آگے بڑھتا ہے. سکرپٹ 1: تباہی سے بچنے کے سکرپٹ میں نے یہ لکھا جب کلود نے کوشش کی ایک بنائیں ڈائریکٹری جس میں میرے ہوم فارم میں ایک symlink تھا. کچھ بھی برا نہیں ہوا کیونکہ میں نے اسے اجازت نامہ میں پکڑ لیا. لیکن مجھے اسے پکڑنے کی ضرورت نہیں ہونا چاہئے. 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" سکرپٹ 2: وہ فارمیٹر جو کبھی نہیں بھولتا اس ہیک سے پہلے، میرے کام کی رفتار تھی: کلود فائل کو ترمیم کرتا ہے، میں فارمیٹنگ غلط ہے، میں کلود کو اسے ٹھیک کرنے کے لئے پوچھتا ہوں، کلود فارمیٹر چلتا ہے، میں فارمیٹڈ ورژن کا جائزہ لیتا ہوں. #!/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 یہ ورژن آپ دستاویزات میں تلاش کر سکتے ہیں کہ کم از کم مثال کے مقابلے میں زیادہ مکمل ہے. یہ چیک کرتا ہے کہ کیا فارمیٹر واقعی موجود ہے اس سے پہلے کہ اسے کال. یہ مقامی انسٹال یا NPX کے ذریعہ Prettier کا کام کرتا ہے. یہ دونوں چلتا ہے. اور Python کے لئے کیونکہ فارمیٹنگ اور لینٹنگ مختلف چیزیں ہیں. ruff format ruff check --fix اس کے ساتھ PostToolUse کے طور پر رجسٹر کریں یہ ہر فائل ترمیم کے بعد آگ لگاتا ہے. فائل کو کوڈ اسے واپس پڑھنے سے پہلے فارمیٹ کیا جاتا ہے یا اگلے ترمیم پر منتقل ہوتا ہے. "Edit|Write" مرکب اثر قابل ذکر ہے. ایک ہفتے کے دوران میں نے اسے پیمائش کی. ہیک کے بغیر، میں ہر سیشن میں کلود کو فارمیٹنگ کے مسائل کو حل کرنے کے لئے 4 منٹ خرچ کر رہا تھا. ہیک کے ساتھ، صفر. ایک ہفتے میں 30 سیشنز کے دوران، جو دو گھنٹے کی واپسی ہے. سکرپٹ 3: خفیہ ڈیکٹر یہ ایک تقریبا غلطی کی وجہ سے موجود ہے. کلود ایک API انٹرویو کو ڈبگنگ کر رہا تھا، ایک ٹیسٹ 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، ڈیٹا بیس کنکشن رینجز کے ساتھ داخل شدہ پاس ورڈ کے طور پر نظر آتے ہیں. جب یہ آگ لگتی ہے تو اس نے یہ کسی بھی چیز کو روک نہیں دیتا. ایک جعلی مثبت پر بلاک آپ کے بہاؤ کو روک سکتا ہے. ایک حقیقی مثبت پر لاگ ان آپ کو سیشن کے اختتام پر تحقیقات کرنے کے لئے کچھ دیتا ہے. .claude/secret-alerts.log کا جائزہ ایک دن میں ایک بار. زیادہ سے زیادہ داخلات جعلی مثبت ہیں ( ٹیسٹ فیکٹریز، دستاویزات کے مثالیں). تقریباً ایک ہفتے میں ایک بار، ایک حقیقی کافی ہے کہ ایک کریڈٹٹیول کو روٹ کرنے یا ایک .gitignore کو اپ ڈیٹ کرنے کی ضمانت دے. secret-alerts.log سکرپٹ 4: Branch Cop مختصر، صاف، اور ایک حقیقی غلطی سے پیدا ہوا. ، کلود کو ایک تیزی سے ٹھیک کرنے کے لئے پوچھا، اور یہ چل گیا اس سے پہلے کہ میں نے رجسٹر کیا تھا. دباؤ گزر گیا. سی آئی سبز تھا. کوئی نقصان نہیں کیا گیا. لیکن کمیشن کو ایک پی آر کے بغیر بنیادی پر زمین پر نہیں جانا چاہئے تھا. 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: سیاہ باکس ریکارڈر ہر آلہ کال. ہر input. ہر output. Timestamped اور ایک لاگ فائل میں شامل کیا گیا. This is the hook I most often recommend to teams because it answers the question you always ask after something goes wrong: "What exactly did Claude do?" #!/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 ٹیب منفرد، JSON نہیں. عمدہ انتخاب. TSV فائلوں کو پکڑ سکتے ہیں، ترتیب دے سکتے ہیں، اور معیاری یونیکس آلات کے ساتھ کاٹ سکتے ہیں. آج سے ہر بیچ کمانڈ کو دیکھنے کی ضرورت ہے؟ grep "$(date +%Y-%m-%d)" .claude/session-log.tsv | grep "Bash" | cut -f4 اس ہفتے کتنے فائل ترمیموں کو کلک کرنے کی ضرورت ہے؟ grep -c "Edit\|Write" .claude/session-log.tsv پیداوار فیلڈ کو 500 حروف تک کاٹ دیا جاتا ہے تاکہ بہت سے میگا بائٹ جوا فائلوں کو روکنے کے لئے جب کلود بڑے فائلوں کو پڑھتا ہے. اگر آپ کو مکمل پیداوار کی ضرورت ہے تو، فی سیشن جوا فائلوں کو تبدیل کریں: فائل نام کو تبدیل کریں . .claude/logs/session-${SESSION}.tsv ان ٹیموں کے لئے جو مرکزی لاگ ان کی ضرورت ہوتی ہے، فائل ایڈجسٹ کو ایک HTTP ہیک کے ساتھ تبدیل کریں جو آپ کی لاگ ان انٹرفیس پر اشارہ کرتا ہے. JSON پائیدار Claude Code sends میں اس سکرپٹ کی سب کچھ شامل ہے، اس کے علاوہ اضافی کنکٹیکٹ جیسے کام کرنے والے ڈائریکٹری اور آلے کی ترتیب. مجموعی ترتیبات فائل تمام پانچ خطوط، ایک دوسرے کے ساتھ منسلک: { "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 کو کاپی کریں اس میں پانچ کتابیں بنائیں چلتے ہیں ڈون .claude/settings.json .claude/hooks/ chmod +x .claude/hooks/*.sh ہوم اردو سے انگریزی ویکیپیڈیا میں تحریر کیجئے اور ہر Bash کمانڈ کا جائزہ لیں. اگر کوئی بھی ایک انکار واپس کرتا ہے تو، کمانڈ بلاک کیا جاتا ہے. PostToolUse ہیک بھی ترتیب میں چلتے ہیں لیکن وہ کچھ بھی بلاک نہیں کر سکتے ہیں؛ آلہ پہلے سے ہی چلایا گیا ہے. guard.sh no-push-main.sh دوسری PostToolUse داخلے پر خالی موازنہ کا مطلب ہے اور ہر آلہ کال پر آگ، نہ صرف فائل ایڈیٹس. یہ عمدہ ہے. میں شناختیات کے لئے بیس output سکن کرنا چاہتا ہوں اور میں آلہ کی قسم کے بغیر سب کچھ لاگ ان کرنا چاہتا ہوں. secrets.sh record.sh میں نے چھ ماہ کے لئے یہ چلانے کے لئے کیا سیکھا باقی سب کچھ ضمانت ہے. فارمیٹر ایک فوری، قابل انداز وقت بچاتا ہے. سب سے پہلے انسٹال کریں اگر آپ باقی کو نظر انداز کرتے ہیں تو بھی. The formatter hook pays for itself on day one. میں ایک حقیقی کریڈٹ کو بھولنے کے مقابلے میں ایک ہفتے میں دس جعلی ایوارڈز کا جائزہ لینے کے لئے ترجیح دیتا ہوں. لاگ فائل کا جائزہ لینے میں 30 سیکنڈ لگتے ہیں. 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 ہیک ہر آلہ کال کے لئے لمبائی شامل کرتا ہے. میرے گارڈ اور branch-cop سکرپٹ ہر ایک میں 5ms سے کم چلتے ہیں. فارمیٹر فائل سائز کے مطابق 50-200ms میں سب سے کم ہے، لیکن یہ PostToolUse چلتا ہے تاکہ یہ پائپ لائن کو بلاک نہیں کرتا. اگر آپ کا ہیک ایک بیرونی API کو بلاتا ہے تو، PostToolUse کا استعمال کریں یا لمبائی قبول کریں. Keep hooks fast. Sticky Note چلا گیا ہے وہ نگرانی جو پہلے میرے دماغ میں رہتا تھا اب پانچ 150 لائنوں کے مجموعی طور پر شیل سکرپٹ میں رہتا ہے. وہ میرے مشارکت کے بغیر ہر آلہ کال پر چلتے ہیں. وہ چیزیں پکڑتے ہیں جو میں ایک طویل سیشن کے اختتام پر تھکا ہوا ہوں. وہ کبھی بھی زون کو چیک کرنے کے لئے بھول جاتے ہیں. AI کوڈنگ مددگار طاقتور ہیں. لیکن گارڈرایلز کے بغیر توانائی صرف خطرہ ہے جو آپ نے ابھی تک پیمائش نہیں کی ہے. پانچ سکرپٹ، دس منٹ کی تنصیب، اور خطرہ تقریبا نیچے گر جاتا ہے. اس پرسکون نوٹ کو کچھ بہتر کے ساتھ تبدیل کر دیا گیا ہے. کچھ جو مجھے اس کی دیکھ بھال کرنے کے لئے یاد کرنے پر اعتماد نہیں کرتا.