Claude Code · أمان · settings.json · Plan Mode

خسر سنتين ونص من البيانات بأمر واحد… هاي إعدادات الأمان اللي بستعملها

ثلاث قواعد قبل ما تشغّل Claude Code على مشروعك الحقيقي: نسخة احتياطية، Plan Mode، وأي أمر بيحذف بتقراه بعينك. هون بتلاقي ملف settings.json جاهز للنسخ بيمنع أوامر الحذف، وشرح شو بيرجّع /rewind وشو ما بيرجّع، وطبقتين إضافيتين فوقهم: hook بيوقف الأمر الخطر قبل ما يتنفّذ، والـ sandbox. كل الكلام متأكد منه من توثيق Claude Code الرسمي بتاريخ 27 أكتوبر 2026.

شو صار، وليش ممكن يصير معك

مهندس معروف خلّى Claude Code يرتّب السيرفرات تبع منصّته. كان ناقصه ملف صغير بالإعدادات، فالأداة نفّذت أمر هدم (destroy) وراحت قاعدة البيانات كلها، ومعها النسخ الاحتياطية اللي كانت بنفس الحساب. والمؤلم إنه Claude كان نصحه من الأول ما يدمج المشروعين، وهو كمّل. مزوّد السحابة رجّعله البيانات بعد يوم تقريباً، بس مش كل مرة رح تكون محظوظ.

الدرس: Claude Code بيشتغل بصلاحياتك إنت. إذا إنت بتقدر تحذف قاعدة البيانات من جهازك، هو كمان بيقدر. الحل مش إنك تخاف منه، الحل إنك تحط حدود قبل ما تبلّش.
01
نسخة احتياطية
قبل أي شغل كبير، وبرّا نفس المكان.
02
يخطط بالأول
Plan Mode: بيقرأ وبيخطط، وما بيعدّل قبل موافقتك.
03
الحذف بعينك
قواعد بـ settings.json بتمنع أوامر الحذف أو بتسألك عليها.
نفس اللي بالريل، بالتفصيل

كل قاعدة إلها أداة جوّا Claude Code. هون شو بتعمل فعلاً، وشو ما بتعمل.

1

نسخة احتياطية قبل أي شي (وشو بيرجّع /rewind)

  • الكود: قبل أي شغل كبير اعمل commit بـ git (أو انسخ المجلد كله). الرجوع بـ git مضمون، الرجوع بأي شي تاني مش مضمون.
  • قاعدة البيانات: خلّي نسخة احتياطية برّا نفس الحساب ونفس السيرفر. بالقصة، النسخ الاحتياطية راحت مع القاعدة لأنها كانت بنفس المكان.
  • السيرفرات: أي أمر على بنية حقيقية (terraform، kubectl، أوامر الاستضافة) جرّبه على بيئة تجربة أول.

شو بيرجّع /rewind فعلاً؟

الأمر /rewind (أو Esc مرتين والخانة فاضية، وإله اسمين تانيين: /checkpoint و/undo) بيفتح قائمة الرجوع. منها خيار Restore code، وهاد حدوده بالضبط:

بيرجّعالملفات اللي عدّلها Claude بأدواته (Edit / Write). وإذا أمر Bash عدّل نفس الملف بعدين، بيرجّع هاد التعديل كمان.
ما بيرجّعملف ما عدّله Claude بأدواته وبس غيّرته أوامر Bash (حذف، نقل، سكربت). ولا أي تغيير صار برّا Claude Code، ولا قاعدة بيانات، ولا سيرفر.

واللقطات محفوظة لآخر 100 نقطة رجوع بس، وبتنمسح بعد حوالي 30 يوم. يعني /rewind شبكة أمان للكود جوّا الجلسة، مش بديل عن النسخة الاحتياطية.

2

خلّيه يخطط بالأول… وإنت بتوافق

بوضع التخطيط (plan mode) Claude بيقرأ الملفات، وبيشغّل أوامر قراءة بس عشان يفهم المشروع، وبيكتبلك خطة. ما بيعدّل أي ملف قبل ما توافق على الخطة. لما توافق بيطلع من وضع التخطيط وبينفّذ، وإذا بدك تعدّل الخطة بإيدك قبل الموافقة اضغط Ctrl+G.

