تصور کنید از یک عامل هوش مصنوعی میخواهید صفحهی سفارشات را طراحی کند. او برای درک ساختار دادهها، به سراغ کد بکاند میرود؛ اما در مسیر این کار، یک فیلد حیاتی را «مرتب» میکند و کل اپلیکیشن موبایل شما را از کار میاندازد. این کابوس توسعهدهندگان، اکنون با یک ترفند ساده در پیکربندی دسترسیها قابل حل است.
شما اکنون میتوانید Claude Code را بر اساس کل معماری بکاند خود مبنیسازی (Grounding) — یعنی مدل را با دادههای واقعی پروژه تطبیق دهید تا بهجای حدس زدن، از واقعیت کد استفاده کند — کنید، بدون اینکه ریسک یک کامیت تصادفی را بپذیرید. با ترکیب پرچم --add-dir و یک قانون منع (deny rule)، توسعهدهندگان میتوانند با بکاند خود مانند یک کتابخانهی مرجع «فقطخواندنی» برخورد کنند، در حالی که هوش مصنوعی فعالانه روی کدهای فرانتاند مینویسد.
این رویکرد نقطهٔ ضعف بزرگی در کدنویسی عاملمحور (Agentic) را برطرف میکند. تصور کنید برای ساخت یک صفحهی سفارشات جدید، Claude Code به مسیر واقعی GET /orders و مدل واقعی OrderDto نیاز دارد. شما او را به مخزن بکاند در پوشهی مجاور ارجاع میدهید و صفحه بهدرستی ساخته میشود. اما سپس دستور git status در بکاند را اجرا میکنید و میبینید که یک DTO «مرتب» شده و یک فیلد بدون درخواست هیچکس تغییر نام یافته است؛ تغییری که اکنون در انتظار است تا اپلیکیشن موبایل را در محیط تولید متوقف کند.
این اتفاق به این دلیل رخ میدهد که طبق مستندات، پیشفرض دایرکتوریهای اضافهشده در Claude Code این است که از همان قوانین دسترسی دایرکتوری اصلی پیروی کنند. آنها بدون نیاز به تایید (Prompt) قابل خواندن هستند و مجوزهای ویرایش فایل از حالت دسترسی فعلی پیروی میکنند. اگر شما در حالت acceptEdits باشید، مستندات صراحتاً بیان میکنند که ویرایشهای فایل در دایرکتوری کاری یا دایرکتوریهای اضافهشده بهطور خودکار پذیرفته میشوند. بنابراین، با اضافه کردن بکاند، آن پوشه دقیقاً به اندازه فرانتاند قابل ویرایش میشود.
همانطور که در تحلیل قبلی ما دربارهی حالت Fast در مدل Opus 5.5 اشاره کردیم که سرعت استدلالهای سطح بالا را بهینه کرده بود، چالش فعلی از تأخیر مدلها به سمت ایمنی عاملها تغییر کرده است. ریسک دیگر فقط پاسخ کند یا تند نیست، بلکه عاملی است که با نیت خیر برای «تمیز کردن کد» یک فیلد در بکاند را تغییر میدهد و بهطور غیرمستقیم اپلیکیشن موبایل در محیط Production را مختل میکند. این چالشها در واقع بخشی از تلاش گستردهتر برای کاهش ادعاهای دروغین عاملها درباره رفع باگهاست تا اعتماد توسعهدهنده به خروجی مدل افزایش یابد.
پیادهسازی حفاظ خواندنی
برای راهاندازی این سیستم، ابتدا دایرکتوری بکاند را به جلسه اضافه کنید. اگر فرانتاند شما در مسیر ~/code/web و بکاند در ~/code/api قرار دارد، میتوانید جلسه را با دستور claude --add-dir ~/code/api آغاز کنید. برای کسانی که در حال حاضر در یک جلسه فعال هستند، دستور /add-dir ~/code/api همین نتیجه را میدهد.

اضافه کردن دایرکتوری به این شکل، محتویات .claude/skills/ ، .claude/commands/ و .claude/agents/ مربوط به بکاند را وارد جلسه میکند. برای اینکه این دسترسی در تمام جلسات دائمی شود، میتوانید مسیر را در بخش permissions.additionalDirectories در فایل تنظیمات لیست کنید. با این حال، تفاوت کلیدی در نحوه بارگذاری این مسیرها وجود دارد:
- دستورات CLI/Slash: استفاده از
--add-dirیا/add-dirباعث وارد شدن مهارتها، دستورات و عاملهای بکاند میشود. اگر بکاند دستور خاص خود مانند/deployرا داشته باشد، این دستور در لیست دستورات جلسه فرانتاند شما ظاهر خواهد شد. - فایل تنظیمات: لیست کردن یک دایرکتوری در
additionalDirectoriesتنها دسترسی به فایلها را فراهم میکند و مهارتها را وارد نمیکند. - فایل CLAUDE.md: فایل
CLAUDE.mdبکاند تنها در صورتی بارگذاری میشود که متغیر محیطیCLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1را تنظیم کرده باشید.
کلید ایمنی در قانون منع (Deny Rule) است. یک فایل .claude/settings.local.json در مخزن فرانتاند خود بسازید و پیکربندی زیر را در آن قرار دهید:
"permissions": { "deny": [ "Edit(~/code/api/**)" ] }
بسیار حیاتی است که از کلمه Edit بهجای Write استفاده کنید. طبق مستندات، قوانین Edit بر تمام ابزارهای داخلی که فایلها را تغییر میدهند (از جمله عملیات نوشتن) اعمال میشوند. قانونی که صرفاً برای Write نوشته شود، پذیرفته میشود اما «هرگز مورد استشاره قرار نمیگیرد» و Claude Code در هنگام شروع به کار یک هشدار صادر میکند. یک لیست منع که فقط شامل Write(~/code/api/**) باشد، در ظاهر امن به نظر میرسد اما در عمل هیچ کاری انجام نمیدهد.
دقت در مسیرها و سلسلهمراتب قوانین
اشتباه در پیشوندهای مسیر، رایجترین نقطه شکست در این تنظیمات است. در این قوانین، پیشوند تعیین میکند که لنگر (Anchor) مسیر کجاست:
~/path: از دایرکتوری Home کاربر شروع میشود.//path: یک مسیر مطلق (Absolute Path) است./path: نسبت به منبع تنظیمات (دایرکتوری کاری اصلی جلسه) سنجیده میشود.
برای مثال، استفاده از Edit(/code/api/**) بهجای ~/ بهطور اشتباه به داخل پوشه فرانتاند اشاره میکند، نه به پوشه بکاند در ریشه کدها.
قوانین منع (Deny) همیشه برنده هستند. قوانین به ترتیب «منع، سپس پرسش، سپس اجازه» ارزیابی میشوند. یک قانون اجازه (Allow) نمیتواند استثنایی در یک قانون منع ایجاد کند. بنابراین، یک اجازه کلی که هفته پیش تایید کردهاید، نمیتواند قفل بکاند را باز کند. این وضعیت محیطی ایجاد میکند که در آن کدها «از پشت شیشه» خوانده میشوند اما هرگونه تلاش برای نوشتن در همان نقطه متوقف میشود.
چرا از فایل local استفاده کنیم؟ چون مسیرها مختص به چیدمان فایلها در ماشین شما هستند. Claude Code هنگام ایجاد settings.local.json آن را به لیست Excludeهای جهانی گیت شما اضافه میکند؛ اما اگر آن را دستی بسازید، باید خودتان آن را به .gitignore اضافه کنید. اگر تمام تیم شما دو مخزن را در یک چیدمان یکسان کنار هم قرار دادهاند، میتوانید قانون را در فایل .claude/settings.json که کامیت شده قرار دهید. قوانین منع در آنجا بلافاصله اعمال میشوند، حتی قبل از اینکه همکار شما پوشه را مورد اعتماد قرار دهد.
برای جلسات یکباره بدون نیاز به ایجاد فایل، از پرچم --disallowedTools استفاده کنید:claude --add-dir ~/code/api --disallowedTools "Edit(~/code/api/**)"
شما میتوانید دستور /permissions را داخل یک جلسه اجرا کنید تا تمام قوانین فعال و فایل منبع آنها را ببینید، یا از claude doctor برای چاپ خطاهای اعتبارسنجی فایل تنظیمات بدون شروع جلسه استفاده کنید.
بستن حفرههای خروجی شل (Shell)
قوانین منع استاندارد، ابزارهای داخلی و دستورات شناختهشده Bash مانند sed ، tee یا اهداف تغییر مسیر (> file) را پوشش میدهند. با این حال، آنها جلوی «فرآیندهای فرعی دلخواه که بهطور غیرمستقیم فایلها را میخوانند یا مینویسند» را نمیگیرند. اگر Claude دستوری مانند npm run codegen را در بکاند اجرا کند، یا یک اسکریپت Node که فایل مینویسد، قانون Edit هرگز مسیر را نمیبیند چون عملیات توسط یک پروسه خارجی انجام میشود.
برای بستن این شکاف، باید سندباکس (Sandbox) در سطح سیستمعامل را فعال کنید که دستورات Bash و هر پروسهای که آنها شروع میکنند را در بر میگیرد. بهطور پیشفرض، دستورات سندباکسشده میتوانند در دایرکتوری کاری و هر دایرکتوری که از طریق --add-dir یا additionalDirectories اضافه شده است، بنویسند.
برای ایمنسازی کامل بکاند، از این پیکربندی استفاده کنید:
"permissions": { "deny": [ "Edit(~/code/api/**)" ] }, "sandbox": { "enabled": true, "allowUnsandboxedCommands": false, "filesystem": { "denyWrite": ["~/code/api"] } }
تنظیم allowUnsandboxedCommands روی false حیاتی است. وقتی دستوری در داخل سندباکس شکست میخورد، Claude ممکن است تلاش کند آن را خارج از سندباکس مجدداً اجرا کند. مستندات توصیه میکنند که این تلاش مجدد را رد کنید. تنظیم این گزینه روی false این حفره خروجی را میبندد. شما همچنین میتوانید سندباکس را با دستور /sandbox در یک جلسه تغییر وضعیت دهید. توجه داشته باشید که در حالی که این قابلیت در macOS، لینوکس و WSL2 کار میکند، مستندات ذکر میکنند که در ویندوز Native، دستورات Claude Code بدون سندباکس اجرا میشوند.
یکپارچگی با Hermes IDE
برای کسانی که از Hermes IDE (نسخه ۲.۳.۰، منتشر شده در ۱۳ اکتبر ۲۰۲۶) استفاده میکنند، این گردش کار سادهتر شده است. Hermes اجازه میدهد یک تسک واحد تا ۵ پوشه اضافی را شامل شود. با فشردن ⌘N (یا Ctrl+Shift+N در ویندوز/لینوکس)، منوی پروژه را با ⌘P باز کنید و بکاند را به عنوان یک پوشه اضافی در کنار پروژه اصلی تیک بزنید.


در Hermes، تنها پروژه اصلی یک شاخه (branch) و worktree اختصاصی hermes/ دریافت میکند. پوشههای اضافی در همان جایی که هستند و روی شاخه فعلی خودشان پردازش میشوند. Hermes به شما اطلاع میدهد اگر پوشهای قابل اضافه شدن نباشد (مثلاً اگر همان مخزنی باشد که قبلاً انتخاب شده یا داخل پروژه اصلی قرار داشته باشد).
Hermes بهطور پیشفرض پوشههای اضافی را خواندنی نمیکند؛ در بخش Launcher ذکر شده است که پوشههای اضافی در جای خود ویرایش میشوند. به همین دلیل است که قانون منع Edit و denyWrite در سندباکس ضروری هستند. از آنجایی که Hermes دستور واقعی claude را در یک ترمینال اجرا میکند، قوانین .claude/settings.local.json شما اعمال میشوند. در یک worktree، مدل Claude Code از فایل .claude/settings.local.json موجود در ریشه اصلی checkout استفاده میکند.
از نسخه ۲.۳.۱، نوار «پاسخهای عامل» (Agent replies) نشان میدهد که تغییرات را فقط در پروژه اصلی ردیابی میکند. یک تراشه پاسخ (reply chip) ویرایشی در بکاند را نشان نخواهد داد، که این امر بررسی دستی با گیت را حتی مهمتر میکند. در واقع برای مدیریت دقیقتر تغییرات ناخواسته، میتوان از استراتژیهای Git Hooks برای حل مشکل بازگشتهای مخرب در Claude Code بهره برد تا لایهی امنیتی دیگری ایجاد شود.
تأیید مسدودسازی
توسعهدهندگان هرگز نباید به یک قانون دسترسی بدون تست اعتماد کنند. این فرآیند تأیید را دنبال کنید:
۱. ایجاد خط پایه: دستورات git -C ~/code/api branch --show-current و git -C ~/code/api status --short را اجرا کنید. در یک درخت تمیز، دستور دوم هیچ چیزی چاپ نمیکند. اگر خالی نیست، ابتدا کامیت یا stash کنید.
۲. تلاش برای نفوذ: به Claude دستور دهید: «فایل OrderDto در ~/code/api را باز کن و کامنت '// read-only test' را به عنوان اولین خط آن اضافه کن».
۳. مشاهده رد درخواست: Claude باید بتواند فایل را بخواند (بدون نیاز به تایید)، اما ویرایش آن باید توسط خودِ Claude Code و بدون نمایش Prompt دسترسی، رد شود. اگر تاییدیه دیدید یا ویرایش موفق بود، پیشوند مسیر خود را در /permissions بررسی کنید.
۴. اجرای تسک واقعی: دستور دهید: «صفحه src/pages/orders.tsx را بر اساس مسیر GET /orders و OrderDto در ~/code/api بساز. API را بخوان اما تغییرش نده. اگر DTO اشتباه به نظر میرسد، به من بگو».
۵. ممیزی نهایی: دستورات git -C ~/code/api status --short و git -C ~/code/web status --short را اجرا کنید. بکاند باید خالی بماند و فرانتاند باید صفحه جدید را نشان دهد.

این الگوی «مبنیسازی» — یعنی فراهم کردن منبع حقیقت واقعی برای خواندن تا مدل از حدس زدن API دست بردارد — یک اصل بنیادی در هوش مصنوعی تولیدی برای محیطهای عملیاتی است. این رویکرد بازتابدهنده منطقی است که در RAG Pocket Guide یافت میشود، جایی که الگوهای بازیابی (Retrieval)، تکهتکه کردن (Chunking) و رتبهبندی مجدد (Reranking) زمانی استفاده میشوند که منبع بیش از حد بزرگ است تا بهطور کامل تحویل داده شود.
این تغییر در شیوه عمل، نقش توسعهدهنده را از یک «بازبین دائمی» به «معمار محدودیتها» تغییر میدهد. با تعریف مرزهای عاملیت (Agency) برای عامل هوش مصنوعی، شما میتوانید از تمام کانتکست یک سیستم چند-مخزنی بهره ببرید، بدون اینکه اضطراب یک کامیت مخرب را داشته باشید.
گام بعدی شما
- فایل
.claude/settings.local.jsonرا برای هر پروژه با معماری چند-مخزنی ایجاد کنید. - از دستور
/permissionsبرای بررسی قوانین فعال در هر جلسه استفاده کنید. - در محیطهای لینوکس و macOS، حتماً
allowUnsandboxedCommandsرا غیرفعال کنید تا امنیت بکاند تضمین شود.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو