מדריך קלוד קוד בעברית

תיעוד 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 מזהה את התהליכים שלו לפי נתיב הקובץ הבינרי, לעולם לא לפי שם התצוגה.

#הגדרת המשגר

  1. כתיבת סקריפט המשגר: צור סקריפט בר הרצה בנתיב מוחלט, כגון /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 מקבצים אלה.

  1. הפעלה מחדש של שירות הרקע וההפעלות שלך: שירות רקע פועל וכל הפעלות claude פתוחות קוראים את המשתנה פעם אחת בלבד בעת ההפעלה, ולכן ימשיכו להפעיל תהליכים ללא עטיפה עד שיופעלו מחדש. הרץ את claude daemon stop --any כדי לעצור את השירות שפועל לפי דרישה. הפקודה הבאה שתזדקק לו, כמו claude agents, תפעיל שירות עטוף. שירות מותקן מקבל את הפקודה claude daemon stop ללא --any. לאחר מכן הפעל מחדש את הפעלות ה-claude הפתוחות שלך.

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

  2. אימות: הרץ את /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 כדי שהמעטפת תעריך אותה מחדש. משגר שנכתב עבור האחד אינו פועל עבור האחר.

#משאבים קשורים