تصور کنید برنامهنویسی را استخدام کردهاید که هر ثانیه تمام حافظهاش پاک میشود، اما یک دستیار دقیق کنارش است که هر اتفاقی میافتد را یادداشت میکند و قبل از هر سوال، تمام تاریخچه را جلوی چشمش میگذارد. این دقیقاً همان اتفاقی است که در Claude Code میافتد تا یک مدل زبانی ساده به یک عامل (Agent) تبدیل شود.
وقتی شما از این ابزار میخواهید یک باگ را رفع کند، در پشت صحنه ممکن است ۱۰ درخواست مجزا به مدل ارسال شود تا یک پاسخ نهایی به شما برسد. این اتوماسیون توسط یک حلقهٔ مداوم هدایت میشود که به عامل اجازه میدهد بهطور مستقل فایلها را بخواند، در کدها جستوجو کند و تستها را اجرا نماید.
همانطور که در تحلیل قبلی ما دربارهی مدیریت جلسات موازی در Fleet از طریق Thurbox اشاره کردیم، صنعت به سمت محیطهای اجرای پیچیده برای عاملها حرکت میکند. برای اکثر کاربران، هوش مصنوعی فقط یک پنجرهٔ چت است، اما برای یک عامل کدنویسی، چت تنها لایهٔ بیرونی و مرز ارتباطی است. کار واقعی در لایهٔ Harness رخ میدهد؛ یک لایهٔ واسط که تاریخچهٔ گفتگو را نگه میدارد و آن را برای هر فراخوانی API بستهبندی میکند. این رویکرد مشابه استراتژیهای مشابه در مدلهای دیگر است، همانطور که DeepSeek نیز از لایههای Harness برای تبدیل قابلیتهای LLM به پلاگینهای عاملهای خودمختار استفاده میکند.
به نقل از مستندات فنی این سیستم، از آنجا که APIهای مدل زبانی بزرگ (LLM) — مثل کتابخانهداری که میلیاردها صفحه را خوانده و حالا با همان لحن کتابها جواب میدهد — «بیوضعیت» (Stateless) هستند، سرور هیچچیز از درخواستهای قبلی به یاد نمیآورد. برای ایجاد توهم حافظه، لایهٔ Harness باید در هر بار فراخوانی، تمام آرایهٔ پیامها را ارسال کند. در نوبت اول یک پیام ارسال میشود، اما در نوبت سوم ممکن است پنج پیام ارسال شود؛ مدل هیچچیز به یاد نمیآورد، اما Harness همه چیز را میداند.
بر اساس بررسیهای فنی منتشر شده در ۹ سپتامبر ۲۰۲۶، هستهٔ این سیستم یک حلقهٔ پنجمرحلهای است که در ظاهر ساده به نظر میرسد: فراخوانی مدل، بررسی پاسخ، اجرای ابزارهای درخواستی، افزودن نتایج به تاریخچه و توقف تنها زمانی که دیگر نیازی به ابزاری نباشد.
مکانیسمهای اجرایی حلقه
در یک سناریوی رفع باگ، لایهٔ Harness توالی اتفاقات را مدیریت میکند. برای مثال، اگر کاربر بنویسد «کمکم کن این باگ را پیدا کنم»، پنجرهٔ چت شروع به اسکرول شدن میکند زیرا عامل بهطور خودکار در کدها جستوجو میکند:
- فراخوانی الف: مدل تصمیم میگیرد که برای شروع نیاز دارد فایل
auth.pyرا بخواند. - اجرا: Harness فایل را میخواند و محتوای آن را به آرایهٔ پیامها اضافه میکند.
- فراخوانی ب: مدل بر اساس محتوای فایل اول، تصمیم میگیرد
login.pyرا بررسی کند. - اجرا: Harness یک دستور جستوجو یا ویرایش را اجرا میکند.
- استفاده از ابزار: عامل ممکن است یک خط از کد را ویرایش کرده و سپس یک تست را اجرا کند تا از رفع باگ مطمئن شود.
- فراخوانی نهایی: مدل تشخیص میدهد کار تمام شده و پاسخ نهایی را به کاربر برمیگرداند (مثلاً: «انجام شد؛ علت باگ X بود»).
این فرآیند توسط یک حلقهٔ حداقلی استفاده از ابزار مدیریت میشود: while True: response = call_llm(messages). اگر پاسخ حاوی یک درخواست برای استفاده از ابزار باشد، Harness آن ابزار را اجرا کرده، هم درخواست و هم نتیجه را به تاریخچه میچسباند و دوباره به ابتدای حلقه برمیگردد. اگر هیچ درخواست ابزاری وجود نداشته باشد، نوبت (Turn) میشکند و حلقه متوقف میشود.
این ویژگی «خودران»، تفاوت اصلی یک عامل با یک چتبات است. در حالی که چتبات بعد از هر نوبت منتظر ورودی انسان میماند، عامل در میانهٔ مسیر یک وظیفه، خودش را هدایت میکند. کاربر فقط در ابتدا (با زدن Enter) و در انتها (دیدن پاسخ نهایی) حضور دارد.
سازوکارهای ایمنی و کنترل
به دلیل ماهیت خودکار این سیستم در میانهٔ انجام وظایف، چندین مکانیسم ایمنی برای جلوگیری از فرآیندهای خارج از کنترل ضروری است:
- قطعکنندهها (Interrupts): راهی برای کاربر تا حلقهای را که در غیر این صورت به اجرای خود ادامه میداد، متوقف کند.
- تایید دسترسی (Permission Approval): ایجاد یک توقف در حلقه برای اقدامات خطرناک، مانند دستورات تخریبی در شل (Shell).
- ساعت قطعکن (maxTurns): یک سقف سخت برای کشتن حلقههای بینهایت تصادفی.
- قلابها (Hooks): منطقهای سفارشی که از طریق قلابهای چرخهٔ عمر تزریق میشوند، زیرا کاربر بهطور دستی مراحل میانی را مدیریت نمیکند.
از حلقهٔ ساده تا محیط عملیاتی
در حالی که منطق پایه یک حلقهٔ سادهٔ while True است، نسخهٔ عملیاتی Claude Code باید محیطهای بسیار سختتری را مدیریت کند. سیستم باید با شکستهای API به دلیل مشکلات شبکه، محدودیتهای نرخ درخواست (Rate Limits) یا سربارهای سرور مقابله کند. همچنین باید مواردی را مدیریت کند که مدل از انجام درخواست خودداری میکند، یک ابزار کرش میکند، یا خروجی به دلیل رسیدن به max_tokens قطع میشود.
این سیستم از انتقالهای وضعیت پیچیدهای برای مدیریت این شکستها استفاده میکند و مسیرها را بر اساس state.transition.reason انتخاب میکند:
- مدیریت زمینه: استفاده از
collapse_drain_retryبرای سرریز شدن پنجرهٔ زمینه (Context Window) — میزان متنی که مدل همزمان در ذهن نگه میدارد — یا استفاده ازreactive_compact_retryبرای فشردهسازی و تلاش مجدد. - بازیابی توکن: استفاده از
max_output_tokens_escalateبرای افزایش سقف توکنها یاmax_output_tokens_recoveryبرای تزریق یک پیام «ادامه بده» (Continue). برای بهینهسازی این هزینهها، استفاده از کشینگ API توانسته است مصرف توکنها را در جلسات طولانی تا ۶۰٪ کاهش دهد. - کنترل جریان: مدیریت
stop_hook_blockingزمانی که یک قلاب توقف نیاز به تداوم دارد، یاtoken_budget_continuationبرای ادامه کار تحت یک بودجهٔ توکنی مشخص.
سایر ویژگیهای حیاتی در محیط عملیاتی عبارتند از:
- کنترل همزمانی: دستهبندی ابزارها بر اساس
isConcurrencySafeبرای تشخیص اینکه آیا میتوانند بهطور موازی اجرا شوند یا باید بهصورت متوالی (Serialized) باشند. - فشردهسازی واکنشی: کوچک کردن خودکار پرامپت زمانی که از آستانهٔ پنجرهٔ زمینه فراتر میرود.
- قلابهای چرخهٔ عمر: منطقهای سفارشی تعریف شده در
.claude/settings.jsonکه در مرزهای جلسه یا ابزارها فعال میشوند. - مدیریت خطا: تبدیل هر شکست ابزار به یک نتیجهٔ
is_errorبرای اینکه حلقه متوقف نشود و مدل بتواند خطا را تحلیل کند. - عاملهای زیرمجموعه (Subagents): اجازه دادن به یک عامل فرعی برای شروع حلقهٔ مجزا و متمایز خود در حالی که از حلقهٔ اصلی جدا میماند.
این معماری تمرکز را از مهندسی پرامپت (Prompt Engineering) — هنر سؤال درست پرسیدن — به مهندسی محیط اجرا (Runtime Engineering) منتقل میکند. ارزش دیگر فقط در هوش مدل نیست، بلکه در قابلیت اطمینان لایهٔ Harness است که آن را احاطه کرده است. با مدیریت بودجههای توکن و رسیدگی به رویدادهای context_window_exceeded (سرریز پنجره زمینه)، محیط اجرا تضمین میکند که عامل در حین ویرایشهای پیچیده و چندمرحلهای کرش نکند.
برای توسعهدهندگان، این یعنی «هوش» عامل، محصول ترکیب LLM و لایهٔ ارکستراسیون است. Harness همان چیزی است که باعث میشود مدل به نظر برسد گفتگو را به یاد میآورد، در حالی که خود مدل کاملاً بیوضعیت باقی مانده است. با این حال، پذیرش این ابزارها توسط کاربران متفاوت بوده است؛ برای مثال، دادهها نشان میدهند که ۸۷.۵٪ از عاملهای سفارشی Claude Code در یک ماه هیچ فراخوانی نداشتند.
برای مشاهدهٔ این سازوکار در عمل، میتوانید فایل .claude/settings.json خود را بررسی کنید تا ببینید قلابها چگونه رفتار عامل را در طول حلقههای خودکارش تحت تأثیر قرار میدهند.
گام بعدی شما
- فایل
.claude/settings.jsonخود را بررسی کنید تا ببینید قلابها چگونه رفتار عامل را در حلقههای خودکار تغییر میدهند. - در پروژههای خود، تفاوت بین یک فراخوانی ساده API و یک حلقهٔ عاملمحور را با پیادهسازی یک
whileloop ساده تست کنید. - محدودیتهای
maxTurnsرا در تنظیمات بررسی کنید تا از هزینههای ناخواسته استنتاج جلوگیری کنید.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو