דלגו לתוכן

הגדרת מדיניות ארגז חול

האם הרצת סוכן פועלת בארגז חול נקבע בשרת, באתחול (--sandbox). המתג הפעלת ארגז חול ובורר בקאנד תחת הגדרות → שרת → אבחון ופרטיות הם העדפות הנשמרות במכשיר שלכם. זיהוי המארח בכרטיס ארגז חול מדווח מה מארח השרת יכול לעטוף.

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

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

גבול מה הוא עושה
ארגז החול של מערכת ההפעלה Seatbelt ב-macOS, bubblewrap ב-Linux וב-WSL2. עוטף את ה-CLI של Claude Code, את מתאמי ACP ואת כלי ה-bash של מנגנון ההרצה. נעדר ב-Windows וב-Linux ללא bwrap ו-socat
עץ העבודה הפרטי שלו כל שיחה מקבלת צ׳קאאוט בהעתקה בעת כתיבה. הצ׳קאאוט המקורי מקופל לתוך ההרצה כנתיב דחיית כתיבה, וארגז החול הוא מה שאוכף זאת
פרטי גישה דרך ה-broker broker פרטי הגישה מנפיק סביבה לכל הרצה ומבטל אותה כשההרצה מתפרקת. אסימון ה-GitHub שבה יכול לקרוא אבל לא לדחוף: דחיפות עוברות דרך Control Center, ששואל קודם את כלל הדחיפה
מעקות הבטיחות של הפעולות כל כלי משנה־מצב מצהיר על מחלקות ההשפעה שלו, ומנוע ההכרעה מכריע בהן לפני שהקריאה רצה. prompt בלי מאשר מחובר נדחה
חיטוי הסביבה ACP וכלי ה-bash של מנגנון ההרצה מקבלים סביבה מסוננת. Claude Code דרך NoSandboxAdapter יורש את סביבת המארח
משטח הכלים של המצב מצב לקריאה בלבד מסיר את כלי שינוי עץ העבודה כליל ומצמיד את פועל הפלט של המצב עצמו כדי שיוכל עדיין לספק תוצר

שלושה דברים נשארים חלשים מכפי שהם נראים:

  • רק מנגנון ההרצה המובנה אוכף את שער הכלים, חוזי ההשלמה וכללי המצב המבניים. מתאם Claude Code אינו עושה זאת. Claude Code בפרט מופעל עם --dangerously-skip-permissions, משום ש-claude -p לא אינטראקטיבי היה אחרת נתקע לנצח בבקשת ההרשאה של עצמו — כך שקריאות הקריאה, הכתיבה והעריכה של Claude עצמו אינן נראות ואינן מגודרות בידי Control Center, ופקודות bash נבדקות רק בידי hook שקורא את שורת הפקודה. במקום שארגז החול פועל, הוא הגבול סביבן.
  • כלי הקבצים בתהליך של מנגנון ההרצה (read, write, edit, apply patch, search, find, search_files) רצים בתוך תהליך השרת, ולכן אף פרופיל של ארגז חול אינו מגביל אותם. רק כלי ה-bash עובר דרך מריץ הפקודות העטוף בארגז חול. הכלים האלה מתוחמים בידי ריתוק הנתיבים שלהם בתוספת מעקות הבטיחות של הפעולות.
  • במארח בלי בקאנד השורה הראשונה אינה חלה כלל. ACP וכלי ה-bash של מנגנון ההרצה נופלים חזרה לחיטוי הסביבה בתוספת מדיניות הפקודות; Claude Code יורש את סביבת המארח דרך NoSandboxAdapter. השרת אומר זאת ביומן האתחול שלו. בדקו את שלכם להלן.

להחליט מה סוכן רשאי לדחוף

קטע בשם “להחליט מה סוכן רשאי לדחוף”

אין מתגים לכל סוכן עבור git push,‏ GitHub, כרטוס או רשת. כל אחד מהם הוא כלל פעולה:

כלל ברירת מחדל מובנית מה הוא מכסה
דחיפה למאגר מרוחק שאל קודם כל git push ל-GitHub, מכל מתאם
פתיחת בקשת משיכה שאל קודם gh pr create וכלי בקשות המשיכה
פרסום סקירה או מיזוג שאל קודם gh pr merge,‏ gh pr review,‏ gh pr comment,‏ gh pr close
כתיבה למערכת מעקב חיצונית שאל קודם כתיבת כרטיסים דרך כלי Control Center ו-gh issue
גישה לרשת אפשר האם לארגז החול יש רשת, וכלי הרשת של מנגנון ההרצה
  1. עברו אל הגדרות → סביבת עבודה → הרשאות סוכנים
  2. בחרו טווח — סביבת עבודה, סוכן או מרחב — ואז בחרו אפשר, שאל קודם או חסום בשורה של הכלל

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

נקודת ביקורת: בקשו מסוכן לדחוף ענף. עם שאל קודם תקבלו בקשת אישור שמציינת את המאגר ואת ה-ref; עם חסום, git מדפיס ! [remote rejected] <ref> (Control Center policy: …).

איך כל כלל מגיע להרצה:

  • דחיפות נאכפות לפי מה שההרצה מחזיקה. אסימון ה-GitHub שלה הוא אסימון התקנה של GitHub App לקריאה בלבד, שקורא תוכן ועובד עם בקשות משיכה. תצורת ה-git שלה שולחת כל דחיפה ל-GitHub לשער loopback ב-cc_server, ששואל את הכלל ורק אז מעביר את הדחיפה עם אסימון כתיבה שהסוכן לעולם אינו רואה. השער מעביר רק למאגר של עץ העבודה עצמו או למאגר GitHub שמקושר לסביבת העבודה. זה נכון לכל מתאם.
  • בקשות משיכה ונושאים מהמעטפת מזוהים לפי שורת הפקודה: בכלי ה-bash של מנגנון ההרצה, ודרך hook בכלי ה-Bash של Claude Code. סוכן שמסתיר את הפקודה (סקריפט, eval, קריאת API ישירה) עוקף את הבדיקה הזו, אבל לא את שער הדחיפה.
  • מפתחות כרטוס לעולם אינם מוכנסים לארגז החול. סוכנים כותבים כרטיסים דרך כלי ה-MCP של Control Center, ששואלים את הכלל.
  • הרשת נקבעת פעם אחת, בתחילת ההרצה. חסום מכבה את הרשת של ארגז החול; אפשר ושאל קודם משאירים אותה דלוקה, ותחת שאל קודם הכלים web_fetch ו-web_search של מנגנון ההרצה עדיין שואלים בכל קריאה. GitHub תמיד נמצא ברשימת ההיתר לתעבורה יוצאת כל עוד הרשת דלוקה.

בדיקה אם הרצות הסוכן שלכם עטופות בארגז חול

קטע בשם “בדיקה אם הרצות הסוכן שלכם עטופות בארגז חול”

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

  1. עברו אל הגדרות → שרת → אבחון ופרטיות
  2. קראו את כרטיס ארגז חול. העובדה מארח היא המכונה ש-cc_server רץ עליה, לא המכונה שאתם מסתכלים עליה. השדה בקאנד מפרט ארגז חול מקורי (Seatbelt ב-macOS, bubblewrap ב-Linux וב-WSL2) או ללא בידוד. העובדה בתוקף היא ההעדפה של המכשיר הזה, לא העטיפה שהשרת באמת משתמש בה.
  3. קראו את יומן האתחול של השרת. הוא מדפיס בדיוק אחת משלוש שורות:
    • agent sandbox ON בתוספת הערת הבקאנד — ההרצות עטופות
    • no OS-native agent sandbox on this host בתוספת רמז התקנה במקום שיש כזה — ההרצות אינן עטופות
    • agent sandbox DISABLED by --sandbox off — ביטול מכוון

GET /healthz אינו מדווח על מצב ארגז החול, ולכן יומן האתחול הוא הבדיקה.

כדי לכבות את ארגז החול במכוון — מארח שבו הפרופיל מתנהג שלא כשורה הוא הסיבה שהוא קיים — הפעילו את השרת עם --sandbox off, או הגדירו CC_SERVER_SANDBOX=off. ברירת המחדל היא on, ו-on משמעו “השתמשו בבקאנד אם למארח יש כזה”, ולעולם לא “דרוש אחד”.

שני מצבים לעולם אינם מקבלים עטיפת ארגז חול מקורי. ב-Windows בדיקת ארגז החול המקורי מדווחת תמיד כלא זמינה ואין מה להתקין — שיגור הסוכן משתמש ב-none. הבקאנד microvm נפרד (מסופים אינטראקטיביים ותחנות) והוא תלוי בבדיקה של סביבת הריצה שלו בלבד. ב-Linux וב-WSL2 גם bwrap וגם socat חייבים להיות ב-PATH; בלעדיהם הבדיקה מדווחת כלא זמינה ומציינת את החבילות החסרות.

ב-Linux/WSL2 עם bubblewrap מותקן, אי אפשר לאכוף את תבניות הגלוב של קובצי הסוד במדיניות התקנית על קבצים שסוכן יוצר אחר כך. הרצה מקורית כזו נכשלת כעת במקום להתעלם מהכללים בשקט. בדיקת אתחול מוצלחת אינה מבטיחה אפוא ששיגור ב-Linux יצליח להתחיל. --sandbox off הוא ביטול מכוון בלי הגבלה, לא גבול אבטחה חלופי.

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

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

גישה לרשת וגישה לסודות אינן נמסרות במכוון בסירוב של מצב לקריאה בלבד: מחקר הוא כל תכליתו של מצב כזה.

דרישת אישור לפני שפעולה רצה

קטע בשם “דרישת אישור לפני שפעולה רצה”

אישור הוא החלטה של מעקות בטיחות, לא הגדרה של ארגז חול.

  1. עברו אל הגדרות → סביבת עבודה → הרשאות סוכנים
  2. הגדירו את מחלקת הפעולה לשאל קודם בטווח סביבת העבודה, הסוכן או המרחב

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

סוכן לא מצליח לדחוף ומעולם לא סירבתי לו

קטע בשם “סוכן לא מצליח לדחוף ומעולם לא סירבתי לו”

בדקו מה git הדפיס. Control Center policy: … פירושו שכלל חסם את הדחיפה, או ששאל קודם לא נענה. … is not linked to this workspace פירושו שהיעד אינו המאגר של עץ העבודה עצמו ואינו מקושר לסביבת העבודה. Control Center has no GitHub credential that can push … פירושו שבמאגר אין התקנה של GitHub App ואין פרטי גישה חלופיים שיכולים לדחוף: התקינו את האפליקציה במאגר הזה, או חברו את GitHub.

כרטיס ארגז החול מדווח שאין ארגז חול מקורי

קטע בשם “כרטיס ארגז החול מדווח שאין ארגז חול מקורי”

אז הרצות סוכן במארח הזה אינן עטופות ב-Seatbelt או ב-bubblewrap, והגבולות שנותרו הם מה שיש לכם. ב-Linux וב-WSL2 התקינו את שני הכלים החסרים — sudo apt-get install bubblewrap socat — והפעילו מחדש את השרת; יומן האתחול אמור אז לומר שארגז החול פועל. ב-Windows אין בקאנד מקורי להתקין, ולכן הדקו במקום זאת את מעקות הבטיחות: ראו הגדרת מעקות בטיחות.

סוכן הגיע לקובץ מחוץ לעץ העבודה שלו

קטע בשם “סוכן הגיע לקובץ מחוץ לעץ העבודה שלו”

הכלי שאיתו הוא הגיע מכריע אם זה צפוי.

כלי הקבצים בתהליך של מנגנון ההרצה (read, write, edit, apply patch, search, find, search_files) רצים בתהליך השרת, ולכן שום פרופיל של ארגז חול אינו חל עליהם — הגבול שלהם הוא ריתוק הנתיבים שלהם בתוספת מעקות הבטיחות. פקודת bash או ה-CLI של Claude Code כן עטופים במקום שקיים בקאנד, והצ׳קאאוטים הרשומים שלכם הם דחיית כתיבה בתוך העטיפה הזו בכל מצב, כולל בצורותיהם המפוענחות-סימבולית (ב-macOS נתיב שמגיעים אליו דרך /tmp או /var/folders נפתר תחת /private, ושתי הצורות נדחות כעת). במארח בלי בקאנד שום דבר מזה אינו חל. כך או כך, מעקות הבטיחות יכולים לסרב לכתיבה מחוץ לעץ העבודה על הסף.