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

باگ Claude Code: نادیده گرفتن تنظیمات محلی در صورت غیرفعال بودن تلمتری

·۲ مهر ۱۴۰۵۷ دقیقه مطالعه
عامل کدنویسی هوش مصنوعی شما به‌صورت مخفیانه فایل پیکربندی‌تان را نادیده گرفت. این حسابرسی ۱۵ دقیقه‌ای را اجرا کنید.
عامل کدنویسی هوش مصنوعی شما به‌صورت مخفیانه فایل پیکربندی‌تان را نادیده گرفت. این حسابرسی ۱۵ دقیقه‌ای را اجرا کنید.
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

افشای مکانیسم «تخریب خاموش» در Claude Code که در آن دسترسی به فایل‌های محلی به تایید سرورهای راه دور وابسته شده بود؛ موضوعی که پیش از این در ابزارهای Agentic به این صراحت مستند نشده بود.

تصور کنید ساعتی را صرف نوشتن فایل AGENTS.md کرده‌اید تا تمام استانداردهای کدنویسی، دستورات تست و قوانین سخت‌گیرانه تیمتان را به هوش مصنوعی دیکته کنید؛ مثلاً قانونی مثل «هرگز به پوشه migration دست نزن». شما این فایل را در ریشه مخزن (repo root) قرار می‌دهید و با رضایت خاطر فکر می‌کنید که عامل شما بالاخره با زبان پیکربندی تیمتان هم‌زبان شده است. اما سپس، یک توسعه‌دهنده یک تست کاناری اجرا می‌کند و متوجه می‌شود که این فایل هرگز خوانده نشده است. این یک سناریوی تخیلی نیست، بلکه شکست واقعی در لایه‌ی اعتماد ابزارهای هوش مصنوعی است که اخیراً توسط پیوتر شیپوویچ، توسعه‌دهنده‌ای در لهستان، افشا شد.

طبق گزارش این توسعه‌دهنده، نسخه‌ی ۲.۱.۲۷۷ ابزار Claude Code هرگاه تلمتری (Telemetry) — یعنی سیستم ارسال داده‌های استفاده به شرکت سازنده — غیرفعال می‌شد، از بارگذاری فایل‌های پیکربندی AGENTS.md صرف‌نظر می‌کرد. این یعنی شما فکر می‌کنید عامل شما طبق قوانین شما عمل می‌کند، اما در واقع او بدون هیچ هشداری، هر چه در آن فایل نوشته‌اید را نادیده گرفته است.

این نقص فنی به این دلیل رخ داد که قابلیت خواندن این فایل‌ها به جای اینکه در هسته‌ی اصلی کد باشد، به صورت یک پلاگین به نام agents-md پیاده‌سازی شده بود. این پلاگین برای فعال شدن به یک «پرچم ویژگی» (Feature Flag) — شبیه به یک کلید برق راه دور که شرکت سازنده از راه دور آن را روشن یا خاموش می‌کند — به نام tengu_agents_md_mod وابسته بود. اگر عامل نمی‌توانست برای بررسی این کلید به سرورهای Anthropic متصل شود، مقدار پیش‌فرض را «غلط» (false) در نظر می‌گرفت و فایل را بارگذاری نمی‌کرد.

برای بسیاری از برنامه‌نویسان، این شکست کاملاً نامرئی بود. تنظیم متغیرهای محیطی مانند DISABLE_TELEMETRY=1 یا CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 باعث مسدود شدن تماس شبکه می‌شد. نکته اینجاست که هر مقداری برای این متغیرها — حتی مقدار 0 — به عنوان «تنظیم شده» تلقی می‌شد و عملیات واکشی (fetch) را مسدود می‌کرد. همچنین شرکت‌هایی که از درگاه‌های AWS Bedrock یا Google Vertex و سایر درگاه‌های شخص ثالث استفاده می‌کنند، با همین مشکل مواجه بودند، زیرا این درگاه‌ها نمی‌توانند به سرورهای داخلی پرچم‌های آنتروپیک دسترسی داشته باشند.

