מה זה workflows בקלוד קוד: לתזמר עשרות סוכנים בריצה אחת
מאת ירון דויטשר עודכן לאחרונה:
איזו בעיה workflows באים לפתור?
יש רגע מוכר בעבודה עם סוכנים מקבילים, והוא מגיע מהר יותר משנדמה. ביקשתם מקלוד קוד לעבור על כל ה-route handlers בפרויקט ולבדוק איפה חסרה בדיקת הרשאות. הוא משגר סוכני משנה, מקבל תשובות, מסכם — ואז מתחיל להתבלבל. לא כי הבדיקה קשה, אלא כי כל תוצאה שחוזרת נכנסת לחלון ההקשר שלו, והוא זה שצריך לזכור מי כבר נבדק, מה נמצא, ומה נשאר.
זאת התקרה האמיתית של סוכני משנה, והיא לא תקרה של חוכמה אלא של ניהול. קלוד הוא המתזמר, התזמור חי בזיכרון של שיחה אחת, ושיחה אחת מחזיקה כמות מוגבלת של עבודה.
workflow מזיז את התוכנית מהמודל לקוד. במקום שקלוד יחליט תור אחר תור את מי לשגר, הוא כותב סקריפט JavaScript שמחזיק את הלולאה, את ההסתעפויות ואת תוצאות הביניים — ומנוע ריצה נפרד מפעיל אותו ברקע. הסוכנים רצים, התוצאות נשמרות במשתנים של הסקריפט, ולשיחה חוזרת רק השורה התחתונה. השיחה נשארת פנויה בינתיים.
מתי זה מתאים, ומתי לא
הכלל הפשוט: כשהמשימה גדולה ממה שסוכן ראשי אחד יכול לתזמר, או כשאתם רוצים שהתזמור עצמו יהיה משהו שאפשר לקרוא ולהריץ שוב.
ארבעה מקרים שהתיעוד מביא כדוגמאות, וכולם נראים אותו דבר במבנה: הרבה פריטים, אותו טיפול:
- סריקה רוחבית: לעבור על כל הקבצים בתיקייה ולחפש את אותה בעיה, עם סוכן לכל קובץ
- הגירה של מאות קבצים: להמיר ספרייה שלמה מטכנולוגיה אחת לאחרת, כשכל קובץ מטופל בעותק מבודד כדי שהעריכות לא יתנגשו
- מחקר שצריך הצלבה: לפרוס קוראים על מקורות שונים במקביל, ואז לתת לסוכנים להצליב את הממצאים אלה מול אלה
- תוכנית ששווה לנסח כמה פעמים: לבקש כמה גרסאות עצמאיות של אותה תוכנית מזוויות שונות, ולשקול ביניהן לפני שמתחייבים
ומתי לא? כשהמשימה נכנסת בנוחות לשיחה אחת. workflow מפעיל הרבה סוכנים, ולכן הוא גם עולה הרבה יותר — על משימה בינונית זה בזבוז ולא שדרוג.
מה ההבדל מסוכני משנה, סקילים וצוותי סוכנים?
כל הארבעה יודעים להריץ משימה רב-שלבית, וקל לבלבל ביניהם. ההבדל היחיד שבאמת חשוב הוא מי מחזיק בתוכנית:
| סוכני משנה | סקילים | צוותי סוכנים | workflows | |
|---|---|---|---|---|
| מה זה | עובד שקלוד משגר | הוראות שקלוד עוקב אחריהן | סוכן מוביל שמפקח על עמיתים | סקריפט שמנוע ריצה מפעיל |
| מי מחליט מה רץ הלאה | קלוד, תור אחר תור | קלוד, לפי הפרומפט | הסוכן המוביל, תור אחר תור | הסקריפט |
| איפה יושבות תוצאות הביניים | בחלון ההקשר של קלוד | בחלון ההקשר של קלוד | ברשימת משימות משותפת | במשתנים של הסקריפט |
| מה חוזר על עצמו | הגדרת העובד | ההוראות | הגדרת הצוות | התזמור עצמו |
| סדר גודל | כמה משימות בכל תור | כמו סוכני משנה | קומץ עמיתים ארוכי-טווח | עשרות עד מאות סוכנים בריצה |
| מה קורה בהפרעה | התור מתחיל מחדש | התור מתחיל מחדש | העמיתים ממשיכים לרוץ | אפשר להמשיך באותה שיחה |
השורה שמסבירה את כל השאר היא השנייה. בשלוש הראשונות קלוד הוא המתזמר; ב-workflow הוא כתב את התזמור מראש והמנוע מבצע אותו. מזה נגזר גם היתרון הפחות מובן מאליו: כשהתוכנית היא קוד, אפשר להטמיע בה דפוס איכות חוזר — למשל לתת לסוכנים עצמאיים לנסות להפריך את הממצאים זה של זה לפני שהם מדווחים. זה לא “עוד סוכנים”, זאת תוצאה שעברה ביקורת.
איך מפעילים workflow?
הדרך המהירה ביותר לראות את זה עובד היא /deep-research — workflow מובנה שמגיע עם קלוד קוד ומריץ מחקר מוצלב על שאלה. הוא כבר מכוסה כאן בנפרד: צוות מחקר שלם בפקודה אחת.
למשימה משלכם יש שלוש דרכים, ושווה להכיר את ההבדל ביניהן:
- מילת המפתח
ultracodeבפרומפט: מבקשת workflow למשימה הזאת בלבד, בלי לשנות שום הגדרה. קלוד קוד מדגיש את המילה בקלט, וקלוד כותב סקריפט במקום לעבוד תור אחר תור - לבקש במילים שלכם: “תריץ את זה כ-workflow” עובד באותה מידה. קלוד מתייחס לבקשה ישירה כאותו opt-in
- /effort ultracode להגדרת השיחה: משלב רמת מאמץ xhigh עם תזמור אוטומטי, כך שקלוד מתכנן workflow לכל משימה מהותית בלי שתבקשו. בקשה אחת יכולה להתפצל לכמה workflows ברצף — אחד להבין את הקוד, אחד לבצע, אחד לוודא
ultracode: תעבור על כל ה-endpoints תחת src/routes ותאתר איפה חסרה בדיקת הרשאות
שתי נקודות שחוסכות בלבול. הראשונה: עד גרסה 2.1.160 מילת ההפעלה הייתה workflow עצמה, והיא שונתה ל-ultracode — בקשה בשפה חופשית עבדה ועובדת בשתי הגרסאות. השנייה: /effort ultracode תקף לשיחה הנוכחית בלבד ומתאפס בשיחה חדשה, אז אין סכנה שתשכחו אותו דלוק לנצח. לחזרה לעבודה שוטפת יורדים ל-/effort high. התמונה המלאה של כפתור המאמץ נמצאת במודל ורמת מאמץ בקלוד קוד.
איפה מילת המפתח דווקא לא תעבוד
זה פרט שקל להיכשל בו, והוא מכוון. מגרסה 2.1.210, ultracode היא opt-in רק בפרומפט שאתם מקלידים בעצמכם — בטרמינל, בתוסף ל-IDE, בשליטה מרחוק, או באפליקציית SDK שמסמנת את הקלט כהקלדה אנושית.
היא לא תפעיל workflow כשהיא מגיעה לשיחה בדרך אחרת: פרומפט שהועבר בדגל -p, משימה מתוזמנת, או תוכן שמוזרם פנימה מ-webhook או מתגובה ל-pull request. הסיבה ברורה כשחושבים עליה: אחרת מספיק שמישהו יכתוב את המילה בתגובה ב-GitHub כדי להצית ריצה של מאות סוכנים על חשבון המכסה שלכם. אם התחלתם ריצה בטעות, Alt+W (או Option+W במק) מבטל את ההדגשה לפרומפט הזה.
מה קורה כשהריצה מתחילה?
קלוד קוד מציג אישור לפני ההרצה עם רשימת השלבים המתוכננים, ואפשר לבקש לראות את הסקריפט הגולמי לפני שמחליטים. מתי בדיוק תישאלו תלוי במצב ההרשאות של השיחה: במצב הרגיל — בכל ריצה, אלא אם אישרתם “אל תשאל שוב” ל-workflow הזה בפרויקט הזה; במצב auto — רק בהפעלה הראשונה; ובמצב דילוג על הרשאות, בהרצה ללא מסך וב-SDK אין את מי לשאול, אז הריצה מתחילה מיד.
וכאן הפרט שהכי חשוב לדעת, כי הוא לא אינטואיטיבי: מצב ההרשאות שלכם שולט רק בשאלת הפתיחה. הסוכנים שה-workflow משגר רצים תמיד במצב acceptEdits ויורשים את רשימת הכלים המותרים שלכם, בלי קשר למצב של השיחה. כלומר עריכות קבצים מאושרות אוטומטית. פקודות מעטפת, קריאות רשת וכלי MCP שאינם ברשימה המותרת עדיין יכולים לעצור ולשאול אתכם באמצע — ולכן לפני ריצה ארוכה כדאי להוסיף מראש את מה שהסוכנים יצטרכו.
בזמן הריצה, /workflows מציגה את השלבים עם מספר הסוכנים, סך הטוקנים והזמן שעבר, ואפשר לצלול לתוך סוכן בודד ולראות מה הוא עשה. משם גם עוצרים: p להשהיה, x לעצירה, s לשמירת הסקריפט.
איך נראה סקריפט כזה?
לא חייבים לכתוב אותו — קלוד כותב, ואת הגרסה שלו אפשר לקרוא. כל ריצה שומרת את הסקריפט שלה לקובץ תחת תיקיית הסשן ב-~/.claude/projects, וקלוד מקבל את הנתיב כשהריצה מתחילה, כך שאפשר פשוט לבקש אותו. זה נראה כך:
export const meta = {
name: 'audit-routes',
description: 'Audit every route handler for missing auth checks',
}
const found = await agent('List every .ts file under src/routes/.', {
schema: { type: 'object', required: ['files'], properties: { files: { type: 'array', items: { type: 'string' } } } },
})
const audits = await pipeline(found.files, file =>
agent(`Audit ${file} for missing authentication checks.`, { label: file }),
)
return audits.filter(Boolean)
שתי פונקציות עושות את רוב העבודה: agent() משגרת סוכן אחד, ו-pipeline() מריצה סוכן לכל פריט ברשימה. מעליהן יושב בלוק meta עם השם והתיאור. הגוף הוא JavaScript רגיל, והמנוע מריץ אותו בסביבה מבודדת מהשיחה — לסקריפט עצמו אין גישה ישירה למערכת הקבצים או למעטפת, והוא מתאם סוכנים שכן.
כמה זה עולה, ואיך לא לשרוף את המכסה
זה החלק שחשוב לומר ביושר, כי כאן קל להיכוות. ריצה אחת של workflow יכולה לצרוך משמעותית יותר טוקנים מאותה עבודה בשיחה רגילה, והכול נספר במכסה ובמגבלות הקצב שלכם כמו כל סשן אחר. שלוש דרכים לרסן:
- להריץ קודם על פרוסה קטנה: תיקייה אחת במקום כל ה-repo, שאלה צרה במקום נושא שלם. רואים כמה זה עולה, ורק אז משחררים
- להגדיר הנחיית גודל: /config workflowSizeGuideline=small מכוון את קלוד לפחות מחמישה סוכנים. הערכים הם
unrestricted(בלי הנחיה),small(מתחת ל-5),medium(מתחת ל-15) ו-large(מתחת ל-50), וברירת המחדל מגרסה 2.1.219 היאmedium - לבדוק על איזה מודל אתם רצים: כל סוכן ב-workflow משתמש במודל של השיחה, אלא אם הסקריפט מנתב שלב מסוים למודל אחר. שווה הצצה ב-/model לפני ריצה גדולה, ואפשר לבקש מקלוד מראש שישתמש במודל קטן יותר בשלבים שלא צריכים את החזק
ולמי שתוהה אם זה באמת נחוץ: אמזון גילתה אחרי חמישה חודשים שצינור פנימי אחד צרך 1.8 מיליון דולר, כי מחזור החיוב החודשי היה מנגנון הגילוי היחיד שלה. תקרה ומונה עולים פחות.
חשוב להבין שהנחיית הגודל היא עצה ולא תקרה — התיעוד אומר את זה במפורש, ובקשה שמצדיקה סדר גודל אחר עדיין גוברת עליה. מה שכן חוסם בפועל אלה מגבלות מנוע הריצה: עד 16 סוכנים במקביל, ו-1,000 סוכנים בסך הכול לריצה.
יש גם רשת ביטחון קטנה: כשריצה מתזמנת יותר מ-25 סוכנים, או שסך הטוקנים הצפוי שלה עובר 1.5 מיליון, מופיעה בלוח המשימות התראת Large workflow שמפנה אתכם ל-/workflows כדי לעצור. ההתראה מייעצת בלבד — היא לא עוצרת ולא מגבילה כלום. ואם בחרתם הנחיית גודל משלכם, מספר הסוכנים שלה מחליף את הסף של 25. בשיחות עם /effort ultracode ההתראה לא מוצגת בכלל, בהיגיון שמי שהדליק אותו כבר בחר בריצות גדולות.
מה קורה אם עוצרים באמצע?
אפשר להמשיך ריצה שנעצרה, וסוכנים שכבר סיימו בדרך כלל מחזירים תוצאה שמורה במקום לרוץ מחדש. אבל כדאי להכיר את שני הכללים שקובעים מה שורד, כי הם מפתיעים:
סוכן שעדיין רץ ברגע העצירה לא נשמר, ולכן מתחיל מהתחלה. וההפעלה מחדש הולכת לפי סדר ההתחלה של הסוכנים: התוצאות השמורות נעצרות אצל הסוכן הראשון שלא הספיק לסיים, וכל מי שהתחיל אחריו רץ שוב — גם אם הוא כבר סיים.
הדוגמה מהתיעוד ממחישה את זה: סקריפט מתחיל ארבעה סוכנים לפי הסדר A, B, C ו-D, ואתם עוצרים בזמן ש-B עדיין עובד. בהמשכה, A חוזר מהזיכרון; B רץ שוב כי לא סיים; ו-C ו-D רצים שוב גם הם — רק מפני שהתחילו אחרי B, למרות ששניהם הספיקו לסיים.
מכאן נובעת מסקנה מעשית: ריצה שמפוזרת על הרבה סוכנים קטנים שומרת יותר התקדמות מריצה שנשענת על סוכן אחד ארוך. ושתי מגבלות שכדאי לזכור מראש — אין קלט משתמש באמצע ריצה (רק שאלות הרשאה יכולות לעצור אותה), וההמשכה עובדת רק בתוך אותה שיחה. יציאה מקלוד קוד באמצע ריצה מתחילה אותה מאפס בסשן הבא. מי שצריך אישור אנושי בין שלבים, התיעוד ממליץ להריץ כל שלב כ-workflow נפרד.
לשמור את התזמור ולהריץ אותו שוב
זה היתרון שקשה להעריך עד שמשתמשים בו. ריצה שעשתה בדיוק מה שרציתם היא נכס: פותחים /workflows, בוחרים אותה, ולוחצים s כדי לשמור את הסקריפט כפקודה. משם והלאה הוא רץ כ-/שם-הפקודה בכל שיחה, ומופיע בהשלמה האוטומטית לצד הפקודות המובנות.
שני מיקומי שמירה, וההבדל ביניהם מעשי: תיקיית .claude/workflows בפרויקט נכנסת ל-git ומשותפת לכל מי שמושכים את המאגר, ו-~/.claude/workflows בתיקיית הבית זמינה לכם בכל פרויקט ולא נראית לאף אחד אחר. אם שני קבצים חולקים שם, זה של הפרויקט מנצח.
workflow שמור יכול גם לקבל קלט: הסקריפט קורא אותו כמשתנה גלובלי בשם args, כך שאפשר להעביר שאלת מחקר, רשימת נתיבים או רשימת מספרי issues בזמן ההפעלה במקום לערוך את הקובץ בכל פעם. ולהפצה רחבה יותר — צוות שלם או כמה מאגרים — אפשר לארוז workflow בתוך תוסף, ואז הוא רץ עם שם התוסף כקידומת.
שורה תחתונה
workflows הם הפרימיטיב החמישי בארגז הכלים של האוטומציה, ולצידם סוכני משנה, hooks, MCP ולולאות. מה שמייחד אותם הוא לא מספר הסוכנים אלא מיקום התוכנית: ברגע שהתזמור הוא קוד ולא זיכרון של שיחה, הוא נעשה גדול יותר, ניתן לקריאה, וניתן להרצה חוזרת.
ההמלצה המעשית פשוטה: אל תתחילו מהמשימה הגדולה. הריצו /deep-research פעם אחת על שאלה אמיתית, פתחו את /workflows ותסתכלו איך השלבים מתקדמים — ורק כשהמנגנון מרגיש מוכר, בקשו workflow משלכם על תיקייה אחת. התמונה השלמה של כל אבני הבניין נמצאת במדריך המלא לאוטומציה עם AI, ואם עוד לא התקנתם, מדריך ההתקנה בעברית לוקח עשר דקות.
שאלות נפוצות
מה זה workflow בקלוד קוד?
סקריפט JavaScript שקלוד כותב עבורכם, ומנוע נפרד מריץ אותו ברקע ומשגר דרכו עשרות עד מאות סוכני משנה על משימה אחת. במקום שקלוד יחליט תור אחר תור את מי להפעיל, הסקריפט מחזיק את הלולאה ואת תוצאות הביניים, ולשיחה חוזרת רק התשובה הסופית. מתאים לסריקת קוד רוחבית, להגירה של מאות קבצים ולמחקר שדורש הצלבת מקורות.
מה ההבדל בין workflow לסוכני משנה?
מי מחזיק בתוכנית. סוכן משנה הוא עובד שקלוד משגר בתוך תור השיחה, וכל תוצאה חוזרת אל חלון ההקשר שלו — ולכן אפשר להחזיק ככה רק כמה משימות בכל תור. ב-workflow התזמור עצמו כתוב בקוד: הסקריפט מריץ, מסתעף וחוזר על שלבים לבד, שומר את תוצאות הביניים במשתנים, ומגיע לסדר גודל של עשרות עד מאות סוכנים בריצה.
מה זה ultracode בקלוד קוד?
שתי דרכים להפעיל את אותו מנגנון. מילת המפתח ultracode בתוך פרומפט מבקשת workflow למשימה הזאת בלבד. לעומת זאת /effort ultracode היא הגדרה לכל השיחה, שמשלבת רמת מאמץ xhigh עם תזמור אוטומטי — קלוד מתכנן workflow לכל משימה מהותית, בלי שתבקשו. ההגדרה תקפה לשיחה הנוכחית ומתאפסת בשיחה חדשה.
כמה סוכנים workflow יכול להריץ?
מנוע הריצה מגביל ל-16 סוכנים במקביל (פחות במכונות עם מעט ליבות מעבד) ול-1,000 סוכנים בסך הכול לריצה אחת. בנפרד מזה יש הנחיית גודל שאומרת לקלוד לכמה סוכנים לכוון כשהוא כותב את הסקריפט — וזו הנחיה בלבד, לא תקרה. התקרות של מנוע הריצה הן מה שחוסם בפועל.
workflows זמינים בכל המנויים?
הם דורשים את גרסה 2.1.154 ואילך וזמינים בכל המנויים בתשלום, וגם בגישת API ובפריסות על Amazon Bedrock, Google Cloud ו-Microsoft Foundry. במנוי Pro צריך להדליק אותם פעם אחת מתוך /config. אפשר גם לכבות אותם לגמרי — למשתמש בודד או לארגון שלם.
מדריכים קשורים
- אוטומציה עם AI: המדריך המלא בעבריתAI Automation בעברית: מהרצה אחת בלי מסך ועד משימה שרצה מעצמה כל בוקר — שלוש רמות של אוטומציה עם קלוד קוד, והדרך להרצה הראשונה שעובדת.
- סוכני משנה בקלוד קוד: מתי, ואיך מגדיריםמדריך בעברית לסוכני משנה (sub-agents) בקלוד קוד: מה הם, מתי לפצל אליהם עבודה, איך מגדירים אחד בקובץ, ואיך מריצים אותם על מודל זול יותר כדי לחסוך.
- לולאות בקלוד קוד: לתת לסוכן לרוץ עד שהעבודה נגמרתמדריך מעשי ללולאות (loops) בקלוד קוד (Claude Code): מתי כל סוג לולאה מתאים, ומעל הכול — איך מגדירים תנאי עצירה שלא מפוצץ את המכסה.
- מודל ורמת מאמץ בקלוד קוד: שני כפתורים, לא אחדבקלוד קוד יש שני כפתורי שליטה נפרדים: בחירת המודל ורמת המאמץ (effort level). מה כל אחד קובע, איך משלבים אותם, ומתי מעלים מאמץ במקום להחליף מודל.