تصور کنید در اتاقی شلوغ هستید که ۱۰۰ نفر همزمان فریاد میزنند؛ در این وضعیت، شنیدن تکجملهای که واقعاً حیاتی است، تقریباً غیرممکن است. آیا یک فایل دستورالعمل ۳۰۰ خطی به عنوان یک شبکه ایمنی عمل میکند، یا تبدیل به اتاقی شلوغ میشود که در آن تنها قانونی که واقعاً اهمیت دارد، باید بر صدای نود و نه قانون بیربط دیگر غلبه کند؟ این رویکرد «بارگذاری همه چیز»، با مصرف کردن بودجهٔ ثابت و محدود توجه (Attention) مدل در هر نوبت (Turn)، یک گلوگاه بحرانی در عملکرد عامل ایجاد میکند.
سالهاست توسعهدهندگان از فایلهای ریشه مانند CLAUDE.md برای ثبت تمام رویهها و قوانین شناختهشده پروژه استفاده میکنند. این عادت از این باور غلط نشأت میگیرد که یک مخزن مرکزی، مطمئنترین راه برای اطمینان از پیروی عامل از دستورات است. اما با مقیاسپذیری پروژهها، این فایلها متورم میشوند و منجر به پدیدهای میشوند که در آن عامل، دستورات حیاتی را نادیده میگیرد چون زیر تپهای از ساختارهای پشتیبانی (Scaffolding) دفن شدهاند. به همین دلیل، در بحثهایی مانند «Opus 5: Delete your CLAUDE.md?»، برخی اکنون استدلال میکنند که برای اجتناب از این نویز، باید کل فایل CLAUDE.md را بهطور کامل پاک کنید.
همانطور که در تحلیلهای پیشین ما دربارهی مهندسی زمینه اشاره کردیم، صنعت اکنون در تکامل عاملهای کدنویسی، به سمت مکانیزمی به نام افشای تدریجی (Progressive Disclosure) حرکت میکند. این روش — شبیه به باز کردن تکتک صفحات یک دفترچه راهنما فقط وقتی به آن مرحله از کار میرسید — یعنی معرفی تدریجی دستورالعملها و زمینههای مرتبط، دقیقاً در لحظهای که قرار است اثرگذار باشند. در این رویکرد، دستورالعملها از یک سند ایستا به یک سامانه پویا تبدیل میشوند.
تکامل بارگذاری زمینه
اولین تلاشها برای حل این مشکل، استفاده از فایلهای AGENTS.md بود. توسعهدهندگان یک فایل ریشه برای توصیفات کلی و فایلهای تو در تو در زیرپوشهها برای توصیف محتوای خاص قرار میدادند. این کار باعث میشد قوانین در همان جایی باشند که کار انجام میشود و تضمین میکرد که آنها تنها زمانی بارگذاری شوند که عامل در آن پوشههای خاص فعالیت میکند. این یکی از نخستین اشکال افشای تدریجی بود و عاملهای کدنویسی هنوز تا به امروز از آن پشتیبانی میکنند.
یک توسعهدهنده گزارش داده است که کل پروژه خود را به این شکل مدیریت کرده و در هر لایه از کدبیس، یک فایل دستورالعمل کوچک قرار داده است. او با محدود کردن مدل ذهنی عامل، باعث شد دستورات تنها در زمان ورود به پوشههای مربوطه بارگذاری شوند و از این طریق مدیریت دستورالعملها را بهینه کرد. این رویکرد با هدف کاهش مصرف توکنها از طریق محدودسازی دامنهها همسو است تا از اتلاف منابع در پنجره زمینه جلوگیری شود.
با این حال، این روش منجر به پدیدهای به نام «پوسیدگی زمینه» (Context Rot) شد. اگر توسعهدهندهای روی بخش بکاند کار کند اما همزمان نیاز به اصلاح بخشهای فرانتاند داشته باشد، عامل دچار سردرگمی میشود. طبق گزارشهای فنی، تلاش یک عامل برای مدیریت همزمان فرانتاند و بکاند اغلب باعث هرجومرج میشود؛ زیرا دستورالعملها برای جذب توجه مدل با هم رقابت میکنند و سامانه مجبور میشود تمرکز خود را بین دو حوزه وسیع تقسیم کند.
برای اصلاح این وضعیت، ابزارهایی مانند Cursor و Claude قابلیتهای جدیدی را معرفی کردند که به آنها «آرتیفکتهای هارنس» (Harness Artifacts) گفته میشود. این ابزارها پیکربندیهای مسیری را حمل میکنند که اجازه بارگذاری دقیقتر — نه فقط در سطح پوشه، بلکه در سطح فایل — را میدهد. با این حال، محدود کردن دسترسی در سطح فایل هنوز نقطه پایان این مسیر نیست.
شکست زمینه جهانی
بر اساس مطالعهای روی ۲۸,۷۲۱ مخزن واقعی با عنوان «وضعیت کیفیت دستورالعملهای هوش مصنوعی» (The State of AI Instruction Quality)، میانهٔ تعداد موارد در یک فایل دستورالعمل حدود ۵۰ مورد است. نکته تکاندهنده این است که تنها ۱۲ مورد از اینها دستورات واقعی (Directives) هستند و باقی موارد، ساختارهای پشتیبانیاند که مدل باید در هر نوبت پردازش کند و بودجهٔ محدود توجه را مصرف نماید.
این دادهها ثابت میکند که «بارگذاری همه چیز» مشکل را حل نمیکند، بلکه آن را به شدت تشدید میکند. یک مدل زبانی دستورات را مانند چکلیست انسانی، خط به خط و با اختصاص زمان به هر مورد پردازش نمیکند؛ بلکه مقدار ثابتی از توجه را بین تمام محتویات پنجرهٔ زمینه (Context Window) پخش میکند. ۱۰ قانون به هر مورد سهم واقعی از توجه میدهد، اما ۱۰۰ قانون باعث میشود دستور حیاتی، تبدیل به یک صدای ضعیف در اتاقی شلوغ شود که باید بر صدای نود و نه مورد دیگر که هیچ ارتباطی با تسک فعلی ندارند، غلبه کند.