کالبدشکافی یک شکست خاموش

به نقل از گزارشی که در ۲۴ سپتامبر ۲۰۲۶ منتشر شد، خطرناک‌ترین بخش این باگ، نبود هرگونه ابزار تشخیص (Diagnostics) بود. جلسه به‌طور عادی شروع می‌شد، مدل به سوالات پاسخ می‌داد و هیچ نشانی از این نبود که دستورالعمل‌های پروژه گم شده‌اند. هیچ هشدار یا لاگی در کنسول ثبت نمی‌شد.

شیپوویچ برای اثبات این سکوت، یک «تست قناری» (Canary Test) طراحی کرد:

  • او یک دایرکتوری ساخت که فقط شامل یک فایل AGENTS.md با یک کلمه منحصر‌به‌فرد یعنی "PERIWINKLE" بود.
  • او دستور claude -p را اجرا کرد و از مدل خواست کلمه قناری را از دستورالعمل‌های پروژه بگوید.
  • در حالی که تلمتری خاموش بود، مدل پاسخ داد: "NONE" (هیچ).

یک فایل، یک سوال و یک سکوت اثبات‌شده. مهندسی از Anthropic بعدها در Hacker News عذرخواهی کرد و این باگ را یک «آرتیفکت استقرار» (rollout artifact) نامید. تیم سازنده می‌خواست راهی داشته باشد تا اگر این قابلیت باعث کرش کردن سیستم شد، آن را از راه دور غیرفعال کند، اما همین تصمیم باعث شد خواندن یک فایل محلی به یک سفر رفت‌وبرگشتی شبکه (network round-trip) وابسته شود.

مکانیسم باگ و خطرات تخریب خاموش

برای درک این اتفاق باید به سیستم توسعه‌پذیری "Mods" نگاه کنیم. پلاگین agents-md بر پایه این سیستم ساخته شده بود تا آنتروپیک بتواند بدون به‌روزرسانی کامل باینری نرم‌افزار، قابلیت‌ها را تغییر دهد. مکانیسم به این صورت بود:

  • بررسی پرچم: پلاگین مقدار پرچم tengu_agents_md_mod را فراخوانی می‌کرد.
  • مقدار جایگزین (Fallback): سیستم به گونه‌ای پیکربندی شده بود که مقدار false را به عنوان مقدار پیش‌فرض در نظر بگیرد.
  • محرک خطا: اگر درخواست شبکه به دلیل تنظیمات تلمتری یا فایروال‌های شرکتی شکست می‌خورد، سیستم فرض می‌کرد قابلیت غیرفعال است.

این یعنی فایلی که در دایرکتوری کاری شماست و برای خوانده شدن نیازی به اینترنت ندارد، توسط سروری در هزاران کیلومتر دورتر کنترل می‌شد. اگر دست‌دادن (handshake) شبکه شکست می‌خورد، عامل بدون اطلاع کاربر، «کار کمتری» انجام می‌داد.

این پدیده «تخریب خاموش» (Silent Degradation) نام دارد. اگر یک بیلد (Build) شکست بخورد، شما رنگ قرمز را می‌بینید؛ اما اگر یک عامل تنظیمات شما را نادیده بگیرد، فقط پاسخ‌های بدتری دریافت می‌کنید و احتمالاً هوش مدل را سرزنش می‌کنید، نه یک باگ شبکه را. شما ممکن است یک هفته در این فکر باشید که چرا دستورات تست شما اجرا نمی‌شوند، بدون اینکه هرگز به احتمال نادیده گرفته شدن یک فایل شک کنید.

علاوه بر این، فایل‌های AGENTS.md و CLAUDE.md اغلب حاوی اطلاعات حساس محیطی هستند، از جمله:

  • نام پکیج‌های داخلی
  • آدرس‌های خصوصی رجیستری
  • اهداف استقرار (Deployment Targets)
  • قراردادهای خاص تیمی

