فاز 14 · درس 32

کمینه‌ی میز کار ایجنت: معماری سه‌فایلی برای کنترل رفتاری مدل‌ها

نوع
ساختنی
زمان
حدود 45 دقیقه
زبان‌ها
Python (stdlib)
پیش‌نیاز
فاز 14 · بخش 31 (چرا مدل‌های توانمند همچنان شکست می‌خورند)
نمایی مینیمال از سه صفحه کاغذ فنی یا پوشه متصل به هم روی میزی خلوت که نشان‌دهنده مسیریاب، وضعیت و وظایف است.
فهرست مطالب
  1. اهداف یادگیری
  2. صورت مسئله
  3. مفاهیم پایه
  4. فایل AGENTS.md یک مسیریاب است، نه دفترچه‌ی راهنما
  5. فایل agent_state.json مرجع رسمی سوابق است
  6. فایل task_board.json همان صف کاری است
  7. سه فایل، کفِ کار است نه سقف آن
  8. پیاده‌سازی از صفر
  9. استفاده در ابزارهای واقعی
  10. الگوهای محیط تولید در عمل
  11. خروجی نهایی
  12. تمرین‌ها
  13. اصطلاحات کلیدی
  14. مطالعه‌ی بیشتر

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

راه‌حل این چالش، پیچیده‌تر کردن پرامپت‌ها نیست؛ بلکه پیاده‌سازی یک معماری حداقلی و ساختاریافته است. در این درس یاد می‌گیرید که چگونه با تنها 3 فایل—یک مسیریاب ریشه‌ای (Router)، یک فایل وضعیت (State) و یک صف تسک‌ها (Task Board)—یک میز کار پایدار و سبک بسازید که بین ابزارهای مختلف مثل Cursor و Claude Code قابل حمل باشد و اتکا به تاریخچه‌ی ناپایدار چت را از بین ببرد.

کوچک‌ترین میز کار کاربردی تنها از سه فایل تشکیل می‌شود: یک مسیریاب ریشه‌ایِ دستورالعمل‌ها، یک فایل وضعیت، و یک تابلوی تسک‌ها. هر چیز دیگری روی همین‌ها سوار می‌شود. اگر مخزنی نتواند این سه فایل را نگه‌داری کند، هیچ مدلی نجاتش نخواهد داد.

اهداف یادگیری

  • تعریف سه فایلی که کمینه‌ی میز کار کاربردی را می‌سازند.
  • توضیح این‌که چرا یک مسیریاب ریشه‌ایِ کوتاه از یک فایل یکپارچه و طولانی AGENTS.md بهتر عمل می‌کند.
  • ساخت یک فایل وضعیت که ایجنت بتواند در هر نوبت گفت‌وگو بخواند و در پایان به‌روزرسانی کند.
  • ساخت یک تابلوی تسک‌ها که کار در چندین نشست کاری را بدون تاریخچه‌ی چت زنده نگه دارد.

صورت مسئله

بیشتر تیم‌ها کار را با نوشتن یک فایل AGENTS.md سه‌هزارخطی شروع می‌کنند و فکر می‌کنند کار تمام است. مدل آن را بارگذاری می‌کند، بخش‌هایی را که نمی‌تواند خلاصه کند نادیده می‌گیرد، و در نهایت باز هم در همان جاهایی شکست می‌خورد که همیشه شکست می‌خورد.

شما به نقطه‌ی مقابل این رویکرد نیاز دارید: یک فایل ریشه‌ای بسیار کوچک که ایجنت را فقط در صورت لزوم به فایل‌های عمیق‌تر هدایت کند؛ یک وضعیت پایدار (Durable state) که ایجنت پیش از اقدام بخواند و پس از اقدام در آن بنویسد؛ و یک تابلوی تسک‌ها که مشخص کند چه کاری در جریان است، چه چیزی مسدود شده و تسک بعدی چیست.

سه فایل. هر کدام با وظیفه‌ای مشخص. هر کدام به‌اندازه‌ی کافی ماشین‌خوان، تا بعداً بتواند به سیستمی واقعی تکامل پیدا کند.

مفاهیم پایه

حلقه‌ی ایجنتAGENTS.mdagent_state.jsontask_board.json

