پرش به محتوای اصلی
پرش به محتوای مقاله

«روی سیستم من کار می‌کند»؛ ریشهٔ باگ‌های تنظیمات در Claude Code

·۱۹ شهریور ۱۴۰۵۴ دقیقه مطالعه۱ بازدید
راهنما
تنظیم را در پیکربندی پروژه گذاشتم و هیچ اتفاقی نیفتاد
تنظیم را در پیکربندی پروژه گذاشتم و هیچ اتفاقی نیفتاد
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

افشای مکانیسم Scoping در Claude Code که ۷۱ کلید تنظیماتی را در فایل‌های پروژه بی‌اثر می‌کند، بدون اینکه هیچ خطایی به کاربر نمایش دهد.

«هیچ خطا یا هشداری وجود ندارد.» این پاسخی خاموش است که توسعه‌دهندگان هنگام قرار دادن کلیدهای حیاتی مانند autoMode در فایل .claude/settings.json یک پروژه دریافت می‌کنند، در حالی که ابزار به‌سادگی آن‌ها را نادیده می‌گیرد. یک تحلیل فنی دقیق نشان می‌دهد که یک مکانیسم پنهان برای مدیریت محدوده (Scoping) در Claude Code باعث می‌شود این پیکربندی‌های سطح پروژه بدون هیچ اطلاعی با شکست مواجه شوند. حتی هنگام استفاده از پرچم --debug در زمان راه‌اندازی، هیچ هشداری چاپ نمی‌شود و داشتن یک فایل JSON معتبر از نظر دستوری نیز باعث فعال شدن هشدار نمی‌شود؛ موضوعی که توسعه‌دهندگان را در این ابهام می‌گذارد که چرا تنظیماتشان هیچ اثری ندارد.

تصور کنید ساعت‌ها وقت صرف اصلاح یک فایل تنظیمات می‌کنید که از نظر دستوری کاملاً درست است، اما نرم‌افزار به‌طور پیش‌فرض طوری طراحی شده که آن کلید خاص را در آن فایل خاص نادیده بگیرد. این کابوس فعلی توسعه‌دهندگانی است که سعی دارند دسترسی‌های عامل (Agent) — شبیه به دستیاری که اجازه دارد به‌جای شما ابزارهایی را اجرا کند — را در سطح تیمی به اشتراک بگذارند. اگرچه این وضعیت شبیه به یک باگ به نظر می‌رسد، اما در واقع یک انتخاب معماری سخت‌گیرانه در مورد این است که تنظیمات مجاز به حضور در کجا باشند.

طبق گزارش‌های فنی، ابزار Claude Code در مجموع ۲۲۳ کلید تنظیمات دارد، اما ۷۱ مورد از آن‌ها «محدودشده» (Scoped) هستند. به این معنا که تنها اگر در فایل پیکربندی خاصی قرار بگیرند، فعال می‌شوند. به نقل از مستندات بررسی‌شده، کلیدهایی مانند autoMode و spellcheck تنها از طریق محدوده کاربر (~/.claude/settings.json) یا تنظیمات مدیریت‌شده اعمال می‌شوند. اگر این کلیدها را به یک فایل مشترک پروژه منتقل کنید تا تمام اعضای تیم از آن بهره‌مند شوند، ابزار به‌سادگی و در سکوت آن‌ها را نادیده می‌گیرد.

تنظیم را در پیکربندی پروژه قرار دادم و هیچ اتفاقی نیفتاد

تفکیک محدوده‌های دسترسی

تنظیمات این ابزار به لایه‌های مختلفی از دسترسی تقسیم شده‌اند. از میان ۲۲۳ کلید، توزیع آن‌ها به شرح زیر است:

  • هر فایلی: ۱۵۲ کلید بدون توجه به مکان قرارگیری اعمال می‌شوند.
  • فقط مدیریت‌شده: ۳۹ کلید تنها از طریق تنظیمات مدیریت‌شده فعال می‌شوند.
  • کاربر یا مدیریت‌شده: ۲۳ کلید (از جمله autoMode ،autoMode.classifyAllShell ،skipAutoPermissionPrompt ،spellcheck ،sandbox.network.strictAllowlist و sandbox.filesystem.disabled) فقط در فایل ~/.claude/settings.json یا پیکربندی‌های مدیریت‌شده کار می‌کنند.
  • کاربر، محلی یا مدیریت‌شده: ۳ کلید در settings.local.json فعال هستند اما در settings.json خیر.
  • پیکربندی سراسری: ۶ کلید (مانند diffTool و autoConnectIde) تنها در ~/.claude.json اثر دارند.

تفاوت‌های ظریف محلی و مشترک

یک تمایز بحرانی میان settings.local.json و settings.json وجود دارد. سه کلید خاص شامل useAutoModeDuringPlan ،syncClaudeAiSkills و skipDangerousModePermissionPrompt در فایل محلی کار می‌کنند اما در فایل مشترک نادیده گرفته می‌شوند.

این ساختار باعث ایجاد سناریوی ساختگی «روی سیستم من کار می‌کند» می‌شود. توسعه‌دهنده‌ای ممکن است یک تنظیم را در فایل محلی خود تست کند، از صحت عملکرد آن مطمئن شود و سپس آن را به فایل مشترک منتقل کند تا کل تیم از آن بهره‌مند شوند. اما چون فایل مشترک محدوده (Scope) متفاوتی دارد، تنظیم به‌طور ناگهانی و بی‌صدا از کار می‌افتد. در نهایت، تنها شخصی که پیکربندی را نوشته بود، تنها کسی است که تنظیمات برایش کار می‌کرد.

پیچیدگی کلیدهای نقطه‌دار

کلیدهای تو در تو بر اساس نام کامل نقطه‌دار خود محدود می‌شوند. مستندات این کلیدها را به جای ساختارهای JSON، به عنوان «مسیر» (Path) فهرست کرده‌اند. برای مثال، sandbox.network.strictAllowlist یک موجودیت محدودشده است، در حالی که کلید سطح بالای sandbox چنین نیست.

این ظرافت می‌تواند منجر به شکست‌های بیشتر در عیب‌یابی شود. هر بررسی‌کننده‌ای که فقط سطح اول یک شیء تنظیمات را بازرسی کند، این موارد را نادیده می‌گیرد. در یک مورد خاص، ۲۰ کلید نقطه‌دار — که ۱۲ مورد از آن‌ها با sandbox.* شروع می‌شدند — برای یک بررسی‌کننده ابتدایی نامرئی بودند، زیرا درون شیء JSON تو در تو قرار داشتند.

برای یک توسعه‌دهنده معمولی، این یعنی بدیهی‌ترین مکان برای تعریف رفتار عامل در پروژه — یعنی فایل تنظیمات پروژه — تنها جایی است که تنظیمات در آن کار نمی‌کنند. این موضوع هنگام اجرای هم‌زمان چندین عامل بسیار آزاردهنده است، زیرا باز کردن محدودیت‌های autoMode برای کاهش درخواست‌های تایید، منطقی‌ترین راهکار است.

برای حل این مشکل، ابزاری جامعه‌محور به نام ccheck (از طریق npx @quintetkit/ccheck) منتشر شده است. این ابزار فایل‌های پیکربندی را اسکن کرده و هشدارهایی مانند این ارائه می‌دهد: warn .claude/settings.json:63 autoMode applies from user or managed settings only. It has no effect from this file.

این ابزار محدوده را بر اساس اینکه آیا دایرکتوری اسکن‌شده دایرکتوری خانگی کاربر است یا خیر تعیین می‌کند، نه صرفاً بر اساس مسیر فایل. این رویکرد تضمین می‌کند که یک autoMode که به‌درستی در دایرکتوری خانگی قرار گرفته، به‌اشتباه به عنوان خطا گزارش نشود.

این تغییر در شیوه کار، توسعه‌دهندگان را مجبور می‌کند از پیکربندی‌های متمرکز در پروژه برای دسترسی‌های عامل فاصله گرفته و به سمت تنظیمات سطح کاربر یا سراسری حرکت کنند. این مسئله تنشی را در طراحی ابزارهای هوش مصنوعی آشکار می‌کند: تقابل میان میل به سیاست‌های متمرکز تیمی در برابر الزامات امنیتی برای بازنویسی تنظیمات در سطح کاربر.

گام بعدی شما

  • اگر از Claude Code استفاده می‌کنید، همین حالا ابزار ccheck را اجرا کنید تا متوجه شوید کدام تنظیمات شما نادیده گرفته شده‌اند.
  • کلیدهای حساس مانند autoMode را از فایل‌های .claude/settings.json به ~/.claude/settings.json منتقل کنید.
  • در مستندات پروژه خود ذکر کنید که برخی دسترسی‌های عامل باید به‌صورت دستی در سیستم هر کاربر تنظیم شوند.

اما داستان سخت‌افزاری بهینه‌سازی این عامل‌ها حتی شگفت‌انگیزتر است — به تحلیل ما درباره‌ی تراشه‌های Blackwell مراجعه کنید.

چرا این موضوع مهم است؟

این موضوع بر اساس تجربه عملی توسعه‌دهندگان، نرخ خطای استقرار ابزارهای عامل‌محور در تیم‌های بزرگ را افزایش می‌دهد. اعتماد به فایل‌های تنظیمات مشترک در ابزارهای AI اکنون با ریسک عدم اجرا مواجه است.

تأثیر برای ایران

برای توسعه‌دهندگان ایرانی که در پروژه‌های تیمی دورکار فعالیت می‌کنند، این نقص باعث سردرگمی در همگام‌سازی محیط‌های توسعه می‌شود و استفاده از ابزار ccheck برای عیب‌یابی ضروری است.

·نگاه ما
تحریریه دات‌هوش

این نقص در Claude Code نشان می‌دهد که حتی پیشرفته‌ترین ابزارهای کدنویسی هوش مصنوعی هنوز در مدیریت ساده‌ترین مفاهیم نرم‌افزاری مانند «ارث‌بری تنظیمات» دچار مشکل هستند. اولویت دادن به امنیت سطح کاربر بر روی راحتی تیم، یک تصمیم معماری آگاهانه است اما عدم ارائه هشدار (Silent Failure)، بدترین تجربه کاربری ممکن را ایجاد می‌کند. این رویکرد احتمالاً در آینده به استانداردی تبدیل می‌شود که در آن تنظیمات امنیتی عامل‌ها هرگز قابل اشتراک‌گذاری در گیت‌هاب نخواهند بود.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.