תיעוד 70
הרצת Claude Code מאחורי משגר ארגוני
נתב את התהליכים ש-Claude Code מפעיל מהקובץ הבינרי שלו, כולל שירות הרקע וכל הפעלה ב-agent view, דרך משגר נדרש באמצעות
CLAUDE_CODE_PROCESS_WRAPPERאו ההגדרהprocessWrapper.
ארגונים מסוימים דורשים שכל תהליך בתחנת עבודה יופעל דרך משגר (launcher) חובה. המשגר מחיל את ארגז החול (sandbox), בקרות הרשת או הזרקת פרטי ההזדהות שעליהם נשענת מדיניות האבטחה של החברה, והפעלת קובץ בינרי בלעדיו מהווה הפרת מדיניות.
המשתנה CLAUDE_CODE_PROCESS_WRAPPER מפעיל דרך המשגר שלך כל תהליך ש-Claude Code מפעיל מהקובץ הבינרי שלו: שירות הרקע, כל הפעלה שהוא מארח ב-agent view, וההפעלות מחדש של Claude Code לאחר עדכון. הגדר אותו לנתיב המוחלט של המשגר שלך, ו-Claude Code יריץ את המשגר עם הפקודה של Claude Code כארגומנטים שלו.
משגר שעוטף את הפקודה claude ב-PATH שלך אינו יכול להגיע לתהליכים אלה, מכיוון שהם מופעלים ישירות מהנתיב של הקובץ הבינרי בלי לחפש את claude.
הערה: המשתנה
CLAUDE_CODE_PROCESS_WRAPPERדורש את Claude Code בגרסהv2.1.208ומעלה. גרסאות ישנות יותר מתעלמות מהמשתנה ומפעילות כל תהליך ללא עטיפה (unwrapped). ההגדרה המקבילהprocessWrapperדורשת גרסהv2.1.210ומעלה. גרסאות ישנות יותר מתעלמות ממנה כמפתח לא מוכר, אינן מחילות אף משגר, ואינן מדווחות על שגיאה.לאחר פריסת אחת מהאפשרויות, השתמש ב-שלב האימות כדי לוודא שהגרסה הפועלת מחילה אותה.
#מה המשגר מכסה
כאשר CLAUDE_CODE_PROCESS_WRAPPER מוגדר, Claude Code מפעיל כל אחד מהתהליכים הבאים דרך המשגר שלך:
- שירות הרקע ש-
claude agentsוהפעלות רקע מפעילים לפי דרישה. - מארח המסוף (terminal host) והפעלת Claude Code בתוך כל שורה ב-agent view, כולל הפעלות ההמתנה המוכנות מראש (warm standby sessions) שהשירות מחזיק.
- הפעלות שהשירות מפעיל מחדש לאחר עדכון או קריסה.
- ההפעלה מחדש ש-Claude Code מבצע לעצמו כדי לסיים התקנת עדכון, כולל פעולת ההפעלה מחדש לצורך עדכון של agent view.
- תהליכי ההפעלה ש-Remote Control מפעיל. דורש את Claude Code בגרסה
v2.1.210ומעלה. - הפעלות חברי הצוות בחלון מפוצל ש-צוותי סוכנים מפעילים ב-
tmuxאו ב-iTerm2. חלונות חברי הצוות הם תהליכים אינטראקטיביים ולא תהליכי רקע, אך Claude Code מפעיל אותם מהקובץ הבינרי שלו, ולכן המשגר מכסה אותם. דורש את Claude Code בגרסהv2.1.210ומעלה.
ב-Windows, מתעלמים מהמשתנה: חוזה המשגר תלוי ב-exec, שאינו נתמך ב-Windows. מכונת Windows שבה המשתנה מוגדר מריצה כל תהליך ללא עטיפה וממשיכה לעבוד, והסימן היחיד הוא אזהרה ב-יומן הדיבאג. אם מדיניות המשגר שלך חלה על Windows, המשתנה אינו עונה על הדרישה שם: התייחס למכונות Windows ככאלה שאינן עטופות בעת תכנון הפריסה.
#תהליכים שמופעלים מחוץ למשגר
התהליכים הבאים אינם מופעלים דרך המשגר:
- שירות רקע מותקן שקובץ ה-unit שלו נכתב לפני שהמשגר הוגדר:
launchdאוsystemdמפעילים את התהליך הזה מקובץ ה-unit שלו. הפקודות/statusו-claude daemon statusמתריעות כאשר השירות הפועל והמשגר המוגדר אינם תואמים, וההפעלות שהשירות מוליד יופעלו דרך המשגר ברגע שהשירות יופעל מחדש עם המשתנה בהגדרות שלו. - הפעלה שאתה מפעיל בעצמך במסוף, אשר רצה לפי האופן שבו הפעלת אותה. כדי לכסות הפעלות אלה, שים סקריפט בשם
claudeבתיקייה שמופיעה מוקדם יותר ב-PATHשמריץ את המשגר שלך עם הקובץ הבינרי האמיתי, אל תחליף את הקישור הסימבולי המנוהל. הפעלות עצמיות אינן בודקות אתPATH, ולכן שני המשגרים לעולם אינם נערמים זה על גבי זה. - התהליך הראשון של קישור עמוק מסוג
claude-cli://, שמטפל הפרוטוקולים של מערכת ההפעלה מפעיל ישירות. כל מה שאותה הפעלה תפעיל ברקע לאחר מכן ירוץ דרך המשגר. כדי לחסום נתיב זה לחלוטין, מנע את רישום המטפל באמצעות ההגדרהdisableDeepLinkRegistration. - ההפעלה מחדש שמתבצעת משילוב של
--worktreeעם--tmux: מרבב המסוף מפעיל את אותו חלון, ולא הקובץ הבינרי של Claude Code. - מארח העברת ההודעות הייעודי (native-messaging host) ש-Claude in Chrome רושם: הדפדפן מפעיל אותו, ולא הקובץ הבינרי של Claude Code.
#שמות תהליכי עזר במנטרי תהליכים
כאשר משגר מוגדר, ps ו-Activity Monitor מציגים את שם הקובץ הבינרי עם הגרסה עבור תהליכי העזר ברקע במקום התוויות claude bg-pty-host ו-claude bg-spare של Claude Code, מכיוון שפקודת ה-exec של המשגר בונה מחדש את רשימת הארגומנטים. שינוי השם הוא תופעת לוואי, לא הסוואה: התהליכים עצמם אינם משתנים בשום צורה אחרת, ו-Claude Code מזהה את התהליכים שלו לפי נתיב הקובץ הבינרי, לעולם לא לפי שם התצוגה.
#הגדרת המשגר
כתיבת סקריפט המשגר: צור סקריפט בר הרצה בנתיב מוחלט, כגון
/opt/corp/launcher. Claude Code מריץ אותו עם פקודת Claude Code המלאה כארגומנטים שלו, והסקריפט חייב להסתיים בקריאה ל-exec "$@"כדי שהוא יחליף את עצמו ב-Claude Code:#!/bin/sh
#Your organization's setup: enter the sandbox, apply
#network controls, or inject credentials.
exec "$@"
הפוך אותו לבר הרצה באמצעות `chmod +x`. חלק ההגדרה (setup) הוא כל מה שהמשגר שלך חייב לבצע לפני ש-Claude Code רץ. [חוזה המשגר](#the-launcher-contract) מפרט את הכללים שהסקריפט חייב לפעול לפיהם.
> **הערה:**
> אם החלפת בעבר את הקישור הסימבולי `~/.local/bin/claude` במשגר שלך, החזר את הקישור הסימבולי המקורי באותו שינוי. קישור סימבולי שהוחלף גורם להפעלה העטופה הראשונה להפעיל את שירות הרקע דרך שני המשגרים בו זמנית, והוא מעביר את ההתקנה למצב מנוהל חיצונית: הפקודה `/doctor` מדווחת על כך, עדכון אוטומטי משאיר את הקובץ במקומו, וניקוי גרסאות ישנות נשאר מושבת עד שתוכנת ההתקנה תנהל שוב את הנתיב הזה.
2. **הגדרת CLAUDE_CODE_PROCESS_WRAPPER בהגדרות:**
הגדר את המשתנה בבלוק `env` של קובץ הגדרות כדי ששירות הרקע המנותק יירש אותו. פקודת `export` של המעטפת אינה מספיקה: שירות הרקע מופעל לפי דרישה, ממשיך לפעול אחרי שהמעטפת שלך נסגרת, ולעולם אינו קורא מחדש פרופילי מעטפת.
עבור מכונה בודדת, הוסף אותו ל-`~/.claude/settings.json`. כדי לפרוס אותו בכל המכונות בארגון שלך, שים את אותו הבלוק ב-[הגדרות מנוהלות](/docs/en/managed-settings):
```json
{
"env": {
"CLAUDE_CODE_PROCESS_WRAPPER": "/opt/corp/launcher"
}
} כאשר יותר ממקור אחד מגדיר את המשתנה, הערך מההגדרות המנוהלות דורס הן את ~/.claude/settings.json והן ערך שיוצא במעטפת, כך שמשתמשים אינם יכולים לכוון הפעלות עצמיות למשגר אחר.
ההגדרה processWrapper נושאת את אותו הערך כמפתח הגדרות ייעודי ברמה העליונה. הגדר אותה כאשר הארגון שלך מפיץ הגדרות כמפתחות בודדים ולא כבלוק env. ההגדרה processWrapper דורשת את Claude Code בגרסה v2.1.210 ומעלה. קובץ ההגדרות הבא מגדיר את אותו המשגר דרך המפתח:
{
"processWrapper": "/opt/corp/launcher"
} ל-CLAUDE_CODE_PROCESS_WRAPPER יש עדיפות כאשר שניהם מוגדרים.
מכיוון ש-processWrapper היא הגדרה בעלת שם, ארגון שמספק אותה דרך הגדרות מנוהלות מרחוק רואה אותה ברשימה ב-תיבת הדו שיח של אישור האבטחה לצד שאר ההגדרות שמריצות קבצים בני הרצה שסופקו על ידי מנהל המערכת.
הגדרות פרויקט והגדרות מקומיות אינן יכולות להגדיר את המשגר. קובץ שנשמר במאגר אינו רשאי להציב קובץ בינרי לפני כל תהליך של Claude Code במכונה, ולכן Claude Code מתעלם מ-CLAUDE_CODE_PROCESS_WRAPPER ב-.claude/settings.json או ב-.claude/settings.local.json עם אזהרה ב-יומן הדיבאג, ולעולם אינו קורא את המפתח processWrapper מקבצים אלה.
הפעלה מחדש של שירות הרקע וההפעלות שלך: שירות רקע פועל וכל הפעלות
claudeפתוחות קוראים את המשתנה פעם אחת בלבד בעת ההפעלה, ולכן ימשיכו להפעיל תהליכים ללא עטיפה עד שיופעלו מחדש. הרץ אתclaude daemon stop --anyכדי לעצור את השירות שפועל לפי דרישה. הפקודה הבאה שתזדקק לו, כמוclaude agents, תפעיל שירות עטוף. שירות מותקן מקבל את הפקודהclaude daemon stopללא--any. לאחר מכן הפעל מחדש את הפעלות ה-claudeהפתוחות שלך.במכונות שאינך יכול להפעיל מחדש ידנית, ההפעלה הראשונה שתופעל לאחר הפצת ההגדרות תסיים ותסיר שירות שנותר ללא עטיפה שפועל לפי דרישה באופן אוטומטי. מכונה שבה לא מתחילה שום הפעלה חדשה תשמור על השירות הלא עטוף שלה עד שתופעל הפעלה כזו, ושירות מותקן תמיד דורש את ההפעלה מחדש המפורטת בשלב זה.
אימות: הרץ את
/statusבתוך הפעלה: הרשומהSelf-execמציגה את פקודת ההפעלה שפוענחה ומזהירה כאשר שירות הרקע הפועל אינו תואם לה. הפקודהclaude daemon statusמדפיסה את אותו המידע מהמעטפת, כולל לאחר ביטול הגדרת המשתנה, כאשר/statusאינו מציג עוד את הרשומה.
#חוזה המשגר
כאשר המשגר אינו יכול לרוץ, Claude Code מסרב להפעיל את התהליך במקום להפעיל אותו ללא עטיפה. ב-Windows, מתעלמים מהמשתנה ותהליכים מופעלים ללא עטיפה. Claude Code מחייב את הסקריפט בכללים הבאים:
- סיים עם
exec "$@". משגר שמבצע fork לתהליך בן ומסתיים משאיר תהליך יתום של Claude Code ששירות הרקע אינו יכול לעקוב אחריו. ה-agent view מסמן הפעלה כזו כנכשלה עם הודעה המציינת את שם המשגר, והשירות אוסף את מה שהמשגר השאיר אחריו. - אל תשנה את סדר הארגומנטים, אל תבלע אותם ואל תוסיף לפניהם ארגומנטים. הארגומנט הראשון הוא הקובץ הבינרי של Claude Code וכל מה שאחריו הוא ה-argv שלו.
- העבר כל משתנה סביבה שהתקבל בירושה אל
exec. הוספת משתנים, כגון הזרקת פרטי הזדהות, מותרת; השמטת משתנים שהתקבלו בירושה אינה מותרת.- אסימוני האימות של כל הפעלה, בחירת המודל והספק, ו-
CLAUDE_CODE_PROCESS_WRAPPERעצמו מועברים כולם דרך הסביבה המורשת, ולכן משגר שבונה אותה מחדש מתוך רשימת מורשים שובר את ההפעלות שהוא מפעיל, והפקודה/statusמדווחת על אי התאמה של המשגר. - אם המשגר חייב להיכנס למרחב שמות (namespace) או לארגז חול שמאפס את הסביבה, יצא מחדש בתוכו את הסביבה המורשת במדויק.
- אסימוני האימות של כל הפעלה, בחירת המודל והספק, ו-
- הגע אל
execבתוך כשלוש שניות בכל פעם שהמשגר רץ. שיגור רקע קר מריץ את המשגר פעמיים ברצף לפני בית הפלט הראשון, לכן בצע פעולות איטיות כמו החלפת פרטים בהתחברות יחידה (SSO) באופן מושהה או מתוך מטמון. - אפשר קריאה מתוך עצמו. Claude Code מחיל את המשגר על כל הפעלה עצמית מקוננת, ולכן משגר שמקצה משאב בלעדי חייב לזהות שהוא כבר מחזיק בו.
- אל תכתוב למסוף לפני ש-Claude Code מתחיל. כל מה שמודפס לפני ה-
execמדווח כסיבת הקריסה אם ההפעלה נסגרת לפני האתחול.
#מבנה הערך של המשגר
המשתנה CLAUDE_CODE_PROCESS_WRAPPER וההגדרה processWrapper מקבלים את אותו המבנה. עבור רוב המשגרים, הערך הוא הנתיב המוחלט של הסקריפט, כמו /opt/corp/launcher.
כדי להעביר למשגר שלך ארגומנטים משלו, כתוב אותם אחרי הנתיב. Claude Code מפענח את הערך כרשימת ארגומנטים, לא כפקודת מעטפת:
- רווחים מפרידים בין איברים, ומירכאות כפולות מאגדות איבר שמכיל רווחים.
- ערך שמתחיל ב-
[נקרא כמערך מחרוזות של JSON, כגון["/opt/corp/launcher", "--profile", "cc"]. - תחביר מעטפת אינו עובד: אין הרחבת משתנים או globbing, ואופרטור ללא מירכאות כגון
;,|,&, או$(נדחה כשגיאת תצורה במקום להתפרש מחדש.
כאשר לא ניתן להשתמש בערך, Claude Code מסרב להפעיל את התהליך המושפע ו-מדווח על הסיבה.
#הקשר ל-CLAUDE_CODE_SHELL_PREFIX
המשתנה CLAUDE_CODE_PROCESS_WRAPPER עוטף את התהליכים של Claude Code עצמו ומעביר את הפקודה כאיברי argv נפרדים כדי שהמשגר יבצע להם exec. המשתנה CLAUDE_CODE_SHELL_PREFIX עוטף את פקודות המעטפת ש-Claude מריץ עבורך, כגון קריאות לכלי Bash, הוקים, והפקודות שמפעילות שרתי stdio MCP, ומעביר כל אחת מהן כמחרוזת בודדת בעלת מירכאות מעטפת ב-$1 כדי שהמעטפת תעריך אותה מחדש. משגר שנכתב עבור האחד אינו פועל עבור האחר.
#משאבים קשורים
- Agent view: הפעלות הרקע ותהליך המפקח שהמשגר מכסה
- משתני סביבה: רשומת התיעוד של
CLAUDE_CODE_PROCESS_WRAPPER - הגדרות מנוהלות: הפצת בלוק ה-
envעל פני צי מכשירים - תיעוד שגיאות משגר: הודעות הסירוב וכיצד להתאושש