12. בידוד Worktree ומשימות

"כל אחד עובד בתיקייה שלו, בלי הפרעות"

30 דקות קריאה
💡חדש בנושא?

מה זה git worktree?

worktree הוא תיקיית עבודה נפרדת המקושרת לאותו מאגר git. כל worktree יכול להיות על ענף שונה, מה שמאפשר למספר סוכנים לעבוד על משימות שונות ללא התנגשויות קבצים.

למה סוכנים צריכים בידוד?

כשמספר סוכנים עורכים את אותם קבצים בו-זמנית, הם יכולים לדרוס את עבודתם של אחד את השני. Worktrees נותנים לכל סוכן עותק משלו של ה-codebase לעבוד בו בבטחה.

איך משימות ו-worktrees מתחברים?

כל משימה מקבלת worktree לפי מזהה. המשימה עוקבת אחר מה שצריך לעשות, ה-worktree מספק היכן לעשות זאת. כשהמשימה מסתיימת, ניתן למזג את ה-worktree ולנקות אותו.

הבעיה

בסשנים צוותי הסוכנים עד סוכנים אוטונומיים, חברי הצוות מתאמים דרך משימות ותיבות דואר — אבל כולם חולקים את אותה תיקיית עבודה. אם שני סוכנים עורכים את אותו קובץ בו-זמנית, הם ישחיתו את עבודתם של אחד את השני. הצוות יכול לתכנן יחד, אבל הם לא יכולים לבצע יחד.

הפתרון

תנו לכל סוכן תיקייה משלו. Git worktrees מספקים בדיוק את זה: תיקיות עבודה נפרדות המקושרות לאותו מאגר, כל אחת על הענף שלה. משימה אחת = worktree אחד = נתיב ביצוע בודד ומבודד.

Task s12-feat-auth  ──→  .worktrees/s12-feat-auth/   (branch: task/s12-feat-auth)
Task s12-fix-typo   ──→  .worktrees/s12-fix-typo/    (branch: task/s12-fix-typo)
Task s12-add-tests  ──→  .worktrees/s12-add-tests/   (branch: task/s12-add-tests)

מחזור חיים של Worktree

def create_worktree(task_id: str) -> str:
    branch = f"task/{task_id}"
    path = f".worktrees/{task_id}"
    subprocess.run(["git", "worktree", "add", "-b", branch, path], check=True)
    return path

def cleanup_worktree(task_id: str):
    path = f".worktrees/{task_id}"
    subprocess.run(["git", "worktree", "remove", path], check=True)

שלוש פעולות:

  1. יצירהgit worktree add יוצר תיקייה חדשה עם הענף שלה
  2. עבודה — הסוכן פועל לגמרי בתוך התיקייה הזו
  3. ניקויgit worktree remove מוחק את התיקייה לאחר מיזוג

קישור משימות ל-Worktrees

def assign_worktree(task_id: str) -> dict:
    worktree_path = create_worktree(task_id)
    task = task_manager.get(task_id)
    task["worktree"] = worktree_path
    task["branch"] = f"task/{task_id}"
    task_manager.update(task)
    return task

רשומת המשימה נושאת כעת את הקשר הביצוע שלה. כל סוכן שתופס את המשימה הזו יודע בדיוק היכן לעבוד.

התבנית המלאה

Lead Agent:
  1. Create task in task system
  2. Create worktree for task
  3. Bind task to worktree
  4. Teammate claims task
  5. Teammate works in worktree
  6. Teammate completes task
  7. Lead merges branch
  8. Lead removes worktree

זהו השיא של הקורס כולו: סשן מערכת המשימות מנהל מטרות, סשן פרוטוקולי הצוות מנהל תקשורת, סשן הסוכנים האוטונומיים מנהל הקצאה, ו-worktrees מנהלים בידוד. כל מנגנון מטפל בדאגה אחת. יחד, הם מאפשרים ביצוע מקבילי אמיתי.

מה השתנה מ-סוכנים אוטונומיים

רכיבסוכנים אוטונומייםבידוד Worktree ומשימות
תפיסת משימותתפיסה אוטו’ מלוח משותףזהה
ביצועתיקייה משותפתworktree מבודד לכל משימה
ענפיםאיןענף אחד לכל משימה
ניקויידניהסרת worktree לאחר מיזוג

מסקנה מרכזית

בידוד הוא החלק האחרון. עם worktrees, סוכנים יכולים לעבוד במקביל אמיתי — כל אחד בתיקייה שלו, על הענף שלו, ללא הפרעות. ה-harness כעת שלם: לולאה, כלים, תכנון, ידע, ניהול context, עמידות, צוותים, פרוטוקולים, אוטונומיה, ובידוד. למדתם לבנות את העולם שהבינה שוכנת בו.

מדריך קוד אינטראקטיבי

מחזור חיי ה-Worktree: יצירה, הקצאה, ניקוי
1def create_worktree(task_id: str) -> str:
2 branch = f"task/{task_id}"
3 path = f".worktrees/{task_id}"
4 subprocess.run(
5 ["git", "worktree", "add", "-b", branch, path],
6 check=True
7 )
8 return path
9 
10def assign_worktree(task_id: str) -> dict:
11 worktree_path = create_worktree(task_id)
12 task = task_manager.get(task_id)
13 task["worktree"] = worktree_path
14 task["branch"] = f"task/{task_id}"
15 task_manager.update(task)
16 return task
17 
18def cleanup_worktree(task_id: str) -> None:
19 path = f".worktrees/{task_id}"
20 subprocess.run(
21 ["git", "worktree", "remove", path],
22 check=True
23 )
24 
create_worktree() מריצה git worktree add עם -b ליצירת ענף חדש בו-זמנית. ה-worktree נמצא ב-.worktrees/<task_id>/ — תיקיית עבודה git פונקציונלית מלאה על ענף משלה.
שלב 1 מתוך 3
🧪 נסו בעצמכם

צרו 3 משימות, הקצו לכל אחת worktree, וודאו שהן יכולות לערוך את אותו קובץ באופן עצמאי.

רמז

לאחר השלמת כל אחת, מזגו את הענפים ופתרו קונפליקטים

מצאתם טעות? דווחו ←