سه اهرم افشای تدریجی
برای حل این بحران، راهنمای Anthropic برای نسل Claude 5 — بهویژه توصیههای ثارق شیهپار (Thariq Shihipar) — پیشنهاد میکند از افسانهٔ مخزن مرکزی فاصله بگیرید. شیهپار صراحتاً عادت ایجاد مخزن مرکزی برای هر رویه شناختهشده را یک «افسانه» مینامد و توصیه میکند توسعهدهندگان «بهشدت از افشای تدریجی استفاده کنند» و اجازه دهند بقیه موارد از طریق مهارتهایی که فایل به آنها اشاره میکند، بارگذاری شوند. این قانون جدید مهندسی زمینه است.
این سامانه بر سه اهرم (Handle) خاص استوار است:
- چه چیزی بارگذاری شود (مهارتها - Skills): یک قانون نباید لزوماً خطی در فایلی باشد که از بالا به پایین خوانده میشود. قانون میتواند به شکل یک «مهارت» بستهبندی شود؛ دستورالعملی مستقل که عامل تنها زمانی فراخوانی میکند که تسک به آن نیاز داشته باشد. برای مثال، قواعد مربوط به کنوانسیونهای کامیت (Commit Conventions) نباید زمانی که عامل در حال رفع یک باگ لایهبندی (Layout Bug) است در پنجره حضور داشته باشند؛ یک «مهارت» آنها را پنهان نگه میدارد تا زمانی که شما به سراغ git بروید.
- کجا بارگذاری شود (محدودیت مسیر - Path Scoping): قوانینی که مربوط به ماژولهای خاص (مثلاً کدهای مربوط به پرداختها) هستند، باید در کنار همان کدها از طریق فایلهای تو در تو یا پیکربندیهای مسیر قرار گیرند. این کار تضمین میکند که قانون بهجای رقیق شدن، هدفمند باشد و تنها در نوبتهایی ظاهر شود که عامل در آن مناطق خاص کار میکند. این یک راهکار صادقانه است: هر قانون را از شلوغی دور نگه دارید تا نوبتی که به آن تعلق دارد فرا برسد.
- چه زمانی بارگذاری شود (محرکهای رویداد - Event Triggering): برخی قوانین به جای «مکان»، به «لحظه» وابسته هستند. اینها به رویدادها گره میخورند؛ مثلاً وقتی یک جلسه (Session) شروع میشود یا نوع خاصی از کار آغاز میگردد فراخوانی شده و تا آن زمان «تاریک» (Dark) میمانند. شما قانون را بازنویسی نمیکنید، بلکه صرفاً تصمیم میگیرید چه زمانی روی صحنه بیاید.