فایل AGENTS.md یک مسیریاب است، نه دفترچه‌ی راهنما

یک فایل AGENTS.md خوب، کوتاه است. این فایل ایجنت را به این بخش‌ها ارجاع می‌دهد:

  • فایل وضعیت (اکنون کجای کار هستید).
  • تابلوی تسک‌ها (چه کارهایی باقی مانده است).
  • قوانین عمیق‌تر (زیرمسیر docs/agent-rules.md).
  • دستور اعتبارسنجی (چطور متوجه شویم کار درست انجام شده است).

هر نکته‌ی طولانی‌تری باید به مستندات عمیق‌تر برود و تنها در صورت نیاز بارگذاری شود. راهنماهای طولانی نادیده گرفته می‌شوند؛ اما مسیریاب‌های کوتاه رعایت می‌شوند.

فایل agent_state.json مرجع رسمی سوابق است

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

وضعیت در قالب یک فایل ذخیره می‌شود، چون تاریخچه‌ی چت قابل اعتماد نیست. نشست‌ها بسته می‌شوند و مکالمات خلاصه یا کوتاه می‌شوند؛ اما فایل سر جای خود می‌ماند.

فایل task_board.json همان صف کاری است

تابلوی تسک‌ها تمام کارها را با یکی از وضعیت‌های todo | in_progress | done | blocked نگه می‌دارد. وقتی وضعیت خالی است، ایجنت کار بعدی را از این صف برمی‌دارد؛ هر زمان هم که بخواهید بدانید آیا ایجنت در مسیر درست پیش می‌رود یا نه، همین صف را بررسی می‌کنید.

هر تسک روی تابلو یک شناسه، یک هدف، یک مسئول (builder، reviewer یا human) و معیارهای پذیرش دارد. کوچک بودن این تابلو تعمدی است: اگر حجم آن از یک صفحه فراتر برود، مشکل شما در برنامه‌ریزی است، نه در ساختار تابلو.

سه فایل، کفِ کار است نه سقف آن

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

میز کار کمینهسه فایل، یک چرخه
MINIMAL WORKBENCHThe smallest useful workbench: a short root router the agent reads first, a state file it reads before acting and writes after, and a task board that says what is in flight, blocked, and next. Reads open every turn, writes close it, and no part of the cycle depends on chat history surviving.حلقه‌ی ایجنتدر حال کار...AGENTS.mdمسیریاب ریشهagent_state.jsonوضعیت پایدارtask_board.jsonدر جریان / مسدود / بعدیخواندن در شروع نوبت (آبی)، نوشتن در پایان نوبت (کهربایی)
کوچک‌ترین میز کار کاربردی: یک مسیریاب ریشه کوتاه که ایجنت ابتدا آن را می‌خواند، یک فایل وضعیت که قبل از اقدام خوانده و پس از آن نوشته می‌شود، و یک برد وظایف که موارد در حال انجام، مسدودشده و بعدی را مشخص می‌کند. هر نوبت گفت‌وگو با خواندن آغاز و با نوشتن بسته می‌شود، و هیچ بخشی از چرخه به ماندگاری تاریخچه چت وابسته نیست.

پیاده‌سازی از صفر

اسکریپت code/main.py این میز کار کمینه را در یک مخزن خالی می‌سازد و یک نوبت گفت‌وگوی ایجنت را نمایش می‌دهد که:

  1. فایل agent_state.json را می‌خواند.
  2. اگر وضعیت خالی بود، تسک بعدی را از task_board.json برمی‌دارد.
  3. یک فایل منفرد درون دامنه را دستکاری می‌کند.
  4. وضعیت به‌روزشده را دوباره ذخیره می‌کند.

اجرای اسکریپت:

python3 code/main.py

این اسکریپت پوشه‌ی workdir/ را در کنار خود ایجاد می‌کند، سه فایل را درون آن می‌گذارد، یک نوبت کاری را اجرا می‌کند و تفاوت‌ها (Diff) را نمایش می‌دهد. با اجرای مجدد، خواهید دید که نوبت دوم کار را دقیقاً از نقطه‌ی پایان نوبت اول ادامه می‌دهد.

استفاده در ابزارهای واقعی

