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

הוא קורא את הכללים שלכם
הקובץ ~/.ai-jail שלכם נחשב אמין. קובץ .ai-jail שנמצא בתוך הפרויקט נחשב לא אמין: הוא יכול להדק את ה-sandbox, ולעולם לא לפתוח אותו. דגלים בשורת הפקודה גוברים על שניהם.
הוא בונה את ה-sandbox
כל השכבות שמתוארות למטה מוקמות עוד לפני שהסוכן קיים. אם קובץ הגדרות לא קריא או לא תקין, ai-jail עוצר ולא עולה עם כללים חלשים יותר.
הוא מעלה את הסוכן בפנים
הסוכן יורש את החומות, וכך גם כל סקריפט, חבילה ושרת MCP שהוא מפעיל. כשהסוכן יוצא, גם ai-jail יוצא.
השכבות, מבחוץ פנימה
אף חומה לא אמורה להחזיק לבדה. ב-Linux הסוכן יושב מאחורי חמש חומות שהקרנל אוכף כל אחת מהן, ונוספים עליהן שני מסננים: אחד על מה שנכנס ואחד על מה שיוצא.

Namespaces
bubblewrap- מה זה
- בעזרת namespace הקרנל נותן לתהליך תמונה פרטית משלו של המערכת. את ה-namespaces יוצר bubblewrap לבקשת ai-jail. זה אותו כלי קטן שמשמש את Flatpak לבידוד אפליקציות דסקטופ, והוא לא צריך root.
- מה זה עוצר
- הסוכן מקבל רשימת תהליכים משלו ושם מארח משלו (
ai-sandbox). אין לו ערוצי תקשורת בין-תהליכית מול תוכנות של המארח, ואין לו רשת אלא אם העברתם--network. אם ai-jail מת, כל מה שבפנים מת יחד איתו.
מערכת קבצים
עיגונים- מה זה
- בתוך ה-namespace קיים רק מה ש-ai-jail מעגן. הפרויקט זמין לקריאה וכתיבה בנתיב האמיתי שלו, ותיקיות מערכת כמו
/usrזמינות לקריאה בלבד. תיקיית הבית ו-/tmpחדשות ומוחזקות בזיכרון. - מה זה עוצר
- התיקיות
~/.ssh,~/.aws,~/.gnupg,~/.dockerוהפרופילים של הדפדפן נמצאים ברשימה מובנית של נתיבים שלעולם לא מעוגנים. כל מה שנכתב מחוץ לפרויקט נעלם בסוף הסשן.
Landlock
קרנל 5.13 ומעלה- מה זה
- היכולת Landlock של קרנל Linux מאפשרת לתהליך לוותר לצמיתות על גישה לקבצים. בעזרתה ai-jail אוכף שוב את כללי מערכת הקבצים, הפעם כרשימת היתרים שנייה בתוך הקרנל.
- מה זה עוצר
- טעות או תרגיל בשכבת העיגון לא מספיקים כדי להגיע לנתיב שלא ברשימה, ומה שמוגדר לקריאה בלבד נשאר כזה. בקרנלים ישנים מדי בשביל Landlock, הכלי ai-jail מודיע על כך וממשיך עם שאר השכבות.
seccomp
קריאות מערכת- מה זה
- תוכנות מבקשות דברים מהקרנל דרך קריאות מערכת (syscalls). המנגנון seccomp מסנן את הקריאות האלה, ו-ai-jail משתמש בו כדי לסרב לקריאות שסוכן קוד אף פעם לא צריך.
- מה זה עוצר
- המסנן חוסם את
ptrace,mount,bpf, מודולי קרנל,io_uring, ה-keyring של הקרנל, raw sockets, וגם אתTIOCSTI, הקריאה שמקלידה תווים לתוך טרמינל. זו רשימת חסימה בכוונה, כדי שקומפיילרים ו-runtimes ימשיכו לעבוד.
מגבלות משאבים
rlimits- מה זה
- תקרות שהקרנל אוכף על הכמות שעץ תהליכים רשאי לצרוך: 4,096 תהליכים ו-65,536 קבצים פתוחים, בלי core dumps. במצב lockdown התקרות יורדות ל-1,024 ול-4,096.
- מה זה עוצר
- סקריפט שיצא משליטה או fork bomb נתקעים בתקרה בתוך הכלא ולא מקפיאים לכם את המחשב. הסוכן לא יכול להעלות את המגבלות בחזרה.
רשימת היתרים לסביבה
מה שנכנס- מה זה
- ה-shell שלכם מלא במשתנים, וחלק מהם הם מפתחות API. לפני ההפעלה ai-jail מנקה את הסביבה ומעביר רק רשימה קצרה:
PATH,HOME,TERM, הגדרות locale, פרוקסי ותעודות. - מה זה עוצר
- טוקנים ופרטי גישה לענן שיוצאו ב-shell שלכם לא מגיעים לסוכן. כשמשימה צריכה אחד מהם, מעבירים אותו לפי שם בעזרת
--env.
פרוקסי לטרמינל
מה שיוצא- מה זה
- הסוכן רץ מאחורי פסאודו-טרמינל משלו, וכל מה שהוא מדפיס עובר דרך parser של טרמינל לפני שהוא מגיע למסך שלכם. אותו פרוקסי מצייר את שורת הסטטוס של ai-jail בשורה התחתונה.
- מה זה עוצר
- הפרוקסי מסנן escape sequences שנוגעים בלוח ההעתקה שלכם או מתשאלים את הטרמינל. בתוך tmux או zellij הוא מכבה את עצמו, כי טרמינלים מקוננים רבים על שינוי גודל.
ב-macOS החומה דקה יותר
ב-macOS אין namespaces, אין Landlock ואין seccomp. אותה מדיניות הופכת לפרופיל של sandbox-exec, ה-sandbox המובנה של Apple. התיעוד של ai-jail אומר במפורש שזה לא שקול לבידוד שמתקבל ב-Linux.

| Linux | macOS | |
|---|---|---|
| Backend | הכלי bubblewrap, ואחריו Landlock, seccomp ומגבלות משאבים | sandbox-exec עם פרופיל שנוצר לכל הפעלה. Apple סימנה אותו כ-deprecated, ואין משהו טוב יותר בלי kernel extensions. |
| תיקיית הבית | תיקיית בית חדשה בזיכרון. התיקייה האמיתית לא מעוגנת. | הפרופיל מתחיל בלי הרשאות קריאה גלובליות, ואז מתיר רק את הנתיבים שהסוכן צריך. כך תיקיית הבית האמיתית נשארת סגורה. |
/tmp | פרטית, נזרקת ביציאה | התיקייה /tmp של המארח, כי אין mount namespace. המשתנה TMPDIR מצביע על תיקייה פרטית שנוצרת להפעלה, וזה נתיב ה-temp היחיד שמותר. |
| מיפויי copy-on-write | עם --overlay-map הסוכן כותב לעותק | מטופל כמיפוי לקריאה בלבד |
| רשת | כבויה כברירת מחדל, ב-network namespace משלה | כבויה כברירת מחדל. במצב lockdown היא חסומה תמיד, גם עם --network. |
| תוכנות אחרות | בלתי נראות: רשימת תהליכים נפרדת, בלי IPC של המארח | הגישה אל Mach, IOKit ו-IPC של המארח נדחית, אלא אם העברתם --macos-host-ipc |
למה דווקא אבני הבניין האלה
הפרויקט כותב בעצמו כמה שפחות קוד אבטחה. הוא מפעיל את bubblewrap, כלי קטן שארוז בכל הפצה מרכזית ושנמצא בשימוש יומיומי דרך Flatpak, ומוסיף מעליו יכולות של הקרנל.
| אפשרות | למה לא |
|---|---|
| Firejail | מסוגל לעשות את העבודה, אבל זה קובץ בינארי עם setuid root, וכמה CVEs נובעים מהתכנון הזה. לעומתו, bubblewrap עובד בלי root. |
| לשכתב את bubblewrap ב-Rust | יותר מ-500 שורות של קוד רגיש מבחינת אבטחה שצריך לתחזק ולתקן לבד, רק כדי לחסוך תלות של בערך 50 KB שמקבלת תיקונים מה-upstream. |
| nsjail | מסוגל, אבל נבנה לשרתים, מוגדר דרך קובצי protobuf, וארוז בפחות הפצות. |
| systemd-nspawn | דורש systemd, ולכן נכשל בתוך קונטיינרים ובמערכות שאין בהן systemd. |
קטן מספיק כדי לקרוא אותו
הכלי כולו הוא תוכנת Rust סינכרונית אחת, בלי async runtime, בלי daemon ובלי image של קונטיינר.
- 1
- קובץ בינארי להתקנה
- 8
- תלויות ישירות
- 720
- בדיקות יחידה בקוד המקור
- 19
- בדיקות שמנסות לברוח מ-sandbox אמיתי
נספר בריפוזיטורי של ai-jail בגרסה 1.22.0.
שימו את הסוכן מאחורי סורגים
כל ai-jail הוא קובץ בינארי אחד, בלי daemon ובלי root. מוסיפים מילה אחת לפני הפקודה שאתם מריצים ממילא.
brew tap akitaonrails/tap && brew install ai-jailai-jail claude