اگرچه این باگ منجر به آپلود فایل‌ها نشد، اما ثابت کرد که مسیر بین «فایلی روی دیسک» و «دستوراتی در بستر متن مدل» از کدهای بررسی‌نشده و سرورهای راه دور می‌گذرد. این آسیب‌پذیری در مدیریت فایل‌های پیکربندی یادآور روش‌هایی است که ابزارهایی مانند GitSpawn از فایل‌های تنظیمات برای نفوذ به سیستم‌های AI استفاده می‌کنند. فایل‌های پیکربندی شما در واقع نقشه‌ای از زیرساخت شما هستند که به صورت متن ساده نوشته شده‌اند. این موضوع تبدیل به یک نگرانی امنیتی جدی می‌شود: آیا عامل شما این جزئیات را تحت چه شرایطی به سرورهای خارجی می‌فرستد؟ این دیگر پارانویا نیست، بلکه یک دغدغه مشروع است.

راهکار و رفع مشکل

آنتروپیک در ۲۳ سپتامبر ۲۰۲۶ در نسخه‌ی ۲.۱.۲۸۱ این مشکل را رفع کرد. با این حال، این حادثه یک ریسک سیستمی را آشکار کرد. برای دور زدن این ریسک و مستقل کردن بارگذاری AGENTS.md از هرگونه پلاگین یا پرچم، می‌توانید از یک رفتار پایدار در هسته استفاده کنید: وارد کردن مسیر با @path.

با اضافه کردن خط تک‌خطی @AGENTS.md در داخل فایل CLAUDE.md، عامل دستورالعمل‌ها را به عنوان بخشی از پردازش اصلی بارگذاری می‌کند و دیگر به پرچم‌های ویژگی راه دور وابسته نیست. همچنین برای مدیریت مهارت‌های مشترک، یک نکته کاربردی از این پژوهش این است که به جای کپی کردن، از Symlink برای پوشه .claude/skills به ../.agents/skills استفاده کنید؛ زیرا نسخه‌های کپی شده به مرور زمان دچار اختلاف (drift) می‌شوند اما Symlinkها خیر.

ممیزی ۱۵ دقیقه‌ای عامل (Agent Audit)

از آنجایی که ابزارهای هوش مصنوعی هر هفته به‌روزرسانی می‌شوند، باید با هر تغییر نسخه مانند یک ارتقای وابستگی (dependency upgrade) برخورد کنید. این عدم پیش‌بینی‌پذیری در رفتار عامل‌ها، مشابه یافته‌های پژوهش دیپ‌مایند درباره ظهور رفتارهای غیرمنتظره و تقلب در جوامع متشکل از ۱۰۰ عامل هوش مصنوعی است. می‌توانید با این گام‌ها پایداری عامل خود را تایید کنید:

  • گام ۱: اجرای تست قناری
    یک دایرکتوری موقت بسازید: mkdir /tmp/agent-canary && cd /tmp/agent-canary. یک کلمه ساختگی را در پیکربندی قرار دهید: echo 'The canary word is PERIWINKLE.' > AGENTS.md. از عامل بپرسید: «کلمه قناری در دستورالعمل‌های پروژه چیست؟ اگر هیچ کلمه‌ای نیست، NONE پاسخ بده». این کار را برای هر پیکربندی دو بار انجام دهید، زیرا ویژگی‌های مبتنی بر پرچم اغلب فقط در اولین فراخوانی resolve می‌شوند.

  • گام ۲: تست محدودیت‌های شبکه
    تست قناری را در محیط واقعی شل (shell) خود تکرار کنید: تلمتری غیرفعال، پروکسی فعال یا VPN روشن. تنها محیطی که اهمیت دارد، ماشین واقعی شماست.

  • گام ۳: تایید نقاط انتهایی (Endpoints)
    اگر عامل‌ها را از طریق Bedrock، Vertex یا یک درگاه شرکتی اجرا می‌کنید، تست قناری را دقیقاً در آنجا اجرا کنید. تفاوت‌های Endpoint دقیقاً همان جایی است که این باگ زندگی می‌کرد.

  • گام ۴: جستجوی پرچم‌ها (Grep for Flags)
    اگر ابزار دارای سورس‌کد است، نام فایل‌های پیکربندی خود را جستجو کنید. به دنبال فراخوانی‌های feature-flag یا remote-config بگردید که دور لودرِ فایل پیچیده شده‌اند تا ببینید رفتار ابزار محلی است یا راه دور. پنج دقیقه کار با grep می‌تواند تعیین کند که یک رفتار محلی است یا یک مجوز راه دور.

  • گام ۵: تست سکوت
    عمداً چیزی را خراب کنید. یک import را به فایلی اشاره دهید که وجود ندارد یا از یک پیکربندی بدساخت (malformed) استفاده کنید. اگر ابزار همچنان یک «جلسه موفق» (happy session) را شروع کرد، یعنی ابزار در سکوت شکست می‌خورد و شما باید تست‌های قناری را به روتین خود اضافه کنید.

  • گام ۶: موجودی داده‌ها
    فایل‌های AGENTS.md و CLAUDE.md را طوری بخوانید که انگار خط لوله تلمتری یک فروشنده ممکن است آن‌ها را ببیند. نام‌های میزبان داخلی، توکن‌ها و نام‌های واقعی تیم را جابجا یا حذف کنید. فایل‌های پیکربندی باید حاوی «قراردادها» باشند، نه «اعتبارنامه‌ها».

