כלי שורת פקודה אמור להיסגר כשסוגרים את הטרמינל. בדיון סוער ב-GitHub התברר כי מפתחים שהתקינו את Codex CLI גילו מציאות אחרת לגמרי. החל מגרסה 0.157.0, הפעלה של הכלי מרימה תהליכי רקע מתמשכים, מורידה מאות מגה-בייט של קבצים בינאריים לתיקיית המשתמש ומפעילה לולאת עדכון עצמאית. כל זה קורה בלי לבקש רשות, ובלי להודיע במסך.
מי שעובד ישירות מול המודל של OpenAI מצפה לכלי שמשתלב בסביבת העבודה, לא לסוכן שמשתלט עליה. לא הייתי ממהר להשאיר את ברירת המחדל הזאת פעילה אפילו ליום נוסף. התנהגות זו משפיעה ישירות על מי שמריץ פקודות בסביבת הפיתוח המקומית.
שרת נסתר שלא נסגר
ההפעלה של הפקודה הבסיסית ביותר בסשן אינטראקטיבי יוצרת תהליך רקע בשם codex app-server daemon. התהליך מתנתק ממסוף ההפעלה, עובר לניהול של PID 1, וממשיך לעבוד גם כשכל חלונות הטרמינל נסגרים. בנוסף, הכלי משכפל חבילה מלאה בגודל 374 מגה-בייט ישירות לתוך תיקיית המשתמש בנתיב ~/.codex/packages/app-server-daemon. החבילה כוללת קבצים בינאריים מקבילים שכבר הותקנו במערכת דרך מנהל החבילות.
מהרגע שהשכפול מתבצע, נוצר ניתוק מוחלט בין גרסת התוכנה שהותקנה דרך npm, pacman או brew לבין מה שרץ בפועל. ה-daemon פועל מתוך העותק המבודד, מנותק מניהול הגרסאות של המערכת.
עדכונים שקטים ודריסת פרוקסי
החלק הבעייתי מגיע מתהליך נפרד בשם pid-update-loop. התהליך מתחיל לרוץ חמש דקות לאחר העלייה הראשונה, ומאותו רגע בודק אם יש גרסאות חדשות מדי שעה. כשהוא מזהה גרסה חדשה, הוא מוריד אותה ברקע ומאתחל את השרת המקומי בשקט. זה גורם לקטיעה פתאומית של משימות ריצה ארוכות, כפי שעלה בדיווחי באגים קודמים במאגר, משום שהשרת מאלץ כיבוי של משימות פעילות לאחר דקה אחת בלבד.
אם הרצתם פקודה עם הגדרות רשת זמניות או משתנה HTTPS_PROXY ייעודי, כל החלונות והסשנים הבאים שיפתחו ינותבו בכוח דרך אותן הגדרות ישנות. השרת פשוט שומר את סביבת העבודה הראשונה שפגש ומתעלם משינויים מאוחרים.
זעם בקהילה וחששות אבטחה
התגובות של המפתחים בקהילה היו חריפות. חלקם ציינו כי תהליך שמתקין שרתים ברקע, משכפל קבצים לתיקיות נסתרות ומתעדכן מעצמו ללא אישור המשתמש פועל בדיוק כמו נוזקה. מנהלי אבטחה בארגונים מתקשים לקבל מצב שבו קוד בינארי חיצוני מתעדכן ללא פיקוח של מנהל חבילות מורשה וללא רישום ביומני המערכת.
דברים לא אמורים לייצר שרתי מסתורין ותהליכים פתאום בעדכוני גרסה קטנים בלי לתת התראה מראש.megahall ב-GitHub
החשש של צוותי האבטחה מתהליכי קוד סגור שמתעדכנים מעצמם ברקע מקבל כאן חיזוק ממשי, במיוחד כשאין דרך מובנית לעקוב אחרי השינויים שבוצעו במחשב.
כך מנטרלים את המנגנון
רבים מנסים לעצור את התהליך באמצעות הפקודה codex app-server daemon stop, אך מגלים שזה פותר רק חצי מהבעיה. פקודת העצירה סוגרת את שרת היישומים, אך משאירה את תהליך העדכון השעתי pid-update-loop פועל וממתין ברקע. כדי להחזיר שליטה, צריך לבטל את ההגדרה לחלוטין, לעצור את השרת, לחסל את תהליך העדכון ביד ולמחוק את הקבצים המשוכפלים.
כדי לבטל את ההפעלה האוטומטית, מריצים codex features disable daemon_auto_start, או מוסיפים daemon_auto_start = false לקובץ config.toml. לאחר מכן עוצרים את השרת עם codex app-server daemon stop, ומחסלים את לולאת העדכונים העקשנית באמצעות הפקודה pkill -f 'app-server daemon pid-update-loop'. לסיום, אפשר לפנות מקום בדיסק על ידי מחיקת התיקייה המשוכפלת בעזרת rm -rf ~/.codex/packages/app-server-daemon.
| פרמטר | לפני גרסה 0.157.0 | מגרסה 0.157.0 ואילך |
|---|---|---|
| ריצת תהליכים ברקע | מסתיים עם סגירת הטרמינל | שרת מתמשך ברקע המנותק מהטרמינל |
| שכפול קבצים בינאריים לדיסק | רץ מנתיב מנהל החבילות המקורי | משכפל 374 מגה-בייט לתיקיית המשתמש |
| מנגנון עדכונים | ידני דרך מנהל החבילות | בדיקה שעתית שקטה ואתחול כפוי ברקע |
| שמירת משתני סביבה | דינמי לפי כל הפעלה בטרמינל | נעול לפי משתני הסביבה של ההפעלה הראשונה |
בינתיים ב-OpenAI עדיין לא הפכו את התכונה לבחירה מפורשת, והמשתמשים נאלצים לעשות סדר בעצמם. תבדקו את מנהל המשימות שלכם.
מקורות
- Codex CLI installs a persistent, self-updating background daemon by defaulthttps://github.com/openai/codex/issues/48195
- #40969https://github.com/openai/codex/issues/40969
- Backendhttps://weba.co.il/glossary/backend/
הידיעה נכתבה מהמקורות שלמעלה בתאריך הפרסום, וכל טענה בה נבדקה מולם. מצאתם טעות? כתבו.