התקנות
ב-Linux עובדות כמו שהן: ה-registries ו-github.com ברשימת ברירת המחדל. ב-macOS הוסיפו אחד, --allow-host registry.npmjs.org, או פתחו הכול עם --network.
כל 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.
התקינו את bubblewrap, התוכנה הקטנה שבעזרתה ai-jail בונה את ה-sandbox. ברוב ההפצות שם החבילה הוא bubblewrap.
pacman -S bubblewrapapt install bubblewrapdnf install bubblewrapאין מה להתקין. ai-jail משתמש ב-sandbox-exec, שמגיע עם macOS. Apple מסמנת את הממשק הזה כ-deprecated. ב-macOS ה-registries של החבילות לא נגישים כברירת מחדל: הוסיפו אחד עם --allow-host, או פתחו את הרשת עם --network.
לא נתמך. השתמשו ב-WSL2 ובצעו בתוכו את השלבים של Linux.
שלוש פקודות: תוכנית, הצצה פנימה וסוכן שעובד. ההתחברות של הסוכן כבר בפנים, ו-ai-jail פותח בשבילכם את הדרך אל ה-host של ה-API של הסוכן.
↔ החליקו לצדדים כדי לראות את התרשים המלא
עברו לתיקיית הפרויקט ובקשו dry run. הכלי מדפיס את פקודת ה-sandbox שהוא היה מריץ, ויוצא. הרצת dry run אף פעם לא כותבת קובץ.
cd ~/Projects/my-appai-jail --dry-run claudeפתחו shell רגיל בתוך הכלא. הפרויקט שלכם נמצא שם בנתיב האמיתי שלו ואפשר לערוך אותו. תיקיית הבית היא תיקייה חדשה, והטוקנים מה-shell שלכם נעלמו. כדי לצאת, הקלידו exit.
ai-jail bashהכלי ai-jail מעגן כברירת מחדל את תיקיית המצב של הסוכן עצמו, ולכן הוא כבר מחובר. כשהוא מכיר את הסוכן, הוא גם מעביר דרך הפרוקסי המסנן שלו את ה-host של ה-API של הסוכן: api.anthropic.com עבור Claude Code, api.openai.com ו-chatgpt.com עבור Codex, generativelanguage.googleapis.com עבור Gemini, api.x.ai עבור Grok, server.codeium.com עבור Devin, ב-Linux וב-macOS. hosts של טלמטריה נשארים סגורים. ב-Linux, ה-toolchains מגיעים כברירת מחדל אל registries של חבילות כמו crates.io, npm ו-PyPI, כדי ש-builds יעבדו. --network פותח במקום זה את כל הרשת.
ai-jail claude# או, כשכל הרשת פתוחה:ai-jail --network claudeכתבו רשימת hosts ב-~/.ai-jail, קובץ ההגדרות שלכם, תחת שם הסוכן. הרשימה מתווספת ל-host של ה-API של הסוכן, שנשאר מורשה, וב-Linux github.com וה-registries של החבילות כבר בפנים. או השתמשו ב---network לכל הרשת. להרצה ללא התחברות, העבירו --no-agent-state. קובץ .ai-jail בתוך הפרויקט יכול רק להדק את הכלא: הוא יכול לקצר את רשימת ה-hosts או את רשימת forward_ports ולכבות את ההתחברות, אף פעם לא להפך, ולכן ריפוזיטורי שעשיתם לו clone לא יכול לפתוח לעצמו את הכלא.
[commands.claude]allow_hosts = ["api.example.com"]# מתווסף ל-host של ה-API ול-registries ש-ai-jail כבר מתיר # או, להרצה אחת:# ai-jail --network claudeה-prompt משתנה ל-(jail), והפרויקט נמצא איפה שהיה תמיד. גם ה-toolchains שלכם שם, לקריאה בלבד. הדברים ששווה לגנוב חסרים, חוץ מההתחברות של הסוכן עצמו, שנמצאת שם בכוונה.
$ 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 אין דרך לבנות עץ קבצים נפרד, ולכן שם אותם נתיבים קיימים והקריאה מהם נדחית.
↔ החליקו לצדדים כדי לראות את התרשים המלא
מבפנים, הפרויקט הוא הדבר היחיד שלכם שאפשר לשנות. ה-toolchains שלכם (mise, cargo, npm ואחרים) נמצאים שם, לקריאה בלבד, עם cache של תלויות ששייך לכלא. הרשת נשארת בחוץ, חוץ מה-host של ה-API של סוכן מוכר וב-Linux גם registries של החבילות שה-toolchains האלה מושכים מהם, עד שתפתחו host עם --allow-host, פורט מקומי אחד עם --forward-port, או את כולה עם --network. איך ה-toolchains ממופים.
כל מה שהסוכן מפעיל רץ בפנים יחד איתו, ולכן דבר חסום פשוט נכשל, ואף אחד לא שואל אתכם. כך זה נראה, וכך רואים את זה.
--allow-host HOST מוסיף אותו להרצה הבאה.--env NAME או --env-from-file.--audit-log: הוא מתעד כל הפעלה וכל חיבור שהפרוקסי התיר או דחה. ai-jail --audit-show מדפיס אותו.ai-jail bash פותח shell בתוך אותו כלא.ב-Linux עובדות כמו שהן: ה-registries ו-github.com ברשימת ברירת המחדל. ב-macOS הוסיפו אחד, --allow-host registry.npmjs.org, או פתחו הכול עם --network.
מסד נתונים, שרת MCP מקומי או socket של עורך על ה-loopback של המחשב שלכם: --forward-port 5432 מעביר את הפורט האחד הזה ב-Linux. ב-macOS, --network.
clone ו-pull מ-GitHub עובדים ב-Linux. ל-push צריך פרטי גישה: --github ל-token של gh ב-HTTPS (ב-macOS הוסיפו --allow-host github.com), או --network --ssh למפתח ה-SSH שלכם.
הם עולים בתוך הכלא יחד עם הסוכן. שרת שקורא token מה-shell שלכם לא מקבל כלום עד שתעבירו אותו, --env GITHUB_TOKEN או --env-from-file. שרת מרוחק ב-HTTP צריך את ה-host שלו ב---allow-host.
אלה המקרים שמופיעים בפרק פתרון התקלות של ה-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 רב-משתמשים סטנדרטי. עותק שנמצא בתיקיית הבית שלכם נדחה, כי מי שיכול להחליף את הקובץ הזה שולט בכלא.
Starting background serveropencode 2.x מדבר עם שרת רקע משותף. הכלא הוא עטיפה חד-פעמית עם תיקיית בית חדשה, ולכן השרת הזה לא שורד בין הרצות. הפעילו את opencode עצמאי עם --standalone, וקבעו את זה בקובץ ההגדרות כדי לא להקליד אותו בכל פעם. ai-jail מזהיר בזמן ההפעלה כש-opencode עולה בלי זה:
[commands.opencode]command = ["opencode", "--standalone"]Failed to create stream fd בזמן העלייהההודעה מגיעה מסקריפט login של Ubuntu דסקטופ, בזמן ההכנה של mise. היא לא מזיקה, ו-mise ממשיך לעבוד. העבירו --no-mise כדי לדלג על ההכנה של mise, וההודעה תיעלם יחד איתה.
ai-jail --no-mise claudeהכלי ai-jail יודע איפה כל סוכן שומר את ההתחברות שלו ומעגן אותה כברירת מחדל: רק את התיקיות של הסוכן שאתם מעלים, ורק אם הן קיימות. --no-agent-state מכבה את זה. כשהוא מוגדר ב-shell שלכם, גם משתנה מפתח ה-API של אותו סוכן מגיע: ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY או GOOGLE_API_KEY, XAI_API_KEY, MOONSHOT_API_KEY.
| מה מריצים | מעוגן כברירת מחדל | כדאי לדעת |
|---|---|---|
ai-jail claude | ~/.claude~/.claude.json | לפרופיל שני של Claude, הפנו את --claude-dir לתיקייה שלו. |
ai-jail codex | ~/.codex | אחרי שינוי גודל החלון, ai-jail שולח אל Codex מקש redraw. ב-macOS, מחוץ ל-lockdown, Codex מקבל shim פרטי של ps; כשמצב הסוכן דלוק הוא מקבל גם את שירותי המערכת המוגבלים שה-app server צריך. --no-agent-state מסיר את השירותים האלה, לא את ה-shim. |
ai-jail gemini | ~/.gemini | |
ai-jail opencode | ~/.config/opencode~/.local/share/opencode | דורש --standalone. ראו את הסעיף בפתרון התקלות למעלה. |
ai-jail antigravity | ~/.gemini | חולק את ההתחברות ל-Google עם Gemini, ולכן התחברות אחת משרתת את שניהם. |
ai-jail kimi | ~/.kimi | גם ~/.kimi-code, המיקום הישן יותר, מעוגן כשהוא קיים. |
ai-jail kiro-cli | ~/.kiro~/.local/share/kiro-cli | ב-macOS התיקייה השנייה היא ~/Library/Application Support/kiro-cli. |
ai-jail prime-agent | ~/.prime/agent | רק התיקייה של הסוכן עצמו, אף פעם לא כל ~/.prime. |
ai-jail devin | ~/.local/share/devin~/.config/devin | ההתקנה של ה-CLI עצמו תחת devin/cli/_versions נשארת לקריאה בלבד. עדכנו את Devin במארח, ואז פתחו סשן חדש. |
ai-jail ai-memory run claude | התיקיות של הסוכן שהועלה | הסוכן ש-ai-memory מעלה מזוהה, ההגדרות שלו מוחלות, ושתי התוכנות רצות בכלא אחד. |
אותו דבר עובד עבור crush, grok, jcode, pi, aider, soulforge ו-omp. גם כל פקודה אחרת רצה, עם אותו כלא ובלי תיקיית התחברות. ai-jail פותח כברירת מחדל את ה-host של ה-API עבור חמשת הסוכנים שבשלב 03; סוכנים אחרים צריכים --allow-host או --network.
כל ai-jail הוא קובץ בינארי אחד, בלי daemon ובלי root. מוסיפים מילה אחת לפני הפקודה שאתם מריצים ממילא.
brew tap akitaonrails/tap && brew install ai-jailai-jail claude