از سند به سامانه
هیچیک از این سه تغییر، محتوای قانون را عوض نمیکنند، بلکه زمان حمل آن توسط عامل را تغییر میدهند. محدودیت اصلی، فضای دیسک یا تعداد توکن (Token) نیست؛ توکنها کوچکترین بخش هزینه هستند. محدودیت واقعی، توجه عامل در نوبتی است که نتیجه تعیین میشود.
با بهینهسازی «چه چیزی»، «کجا» و «چه زمانی»، فایل ۳۰۰ خطی همیشگی جای خود را به یک ریشه سبک و مجموعهای از قوانین میدهد که بهموقع ظاهر میشوند. اتاق شلوغ خالی میشود و قانون مربوط به این نوبت، بهجای یکی از ۱۰۰ مورد، تبدیل به یکی از ۳ مورد در پنجره میشود. این یعنی حل مشکل بارگذاری: قانون درست، بدون شلوغی، دقیقاً در نوبتی که کاربرد دارد، در مقابل عامل قرار میگیرد.
این چرخش، نقش توسعهدهنده را از «مرتبکننده یک سند» به «معمار یک سامانه» تغییر میدهد. فایل ریشه اکنون مانند یک دیسپچر (Dispatcher) عمل میکند که قوانین را بر اساس مسیر یا لحظه، فراخوانی میکند. این تغییر در معماری، برای جلوگیری از پراکندگی عاملهای هوش مصنوعی و تفکیک متدولوژی از ابزار ضروری است تا قابلیت جابهجایی و پایداری سامانه حفظ شود.
مدیریت پیچیدگی سامانه
انتقال به مدل سامانهای، پرسشهای معماری جدیدی ایجاد میکند که نمیتوان با صرفاً اسکرول کردن در یک فایل به آنها پاسخ داد. یک سامانه دارای «شکلی» است که دیگر با اسکرول کردن قابل درک نیست. توسعهدهندگان باید «شکل» دستورالعملهای خود را رصد کنند تا در تلههای جدید نیفتند:
- قابلیت دسترسی (Reachability): آیا یک قانون چنان محدود (Scoped) شده که اکنون دیگر به هیچکس دسترسی ندارد؟
- تراکم کوچک (Miniature Crowding): آیا دو قانون بهگونهای تنظیم شدهاند که همزمان بارگذاری شوند و دوباره همان اتاق شلوغ را در مقیاس کوچک بازسازی کنند و برای توجه رقابت کنند؟
- تضاد دستورالعملها (Instruction Conflicts): آیا دو قانون بهطور نامحسوس دستورات متضادی به عامل میدهند؟ این همان مشکل خاصی است که در مقاله «Opus 5: Cost of Instruction Conflicts» به آن پرداخته شده است. برای مقابله با این تضادها، راهکارهایی مانند سیستم Rulestack برای محدود کردن حجم فایلهای دستورالعمل توسعه یافتهاند تا از تداخل قوانین جلوگیری کنند.
برای مدیریت این پیچیدگی، ابزارهایی مانند Reporails اجازه میدهند شکل سامانه دستورالعملها بصری شود. این ابزار فایلهای نوشته شده را بهصورت محلی روی ماشین شما میخواند تا نشان دهد کدام قوانین کجا بارگذاری میشوند و کجا ممکن است با هم برخورد کنند. این ابزار آنچه را که شما مینویسید میخواند و هرگز در زمان اجرای عامل، با آن تداخلی ندارد.
این تغییر معماری یعنی پرسش دیگر این نیست که «آیا قانون در فایل هست؟»، بلکه این است که «چه چیزی، کجا و چه زمانی بارگذاری میشود و آیا این هنوز با قصد ما مطابقت دارد؟» هیچکدام از اینها دیگر در فایل ریشه شما زندگی نمیکنند، چون خودتان آنها را به بیرون منتقل کردهاید.
این مبانی، زیربنای ادامه این مجموعه است. در هر بخش، یکی از این اهرمها را بررسی کرده و با کدنویسی عمیق اجرا میکنیم: چه چیزی بارگذاری میشود و چگونه بفهمیم که بارگذاری شده است؛ کجا یک قانون را محدود کنیم تا از رقیق شدن هر نوبت غیرمرتبط جلوگیری شود؛ و چه زمانی یک قانون را از صفحه حذف کرده و به یک رویداد منتقل کنیم. (توجه داشته باشید که یک قانون ممکن است بهطور کامل بارگذاری شود اما عامل باز هم آن را نادیده بگیرد؛ این یک مشکل متفاوت با راهکار متفاوت است که در بخشی جداگانه بررسی خواهیم کرد.)
اگر هنوز یک فایل ریشه حجیم را نگهداری میکنید، اولین گام شناسایی قوانینی است که فقط برای پوشههای خاص کاربرد دارند و انتقال آنها به فایلهای تو در تو یا پیکربندیهای مبتنی بر مسیر.
گام بعدی شما
- قوانین مربوط به استانداردهای کدنویسی (Style Guide) را از فایل ریشه خارج کرده و به صورت «مهارت» تعریف کنید.
- برای هر ماژول پیچیده در پروژه، یک فایل دستورالعمل محلی در همان پوشه ایجاد کنید.
- از ابزارهایی برای بصریسازی تداخل قوانین استفاده کنید تا از «تراکم کوچک» جلوگیری کنید.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو