דילוג לתוכן
תפריט
צריכים את זה?לאן סוכן יכול להגיע במחשב שלכםאיך זה עובדהשכבות שבין הסוכן למערכת שלכםהשוואהסביבות sandbox מובנות, Docker ומכונות וירטואליותהגדרהפותחים רק את מה שהמשימה צריכהאבטחהמודל האיומים והגבולות שלוהתקנה
התקנה

מתקינים, מציצים פנימה, מריצים סוכן

כל ai-jail הוא תוכנה אחת, בלי daemon ובלי root. מתקינים אותה, כותבים את השם שלה לפני הפקודה שאתם מקלידים ממילא, והסוכן עולה בתוך sandbox.

התקנה

בחרו בדרך שבה אתם כבר מתקינים כלי שורת פקודה. בכל שיטה מקבלים את אותה תוכנה יחידה, ai-jail.

terminal
brew tap akitaonrails/tap && brew install ai-jail

עובד ב-macOS וב-Linux.

מה המערכת שלכם צריכה

Linux

התקינו את bubblewrap, התוכנה הקטנה שבעזרתה ai-jail בונה את ה-sandbox. ברוב ההפצות שם החבילה הוא bubblewrap.

terminal
pacman -S bubblewrapapt install bubblewrapdnf install bubblewrap

macOS

אין מה להתקין. הכלי משתמש ב-sandbox-exec, שמגיע עם macOS. Apple מסמנת את הממשק הזה כ-deprecated.

Windows

לא נתמך. השתמשו ב-WSL2 ובצעו בתוכו את השלבים של Linux.

ההרצה הראשונה

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

שלושה חלקים משמאל לימין. Dry run: התא הוא רק קו מתאר מקווקו, והסוכן מחכה בחוץ. מבט מבפנים: התא מלא, ויש בו טרמינל ותיקיית הפרויקט. הרצת הסוכן: הסוכן והפרויקט בפנים, ובחומה שני פתחים, אחד לרשת ואחד להתחברות של הסוכן. תיקיית הבית שלכם נשארת חסומה בחוץ בשלושתם.
תיקיית הבית שלכם נשארת בחוץ בכל שלב. רק השלב האחרון פותח משהו, ורק את שני הדברים שסוכן שרץ מול הענן צריך.
  1. רואים את התוכנית בלי להריץ כלום

    עברו לתיקיית הפרויקט ובקשו dry run. הכלי מדפיס את פקודת ה-sandbox שהוא היה מריץ, ויוצא. הרצת dry run אף פעם לא כותבת קובץ.

    dry run
    cd ~/Projects/my-appai-jail --dry-run claude
  2. מסתכלים מסביב מבפנים

    פתחו shell רגיל בתוך הכלא. הפרויקט שלכם נמצא שם בנתיב האמיתי שלו ואפשר לערוך אותו. תיקיית הבית חדשה וריקה, והטוקנים מה-shell שלכם נעלמו. כדי לצאת, הקלידו exit.

    מעטפת shell בכלא
    ai-jail bash
  3. מריצים את הסוכן עם שני הדברים שהוא צריך

    סוכן שמדבר עם מודל בענן צריך רשת כדי להגיע אליו, ואת ההתחברות השמורה שלו כדי להוכיח מי אתם. שניהם כבויים כברירת מחדל, אז מדליקים אותם עם --network ועם --agent-state. החל מגרסה 1.22, אם תעלו סוכן מוכר בלי אחד מהם, תודפס אזהרה עם שם הדגל החסר.

    ההרצה האמיתית
    ai-jail --network --agent-state claude
  4. הופכים את זה לברירת המחדל של הסוכן

    כתבו את שתי ההגדרות בקובץ ההגדרות שלכם, ~/.ai-jail, תחת שם הסוכן. מכאן והלאה מספיקה הפקודה הקצרה. קובץ .ai-jail שעשוי להופיע בפרויקט יכול רק להדק את הכלא. הוא לא יכול להדליק רשת או התחברות, ולכן ריפוזיטורי שעשיתם לו clone לא יכול לפתוח לעצמו את הכלא.

    ~/.ai-jail
    [commands.claude]network = trueagent_state = true # from now on, in any project:# ai-jail claude

מה תראו בפנים

ה-prompt משתנה ל-(jail), והפרויקט נמצא איפה שהיה תמיד. הדברים ששווה לגנוב חסרים.

הפקודה ai-jail bash, ב-Linux
$ ai-jail bash# הפרויקט נמצא בנתיב האמיתי שלו(jail) ~/Projects/my-app $ pwd/home/you/Projects/my-app# טוקן שיוצא ב-shell שלכם לא הגיע לכאן(jail) ~/Projects/my-app $ echo $GITHUB_TOKEN # המפתחות שלכם לא נמצאים בתיקיית הבית הזאת(jail) ~/Projects/my-app $ cat ~/.ssh/id_ed25519cat: /home/you/.ssh/id_ed25519: No such file or directory# לכלא יש שם מארח משלו(jail) ~/Projects/my-app $ hostnameai-sandbox

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

המבט מתוך התא. הסוכן יושב ליד תיקיית פרויקט גדולה ומוארת, ומאחוריו תיקיית בית ריקה וכלי המערכת. מחוץ לסורגים, מעומעמים וחסומים: מפתחות SSH, התחברויות לענן, פרויקטים אחרים והרשת.

מבפנים, הפרויקט הוא הדבר היחיד שלכם שקיים. גם הרשת נשארת בחוץ עד שתעבירו --network.

אם זה לא עולה

אלה המקרים שמופיעים בפרק פתרון התקלות של ה-README, ועוד שני כללי התקנה שאנשים נתקעים עליהם.

bwrap: setting up uid map: Permission denied

בגרסאות Ubuntu 24.04 ומעלה ו-Debian 13 ומעלה יש מדיניות AppArmor שמונעת מתוכנות ליצור user namespaces בלי root, וזו בדיוק הדרך שבה bubblewrap מבודד את הכלא. זה משפיע על כל כלי rootless מהסוג הזה. אפשר לרכך את המדיניות לכל המערכת:

terminal
echo 'kernel.apparmor_restrict_unprivileged_userns=0' \  | sudo tee /etc/sysctl.d/60-userns.confsudo sysctl --system

אפשר גם להשאיר את המדיניות ולהחריג רק את bwrap. שמרו את זה בתור /etc/apparmor.d/bwrap, ואז הריצו sudo apparmor_parser -r /etc/apparmor.d/bwrap.

/etc/apparmor.d/bwrap
abi <abi/4.0>,include <tunables/global>profile bwrap /usr/bin/bwrap flags=(unconfined) {  userns,}

הערך של BWRAP_BIN נדחה

בעזרת BWRAP_BIN אפשר להפנות את ai-jail אל bubblewrap מסוים. הערך מתקבל רק אם הוא מוביל לתוכנה בבעלות root שמשתמשים אחרים לא יכולים לכתוב אליה, או לתוכנה שנמצאת ב-/nix/store רב-משתמשים סטנדרטי. עותק שנמצא בתיקיית הבית שלכם נדחה, כי מי שיכול להחליף את הקובץ הזה שולט בכלא.

הכלים של mise חסרים בפנים

כש-ai-jail מוצא את mise הוא מפעיל אותו. אבל בתיקיית הבית החדשה אין את ההגדרות של mise ואין את הכלים שהוא התקין, ולכן ההפעלה מדולגת. מפו את שניהם פנימה, לקריאה בלבד, מקובץ ההגדרות שלכם:

~/.ai-jail
[commands.claude]ro_maps = ["~/.config/mise", "~/.local/share/mise"]

Failed to create stream fd בזמן העלייה

ההודעה מגיעה מסקריפט login של Ubuntu דסקטופ, בזמן ההכנה של mise. היא לא מזיקה, ו-mise ממשיך לעבוד. העבירו --no-mise כדי לדלג על ההכנה של mise, וההודעה תיעלם יחד איתה.

terminal
ai-jail --no-mise claude

לפי סוכן

הכלי יודע איפה כל סוכן שומר את ההתחברות שלו. הדגל --agent-state מעגן רק את התיקיות של הסוכן שאתם מעלים, ורק אם הן קיימות.

מה מריציםמה --agent-state מעגןכדאי לדעת
ai-jail claude~/.claude
~/.claude.json
לפרופיל שני של Claude, הפנו את --claude-dir לתיקייה שלו.
ai-jail codex~/.codexאחרי שינוי גודל של החלון, ai-jail שולח אל Codex מקש redraw כדי שהמסך יצויר מחדש.
ai-jail opencode~/.config/opencode
~/.local/share/opencode
ai-jail gemini~/.gemini
ai-jail ai-memory run claudeהתיקיות של הסוכן שהועלההסוכן ש-ai-memory מעלה מזוהה, ההגדרות שלו מוחלות, ושתי התוכנות רצות בכלא אחד.

אותו דבר עובד עבור crush, grok, jcode, pi, aider, soulforge, omp ופקודות kimi. גם כל פקודה אחרת רצה. היא מקבלת את אותו כלא, בלי תיקיית התחברות.

שימו את הסוכן מאחורי סורגים

כל ai-jail הוא קובץ בינארי אחד, בלי daemon ובלי root. מוסיפים מילה אחת לפני הפקודה שאתם מריצים ממילא.

terminal
brew tap akitaonrails/tap && brew install ai-jailai-jail claude