docs(help): bring the user guide back in line with the current app The help was written on 2026-10-14 and about forty user-visible changes merged since without touching it, so several pages described controls that no longer exist: Missions still listed four playbooks and a Save step for preferences that now save on each change, the depth editor kept its old names, notifications still had their former switches, and voice input pointed to a microphone button that is not in the composer. Every English page was re-checked claim by claim against the current labels (English UI messages) and behaviour, then the nine translations were updated to match, using each locale's own UI labels. Notable corrections: Missions (Compare two models, autosaving defaults with Apply to / Global / Reset, Subsession nesting depth, prepared hand-offs, retired-task interrupts, the named causes of "Mission Control is unavailable", standalone server support); conversations and history (reasoning/tool durations, token lines adding up the cleanup selection, presets including Nothing, timeline markers following Message content, in-place reveal of long text, Open in session, focus after send, Queue message / Steer now, Retrying); settings (notification routing table and defaults, Stats, Mode, info tips, Server setting badge, localized native menus); shortcuts (72 actions, Clear shortcut, Ctrl/Cmd+K); voice (More actions entries, Save status); files (live Workspace refresh, Show 200 more); OpenCode, install, server and updates (2.1.1 recommended, OpenCode 2 beside an older installation, version card first, private loopback listener for Missions, preview releases offered once all builds are published); providers, integrations, browser, SideCars, desktop and remote pages. Translations also repaired older drift, mainly the project-tab closing passages. The Chat settings table header (Default state, its title, item column, the thinking row and its accessible label) was still English in eight locales; it is now translated so the help can cite what users see. AGENTS.md now asks every PR changing user-visible behavior to update the affected help pages in the same PR, since CI validates structure and links but not whether the text still matches the UI; it also corrects the needs-input notification default. USER_HELP.md no longer claims native menus stay English. Validation: npm run test:help (all ten locales, 25 pages, heading ids unchanged), a full help build, and the i18n and transcript-visibility unit tests.
11 KiB
אימות ואבטחה
גישה ל־CodeNomad יכולה להריץ עבודה במארח שרת הקצה באמצעות OpenCode. התייחסו לסיסמאות שרת, לסשנים בדפדפן ולמכשירים מצומדים כאל אישורי גישה רבי עוצמה. CodeNomad אינו ארגז חול להרצה מרובת דיירים.
בחירת אופן אימות השרת
| שיטה | משך חיים והיקף |
|---|---|
--password או CODENOMAD_SERVER_PASSWORD |
דריסה בזמן ריצה עבור תהליך שרת הקצה. נדרשת שוב בכל הפעלה; אינה נשמרת. גוברת על קובץ הסיסמה המנוהל. |
| סיסמה שהוגדרה בהגדרות | שומרת גיבוב scrypt עם מלח ב־auth.json לצד קובץ YAML של התצורה הפעילה. משמשת בהפעלות הבאות ללא דריסה בזמן ריצה. |
--generate-token |
מאפשר אתחול מקומי חד־פעמי; האסימון המודפס תקף ל־60 שניות. הוא אינו אסימון API לשימוש חוזר או קישור לשליטה מרחוק. |
| צימוד לשליטה מרחוק | אימות נפרד באמצעות עוגיית מכשיר, המנוהל מהמארח; ראו שליטה מרחוק. |
שם המשתמש כברירת מחדל הוא codenomad. קובץ אימות שמור שומר את שם המשתמש שלו; שינוי --username בלבד אינו משנה את שם הזהות השמורה. ללא סיסמה מוגדרת, מצב אתחול או דילוג מפורש על אימות, השרת מסרב לעלות.
העדיפו סוד מוגן בסביבה/בשירות על פני הטמעת סיסמה בארגומנטים לפקודה או בהיסטוריית המעטפת. מי שיכול לעיין בסביבת התהליך או בתיקיית התצורה עדיין עשוי להשתלט על ההתקנה.
אתחול סיסמה קבועה
- הפעילו מקומית ללא דריסת סיסמה בזמן ריצה. לאתחול ב־loopback בלי להגדיר תעודה תחילה, השתמשו ב־
codenomad --host 127.0.0.1 --https=false --http=true --generate-token --launch. - במחשב שרת הקצה, פתחו
/auth/tokenב־Local Connection URL המודפס, ושלחו את הערך המודפס אחריCODENOMAD_BOOTSTRAP_TOKEN:. אל תשתפו פלט זה. - פתחו הגדרות → גישה מרוחקת → גישה ישירה (רשת מקומית, מתקדם) → סיסמת שרת.
- בחרו הגדר סיסמה, מלאו סיסמה חדשה ו־אשר סיסמה בלפחות שמונה תווים, ואז בחרו שמור סיסמה.
- בהפעלה הבאה השמיטו
--generate-tokenוהשתמשו בסיסמה השמורה לחיבורים ישירים. לפני הפעלת גישה מרחוק, הגדירו HTTPS מהימן; פקודת הגדרת HTTP ב־loopback אינה פקודת פריסה מרוחקת.
אתחול מתקבל רק ממאזין ה־loopback של המארח עצמו, לא מלקוח ברשת המקומית או מכניסה של שליטה מרחוק. השאירו את ההאזנה כברירת מחדל ב־loopback לצורך ההגדרה. אסימון שפג או נוצל דורש הפעלת אתחול חדשה. אם סיסמה קבועה כבר קיימת, סשן האתחול מאפשר לבחור שנה סיסמה במקום זאת.
auth.json מנוהל בידי היישום; אל תערכו גיבוב ידנית ואל תפרסמו את הקובץ. אם הסיסמה הגיעה מה־CLI/מהסביבה, ההגדרות מסרבות להחליפה: הפעילו מחדש ללא הדריסה כדי להשתמש בסיסמה מנוהלת קיימת, או השתמשו באתחול מקומי להגדרת אחת. קובץ אימות שאי אפשר לקרוא או לכתוב דורש תיקון הרשאות/נתיב במערכת ההפעלה, לא השבתת אימות.
סשנים בדפדפן וביטול גישה
התחברות ישירה יוצרת סשן אטום בזיכרון שרת הקצה ועוגיית codenomad_session (או בשם העוגייה שהוגדר). העוגיות הן HttpOnly, SameSite=Lax, תחומות ל־/, ומסומנות Secure כשמונפקות ב־HTTPS. אלו עוגיות סשן דפדפן; הפעלה מחדש של שרת הקצה מבטלת את הסשנים בזיכרון. התחברו מחדש במקום כשמתבקשים, במקום לשלוח שוב פעולות שינוי שנכשלו.
שינוי סיסמה משנה בדיקות אישורים עתידיות; הוא אינו מבטל סשנים ישירים או מכשירי שליטה מרחוק שכבר אושרו. בחשד לפריצה:
- הגבילו חשיפה לרשת והגדירו סיסמה חדשה במארח, או שנו את סוד זמן הריצה והפעילו מחדש.
- הפעילו מחדש את שרת הקצה כדי לבטל את הסשנים הישירים הקיימים שלו.
- תחת שליטה מרחוק → מכשירים מצומדים, השתמשו ב־בטל גישה למכשירים לא מוכרים בנפרד. עצרו שליטה מרחוק אם עליכם לנתק מיד את כל נתיב הגישה הזה.
- בדקו קבצים, חשבונות ספקים ופעילות OpenCode מקורית שהושפעו. עצירת גישה אינה ביטול עבודה שכבר התקבלה להרצה.
ראו שליטה מרחוק לגבי תפוגה נפרדת לאחר 30 ימי חוסר פעילות וקישורי צימוד לחמש דקות. שינוי סיסמה אינו ביטול מכשיר, ועצירת מנהרה אינה מחיקת מכשיר.
הגנת התעבורה וחשיפת המאזין
השתמשו ב־HTTPS מהימן לגישה ישירה מרחוק. HTTP גלוי חושף סיסמאות, עוגיות סשן ותוכן עבודה לכל מי שיכול לצפות במקטע הרשת הזה. אם TLS מסתיים במתווך הפוך, השאירו את המקטע לשרת הקצה ב־loopback או ברשת מוגנת אחרת; TLS במתווך אינו מצפין חיבור HTTP חשוף לשרת שמאחוריו.
--dangerously-skip-auth / CODENOMAD_SKIP_AUTH משבית את ההתחברות למאזין הישיר של CodeNomad ומתייחס לבקשות כמאומתות. הוא אינו הופך את חשיפת השרת לבטוחה. מאזין נגיש ללא מעטפת הגנה אוכפת מעניק גישה לכל מי שיכול להגיע אליו; חיבור VPN לבדו אינו מבחין בין משתמשי VPN מהימנים ולא מהימנים. השאירו אימות פעיל אלא אם תכננתם ואימתתם באופן עצמאי כל נתיב גישה. שליטה מרחוק עדיין דורשת מכשיר מצומד, גם עם דגל זה.
בדקו את טבלת ההאזנה ונוהלי TLS, במיוחד במצב עצמאי של HTTP בלבד: הוא מכבד את --host ועשוי לחשוף טקסט גלוי מעבר ל־loopback. לעולם אל תפתרו שגיאות תעודה בהשבתת אימות התעודה.
CODENOMAD_SKIP_AUTH=false משאיר את האימות פעיל, אלא אם מעבירים --dangerously-skip-auth. 1, true, yes או on מפעילים את עקיפת האימות, ללא תלות ברישיות ובהתעלמות מרווחים בתחילת הערך ובסופו; 0, false, no, off, ערך ריק או המכיל רק רווחים ומשתנה שאינו מוגדר משאירים אותה כבויה. כל ערך אחר מונע את הפעלת השרת, גם עם דגל ה־CLI. הדגל גובר על ערך כיבוי תקין; ראו מדריך CLI.
הבנת גבול המארח
--workspace-root מגביל אילו סביבות עבודה אפשר לפתוח, ו־--unrestricted-root מרחיב את העיון. אף אחד מהם אינו כלא של מערכת ההפעלה, מכל, ארגז חול למערכת הקבצים או מגבלה על מה שכלי מקורי מורשה יכול לעשות. סוכנים, פקודות מעטפת, תוספים וכלי MCP פועלים בהרשאות מארח ההרצה ובפרטי ההתחברות המוגדרים שלהם.
SideCars הם תוספות מהימנות. CodeNomad מונע משירות ה־SideCar את עוגיות ההתחברות והמכשיר המצומד שלו, אך דף ה־SideCar נטען באותו מקור (origin) כמו CodeNomad, והסקריפטים שלו יכולים לפעול באמצעות הסשן המחובר שלכם. רשמו רק שירותים שאתם סומכים עליהם כמו על CodeNomad עצמו.
השתמשו בחשבונות מערכת הפעלה, במכלים/מכונות וירטואליות ובהגדרות האישורים של OpenCode כשנדרש בידוד ממשי. אל תעניקו גישה למכשיר רק מפני שאתם מצפים שיראה לשונית אחת בלבד. תצורת השרת ושירות OpenCode המשותף יכולים להשפיע על שיחות/פרויקטים אחרים; ראו הגדרת OpenCode, אישורים ו־הרחבות לגבולות הנפרדים שלהם.
שמירה על פרטיות אישורים ונתוני אבחון
OpenCode הוא הבעלים של חיבורי הספקים ואחסון השיחות הגלובלי שלו. CodeNomad קורא מטא־נתוני חיבור ופרטי התחברות נבחרים בצד השרת לשילובי שימוש נתמכים; ממשקי API בדפדפן אינם מחזירים ערכי סוד של ספקים. רענון התחברות OAuth בבעלות חיצונית שייך לבעליו; CodeNomad אינו מחליף את אסימוני הרענון האלה. ראו ספקים.
| חומר | טיפול |
|---|---|
| סיסמאות, אסימוני אתחול, קישורי צימוד, עוגיות | לעולם אל תדביקו בדיווחי תקלות, בצילומי מסך, בתמלילי מעטפת או ביומנים משותפים. |
auth.json, מפתחות TLS פרטיים, זהות מנהרה, סודות תצורה |
הגנו בהרשאות מערכת הפעלה ובגיבויים מוצפנים; אל תעלו תיקיות שלמות לתמיכה. |
| טקסט שיחה, קבצים מצורפים, נתיבי סביבת עבודה וכתובות מרוחקות | בדקו/השחירו לפני שיתוף; הם עלולים לזהות אנשים, פרויקטים או תשתיות. |
| מפתחות ספקים ואישורי שירותי קול | הזינו רק בהגדרות/אצל בעל האישורים המיועד; בדקו איזה ספק מקבל נתונים. ראו קול. |
| יומני debug/trace ולכידות רשת | אספו רק את הנדרש, בדקו מקומית והשחירו לפני דיווח. אל תניחו שפלט של כל כלי בהמשך השרשרת נקי מסודות. |
הגדרות → מידע → דווח על באג מכין אבחון מוגבל בלי למלא מראש מאזינים, כתובות, נתיבים, פרטי התחברות או תוכן שיחות. בדקו כל דבר שאתם מוסיפים בעצמכם לפני השליחה. ראו תמיכה.