در ابزارهای عملیاتی ایجنت‌محور، همین سه فایل با نام‌های متفاوتی ظاهر می‌شوند:

  • Claude Code: فایل AGENTS.md یا CLAUDE.md نقش مسیریاب، فضاهای ذخیره‌سازی مانند .claude/state.json نقش وضعیت، و قلاب‌ها (Hooks) نقش تابلو را بازی می‌کنند.
  • Codex / Cursor: قوانین فضای کاری (Workspace rules) نقش مسیریاب، حافظه‌ی نشست (Session memory) نقش وضعیت، و تسک‌های صف‌بندی‌شده در نوار کناری چت نقش تابلو را دارند.
  • ایجنت سفارشی پایتون: دقیقاً همین فایل‌هایی که نوشتید.

نام‌ها تغییر می‌کنند؛ اما ساختار دست‌نخورده باقی می‌ماند.

الگوهای محیط تولید در عمل

این میز کار کمینه زمانی در برابر مواجهه با مونو‌ریپوهای واقعی دوام می‌آورد که سه الگو روی آن سوار شوند. این الگوها مستقل هستند؛ هر کدام را که نیاز واقعی مخزن شماست انتخاب کنید.

فایل‌های تودرتوی AGENTS.md با اولویت نزدیک‌ترین فایل. شرکت OpenAI تعداد 88 فایل AGENTS.md مختلف در سراسر مخزن اصلی خود دارد؛ یعنی برای هر زیرمؤلفه یک فایل. ابزارهای Codex، Cursor، Claude Code و Copilot مسیر فایل کاری را تا ریشه‌ی مخزن بالا می‌روند و تمام فایل‌های AGENTS.md موجود در مسیر را با هم ترکیب می‌کنند. فایل‌های درون زیرپوشه‌ها، فایل ریشه را بسط می‌دهند. Codex فایلی به نام AGENTS.override.md برای جایگزین کردن فایل ریشه (به‌جای بسط دادن آن) اضافه کرده است؛ اما این سازوکار مختص Codex است و بهتر است برای کارهای چندابزاری از آن دوری کنید. بررسی‌های شرکت Augment Code نکته‌ی کلیدی را مشخص می‌کند: بهترین فایل‌های AGENTS.md جهشی در کیفیت ایجاد می‌کنند که معادل ارتقای مدل از Haiku به Opus است؛ درحالی‌که فایل‌های ضعیف، خروجی را حتی از حالتی که اصلاً فایلی وجود ندارد هم بدتر می‌کنند.

ضدالگوهایی که حتی با وجود ظاهرِ کامل باید رد شوند. دستورالعمل‌های متناقض بی‌صدا ایجنت را از حالت تعاملی خارج و به حالت حریصانه (Greedy) می‌برند (در بنچمارک ICLR 2026 AMBIG-SWE نرخ حل مسئله از 48.8% به 28% سقوط کرد)؛ اولویت‌ها را شماره‌گذاری کنید و آن‌ها را به‌شکل یک‌دست و بدون سلسله‌مراتب روی هم نچینید. قوانین غیرقابل‌سنجش سبک کدنویسی (مثل «پیروی از راهنمای سبک پایتون گوگل») بدون هیچ دستور اجرایی مشخص، دست ایجنت را باز می‌گذارند تا تطابق را از خودش ابداع کند؛ در کنار هر قانون نگارشی، دستور دقیق لینتر (Linter) را بیاورید. آوردن قواعد نگارشی در ابتدا به‌جای دستورها، مسیر اعتبارسنجی را مدفون می‌کند؛ همیشه اول دستورها، در آخر سبک کدنویسی. نوشتن متن برای انسان به‌جای ایجنت، بودجه‌ی کانتکست را هدر می‌دهد؛ مختصرنویسی در اینجا یک مزیت است.

پیوندهای نمادین (Symlinks) بین‌ابزاری. داشتن یک فایل ریشه‌ای واحد با پیوندهای نمادین (ln -s AGENTS.md CLAUDE.md، ln -s AGENTS.md .github/copilot-instructions.md، ln -s AGENTS.md .cursorrules) تمام ایجنت‌های کدنویسی را روی یک منبع واحدِ حقیقت نگه می‌دارد. ابزار nx ai-setup از فریم‌ورک Nx این فرآیند را روی Claude Code، Cursor، Copilot، Gemini، Codex و OpenCode از طریق یک پیکربندی واحد خودکار می‌کند.