Shift+Tab
بيبدّل الوضع: Manual ← acceptEdits ← planوبيضيف auto أو bypass لما يكونوا مفعّلين
/plan
بيدخّلك وضع التخطيط من جوّا الجلسةأو /plan + وصف المهمة بطلب واحد
claude --permission-mode plan
بيشغّل الجلسة من البداية بوضع التخطيطلما تفتح مشروع حقيقي
انتبه للنسخ الجديدة: من إصدارات قريبة، الجلسة بالتيرمنال أو VS Code ممكن تبلّش بوضع auto: مصنّف بيوافق على الأوامر بدالك. على مشروع حقيقي ثبّت الوضع بإيدك: حط "defaultMode": "plan" (أو "default" يعني Manual، بيسألك قبل كل شي) بملف إعدادات المشروع. هاد اللي بالقاعدة الثالثة.
3

ملف settings.json: انسخه زي ما هو

اعمل ملف .claude/settings.json جوّا مجلد مشروعك والصق فيه هاد. deny يعني ممنوع نهائياً، وask يعني لازم يسألك كل مرة:

.claude/settings.json

{ "permissions": { "defaultMode": "plan", "deny": [ "Bash(rm -rf *)", "Bash(rm -fr *)", "Bash(rm -r *)", "Bash(git push --force *)", "Bash(git reset --hard *)", "Bash(terraform destroy *)", "Read(./.env)", "Read(./.env.*)", "Edit(/prod/**)" ], "ask": [ "Bash(rm *)", "Bash(git push *)", "Bash(terraform apply *)" ] } }

بعد ما تحفظه، افتح Claude Code بالمشروع واكتب /permissions: بتشوف كل القواعد ومن أي ملف جاية، وبتقدر تضيف أو تشيل من هناك، حتى والجلسة شغّالة.

4

شو بتعني كل قاعدة، ووين بتحط الملف

