בלי שום אפשרות, הסוכן מקבל את הפרויקט, את כלי ה-build שלכם ב-Linux, את ההתחברות שלו ואת ה-host של ה-API שלו, ובלי רשת מעבר לכך ולרשימה קצרה של registries של חבילות. מכבים דברים מתג אחרי מתג, ומצב lockdown סוגר את רובם בבת אחת.
הגדרות מגיעות מקובץ בתוך הפרויקט, מקובץ בתיקיית הבית שלכם ומהדגלים שאתם מקלידים. הן מסודרות כאן מהסמכות הנמוכה לגבוהה.
↔ החליקו לצדדים כדי לראות את התרשים המלא
ריפוזיטורי שעשיתם לו clone לא יכול לפתוח את הכלא של עצמו.
הקובץ .ai-jail של הפרויקט
הקובץ הזה נחשב לא אמין: הוא יכול להדק את הכלא, ולעולם לא לפתוח אותו. הוא יכול לקצר רשימת allow_hosts או forward_ports, ולעולם לא להוסיף אליה. אם הוא symlink, הכלי ai-jail לא הולך אחריו, והסוכן רואה במקומו קובץ ריק.
הקובץ הגלובלי ~/.ai-jail
הוא שלכם, ולכן הוא נחשב אמין. יש בו טבלת בסיס שחלה על כל הרצה, וגם טבלאות [commands.<name>] שנבחרות לפי המילה הראשונה של הפקודה.
דגלי שורת הפקודה
לדגלים יש את הסמכות הגבוהה ביותר. רוב המתגים מגיעים בזוגות, כמו --network ו---no-network, כך שדגל יכול גם לסגור את מה שקובץ פתח.
בטבלת פקודה, ערכים בודדים מחליפים את ערכי הבסיס, ורשימות כמו מיפויים ומיסוכים מתווספות אליו.
~/.ai-jail
# בסיס: חל על כל פקודהhide_dotdirs = [".my_secrets"]mask = [".env", ".env.*"]# רק כשהפקודה מתחילה במילה "claude"[commands.claude]network = trueenv_pass = ["ANTHROPIC_BASE_URL"]mask = ["*.pem"]
המתגים
כל שורה כבויה עד שתבקשו, חוץ משתי השורות בצבע ציאן, שדלוקות כברירת מחדל. לכל דגל של יכולת יש תאום --no- שסוגר אותה בחזרה. תג אדום מסמן מתג שמחליש את הכלא. הרשימה המלאה והסיבות נמצאות בעמוד האבטחה.
רשת ושירותים
דגל
מפתח הגדרה
מה הוא עושה
סיכון
--network
network = true
כל הרשת. כל מה שהסוכן יכול לקרוא, הוא יכול לשלוח החוצה. אם הסוכן צריך רק כמה hosts, --allow-host הדוק יותר. בלי אף אחד משני הדגלים, ה-sandbox מגיע רק אל ה-host של ה-API של סוכן מוכר, וב-Linux גם אל ה-registries של החבילות שה-toolchains פותחים דרך הפרוקסי; --no-network סוגר את שניהם.
מחליש את הכלא
--allow-host <HOST>
allow_hosts = [...]
ה-sandbox מגיע רק ל-host שצוין ולתת-הדומיינים שלו, ב-TCP דרך הפרוקסי המובנה של ai-jail. אפשר לחזור על הדגל. מאז 2.8.1 הרשימה מתווספת לברירת המחדל, ולכן סוכן מוכר שומר על ה-host של ה-API שלו. אי אפשר לשלב אותו עם --network או עם --browser, וקובץ פרויקט יכול רק לקצר את הרשימה.
פותח דבר אחד
--forward-port <PORT>
forward_ports = [...]
פורט אחד מה-loopback של המארח, מועבר אל ה-loopback של ה-sandbox עצמו. שרת MCP מקומי, socket של עורך או מסד נתונים לפיתוח שיושבים על 127.0.0.1 של המארח עונים בפנים באותו פורט, וכל שאר הפורטים של המארח נשארים סגורים. חוזרים על הדגל לפורטים נוספים. רק ב-Linux, ונדחה יחד עם --network ולפורטים מתחת ל-1024. עובד עם --allow-host ותחת --lockdown. השירות שמאחורי הפורט זוכה לאמון מלא, בלי רשימת היתרים ובלי רישום ביומן הביקורת. קובץ פרויקט יכול רק לקצר את הרשימה. איפה forward_ports נכתב בקובץ ההגדרות.
מחליש את הכלא
--ssh
ssh = true
התיקייה ~/.ssh שלכם, לקריאה בלבד, וה-socket של ה-SSH agent, כדי ש-git push יעבוד.
פותח דבר אחד
--docker
no_docker = false
ה-socket של Docker. בפועל זה root על המחשב שלכם, כי ה-daemon יכול להעלות קונטיינרים שמעגנים את המארח.
מחליש את הכלא
--tailscale
tailscale = true
ה-socket של Tailscale.
פותח דבר אחד
--systemd-user
systemd_user = true
ה-user bus של systemd. הסוכן יכול לבקש מה-user manager שלכם להריץ שירותים על המארח. רק ב-Linux.
מחליש את הכלא
סוכן וסביבה
דגל
מפתח הגדרה
מה הוא עושה
סיכון
--agent-state
agent_state = true
ההתחברות של הסוכן עצמו. המצב של ה-harness שהופעל, למשל ~/.claude, ~/.codex או ~/.local/share/devin ו-~/.config/devin של Devin, מעוגן לקריאה וכתיבה, ומפתח ה-API שלו מועתק מה-shell שלכם כשהוא מוגדר: ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY או GOOGLE_API_KEY, XAI_API_KEY, MOONSHOT_API_KEY. הסוכן עולה מחובר, וכל מה שרץ בכלא יכול להשתמש בהתחברות הזאת. --no-agent-state נותן הרצה ללא התחברות. כבוי תחת lockdown, וקובץ פרויקט יכול רק לכבות אותו.
דלוק כברירת מחדל
--claude-dir <PATH>
claude_dir = "..."
משתמש בתיקייה שצוינה בתור ה-state של Claude ומגדיר את CLAUDE_CONFIG_DIR.
פותח דבר אחד
--env <NAME[=VALUE]>
אין
מעביר משתנה אחד מה-shell שלכם, או מגדיר משתנה עם NAME=VALUE. אפשר לחזור עליו, והוא אף פעם לא נשמר לדיסק. ב-Linux הערכים מגיעים ל-sandbox דרך קובץ בזיכרון ולא מופיעים בשורת הפקודה של ה-launcher, אבל NAME=VALUE מילולי עדיין גלוי בשורת הפקודה של ai-jail עצמו, ולכן לסוד עדיף --env NAME או --env-from-file.
פותח דבר אחד
--env-from-file <PATH>
env_from_file = [...]
קורא שורות KEY=VALUE קפדניות מקובץ ומעביר אותן כמו --env, שגובר במקרה של התנגשות. הקובץ חייב להיות שלכם, קובץ רגיל, במצב 0600 או הדוק יותר, ומחוץ לפרויקט, אחרת ההפעלה נכשלת. הכלי ai-jail אף פעם לא שומר את הערכים לדיסק, ומפתח ההגדרה עובד רק מהקובץ הגלובלי.
פותח דבר אחד
--secret <KEY=host>
secret_hosts = { ... }
משאיר את הערך האמיתי של KEY מחוץ ל-sandbox. הסוכן רואה placeholder, והפרוקסי מכניס את הערך האמיתי רק לבקשות אל אותו host אחד. דורש --allow-host, והמפתח חייב להיכנס קודם דרך --env או --env-from-file. רק מהקובץ הגלובלי, ואף פעם לא נשמר. זה מכסה לקוחות שיכולים לדבר HTTP רגיל עם הפרוקסי בשביל אותו host; במנהרות HTTPS הוא לא נוגע.
פותח דבר אחד
--inherit-env
inherit_env = true
מעביר את כל סביבת ה-shell שלכם, כולל כל סוד שנמצא בה. עדיף להימנע ממנו.
מחליש את הכלא
אין
env_pass = ["NAME"]
כמו --env, אבל רק מהקובץ הגלובלי. קובץ פרויקט שמגדיר אותו לא נלקח בחשבון.
פותח דבר אחד
toolchains ופרטי גישה של כלים
דגל
מפתח הגדרה
מה הוא עושה
סיכון
--toolchains
no_toolchains = false
הקומפיילרים ומנהלי החבילות שלכם לקריאה בלבד, ה-caches של התלויות שלהם במאגר ששייך לכלא, וה-registries של החבילות נגישים דרך הפרוקסי המסנן. רק ב-Linux, ושם דלוק כברירת מחדל; ב-macOS שום דבר לא ממופה ושום registry לא נגיש. מצב lockdown מכבה אותו, וקובץ פרויקט יכול רק לכבות אותו. פרטים בהמשך.
דלוק כברירת מחדל
--github
github = true
התיקייה של ההגדרות של gh שלכם, לקריאה בלבד, ועוד ה-token הפעיל שלכם ב-github.com, שמועבר בתור GH_TOKEN להפעלה הזאת, כך ש-gh מחובר גם כשה-token נמצא ב-keyring של המערכת. הכלי ai-jail מריץ gh auth token על המארח ומעביר את התוצאה דרך קובץ בזיכרון, אף פעם לא בשורת פקודה או בדיסק; --dry-run אף פעם לא מביא אותו, ו-GH_TOKEN שמועבר עם --env מדלג על החיפוש. רק github.com ורק החשבון הפעיל. כל מה שרץ בכלא עדיין יכול לפעול ב-GitHub בשמכם.
פותח דבר אחד
--aws
aws = true
התיקייה ~/.aws שלכם, לקריאה בלבד. כל מה שרץ בכלא יכול לפעול ב-AWS בשמכם כל עוד פרטי הגישה בתוקף.
פותח דבר אחד
--kube
kube = true
התיקייה ~/.kube שלכם, לקריאה בלבד. כל מה שרץ בכלא יכול לדבר עם ה-clusters שלכם בשמכם.
פותח דבר אחד
--gcloud
gcloud = true
התיקייה ~/.config/gcloud שלכם, לקריאה בלבד. כל מה שרץ בכלא יכול לפעול ב-Google Cloud בשמכם.
פותח דבר אחד
--docker-config
docker_config = true
הקובץ ~/.docker/config.json שלכם, לקריאה בלבד, ובו ההתחברויות שלכם ל-registries. כל מה שרץ בכלא יכול להשתמש בהן.
פותח דבר אחד
דסקטופ וחומרה
דגל
מפתח הגדרה
מה הוא עושה
סיכון
--gpu
no_gpu = false
התקני GPU, ויחד איתם משטח התקיפה של הדרייבר. רק ב-Linux.
פותח דבר אחד
--kvm
kvm = true
/dev/kvm, למכונות וירטואליות עם האצת חומרה כמו QEMU או אמולטור של Android. הוא חושף את ממשק ה-KVM של הקרנל של המארח. האורחים מקבלים רק את הרשת של ה-sandbox, ובלי התקני tun או vhost. רק ב-Linux.
פותח דבר אחד
--display
no_display = false
ה-socket של Wayland, ושום דבר אחר מהסשן שלכם. רק ב-Linux.
פותח דבר אחד
--x11
x11 = true
ה-socket של X11. תחת X11 תוכנה יכולה להקליט הקשות מקלדת ולצלם את המסך.
מחליש את הכלא
--audio
audio = true
ה-sockets של PipeWire ושל PulseAudio, וגם /dev/snd. כל מה שרץ בכלא יכול להקליט ולנגן אודיו. רק ב-Linux.
פותח דבר אחד
--host-shm
host_shm = true
התיקייה /dev/shm של המארח, שפותחת זיכרון משותף עם תהליכים שמחוץ לכלא.
פותח דבר אחד
--pictures
pictures = true
התיקייה ~/Pictures שלכם, לקריאה בלבד.
פותח דבר אחד
--browser[=hard|soft]
browser_profile = "hard"
פרופיל דפדפן נפרד. הערך hard (ברירת המחדל) לא שומר כלום בין הרצות, והערך soft שומר פרופיל תחת ~/.local/share/ai-jail/browsers.
פותח דבר אחד
קבצים
דגל
מפתח הגדרה
מה הוא עושה
סיכון
--map <PATH|SOURCE:DEST>
ro_maps = [...]
מעגן נתיב נוסף לקריאה בלבד. כדי לעגן אותו במקום אחר כותבים SOURCE:DEST. אפשר לחזור עליו.
פותח דבר אחד
--rw-map <PATH|SOURCE:DEST>
rw_maps = [...]
מעגן נתיב נוסף לקריאה וכתיבה. אפשר לחזור עליו.
פותח דבר אחד
--overlay-map <PATH>
overlay_maps = [...]
מעגן נתיב במצב copy-on-write: הכתיבות של הסוכן הולכות לשכבה צדדית, והמקור לא משתנה. רק ב-Linux. ב-macOS הוא הופך לעיגון לקריאה בלבד.
פותח דבר אחד
--hide-dotdir <NAME>
hide_dotdirs = [...]
אף פעם לא מעגן את תיקיית הנקודה שצוינה, למשל .my_secrets. אפשר לחזור עליו.
שכבות שאפשר לכבות, ולא כדאי
דגל
מפתח הגדרה
מה הוא עושה
סיכון
--no-landlock
no_landlock = true
מכבה את Landlock, העותק של כללי הקבצים שהקרנל עצמו מחזיק. נדחה כשמעבירים --lockdown.
מחליש את הכלא
--no-seccomp
no_seccomp = true
מכבה את המסנן שחוסם קריאות מערכת מסוכנות.
מחליש את הכלא
--no-rlimits
no_rlimits = true
מכבה את המגבלות שעוצרות תהליכים שיצאו משליטה.
מחליש את הכלא
--no-private-home
private_home = false
מוותר על תיקיית הבית החדשה. זו גישה רחבה לתיקיית הבית האמיתית שלכם. עדיף להשתמש ב---map לנתיב האחד שאתם צריכים.
מוסיף רשומה אחת לכל הפעלה לקובץ ~/.local/share/ai-jail/history.jsonl (תיקייה 0700, קובץ 0600): זמן, פקודה, היכולות בפועל, מקורות ההגדרות, קוד היציאה ומשך הריצה. עם --allow-host נרשם גם כל חיבור שאושר או נדחה, ועם --secret גם כל הזרקה. כל שורה נושאת את ה-hash של השורה שלפניה. כבוי כברירת מחדל, וקובץ פרויקט יכול לכבות אותו אבל לא להדליק.
פותח דבר אחד
--audit-show
אין
מדפיס סיכום קריא של היומן ויוצא: הפעלות, החלטות של הרשת המסוננת והחלפות של סודות. הוא לא בודק את השרשרת. קוד יציאה 0 אחרי הצגה, 1 על רשומות פגומות או שגיאת קריאה, 2 כשאין יומן. רשומות ההפעלה יכולות לכלול את הארגומנטים של הפקודה, אז השאירו סודות מחוץ להן.
--audit-verify
אין
עובר על שרשרת ה-hash של יומן הביקורת ויוצא: 0 כשהיא שלמה, 1 בחוליה השבורה הראשונה, 2 כשאין יומן. רשומות שנכתבו לפני 2.2 מדווחות כ-legacy, וזו לא שגיאה.
כלי עזר
דגל
מה הוא עושה
--dry-run
מדפיס את פקודת ה-sandbox ולא מריץ כלום. אף פעם לא כותב קובץ הגדרות.
--init
כותב או מעדכן את קובץ .ai-jail של הפרויקט, ויוצא.
--clean
מתעלם מקובץ .ai-jail של הפרויקט בהרצה הזאת.
--bootstrap
מייצר קובצי הגדרות הרשאות עבור כלי ה-AI עצמם.
status
מציג את ההגדרות הנוכחיות של .ai-jail.
-v, --verbose
מציג כל עיגון בזמן שהכלא נבנה.
את השאר תמצאו בפלט של ai-jail --help: שורת הסטטוס, worktrees, mise ואפשרויות טרמינל. מפתח ה-toolchains הפוך כמו המפתחות הישנים: no_toolchains = true מכבה אותם.
מסתירים סודות בתוך הפרויקט
קובץ ה-.env שלכם נמצא בפרויקט, והפרויקט פתוח לקריאה ולכתיבה. כשהרשת דלוקה, הסוכן יכול לשלוח החוצה כל מה שהוא יכול לקרוא שם. מיסוך מוציא את הקבצים האלה מהתמונה.
↔ החליקו לצדדים כדי לראות את התרשים המלא
שאר הפרויקט נשאר כמו שהיה.
--mask <PATH|GLOB>
מחליף כל התאמה ב-placeholder ריק. הסוכן רואה שהקובץ קיים ולא מקבל שום תוכן, כך שכלים שרק בודקים שהוא קיים ממשיכים לעבוד. המיסוך משנה רק את מה שה-sandbox רואה. עוזר במארח שפועל בשם הסוכן, כמו ה-daemon של Docker או שרת MCP, עדיין קורא את הקובץ האמיתי.
--deny-path <PATH|GLOB>
הופך כל התאמה לשגיאת הרשאות.
--mask-except וגם --deny-path-except
מחריגים נתיב אחד מתוך כלל. הם מחלישים את ההגנה, ולכן קובץ פרויקט לא יכול להגדיר אותם.
בתור דגלים
# שימו globs במירכאות, כדי ש-ai-jail יקבל את התבנית ולא את ההרחבה של ה-shellai-jail --mask .env --mask '.env.*' --mask '*.pem' --deny-path secrets/ claudeai-jail --mask '.env.*' --mask-except .env.example claude
.ai-jail
# קובץ פרויקט רשאי להדק, ולכן זה עובד גם בתוך הריפוזיטוריmask = [".env", ".env.*", "*.pem"]deny_paths = ["secrets/"]
מפתחות API נשארים מחוץ לכל קובץ הגדרות
המיסוך מכסה קבצים בפרויקט. את המפתח של הסוכן עצמו מעבירים מה-shell עם --env NAME, או מקובץ שרק אתם יכולים לקרוא עם --env-from-file. אף אחד מהם לא נכתב אף פעם לקובץ .ai-jail, וקובץ פרויקט לא יכול להגדיר אותם. כשהיציאה המסוננת דלוקה, --secret KEY=host גם משאיר את הערך האמיתי מחוץ ל-sandbox. המתכון למטה מראה את זה.
טרמינל
# הקובץ חייב להיות שלכם, במצב 0600 ומחוץ לפרויקטchmod 600 ~/.secrets/claude.envai-jail --env-from-file ~/.secrets/claude.env claude
~/.ai-jail
# רק בקובץ הגלובלי. קובץ פרויקט שמגדיר את זה לא נלקח בחשבון[commands.claude]env_from_file = ["~/.secrets/claude.env"]
ה-toolchains שלכם באים איתכם
build צריך קומפיילרים, מנהלי חבילות ואת ה-caches שלהם. ב-Linux, ai-jail מכניס אותם כברירת מחדל: הכלים לקריאה בלבד, ה-caches במאגר ששייך לכלא, וה-registries של החבילות נגישים דרך הפרוקסי המסנן.
↔ החליקו לצדדים כדי לראות את התרשים המלא
ה-caches של המארח עצמו נשארים בחוץ, ולכן build בכלא לא יכול להרעיל את מה שהמארח בונה ממנו. ה-API של הסוכן נשאר סגור עד שתפתחו אותו.
כלים, לקריאה בלבד
מגרסה 2.4.1, ai-jail ממפה את ההתקנות ואת ההגדרות של mise לקריאה בלבד. ל-Rust הוא ממפה כך גם את ~/.cargo/bin ואת ~/.rustup, כדי ש-cargo ו-rustc יימצאו. פרטי הגישה של Cargo ו-config.toml נשארים בחוץ. מכיוון ש-mise לא יכול להתקין כלום לתוך מיפוי לקריאה בלבד, ai-jail מגדיר בפנים MISE_NOT_FOUND_AUTO_INSTALL=false, כך שכלי חסר נכשל פעם אחת במקום בכל קריאה.
cache ששייך לכלא
ה-caches של התלויות נמצאים תחת ~/.local/share/ai-jail/cache/ ושורדים בין סשנים. ה-registry וה-cache של git של Cargo הולכים לשם. וכך גם ה-cache שבברירת המחדל של pip, uv, Go, npm, yarn, pnpm, bun, deno, Maven, Gradle, Coursier, Composer, Crystal ו-Zig, כשהתיקייה של הכלי קיימת אצלכם במחשב.
registries, דרך הפרוקסי
כשה-toolchains דלוקים ולא ניתן דגל רשת, ה-sandbox מגיע ל-crates.io, npm, PyPI, ה-proxy של Go, Maven Central, Clojars, Packagist ו-github.com, כל אחד עם תת-הדומיינים שלו, דרך אותו פרוקסי כמו --allow-host. גם ה-host של ה-API של סוכן מוכר עובר באותו אופן, גם ב-macOS; ה-registries הם רק ב-Linux.
טרמינל
# ברירת המחדל ב-Linuxai-jail claude# caches דלוקים, בלי רשת בכללai-jail --no-network claude# שום דבר לא ממופה, שום דבר לא נגישai-jail --no-toolchains --no-network claude
ברירת המחדל: ההתחברות של הסוכן וה-host של ה-API שלו, ה-toolchains שלכם ב-Linux, ה-registries של החבילות, והפרויקט לקריאה וכתיבה.
--no-network: offline לגמרי. יחד עם רשימת --allow-host, ה-sandbox מגיע רק ל-hosts שציינתם, בלי ברירות המחדל האוטומטיות.
--no-agent-state: בלי התחברות. המצב של ה-harness נשאר בחוץ ומפתח ה-API שלו לא מועתק.
--no-toolchains: בלי caches של תלויות ובלי registries של חבילות.
--mask, --deny-path ו---hide-dotdir מורידים נתיבים בודדים, ו---map או --rw-map צרים מחליפים הרשאה רחבה. הם משנים את מה שה-sandbox רואה; עוזר במארח, כמו ה-daemon של Docker או שירות שמאחורי --forward-port, עדיין קורא את הקבצים האמיתיים.
--lockdown: הפרויקט לקריאה בלבד, בלי התחברות, בלי toolchains, בלי registries, Landlock ו-seccomp מחמירים, ועדיין לא מכונה וירטואלית.
מצב lockdown: הסוכן קורא קוד שאסור לו לשנות
הדגל --lockdown מיועד ל-code review ולביקורות (audits). הסוכן יכול לקרוא את הפרויקט ולענות על שאלות לגביו, ולא יכול לשנות בו אף קובץ.
↔ החליקו לצדדים כדי לראות את התרשים המלא
הסוכן והפרויקט הם אותם סוכן ופרויקט, ורק תיקייה זמנית פתוחה לכתיבה.
מה משתנה
הפרויקט מעוגן לקריאה בלבד
ב-Linux אפשר לכתוב רק אל /tmp. ב-macOS אי אפשר לכתוב לשום מקום
בלי תיקיות נקודה מתיקיית הבית, בלי מיפויים נוספים ובלי overlays
הסביבה מנוקה, ו-PATH מקובע לתיקיות המערכת
חובה שיהיה Landlock: אם אי אפשר להחיל אותו, ההפעלה נכשלת
מגבלות הדוקות יותר על תהליכים, על קבצים פתוחים ועל גודל קובץ
בלי תצוגה, אודיו, GPU, KVM, Docker, SSH agent או mise, גם אם העברתם דגלים אחרים
בלי caches של toolchains, בלי יציאה ל-registries ובלי פרטי גישה של כלים
בלי התחברות של הסוכן, ולכן ה-harness עולה ללא התחברות
טרמינל
ai-jail --lockdown claude
מתכונים
העתיקו אחד. כדי לראות מה הוא בונה, הריצו אותו קודם עם --dry-run.
סוכן ענן, ביומיום
סוכן מוכר עולה מחובר ומגיע ל-host של ה-API שלו דרך הפרוקסי המסנן, וב-Linux גם ל-registries של החבילות. כשמשימה צריכה יותר, שימו allow_hosts בקובץ הגלובלי עם ה-hosts הנוספים, או פתחו את כל הרשת עם network = true.
~/.ai-jail
# אין מה להוסיף: ההתחברות ו-api.anthropic.com מגיעים כברירת מחדלai-jail claude# כשמשימה צריכה יותר, פעם אחת ב-~/.ai-jail (מתווסף ל-host של ה-API, וב-Linux גם ל-registries)[commands.claude]allow_hosts = ["api.example.com"]# או פותחים את כל הרשת: network = true
סוכן ש-ai-jail לא מכיר
הכלי ai-jail מתיר את ה-host של ה-API מעצמו עבור חמישה סוכנים. כל סוכן אחר מקבל ממכם את ה-host שלו עם --allow-host. אם ה-host חסר ברשימה, האזהרה בזמן ההפעלה נוקבת בשמו.
terminal
ai-jail --allow-host api.example.com myagent# סוכן מוכר לא צריך דגל: ai-jail מתיר את ה-host של ה-API שלו מעצמו
הרצה ללא התחברות
כשלסוכן לא אמורים להיות פרטי גישה בכלל, --no-agent-state משאיר בחוץ את תיקיית המצב שלו ואת מפתח ה-API שלו. הוא עולה ללא התחברות, ומה שהוא מתחבר אליו בתוך תיקיית הבית החדשה נעלם בסוף ההרצה.
terminal
ai-jail --no-agent-state claude
hosts מורשים בקובץ הגלובלי
הרשימה חלה על כל הרצה של אותה פקודה, בנוסף ל-host של ה-API של הסוכן. ב-Linux, github.com וה-registries של החבילות כבר נגישים, אז מוסיפים אותם לרשימה רק ב-macOS. host מורשה זוכה לאמון מלא: הסוכן יכול לבקש ממנו כל מה שפרטי הגישה שלכם שם מאפשרים.
בלי --network ל-sandbox יש loopback משלו, ולכן שרת שיושב על 127.0.0.1 של המארח נמצא מחוץ להישג יד. --forward-port מעביר את הפורט האחד הזה ושום דבר אחר, ב-Linux. בקובץ הגלובלי, שימו את forward_ports תחת הטבלה של הפקודה ואף פעם לא בטבלת הבסיס: הדגל נדחה יחד עם --network, ש---browser בדרך כלל גורר, וגם ב-macOS, ולכן ערך בטבלת הבסיס היה מכשיל את ההפעלות האלה.
~/.ai-jail
ai-jail --forward-port 49374 claude# או פעם אחת ב-~/.ai-jail, תחת הטבלה של הפקודה[commands.claude]forward_ports = [49374]
מפתח שהסוכן אף פעם לא רואה
ה-sandbox מקבל placeholder ב-ANTHROPIC_API_KEY, והפרוקסי של ai-jail מכניס את המפתח האמיתי רק לבקשות אל api.anthropic.com. הלקוח חייב לשלוח HTTP רגיל לפרוקסי בשביל אותו host, וזה מה שכתובת הבסיס http:// עושה. משם ai-jail מעביר את הבקשה ל-host האמיתי דרך TLS. לקוח שפותח רק מנהרות HTTPS ממשיך לעבוד, בלי החלפה.
terminal
# המפתח נמצא בקובץ ה-0600; ה-sandbox רואה תמיד רק AIJAIL-PHANTOM-...ai-jail --allow-host api.anthropic.com \ --env-from-file ~/.secrets/claude.env \ --secret ANTHROPIC_API_KEY=api.anthropic.com \ --env ANTHROPIC_BASE_URL=http://api.anthropic.com claude
פקודת git push דרך SSH
הדגל --ssh מעגן את ~/.ssh לקריאה בלבד ומעביר פנימה את ה-socket של ה-SSH agent שלכם. הוא לא פותח את הרשת, ולכן המתכון מצרף אליו --network. ל-push ב-HTTPS עם ה-token של gh, ראו את המתכון של GitHub CLI.
terminal
ai-jail --network --ssh claude
build ובדיקות בתוך הכלא
ב-Linux אין מה להוסיף. cargo build, npm install או go get מושכים מה-registries דרך הפרוקסי ושומרים ב-cache של הכלא עצמו, וההתקנות של mise מגיעות יחד איתם לקריאה בלבד. להרצה שלא נוגעת בכלום ולא מגיעה לשום מקום, כבו את שניהם.
terminal
# ברירת המחדל ב-Linux: caches דלוקים, registries נגישים דרך הפרוקסיai-jail claude# שום דבר לא ממופה, שום דבר לא נגישai-jail --no-toolchains --no-network claude
GitHub CLI בתוך הכלא
--github מעגן את תיקיית ההגדרות של gh לקריאה בלבד ומעביר את ה-token הפעיל שלכם ב-github.com בתור GH_TOKEN, כך ש-gh ו-git push ב-HTTPS מחוברים, עם keyring או בלעדיו. ב-Linux, github.com ותת-הדומיינים שלו כבר ברשימת ברירת המחדל, אז לא מוסיפים host; ב-macOS הוסיפו --allow-host github.com. מרגע זה כל מה שרץ בכלא יכול לפעול ב-GitHub בשמכם.
terminal
ai-jail --github claude# macOS: github.com לא ברשימת ברירת המחדל שםai-jail --github --allow-host github.com claude
דפדפן לסוכן
הדגל --browser לבדו נותן דפדפן שלא יכול לטעון עמוד או לפתוח חלון. ב-Linux צריך להוסיף גם --network וגם --display, ודפדפן X11 צריך --x11 במקום --display.
כדי להפריד בין ההתחברות של העבודה להתחברות הפרטית, הפנו כל הרצה לתיקיית Claude משלה.
terminal
ai-jail --network --claude-dir ~/.claude-work claude
ריפקטור מסוכן, על עותק
עם overlay הכתיבות של הסוכן נשמרות בשכבה צדדית תחת .ai-jail-overlays בפרויקט. אחר כך משווים אותה למקור ושומרים את מה שמוצא חן בעיניכם. רק ב-Linux.
terminal
ai-jail --network --overlay-map ~/Projects/my-app/src claude
הגדרות ישנות ממשיכות לעבוד
תאימות לאחור היא כלל של הפרויקט: דגל או מפתח הגדרה אף פעם לא מוסרים. מפתחות לא מוכרים לא נלקחים בחשבון, ומפתחות חסרים מקבלים את ברירת המחדל שלהם, כך שקובץ שנכתב לגרסה ישנה עדיין נטען.
מתגים ותיקים שומרים על השמות ההפוכים שלהם, שבהם true מכבה את הדבר: no_gpu, no_docker, no_display, no_mise, no_toolchains, no_landlock, no_seccomp, no_rlimits. זו הסיבה לכך ש---gpu נשמר בתור no_gpu = false. מתגים חדשים יותר משתמשים בשמות ישירים כמו network = true. הדגל --allow-tcp-port עדיין מפוענח ועדיין מסרב להפעיל, כי הוא לא יכול לגדר UDP. השגיאה שלו מפנה אל --allow-host.