حرکت به سوی اعتماد به عامل

این حادثه ثابت می‌کند که جمله «عامل دستورات من را خوانده است» اکنون ادعایی است که نیاز به تایید دارد؛ درست مانند تایید بازگردانی یک بک‌آپ یا عملکرد یک failover. در عصر ابزارهای خودمختاری که با سرعت «هر هفته یک عرضه» پیش می‌روند، اعتماد باید جای خود را به تست‌های قناری بدهد.

سه عادت ارزشمند از این اپیزود:
۱. ترجیح وارد کردن (Import) بر پشتیبانی بومی: خط @AGENTS.md یک خط بیمه است که فارغ از پلاگین‌ها یا تصمیمات عرضه، کار می‌کند.
۲. افزودن بررسی قناری بعد از هر تغییر نسخه: با این به‌روزرسانی‌ها مانند ارتقای وابستگی‌های مسیر بحرانی برخورد کنید.
۳. فرض شکست خاموش تا زمان اثبات خلاف آن: هر قابلیتی که مسیر هشدار (warning path) نداشته باشد، قابلیتی است که در نهایت بدون اطلاع شما خاموش خواهد شد.

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

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

این حادثه اعتماد توسعه‌دهندگان به عامل‌های هوش مصنوعی را متزلزل می‌کند، زیرا ثابت شد که دستورات حیاتی پروژه می‌توانند بدون اطلاع کاربر نادیده گرفته شوند. این موضوع لزوم پیاده‌سازی تست‌های اعتبارسنجی (Canary Tests) را برای هر به‌روزرسانی ابزارهای AI ضروری می‌کند.

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

برنامه‌نویسانی که از طریق پروکسی یا VPN به این ابزارها متصل می‌شوند، بیشترین ریسک تجربه این باگ را دارند، زیرا نوسانات شبکه می‌تواند باعث غیرفعال شدن خاموشِ تنظیمات پروژه شود.

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

وابستگی قابلیت‌های محلی به Feature Flagهای راه دور، یک ضدالگو (Anti-pattern) خطرناک در طراحی ابزارهای AI است. این اتفاق نشان می‌دهد که حتی در ابزارهای پیشرفته‌ای مثل Claude Code، سرعت عرضه قابلیت‌های جدید بر استواری (Robustness) سیستم غلبه کرده است. از این پس باید فرض کنیم هر قابلیتی که «بیش از حد راحت» کار می‌کند، احتمالاً یک وابستگی پنهان به سرور دارد که می‌تواند در هر لحظه بدون هشدار قطع شود.

منابع

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

گفتگو

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

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

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

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

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

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

دات‌هوش

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

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