هماهنگسازیِ سابایجنتها در مقیاسِ بزرگ با ورکفلوهای داینامیک
Dynamic workflows orchestrate many subagents from a script Claude writes and you can rerun. Use them for codebase audits, large migrations, and cross-checked research.
{/* plan-availability: feature=workflows plans=pro,max,team,enterprise providers=all */}
یک ورکفلوِ داینامیک، یک اسکریپتِ جاوااسکریپت است که سابایجنتها را در مقیاسِ بزرگ هماهنگ میکند. Claude اسکریپت را برای کاری که توصیف میکنی مینویسد، و یک runtime آن را در پسزمینه اجرا میکند، در حالیکه نشستِ تو پاسخگو میماند.
سراغِ یک ورکفلو برو وقتی کاری به ایجنتهای بیشتری نیاز دارد از آنچه یک گفتوگو میتواند هماهنگ کند، یا وقتی میخواهی هماهنگسازی بهصورتِ اسکریپتی درآید که بتوانی بخوانی و دوباره اجرایش کنی. نمونهها شاملِ یک جاروبِ باگ در سراسرِ کدبیس، یک مهاجرتِ ۵۰۰فایلی، یک پرسشِ پژوهشی که منابعش باید با یکدیگر راستیآزماییِ متقابل شوند، و یک پلنِ دشوار است که ارزش دارد پیش از تعهد به یکی، از چند زاویهی مستقل پیشنویس شود.
این صفحه پوشش میدهد چگونه:
- تصمیم بگیری کِی از یک ورکفلو استفاده کنی بهجای سابایجنتها یا skillها
- یک ورکفلوِ بستهبندیشده را اجرا کنی با
/deep-research - بگذاری Claude یک ورکفلو بنویسد برای کارت و ذخیرهاش کنی
- بفهمی یک ورکفلو چطور اجرا میشود و اجراها را مدیریت کنی
کِی از یک ورکفلو استفاده کنیم
Section titled “کِی از یک ورکفلو استفاده کنیم”سابایجنتها، skillها، تیمهای ایجنت و ورکفلوها همگی میتوانند یک کارِ چندمرحلهای را اجرا کنند. تفاوت در این است که پلن دستِ کیست:
| سابایجنتها | skillها | تیمهای ایجنت | ورکفلوها | |
|---|---|---|---|---|
| چیست | کارگری که Claude میزایاند | دستورالعملهایی که Claude دنبال میکند | یک ایجنتِ سرپرست که نشستهای همرده را نظارت میکند | اسکریپتی که runtime اجرایش میکند |
| چهکسی تصمیم میگیرد بعدی چه اجرا شود | Claude، نوبتبهنوبت | Claude، با دنبالکردنِ پرامپت | ایجنتِ سرپرست، نوبتبهنوبت | اسکریپت |
| نتایجِ میانی کجا میمانند | پنجرهی کانتکستِ Claude | پنجرهی کانتکستِ Claude | یک فهرستِ کارِ مشترک | متغیرهای اسکریپت |
| چه چیز تکرارپذیر است | تعریفِ کارگر | دستورالعملها | تعریفِ تیم | خودِ هماهنگسازی |
| مقیاس | چند کارِ واگذارشده در هر نوبت | همان سابایجنتها | یکمشت همردهی طولانیاجرا | دهها تا صدها ایجنت در هر اجرا |
| وقفه | نوبت را از سر میگیرد | نوبت را از سر میگیرد | همتیمیها به اجرا ادامه میدهند | در همان نشست ازسرگرفتنی است |
یک ورکفلو پلن را به درونِ کد میبرد. با سابایجنتها، skillها و تیمهای ایجنت، Claude هماهنگکننده است: نوبتبهنوبت تصمیم میگیرد بعدی چه چیزی را بزایاند یا واگذار کند، و هر نتیجه در یک پنجرهی کانتکست فرود میآید. اسکریپتِ یک ورکفلو خودش حلقه، انشعاب و نتایجِ میانی را نگه میدارد، پس کانتکستِ Claude فقط پاسخِ نهایی را در بر دارد.
بردنِ پلن به درونِ کد به یک ورکفلو اجازه میدهد یک الگوی کیفیتِ تکرارپذیر اعمال کند، نه فقط ایجنتهای بیشتری اجرا کند: میتواند کاری کند که ایجنتهای مستقل پیش از گزارشِ یافتهها، یافتههای یکدیگر را بهصورتِ تخاصمی بازبینی کنند، یا یک پلن را از چند زاویه پیشنویس و آنها را در برابرِ هم بسنجد، تا نتیجهای قابلاعتمادتر از یک گذرِ یگانه بگیری.
اجرای یک ورکفلوِ بستهبندیشده
Section titled “اجرای یک ورکفلوِ بستهبندیشده”سریعترین راه برای دیدنِ یک ورکفلو در عمل، اجرای /deep-research است، همان ورکفلوِ داخلی که Claude Code برای بررسیِ یک پرسش در میانِ منابعِ بسیار بههمراه دارد. میبینی که ایجنتها در پسزمینه مجموعهای از فازها را پیش میبرند در حالیکه نشستت آزاد میماند، و در پایان بهجای یک رونوشتِ نوبتبهنوبت، یک گزارش میگیری.
ورکفلو را اجرا کن
/deep-research را با پرسشی که میخواهی بررسی شود اجرا کن. روی چند زاویه جستوجوهای وب را گسترش میدهد، منابعی را که مییابد واکشی و راستیآزماییِ متقابل میکند، و یک گزارشِ مستند را ترکیب میکند.
/deep-research What changed in the Node.js permission model between v20 and v22?به ورکفلوها اجازه بده
Claude Code میپرسد که آیا اجازهی اجرای ورکفلو را میدهی. برای ادامه Yes را برگزین. پرامپتِ دقیق به حالتِ دسترسیات بستگی دارد. برای گزینههای هر حالت، پلن را پیش از اجرا تأیید کن را ببین.
پیشرفت را تماشا کن
اجرا در پسزمینه آغاز میشود. /workflows را اجرا کن، با کلیدهای جهتنما اجرا را برگزین، و Enter را بزن تا نمای پیشرفتش باز شود:
/workflowsاین نما هر فاز را با تعدادِ ایجنتهایش، مجموعِ توکن و زمانِ سپریشده نشان میدهد. درونِ هر فاز برو تا ایجنتهایش و آنچه هرکدام یافته را ببینی. برای مجموعهی کاملِ کنترلها اجرا را تماشا کن را ببین.
از پنلِ کارها زیرِ جعبهی ورودی هم میتوانی تماشا کنی: یک خلاصهی پیشرفتِ یکخطی تا وقتی اجرا در جریان است آنجا ظاهر میشود. کلیدِ جهتنمای پایین را بزن تا فوکوس رویش برود، سپس Enter تا بازش کنی.
گزارش را بخوان
وقتی اجرا تمام شود، گزارش در نشستت فرود میآید. منابعی را که هر ادعا از آن آمده استناد میدهد، با ادعاهایی که از راستیآزماییِ متقابل جان بهدر نبردهاند که از پیش فیلتر شدهاند.
برای اجرای یک ورکفلو برای کارِ خودت، بگذار Claude یکی بنویسد، و بهمحضِ اینکه یک اجرا آنچه را میخواستی انجام داد میتوانی آن را ذخیره کنی بهعنوانِ یک دستورِ خودت.
ورکفلوهای بستهبندیشده
Section titled “ورکفلوهای بستهبندیشده”Claude Code دستورِ /deep-research را بهعنوانِ یک ورکفلوِ داخلی بههمراه دارد:
| دستور | چه میکند |
|---|---|
/deep-research <question> | روی یک پرسش از چند زاویه جستوجوهای وب را گسترش میدهد، منابعی را که مییابد واکشی و راستیآزماییِ متقابل میکند، روی هر ادعا رأی میگیرد، و یک گزارشِ مستند بازمیگرداند که ادعاهای جانبهدرنبرده از راستیآزماییِ متقابل در آن فیلتر شدهاند. نیازمندِ در دسترسبودنِ ابزارِ WebSearch است |
ورکفلوهایی که خودت ذخیره میکنی هم به همین شکل به دستور تبدیل میشوند و در تکمیلِ خودکارِ / در کنارِ ورکفلوهای بستهبندیشده ظاهر میشوند.
اجرا را تماشا کن
Section titled “اجرا را تماشا کن”ورکفلوها در پسزمینه اجرا میشوند، پس نشست همانطور که ایجنتها کار میکنند پاسخگو میماند. هر زمان /workflows را اجرا کن تا ورکفلوهای در حالِ اجرا و کاملشده را فهرست کنی، سپس یکی را برگزین تا نمای پیشرفتش باز شود.
/workflowsنمای پیشرفت هر فاز را با تعدادِ ایجنتها، مجموعِ توکنها و زمانِ سپریشده نشان میدهد. پاورقی کلیدِ هر اکشن را فهرست میکند:
| کلید | اکشن |
|---|---|
↑ / ↓ | انتخابِ یک فاز یا ایجنت |
Enter یا → | رفتن به درونِ فازِ انتخابشده، سپس به درونِ یک ایجنت برای خواندنِ پرامپت، فراخوانهای اخیرِ ابزار و نتیجهاش |
Esc | یک سطح به عقب بازگشتن |
j / k | اسکرول درونِ جزئیاتِ ایجنت وقتی سرریز میکند |
p | مکث یا ازسرگیریِ اجرا |
x | توقفِ ایجنتِ انتخابشده، یا توقفِ کلِ ورکفلو وقتی فوکوس روی اجراست |
r | راهاندازیِ دوبارهی ایجنتِ درحالِاجرای انتخابشده |
s | ذخیرهی اسکریپتِ اجرا بهعنوانِ یک دستور |
بگذار Claude یک ورکفلو بنویسد
Section titled “بگذار Claude یک ورکفلو بنویسد”میتوانی به دو روش بگذاری Claude برای کارت یک ورکفلو بنویسد:
- در پرامپتت یک ورکفلو بخواه، یا با کلماتِ خودت یا با گنجاندنِ کلیدواژهی
ultracode، و Claude برای کار یکی مینویسد. - بگذار Claude با ultracode تصمیم بگیرد:
/effort ultracodeرا تنظیم کن و Claude برای هر کارِ پراهمیت در نشست یک ورکفلو طرح میریزد.
یک دستورِ ورکفلو که از پیش وجود دارد را هم میتوانی اجرا کنی: یک ورکفلوِ بستهبندیشده مثلِ /deep-research، یا یکی که خودت ذخیره کردهای.
در پرامپتت یک ورکفلو بخواه
Section titled “در پرامپتت یک ورکفلو بخواه”برای اجرای یک کارِ تکی بهعنوانِ یک ورکفلو بدونِ تغییرِ سطحِ effortِ نشست، کلیدواژهی ultracode را در پرامپتت بگنجان. درخواست با کلماتِ خودت، مثلاً «use a workflow» یا «run a workflow»، هم کار میکند: Claude یک درخواستِ مستقیم را همان opt-in تلقی میکند. پیش از v2.1.160 کلیدواژهی محرکِ تحتاللفظی workflow بود؛ درخواستهای زبانِ طبیعی در هر دو نسخه کار میکنند.
ultracode: audit every API endpoint under src/routes/ for missing auth checksClaude Code کلیدواژه را در ورودیات برجسته میکند و Claude بهجای پیشبردنِ کار بهصورتِ نوبتبهنوبت، یک اسکریپتِ ورکفلو برای کار مینویسد. اگر قصدِ شروعِ یک ورکفلو را نداشتی، روی macOS کلیدِ Option+W و روی Windows و Linux کلیدِ Alt+W را بزن تا برجستهسازی برای این پرامپت برداشته شود، یا وقتی نشانگر درست بعد از کلیدواژهی برجستهشده است backspace را بزن. برای اینکه کلیدواژه اصلاً محرک نشود، Ultracode keyword trigger را در /config خاموش کن.
اگر اجرا آنچه را میخواستی انجام داد، میتوانی پس از آن آن را بهعنوانِ یک دستور ذخیره کنی.
اگر از پیش یک هماهنگکننده را به روشی دیگر ساختهای، مثلِ یک پوشه از پرامپتهای سابایجنت یا یک skill که کار را گسترش میدهد، میتوانی Claude را به آن اشاره دهی و یک ورکفلو بخواهی که همان کار را انجام دهد.
بگذار Claude با ultracode تصمیم بگیرد
Section titled “بگذار Claude با ultracode تصمیم بگیرد”ultracode یک تنظیمِ Claude Code است که effortِ استدلالیِ xhigh (reasoning effort) را با هماهنگسازیِ خودکارِ ورکفلو ترکیب میکند. با روشنبودنِ آن، Claude بهجای منتظرماندن برای درخواستِ تو، برای هر کارِ پراهمیت یک ورکفلو طرح میریزد.
/effort ultracodeبا روشنبودنِ ultracode، Claude تصمیم میگیرد کِی یک کار سزاوارِ یک ورکفلو است. یک درخواستِ تکی میتواند به چند ورکفلوِ پیاپی تبدیل شود: یکی برای فهمِ کد، یکی برای اعمالِ تغییر، و یکی برای راستیآزماییِ آن. این روی هر کار در نشست اعمال میشود، پس هر درخواست توکنِ بیشتری مصرف میکند و از سطوحِ effortِ پایینتر بیشتر طول میکشد.
ultracode برای نشستِ جاری دوام میآورد و وقتی نشستی تازه شروع کنی بازنشانی میشود. وقتی به کارِ روزمره برگشتی با /effort high به عقب برگرد. روی مدلهایی که از effortِ xhigh (effort) پشتیبانی میکنند در دسترس است؛ روی مدلهای دیگر منوی /effort آن را پیشنهاد نمیدهد.
پلن را پیش از اجرا تأیید کن
Section titled “پلن را پیش از اجرا تأیید کن”در CLI، پرامپتِ هر اجرا فازهای طرحریزیشده و این گزینهها را نشان میدهد:
- Yes, run it: اجرا را شروع کن
- Yes, and don’t ask again for
<name>in<path>: شروع کن، و از این پس برای این ورکفلو در این پروژه این پرامپت را رد کن - View raw script: پیش از تصمیم اسکریپت را بخوان
- No: لغو
Ctrl+G اسکریپت را در ویرایشگرت باز میکند. Tab به تو امکان میدهد پیش از شروعِ اجرا پرامپت را تنظیم کنی.
اینکه آیا این پرامپت را میبینی به حالتِ دسترسیات بستگی دارد:
| حالتِ دسترسی | کِی پرامپت میگیری |
|---|---|
| Default، accept edits | هر اجرا، مگر اینکه برای آن ورکفلو در این پروژه Yes, and don’t ask again را برگزیده باشی |
| Auto | فقط راهاندازیِ اول. هر Yes رضایت را در تنظیماتِ کاربریات ثبت میکند، و راهاندازیهای بعدی بدونِ پرامپت شروع میشوند. وقتی ultracode روشن باشد کاملاً رد میشود |
Bypass permissions، claude -p، Agent SDK | هرگز. اجرا بلافاصله شروع میشود |
در اپِ Desktop، یک کارتِ تأیید نامِ ورکفلو، فهرستِ فازها و یک هشدارِ مصرفِ توکن را با اکشنهای Once، Always و Deny نشان میدهد. نمای پیشرفت در پنلِ کناریِ Background tasks ظاهر میشود.
حالتِ دسترسیات فقط پرامپتِ راهاندازیِ بالا را کنترل میکند. سابایجنتهایی که ورکفلو میزایاند همیشه در حالتِ acceptEdits اجرا میشوند و فهرستِ مجازِ ابزارهایت را به ارث میبرند، فارغ از حالتِ نشستت. ویرایشهای فایل بهصورتِ خودکار تأیید میشوند.
دستورهای شل، واکشیهای وب و ابزارهای MCP که در فهرستِ مجازت نیستند همچنان میتوانند در میانهی اجرا از تو پرامپت بگیرند. برای پرهیز از این روی یک اجرای طولانی، پیش از شروع، دستورهایی را که ایجنتها نیاز دارند به فهرستِ مجازت اضافه کن.
در claude -p و Agent SDK کسی نیست که پرامپت بگیرد، پس فراخوانهای ابزار بدونِ تأییدِ تعاملی از قوانینِ دسترسیِ پیکربندیشدهات پیروی میکنند.
ورکفلو را برای استفادهی دوباره ذخیره کن
Section titled “ورکفلو را برای استفادهی دوباره ذخیره کن”وقتی Claude برای کاری که تکرار خواهی کرد یک ورکفلو مینویسد، میتوانی اسکریپتِ آن اجرا را بهعنوانِ یک دستور ذخیره کنی. فرایندی مثلِ بازبینیای که روی هر شاخه اجرا میکنی، آنگاه هر بار همان هماهنگسازی را اجرا میکند.
/workflows را اجرا کن، اجرایی را که میخواهی نگه داری برگزین، و s را بزن. در گفتوگوی ذخیره، Tab بینِ دو مکانِ ذخیره جابهجا میشود:
.claude/workflows/در پروژهات: مشترک با هر کسی که مخزن را clone میکند~/.claude/workflows/در پوشهی خانگیات: در هر پروژه در دسترس، فقط برای خودت قابلمشاهده
Enter را بزن تا ذخیره شود. ورکفلو در نشستهای آینده از هر دو مکان بهصورتِ /<name> اجرا میشود.
اگر یک ورکفلوِ پروژه و یک ورکفلوِ شخصی نامی مشترک داشته باشند، آنِ پروژه اجرا میشود.
به یک ورکفلوِ ذخیرهشده ورودی بده
Section titled “به یک ورکفلوِ ذخیرهشده ورودی بده”یک ورکفلوِ ذخیرهشده میتواند از طریقِ پارامترِ args ورودی بپذیرد. اسکریپت آن را بهعنوانِ یک global به نامِ args میخواند. از این برای تأمینِ یک پرسشِ پژوهشی، یک فهرست از مسیرهای هدف، یا یک شیءِ پیکربندی هنگامِ فراخوانی استفاده کن، بهجای ویرایشِ اسکریپت برای هر اجرا.
پرامپتِ زیر یک ورکفلوِ ذخیرهشده را با فهرستی از شمارهی issueها اجرا میکند:
> Run /triage-issues on issues 1024, 1025, and 1030Claude فهرست را بهعنوانِ دادهی ساختاریافته پاس میدهد، پس اسکریپت میتواند مستقیماً روی args متدهای آرایه و شیء را فراخوانی کند بدونِ اینکه اول آن را parse کند. اگر args حذف شود، global درونِ اسکریپت undefined است.
یک ورکفلو چطور اجرا میشود
Section titled “یک ورکفلو چطور اجرا میشود”runtimeِ ورکفلو، اسکریپت را در محیطی ایزوله و جدا از گفتوگوی تو اجرا میکند. نتایجِ میانی بهجای فرودآمدن در کانتکستِ Claude در متغیرهای اسکریپت میمانند.
هر اجرا اسکریپتش را در فایلی زیرِ پوشهی نشستت در ~/.claude/projects/ مینویسد. Claude مسیر را وقتی اجرا شروع میشود دریافت میکند، پس میتوانی آن را بخواهی. میتوانی آن فایل را باز کنی تا هماهنگسازیای را که Claude نوشته بخوانی، آن را در برابرِ اسکریپتِ یک اجرای قبلی diff کنی، یا ویرایشش کنی و از Claude بخواهی از روی نسخهی ویرایششده دوباره راهاندازی کند.
runtime نتیجهی هر ایجنت را همانطور که اجرا پیش میرود ردیابی میکند، و همین است که یک اجرا را درونِ همان نشست ازسرگرفتنی میکند.
رفتار و محدودیتها
Section titled “رفتار و محدودیتها”runtime محدودیتهای زیر را اعمال میکند:
| محدودیت | چرا |
|---|---|
| بدونِ ورودیِ کاربر در میانهی اجرا | فقط پرامپتهای دسترسیِ ایجنت میتوانند یک اجرا را مکث کنند. برای تأییدِ بینِ مراحل، هر مرحله را بهعنوانِ ورکفلوِ خودش اجرا کن |
| بدونِ دسترسیِ مستقیمِ سیستمِ فایل یا شل از خودِ ورکفلو | ایجنتها میخوانند، مینویسند و دستورها را اجرا میکنند. اسکریپت ایجنتها را هماهنگ میکند |
| تا ۱۶ ایجنتِ همزمان، روی ماشینهایِ با هستهی CPUِ محدود کمتر | مصرفِ منابعِ محلی را مهار میکند |
| در مجموع ۱٬۰۰۰ ایجنت در هر اجرا | از حلقههای افسارگسیخته جلوگیری میکند |
مدیریتِ اجراها
Section titled “مدیریتِ اجراها”بهمحضِ اینکه یک اجرا شروع شود، آن را از نمای /workflows مدیریت میکنی، یا با بازکردنِ خطِ پیشرفتش در پنلِ کارها زیرِ جعبهی ورودی.
ازسرگیری پس از یک مکث
Section titled “ازسرگیری پس از یک مکث”اگر یک اجرا را متوقف کنی، میتوانی از سرش بگیری: ایجنتهایی که از پیش کامل شدهاند نتایجِ کششدهشان را بازمیگردانند، و باقی زنده اجرا میشوند. یک اجرای مکثشده را از /workflows با انتخابِ آن و زدنِ p از سر بگیر، یا از Claude بخواه ورکفلو را با همان اسکریپت دوباره راهاندازی کند.
ازسرگیری درونِ همان نشستِ Claude Code کار میکند. اگر در حالیکه یک ورکفلو در حالِ اجراست از Claude Code خارج شوی، نشستِ بعدی ورکفلو را از نو شروع میکند.
یک ورکفلو ایجنتهای بسیاری میزایاند، پس یک اجرای تکی میتواند بهمراتب توکنِ بیشتری مصرف کند از پیشبردنِ همان کار در گفتوگو. اجراها مثلِ هر نشستِ دیگری بهحسابِ مصرف و سقفهای نرخِ پلنت میآیند.
برای سنجشِ هزینه پیش از تعهد به یک کارِ بزرگ، ورکفلو را اول روی یک برشِ کوچک اجرا کن: یک پوشه بهجای کلِ مخزن، یا یک پرسشِ باریک بهجای یک پرسشِ گسترده. نمای /workflows مصرفِ توکنِ هر ایجنت را همانطور که اجرا پیش میرود نشان میدهد، و میتوانی اجرا را همانجا هر زمان بدونِ ازدستدادنِ کارِ کاملشده متوقف کنی. سقفهای ایجنتِ runtime محدود میکنند که یک اجرای تکی چند ایجنت میتواند بزایاند، که هزینهی یک اسکریپتِ افسارگسیخته را مهار میکند.
هر ایجنت در یک ورکفلو از مدلِ نشستت استفاده میکند مگر اینکه اسکریپت یک مرحله را به مدلی دیگر مسیریابی کند. برای کنترلِ هزینهی مدل:
- پیش از یک اجرای بزرگ
/modelرا بررسی کن اگر معمولاً برای کارِ روزمره به مدلی کوچکتر سوئیچ میکنی - وقتی کار را توصیف میکنی، از Claude بخواه برای مراحلی که به قویترین مدل نیاز ندارند از مدلی کوچکتر استفاده کند
خاموشکردنِ ورکفلوها
Section titled “خاموشکردنِ ورکفلوها”ورکفلوها در CLI، اپِ Desktop، افزونههای IDE، حالتِ غیرتعاملی با claude -p، و Agent SDK در دسترساند. همان تنظیماتِ غیرفعالسازی روی هر سطح اعمال میشوند.
برای خاموشکردنِ ورکفلوها برای خودت:
- Dynamic workflows را در
/configخاموش کن. در طولِ نشستها دوام میآورد. - در
~/.claude/settings.jsonمقدارِ"disableWorkflows": trueرا تنظیم کن. در طولِ نشستها دوام میآورد. CLAUDE_CODE_DISABLE_WORKFLOWS=1را تنظیم کن. هنگامِ راهاندازی خوانده میشود، پس هرجا تنظیمش کنی اعمال میشود.
برای خاموشکردنِ ورکفلوها برای کلِ سازمانت، در تنظیماتِ مدیریتشده مقدارِ "disableWorkflows": true را تنظیم کن، یا از کلیدِ روشن/خاموش در صفحهی تنظیماتِ مدیریتیِ Claude Code استفاده کن.
وقتی ورکفلوها غیرفعالاند، دستورهای ورکفلوِ بستهبندیشده در دسترس نیستند، کلیدواژهی ultracode دیگر یک اجرا را محرک نمیشود، و ultracode از منوی /effort حذف میشود.
منابعِ مرتبط
Section titled “منابعِ مرتبط”- ایجنتها را بهصورتِ موازی اجرا کن: سابایجنتها، agent view، تیمهای ایجنت و ورکفلوها را مقایسه کن
- سابایجنتهای سفارشی بساز: همان اولیهی کارگری که ورکفلوها هماهنگش میکنند
- هزینهها را مدیریت کن: چگونه اجراهای چندایجنتی بهحسابِ سقفهای مصرف میآیند