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

הקובץ .ai-jail של הפרויקט
הקובץ הזה נחשב לא אמין: הוא יכול להדק את הכלא, ולעולם לא לפתוח אותו. אם הוא symlink, הכלי ai-jail לא הולך אחריו, והסוכן רואה במקומו קובץ ריק.
הקובץ הגלובלי ~/.ai-jail
הוא שלכם, ולכן הוא נחשב אמין. יש בו טבלת בסיס שחלה על כל הרצה, וגם טבלאות [commands.<name>] שנבחרות לפי המילה הראשונה של הפקודה.
דגלי שורת הפקודה
לדגלים יש את הסמכות הגבוהה ביותר. רוב המתגים מגיעים בזוגות, כמו --network ו---no-network, כך שדגל יכול גם לסגור את מה שקובץ פתח.
בטבלת פקודה, ערכים בודדים מחליפים את ערכי הבסיס, ורשימות כמו מיפויים ומיסוכים מתווספות אליו.
# בסיס: חל על כל פקודהhide_dotdirs = [".my_secrets"]mask = [".env", ".env.*"] # רק כשהפקודה מתחילה במילה "claude"[commands.claude]network = trueagent_state = trueenv_pass = ["ANTHROPIC_BASE_URL"]mask = ["*.pem"]המתגים
כל שורה כבויה עד שתבקשו, ולכל דגל של יכולת יש תאום --no- שסוגר אותה בחזרה. תג אדום מסמן מתג שמחליש את הכלא. הרשימה המלאה והסיבות נמצאות בעמוד האבטחה.
רשת ושירותים
| דגל | מפתח הגדרה | מה הוא עושה | סיכון |
|---|---|---|---|
--network | network = true | גישה לא מוגבלת לרשת. כל מה שהסוכן יכול לקרוא, הוא יכול לשלוח החוצה. | מחליש את הכלא |
--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 | ההתחברות וההגדרות של הסוכן עצמו, למשל ~/.claude או ~/.codex. מרגע זה כל מה שרץ בכלא יכול להשתמש בפרטי הגישה האלה. | פותח דבר אחד |
--claude-dir <PATH> | claude_dir = "..." | משתמש בתיקייה שצוינה בתור ה-state של Claude ומגדיר את CLAUDE_CONFIG_DIR. | פותח דבר אחד |
--env <NAME[=VALUE]> | אין | מעביר משתנה אחד מה-shell שלכם, או מגדיר משתנה עם NAME=VALUE. אפשר לחזור עליו, והוא אף פעם לא נשמר לדיסק. | פותח דבר אחד |
--inherit-env | inherit_env = true | מעביר את כל סביבת ה-shell שלכם, כולל כל סוד שנמצא בה. עדיף להימנע ממנו. | מחליש את הכלא |
| אין | env_pass = ["NAME"] | כמו --env, אבל רק מהקובץ הגלובלי. קובץ פרויקט שמגדיר אותו לא נלקח בחשבון. | פותח דבר אחד |
דסקטופ וחומרה
| דגל | מפתח הגדרה | מה הוא עושה | סיכון |
|---|---|---|---|
--gpu | no_gpu = false | התקני GPU, ויחד איתם משטח התקיפה של הדרייבר. רק ב-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 לנתיב האחד שאתם צריכים. | מחליש את הכלא |
בעמוד איך זה עובד מוסבר מה כל שכבה עושה.
כלי עזר
| דגל | מה הוא עושה |
|---|---|
--dry-run | מדפיס את פקודת ה-sandbox ולא מריץ כלום. אף פעם לא כותב קובץ הגדרות. |
--init | כותב או מעדכן את קובץ .ai-jail של הפרויקט, ויוצא. |
--clean | מתעלם מקובץ .ai-jail של הפרויקט בהרצה הזאת. |
--bootstrap | מייצר קובצי הגדרות הרשאות עבור כלי ה-AI עצמם. |
status | מציג את ההגדרות הנוכחיות של .ai-jail. |
-v, --verbose | מציג כל עיגון בזמן שהכלא נבנה. |
את השאר תמצאו בפלט של ai-jail --help: שורת הסטטוס, worktrees, mise ואפשרויות טרמינל.
מסתירים סודות בתוך הפרויקט
קובץ ה-.env שלכם נמצא בפרויקט, והפרויקט פתוח לקריאה ולכתיבה. כשהרשת דלוקה, הסוכן יכול לשלוח החוצה כל מה שהוא יכול לקרוא שם. מיסוך מוציא את הקבצים האלה מהתמונה.

--mask <PATH|GLOB>
מחליף כל התאמה ב-placeholder ריק. הסוכן רואה שהקובץ קיים ולא מקבל שום תוכן, כך שכלים שרק בודקים שהוא קיים ממשיכים לעבוד.
--deny-path <PATH|GLOB>
הופך כל התאמה לשגיאת הרשאות.
--mask-except וגם --deny-path-except
מחריגים נתיב אחד מתוך כלל. הם מחלישים את ההגנה, ולכן קובץ פרויקט לא יכול להגדיר אותם.
# שימו globs במירכאות, כדי ש-ai-jail יקבל את התבנית ולא את ההרחבה של ה-shellai-jail --mask .env --mask '.env.*' --mask '*.pem' --deny-path secrets/ claude ai-jail --mask '.env.*' --mask-except .env.example claude# קובץ פרויקט רשאי להדק, ולכן זה עובד גם בתוך הריפוזיטוריmask = [".env", ".env.*", "*.pem"]deny_paths = ["secrets/"]מצב lockdown: הסוכן קורא קוד שאסור לו לשנות
הדגל --lockdown מיועד ל-code review ולביקורות (audits). הסוכן יכול לקרוא את הפרויקט ולענות על שאלות לגביו, ולא יכול לשנות בו אף קובץ.

מה משתנה
- הפרויקט מעוגן לקריאה בלבד
- ב-Linux אפשר לכתוב רק אל
/tmp. ב-macOS אי אפשר לכתוב לשום מקום - בלי תיקיות נקודה מתיקיית הבית, בלי מיפויים נוספים ובלי overlays
- הסביבה מנוקה, ו-
PATHמקובע לתיקיות המערכת - חובה שיהיה Landlock: אם אי אפשר להחיל אותו, ההפעלה נכשלת
- מגבלות הדוקות יותר על תהליכים, על קבצים פתוחים ועל גודל קובץ
- בלי תצוגה, אודיו, GPU, Docker, SSH agent או mise, גם אם העברתם דגלים אחרים
ai-jail --lockdown claudeמתכונים
העתיקו אחד. כדי לראות מה הוא בונה, הריצו אותו קודם עם --dry-run.
סוכן ענן, ביומיום
מודל מתארח צריך רשת כדי להגיע ל-API שלו, ואת ההתחברות שלו כדי להזדהות. כתבו את שניהם בקובץ הגלובלי, והפקודה תישאר קצרה.
# פעם אחת, בקובץ ~/.ai-jail[commands.claude]network = trueagent_state = true # ואז, בכל פרויקטai-jail claudeפקודת git push דרך SSH
הדגל --ssh מעגן את ~/.ssh לקריאה בלבד ומעביר פנימה את ה-socket של ה-SSH agent שלכם. כדי לעשות push צריך גם רשת.
ai-jail --network --ssh --agent-state claudeה-toolchains של mise
בתיקיית הבית החדשה אין התקנות של mise, ולכן ai-jail מדלג עליו. מפו פנימה את שתי התיקיות של mise, לקריאה בלבד.
[commands.claude]ro_maps = ["~/.config/mise", "~/.local/share/mise"]דפדפן לסוכן
הדגל --browser לבדו נותן דפדפן שלא יכול לטעון עמוד או לפתוח חלון. ב-Linux צריך להוסיף גם --network וגם --display, ודפדפן X11 צריך --x11 במקום --display.
# Waylandai-jail --browser=soft --network --display chromium# X11ai-jail --browser=soft --network --x11 chromiumפרופילים נפרדים של Claude
כדי להפריד בין ההתחברות של העבודה להתחברות הפרטית, הפנו כל הרצה לתיקיית Claude משלה.
ai-jail --network --claude-dir ~/.claude-work claudeריפקטור מסוכן, על עותק
עם overlay הכתיבות של הסוכן נשמרות בשכבה צדדית תחת .ai-jail-overlays בפרויקט. אחר כך משווים אותה למקור ושומרים את מה שמוצא חן בעיניכם. רק ב-Linux.
ai-jail --network --agent-state --overlay-map ~/Projects/my-app/src claudeהגדרות ישנות ממשיכות לעבוד
תאימות לאחור היא כלל של הפרויקט: דגל או מפתח הגדרה אף פעם לא מוסרים. מפתחות לא מוכרים לא נלקחים בחשבון, ומפתחות חסרים מקבלים את ברירת המחדל שלהם, כך שקובץ שנכתב לגרסה ישנה עדיין נטען.
מתגים ותיקים שומרים על השמות ההפוכים שלהם, שבהם true מכבה את הדבר: no_gpu, no_docker, no_display, no_mise, no_landlock, no_seccomp, no_rlimits. זו הסיבה לכך ש---gpu נשמר בתור no_gpu = false. מתגים חדשים יותר משתמשים בשמות ישירים כמו network = true.
שימו את הסוכן מאחורי סורגים
כל ai-jail הוא קובץ בינארי אחד, בלי daemon ובלי root. מוסיפים מילה אחת לפני הפקודה שאתם מריצים ממילא.
brew tap akitaonrails/tap && brew install ai-jailai-jail claude