السطرشو بيعمل
"defaultMode": "plan"كل جلسة بهالمشروع بتبلّش بوضع التخطيط. القيم المقبولة: default (Manual)، acceptEdits، plan، dontAsk. أما auto وbypassPermissions بينطنّشوا لو حطيتهم بملف المشروع.
Bash(rm -rf *) · rm -fr · rm -rالحذف الجماعي ممنوع بكل صيغه. الكتابة القديمة Bash(rm -rf:*) لسا شغّالة وبتعني نفس الشي (بس كنجمة بآخر النمط).
Bash(git push --force *) · git reset --hardالأمرين اللي بيضيّعوا شغل الفريق أو شغلك المحلي بدون رجعة.
Bash(terraform destroy *)أمر الهدم اللي بالقصة. ضيف جنبه أوامر أداتك إنت (مثلاً Bash(kubectl delete *)).
Read(./.env) · Read(./.env.*)ملفات الأسرار. قاعدة Read بتمنع القراءة والتعديل والإنشاء لهالمسار. المسار نسبة لمجلد المشروع، وبصيغة gitignore.
Edit(/prod/**)ممنوع يعدّل أي ملف تحت مجلد prod/ بالمشروع. لحماية المسارات استعمل Edit(...): قواعد Write(...) ما بتنطبق أبداً.
ask: Bash(rm *)أي حذف تاني بيسألك عليه. ومعه git push وterraform apply: مسموحين بس بعد ما تقرأ وتوافق.

الترتيب: deny ← ask ← allow

القواعد بتتقيّم بهالترتيب: المنع أول، بعدين السؤال، بعدين السماح. يعني أي deny بأي ملف بيغلب أي allow، حتى لو كان الـ allow بملف تاني.

وين بتحط الملف؟

الملفلمين
.claude/settings.jsonمشروع واحد، وبيتشارك مع فريقك (ارفعه على git). المنع والسؤال بيشتغلوا فوراً عند زملائك؛ السماح بيستنى لحد ما يوثّقوا المجلد.
.claude/settings.local.jsonإلك إنت بس بهالمشروع، ومش مرفوع على git. مكانه عند جذر مستودع git.
~/.claude/settings.jsonكل مشاريعك على الجهاز (على Windows: %USERPROFILE%\.claude\settings.json).
  • «Yes, and don't ask again»: لما تكبسها على أمر Bash، بينحفظ سماح دائم لهالأمر (حسب بدايته) بملف settings.local.json عند جذر المستودع، وما رح يسألك عنه مرة تانية بهالمشروع. الموافقات على تعديل الملفات ما بتنحفظ، بتخلص مع الجلسة.
  • إضافة VS Code: إلها إعدادها الخاص claudeCode.initialPermissionMode (القيم: default، plan، acceptEdits، bypassPermissions)، وبتقرأه من إعدادات المستخدم بـ VS Code بس، مش من إعدادات مساحة العمل ولا من settings.json تبع Claude.
5

وضعين لازم تتجنبهم على مشروع حقيقي

acceptEdits مش «تعديل ملفات بس»: هالوضع بيوافق لحاله كمان على أوامر mkdir، touch، rm، rmdir، mv، cp، وsed جوّا مجلد المشروع (بس أوامر الحذف على المسارات الحساسة لسا بتسأل). يعني بنفس سيناريو القصة، أمر حذف جوّا المشروع ممكن يمشي بدون ما تشوفه. ما تستعمله على مشروع حقيقي.
--dangerously-skip-permissions (نفسه وضع bypassPermissions) بيلغي كل الأسئلة. التوثيق نفسه بيقول: بس جوّا container أو VM معزول ما بيقدر Claude يأذي فيه جهازك. وإذا بدك تقفله نهائياً على جهازك، حط "disableBypassPermissionsMode": "disable" جوّا permissions بأي ملف إعدادات؛ بيشتغل من أي مستوى.
لما القواعد ما تكفي

قواعد settings.json بتمسك الأمر حسب نصّه. الطبقتين هدول بيمسكوا اللي بيفلت منها.

6

Hook بيوقف الأمر الخطر قبل ما يتنفّذ

الـ hook سكربت صغير بيشتغل قبل كل أمر Bash، بيقرأ نص الأمر كامل، وإذا لقى فيه نمط خطر بيرفضه وبيحكي لـ Claude ليش. ولأنه بيفحص النص كله، بيمسك /bin/rm -rf وbash -c "rm -rf …" اللي بتفلت من قواعد الإذن. وبيشتغل قبل قواعد الإذن: حتى لو في allow بيطابق الأمر، الـ hook بيوقفه.

1. ضيف هاد لملف .claude/settings.json (جنب permissions)

{ "hooks": { "PreToolUse": [ { "matcher": "Bash", "hooks": [ { "type": "command", "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/block-destructive.sh" } ] } ] } }

2. اعمل السكربت .claude/hooks/block-destructive.sh (بده jq مثبّت، وبعدها chmod +x)

#!/bin/bash COMMAND=$(jq -r '.tool_input.command') if echo "$COMMAND" | grep -qE 'rm -rf|rm -fr|rm -r |terraform destroy|git push --force|git reset --hard'; then echo "Blocked by hook: destructive command. Ask the owner first." >&2 exit 2 fi exit 0
  • كيف بيشتغل: Claude Code بيبعث للسكربت JSON فيه الأمر بالحقل tool_input.command. الخروج برقم 2 بيمنع الأمر، والرسالة اللي على stderr بتوصل لـ Claude فبيفهم ليش وبيدوّر على طريقة تانية.
  • ضيف أنماطك: حط أوامر أداتك جوّا الـ grep (مثلاً kubectl delete أو DROP TABLE).
  • Windows: السكربت بصيغة bash. شغّله من WSL2 أو Git Bash؛ على PowerShell مباشرة ما جرّبته.
7

الـ Sandbox: منع على مستوى الجهاز

الـ sandbox بيحبس أوامر الـ shell بنظام التشغيل نفسه، مش بفحص النص. فعّله بالأمر /sandbox من جوّا الجلسة، أو بالإعدادات:

{ "sandbox": { "enabled": true, "failIfUnavailable": true } }
وين بيشتغل
macOS وLinux وWSL2 بس. على Windows العادي الأوامر بتشتغل بدون sandbox؛ عشان هيك failIfUnavailable مهمة: بترفض تشغيل الجلسة بدل ما تمشي بدون حماية وإنت ما بتعرف.
شو بيغطي
أوامر الـ shell والعمليات اللي بتطلع منها بس. أدوات الملفات، وسيرفرات MCP، والـ hooks، وجلب الويب بتشتغل برّاه.
الكتابة
محصورة بمجلد الشغل ومجلد مؤقت والمجلدات اللي بتضيفها. يعني أمر حذف برّا المشروع ما بيمشي.
القراءة والشبكة
القراءة مسموحة لأغلب الجهاز إلا إذا حددت denyRead. والشبكة بتمر عبر proxy وقائمة network.allowedDomains فاضية بالبداية: ضيف النطاقات اللي بدك إياها.

على Linux وWSL2 بده أداتين مثبّتات: bubblewrap وsocat.

8

شو ما بتمسكه القواعد

التوثيق واضح: قاعدة المنع «بتغطي الطريقة اللي عادةً Claude بيكتب فيها الأمر، ومش حدود أمان حول البرنامج». شوف الفرق:

مع قاعدة Bash(rm *)النتيجة
rm -rf build/بتنمسك ✅
/bin/rm -rf build/ما بتنمسك: المسار الكامل غير «rm» ❌
bash -c 'rm -rf build/'ما بتنمسك: الأمر جوّا نص ❌
timeout 5 rm -rf build/بتنمسك: timeout وnice وnohup بينشالوا قبل المطابقة ✅
npx … rm -rf · docker exec … rm -rfما بتنمسك: الأغلفة هاي ما بتنشال ❌
npm test && rm -rf build/بتنمسك: قواعد المنع والسؤال بتنطبق على كل جزء بالأمر المركّب (&&، ;، |) ✅

لهيك الترتيب: القواعد بتمنع الغلط العادي، الـ hook بيمسك اللي بيلفّ عليها بالنص، والـ sandbox بيمنع على مستوى الجهاز. والسكربت اللي بيفتح الملف لحاله (python، node) ما بتمسكه إلا بالـ sandbox.

9

أخطاء شائعة

النسخة الاحتياطية بنفس الحسابنفس السيرفر، نفس الحساب، نفس أمر الهدم. راحت مع القاعدة.
برّا نهائياًحساب تاني أو مزوّد تاني، ونسخة محلية للمهم.
تكبس «don't ask again» على أمر حذفبينحفظ سماح دائم، وبعدها بيمشي بدون سؤال بكل جلسة.
«Yes» مرة وحدة بسوإذا انحفظ بالغلط، شيله من /permissions.
تعتمد على /rewind للكلبتفكّره بيرجّع قاعدة البيانات أو الملفات اللي حذفها أمر Bash.
git للكود، نسخة للقاعدةو/rewind للتعديلات اللي عملها Claude بأدواته بس.
  • تشغّله على السيرفر الحقيقي من أول تجربة: جرّب على نسخة أو بيئة تجربة أول.
  • تفكّر إن القواعد قفل كامل: هي حماية من الغلط، مش جدار أمان. القسم 8 فوق.
  • تحط "defaultMode": "auto" بملف المشروع: بينطنّش. أوضاع auto وbypass بتتحط بإعدادات المستخدم أو المدارة بس.
?

أسئلة شائعة

هالإعدادات بتبطّئ الشغل؟
شوي بالبداية: سؤال زيادة على كل حذف أو push. بس بتوفّر عليك يوم كامل من الرعب. ولما ترتاح مع مشروع معيّن، خفّف قائمة ask مش deny.
أنا مش مبرمج، بنفع؟
إيه. انسخ ملف settings.json زي ما هو، حطه بمجلد .claude جوّا مشروعك، وبس. الـ hook والـ sandbox اختياريين. وإذا لسا ما ثبّت Claude Code، ابدأ من دليل التثبيت.
أنا على Windows، شو بيشتغل عندي؟
القواعد الثلاثة وملف settings.json بيشتغلوا عادي. الـ sandbox ما بيشتغل على Windows العادي (بس جوّا WSL2)، والـ hook بصيغة bash فشغّله من WSL2 أو Git Bash.
وقاعدة البيانات؟ شو بيحميها؟
ولا قاعدة إذن بتفهم SQL. اللي بيحميها: نسخة احتياطية برّا، وإنك ما تعطي Claude بيانات دخول الإنتاج أصلاً (خلّيها بـ .env الممنوع قراءته)، وتجرّب على قاعدة تجربة. وإذا بدك، ضيف DROP وTRUNCATE لأنماط الـ hook.
وضع التخطيط بيشغّل أوامر؟
بيشغّل أوامر قراءة بس عشان يستكشف المشروع (زي ls وgit log)، وما بيعدّل أي ملف قبل موافقتك على الخطة. لما توافق بيطلع من وضع التخطيط وبيبلّش ينفّذ، وبعدها القواعد والـ hook هم اللي بيحكموا. باقي الأوضاع بالتفصيل بـ خريطة Claude Code.
✓ تم النسخ

Get the next guide first

Leave your email and new guides reach you as soon as they are out. No spam.

Your email stays with me, and you can ask me to delete it any time.