خروجی نهایی

فایل outputs/skill-minimal-workbench.md این میز کار سه‌فایلی را برای هر مخزن جدید تولید می‌کند: یک مسیریاب AGENTS.md تنظیم‌شده برای پروژه، یک agent_state.json با کلیدهای درست، و یک task_board.json که با کارهای معوق فعلی پروژه پر شده است.

تمرین‌ها

  1. یک برچسب زمانی last_run به agent_state.json اضافه کنید. اگر عمر فایل بیش از 24 ساعت بود، اجرای برنامه را تا زمان تأیید اپراتور متوقف کنید.
  2. فیلد priority را به تابلوی تسک‌ها اضافه کنید و سازوکار واکشی را طوری تغییر دهید که همیشه تسک todo با بالاترین اولویت را بردارد.
  3. فایل task_board.json را به فرمت JSON Lines منتقل کنید تا هر تسک در یک خط قرار بگیرد و تغییرات در کنترل نسخه (Version Control) شفاف ثبت شوند.
  4. یک اسکریپت lint_workbench.py بنویسید که اگر حجم AGENTS.md بیش از 80 خط بود یا به فایلی ارجاع می‌داد که وجود خارجی ندارد، با خطا متوقف شود.
  5. بررسی کنید از دست دادن کدام‌یک از این سه فایل بیشترین آسیب را می‌زند. از پاسخ خود دفاع کنید.

اصطلاحات کلیدی

اصطلاح در گفتار عامیانه معنای دقیق فنی
مسیریاب (Router) AGENTS.md فایل ریشه‌ای و کوتاهی که ایجنت را به مستندات و فایل‌های عمیق‌تر هدایت می‌کند
فایل وضعیت (State file) «یادداشت‌ها» سابقه‌ای ماشین‌خوان از وضعیت فعلی ایجنت که در هر نوبت گفت‌وگو نوشته می‌شود
تابلوی تسک‌ها (Task board) «بک‌لاگ» صفی از کارها با فرمت JSON به همراه وضعیت، مسئول و معیارهای پذیرش
مرجع رسمی سوابق (System of record) «منبع حقیقت» فایلی که پس از پایان چت، میز کار آن را به‌عنوان مرجع معتبر کارها در نظر می‌گیرد

مطالعه‌ی بیشتر

خودآزمایی

به سؤال‌ها جواب بدهید تا ببینید چقدر از درس در ذهنتان مانده است.

  1. پیش از درسکدام سه فایل کوچک‌ترین میز کار کاربردی را تشکیل می‌دهند؟
  2. پیش از درسنگاه این درس به AGENTS.md چیست؟
  3. حین درسداده‌های Augment Code درباره یک AGENTS.md خوب چه می‌گویند؟
  4. حین درسچرا این درس وضعیت متکی به فایل را به وضعیت متکی به تاریخچه چت ترجیح می‌دهد؟
  5. حین درسطبق درس، وقتی دستورالعمل‌های متناقض وارد AGENTS.md می‌شوند چه اتفاقی می‌افتد؟
  6. پس از درسچرا این درس سیم‌لینک‌های بین‌ابزاری مانند CLAUDE.md -> AGENTS.md را پیشنهاد می‌کند؟
  7. پس از درسفایل‌های تو در توی AGENTS.md از چه الگویی پیروی می‌کنند؟

سؤالات متداول

چرا نوشتن یک فایل طولانی AGENTS.md پیشنهاد نمی‌شود؟

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

نقش فایل agent_state.json در میز کار چیست؟

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

چگونه یک پیکربندی واحد را بین ابزارهای مختلف کدنویسی به اشتراک بگذاریم؟

با ساخت پیوندهای نمادین (Symlinks) از فایل اصلی AGENTS.md به فایل‌های متناظر در سایر ابزارها (مثل CLAUDE.md یا .cursorrules)، همه‌ی ایجنت‌ها به یک منبع واحد حقیقت متصل می‌شوند.

ما رو توی گوگل بیشتر ببین

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