מתקינים, מציצים פנימה, מריצים סוכן
כל ai-jail הוא תוכנה אחת, בלי daemon ובלי root. מתקינים אותה, כותבים את השם שלה לפני הפקודה שאתם מקלידים ממילא, והסוכן עולה בתוך sandbox.
התקנה
בחרו בדרך שבה אתם כבר מתקינים כלי שורת פקודה. בכל שיטה מקבלים את אותה תוכנה יחידה, ai-jail.
brew tap akitaonrails/tap && brew install ai-jailעובד ב-macOS וב-Linux.
yay -S ai-jail-binyay -S ai-jailהחבילה הראשונה היא קובץ בינארי מוכן עבור Linux x86_64. השנייה נבנית מקוד המקור.
cargo install --locked ai-jailדורש toolchain של Rust. הדגל --locked בונה עם גרסאות התלויות שאיתן הגרסה נבדקה.
nix run github:akitaonrails/ai-jail -- claudenix profile install github:akitaonrails/ai-jailהשורה הראשונה מריצה סוכן בלי להתקין שום דבר. השנייה מתקינה למשתמש שלכם. ה-flake מפנה את ai-jail לעותק של bubblewrap שמגיע איתו.
ai-jail-linux-x86_64.tar.gzai-jail-macos-aarch64.tar.gzהארכיונים חתומים, ולצידם קובצי checksum. חלצו אחד מהם ושימו את ai-jail במקום כלשהו שנמצא ב-PATH שלכם. ההסבר על בדיקת החתימה נמצא בעמוד האבטחה.
cargo build --release --lockedinstall -Dm755 target/release/ai-jail ~/.local/bin/ai-jailדורש Rust 1.97.1.
מה המערכת שלכם צריכה
Linux
התקינו את bubblewrap, התוכנה הקטנה שבעזרתה ai-jail בונה את ה-sandbox. ברוב ההפצות שם החבילה הוא bubblewrap.
pacman -S bubblewrapapt install bubblewrapdnf install bubblewrapmacOS
אין מה להתקין. הכלי משתמש ב-sandbox-exec, שמגיע עם macOS. Apple מסמנת את הממשק הזה כ-deprecated.
Windows
לא נתמך. השתמשו ב-WSL2 ובצעו בתוכו את השלבים של Linux.
ההרצה הראשונה
שלוש פקודות לוקחות אתכם מתוכנית, דרך הצצה פנימה, עד לסוכן שעובד. שום דבר לא נפתח עד שתבקשו.

רואים את התוכנית בלי להריץ כלום
עברו לתיקיית הפרויקט ובקשו dry run. הכלי מדפיס את פקודת ה-sandbox שהוא היה מריץ, ויוצא. הרצת dry run אף פעם לא כותבת קובץ.
cd ~/Projects/my-appai-jail --dry-run claudeמסתכלים מסביב מבפנים
פתחו shell רגיל בתוך הכלא. הפרויקט שלכם נמצא שם בנתיב האמיתי שלו ואפשר לערוך אותו. תיקיית הבית חדשה וריקה, והטוקנים מה-shell שלכם נעלמו. כדי לצאת, הקלידו
exit.ai-jail bashמריצים את הסוכן עם שני הדברים שהוא צריך
סוכן שמדבר עם מודל בענן צריך רשת כדי להגיע אליו, ואת ההתחברות השמורה שלו כדי להוכיח מי אתם. שניהם כבויים כברירת מחדל, אז מדליקים אותם עם
--networkועם--agent-state. החל מגרסה 1.22, אם תעלו סוכן מוכר בלי אחד מהם, תודפס אזהרה עם שם הדגל החסר.ai-jail --network --agent-state claudeהופכים את זה לברירת המחדל של הסוכן
כתבו את שתי ההגדרות בקובץ ההגדרות שלכם,
~/.ai-jail, תחת שם הסוכן. מכאן והלאה מספיקה הפקודה הקצרה. קובץ.ai-jailשעשוי להופיע בפרויקט יכול רק להדק את הכלא. הוא לא יכול להדליק רשת או התחברות, ולכן ריפוזיטורי שעשיתם לו clone לא יכול לפתוח לעצמו את הכלא.[commands.claude]network = trueagent_state = true # from now on, in any project:# ai-jail claude
מה תראו בפנים
ה-prompt משתנה ל-(jail), והפרויקט נמצא איפה שהיה תמיד. הדברים ששווה לגנוב חסרים.
$ 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 אין דרך לבנות עץ קבצים נפרד, ולכן שם אותם נתיבים קיימים והקריאה מהם נדחית.

מבפנים, הפרויקט הוא הדבר היחיד שלכם שקיים. גם הרשת נשארת בחוץ עד שתעבירו --network.
אם זה לא עולה
אלה המקרים שמופיעים בפרק פתרון התקלות של ה-README, ועוד שני כללי התקנה שאנשים נתקעים עליהם.
bwrap: setting up uid map: Permission denied
בגרסאות Ubuntu 24.04 ומעלה ו-Debian 13 ומעלה יש מדיניות AppArmor שמונעת מתוכנות ליצור user namespaces בלי root, וזו בדיוק הדרך שבה bubblewrap מבודד את הכלא. זה משפיע על כל כלי rootless מהסוג הזה. אפשר לרכך את המדיניות לכל המערכת:
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.
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 ואין את הכלים שהוא התקין, ולכן ההפעלה מדולגת. מפו את שניהם פנימה, לקריאה בלבד, מקובץ ההגדרות שלכם:
[commands.claude]ro_maps = ["~/.config/mise", "~/.local/share/mise"]Failed to create stream fd בזמן העלייה
ההודעה מגיעה מסקריפט login של Ubuntu דסקטופ, בזמן ההכנה של mise. היא לא מזיקה, ו-mise ממשיך לעבוד. העבירו --no-mise כדי לדלג על ההכנה של mise, וההודעה תיעלם יחד איתה.
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. מוסיפים מילה אחת לפני הפקודה שאתם מריצים ממילא.
brew tap akitaonrails/tap && brew install ai-jailai-jail claude