שנים עשר סוכני קידוד. codebase אחד. ארבעים ושבע שעות. 737 tickets נסגרו, 826 commits נחתו. כל מה שיכול היה להישבר, נשבר. האורקסטרטור שכתבתי כדי שאוכל ללכת לישון עכשיו בקוד פתוח.
דשבורד TUI
ניהול משימות בטרמינל: סטטוס, סוכנים, התקדמות, עלויות.
דשבורד אינטרנט
ניטור בזמן אמת בדפדפן: סוכנים, עלויות, תור מיזוגים, לוג פעילות.
התקרה של סוכן יחיד
ההבטחה של קידוד בעזרת AI נשמעת פשוט. prompt, קוד, review, סיום. בפועל התקרה נמוכה מהדמו.
מלווים סוכן אחד, חלון context אחד, משימה אחת. אחרי שעה המודל סוטה. ממציא חתימות פונקציות. שוכח אילוצים. מסבירים מחדש. הוא סוטה שוב. תשע משימות אחרות יושבות.
ואז יש את הנעילה. כל פריימוורק multi-agent שניסיתי (CrewAI, Microsoft Agent Framework, ex-AG2) קושר את ה-orchestration ל-API של ספק אחד. LangGraph דומה. לערבב מודל זול ל-boilerplate עם חזק לארכיטקטורה? אין מזל.
הפער בין "AI כותב קוד" לבין "AI שולח קוד מטוסט עם git history נקי" הוא החלק שאף אחד לא מדגים.
מה באמת נשבר
הפניתי 12 סוכנים ל-backlog אמיתי כדי לראות מה יקרה.
מה נשבר. merge conflicts כששני סוכנים ערכו אותו קובץ. התנגשויות פורטים מ-dev servers במקביל. סוכן אחד שרף 40$ בלולאת retry. סוכנים דרסו אחד את העבודה של השני כי לא היה file locking. סוכנים ארוכי חיים סטו עד שהפלט שלהם סתר את הקוד שהם עצמם כתבו קודם. בערך בשעה ה-30 ספרתי 30 תהליכי claude יתומים בשעה אחת. בלגן אמיתי.
כל החלטת תכנון ב-Bernstein היא תיקון ישיר של משהו שנכשל בהרצה הזו. הרשימה למעלה היא הגרסה של ה-README שנשארה כצלקות.
הכלי
פקודה אחת
pipx install bernsteinbernstein -g "Add JWT auth with refresh tokens, tests, and API docs"
Bernstein מפרק את המטרה למשימות, מקצה כל אחת לסוכן עם המודל והתפקיד הנכונים, מריץ אותן ב-git worktrees מבודדים, מוודא שטסטים עוברים, ועושה commit למה ששורד. חוזרים לקוד עובד או לדוח של מה שנכשל.
ארכיטקטורה
האנלוגיה הקרובה היא מה ש-Kubernetes עשה לקונטיינרים, אבל ל-CLI coding agents. מצהירים על מטרה. ה-control plane מפרק אותה למשימות. סוכנים קצרי חיים מבצעים אותן ב-worktrees מבודדים כמו pods. Janitor מאמת לפני שמשהו נוחת.
האורקסטרטור הוא Python דטרמיניסטי. אפס טוקנים על קואורדינציה. אין LLM שמחליט מה הלאה. אין אי-דטרמיניזם בתזמון. אין רקורסיה של agent-מנהל-agents. רק פירוק המטרה ההתחלתי נוגע ב-LLM. אחר כך זה קוד.
איך מטרה הופכת לקוד
רק הפירוק ועבודת הסוכנים מערבים קריאות LLM. השאר דטרמיניסטי.
סוכנים קצרי חיים. נולדים, עובדים דקות, יוצאים. בלי context drift. אם משימה נכשלת, retry עם סוכן טרי. הקודם כבר לא קיים.
State בקבצים. הכול חי ב-.sdd/, קבצים רגילים בריפו. אפשר לבדוק, לעשות diff, לגרס. שום דבר לא מסתתר בזיכרון.
Janitor. כל תוצאה עוברת אימות. טסטים עוברים, קבצים קיימים, אין רגרסיות. סוכנים לא מאשרים את עצמם.
API פתוח. שרת HTTP מקומי על פורט 8052. כל CI pipeline, Slack bot או cron job יכול ליצור משימות. Bernstein מתאים ל-workflow שלך. לא בונים מחדש סביבו.
בלי נעילה
לערבב כל סוכן, כל מודל
Bernstein מריץ כל CLI agent שמותקן אצלך. Claude Code על ארכיטקטורה, Codex על טסטים, Gemini על docs, באותה הרצה. הוספת סוכן חדש היא adapter של 50 שורות Python.
- uses: chernistry/bernstein-action@v1 with: goal: "Fix all failing tests and update snapshots" budget: "5.00"
הכלי בשלבים מוקדמים, יש קצוות חדים. אם נתקלתם במשהו, פתחו issue. הבעיה המעניינת היא לגרום להרבה סוכנים לא לדרוך אחד על השני, לא להפוך סוכן אחד לחכם יותר.