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.
12 KiB
認証とセキュリティ
CodeNomad へのアクセスにより、OpenCode を通じてバックエンドホスト上で作業を実行できます。サーバーパスワード、ブラウザーセッション、ペアリング済み端末は、強力な認証情報として扱ってください。CodeNomad はマルチテナントの実行サンドボックスではありません。
サーバーの認証方法を選ぶ
| 方法 | 寿命と範囲 |
|---|---|
--password または CODENOMAD_SERVER_PASSWORD |
そのバックエンドプロセスの実行時上書き。毎回の起動時に再指定が必要で、永続化されません。管理対象のパスワードファイルより優先します。 |
| 設定で指定したパスワード | アクティブな設定 YAML の隣の auth.json に、ソルト付き scrypt ハッシュを保存します。以後、実行時上書きがない起動で使用します。 |
--generate-token |
ローカルの使い捨て初期設定を有効にします。表示トークンは 60 秒有効です。再利用できる API トークンやリモートコントロールリンクではありません。 |
| リモートコントロールのペアリング | ホストから管理する独立した端末 Cookie 認証。リモートコントロールを参照してください。 |
既定のユーザー名は codenomad です。保存済みの認証ファイルはそのユーザー名を保持し、--username だけを変更しても保存済みの識別情報は改名されません。パスワードの設定、初期設定モード、明示的な認証スキップのいずれもなければ、サーバーは起動を拒否します。
コマンド引数やシェル履歴へのパスワード埋め込みより、保護された環境変数/サービスの秘密情報を優先してください。それでも、プロセス環境や設定ディレクトリを調べられる人は、環境を侵害できる可能性があります。
永続パスワードを初期設定する
- 実行時パスワード上書きなしでローカル起動します。先に証明書を設定せずループバックで初期設定するには、
codenomad --host 127.0.0.1 --https=false --http=true --generate-token --launchを使用します。 - バックエンドのマシンで、表示された Local Connection URL の
/auth/tokenを開き、CODENOMAD_BOOTSTRAP_TOKEN:の後に表示された値を送信します。その出力を共有しないでください。 - 設定 → リモートアクセス → 直接アクセス(ローカルネットワーク、上級者向け) → サーバーパスワード を開きます。
- パスワードを設定 を選び、新しいパスワード と パスワードの確認 に 8 文字以上を入力して、パスワードを保存 を選びます。
- 次回起動時は
--generate-tokenを省き、直接接続には保存済みパスワードを使います。リモートアクセスを有効にする前に、信頼された HTTPS を設定してください。ループバック HTTP の初期設定コマンドは、リモート配備用コマンドではありません。
初期設定は、ホスト自身のループバックリスナーからのみ受け付け、LAN クライアントやリモートコントロールの受信経路からは受け付けません。セットアップでは既定のループバックバインドを維持してください。期限切れ/使用済みトークンには、初期設定での新たな起動が必要です。永続パスワードが既にある場合、初期設定セッションでは代わりに パスワードを変更 を選べます。
auth.json はアプリが管理します。ハッシュの手編集やファイルの公開はしないでください。パスワードが CLI/環境由来の場合、設定画面は置き換えを拒否します。既存の管理対象パスワードを使うには上書きなしで再起動し、新規設定にはローカル初期設定を使います。認証ファイルが読み書きできない場合は、認証無効化ではなく、OS の権限/パスを修正する必要があります。
ブラウザーセッションと失効
直接ログインは、バックエンドのメモリ内に不透明なセッションを作成し、codenomad_session Cookie(または設定した Cookie 名)を発行します。Cookie は HttpOnly、SameSite=Lax、範囲 / で、HTTPS 発行時は Secure です。ブラウザーセッション Cookie であり、バックエンドの再起動でメモリ内セッションは無効になります。要求されたら、その場で再認証し、失敗した変更操作を再送しないでください。
パスワード変更は、以後の認証情報チェックを変えますが、発行済みの直接セッションやリモートコントロール端末を無効化 しません。侵害が疑われる場合:
- ネットワーク公開を制限し、ホストで新しいパスワードを設定するか、実行時の秘密情報を変更して再起動します。
- バックエンドを再起動して、既存の直接セッションを無効化します。
- リモートコントロール → ペアリング済み端末 で、不明な端末を別途 取り消す 操作を行います。経路全体を即座に切断する必要があれば、リモートコントロールを停止します。
- 影響したファイル、プロバイダーアカウント、OpenCode ネイティブのアクティビティを確認します。アクセスを止めても、受け付け済みの作業は巻き戻りません。
独自の未使用 30 日の期限切れと 5 分のペアリングリンクは、リモートコントロールを参照してください。パスワード変更は端末失効ではなく、トンネル停止は端末削除ではありません。
通信とリスナーの公開を保護する
直接リモートアクセスには、信頼された HTTPS を使用します。平文 HTTP は、その区間を観測できる人にパスワード、セッション Cookie、作業内容をさらします。リバースプロキシで TLS を終端する場合、バックエンドとの接続はループバックや保護されたネットワークに置いてください。プロキシの TLS は、公開された上流 HTTP 接続を暗号化しません。
--dangerously-skip-auth/CODENOMAD_SKIP_AUTH は、CodeNomad の直接リスナーのログインを無効にし、リクエストを認証済みと扱います。サーバーを安全に公開できるようにするもの ではありません。強制的な境界保護なしで到達できるリスナーは、到達できる全員にアクセスを与えます。VPN 接続だけでは、信頼できる VPN ユーザーと信頼できないユーザーを区別しません。すべてのアクセス経路を独立して設計・検証していない限り、認証を有効にしてください。このフラグを使っても、リモートコントロールにはペアリング済み端末が必要です。
バインド表と TLS 手順、特にスタンドアロン HTTP 専用モードを確認してください。このモードは --host に従い、ループバック以外に平文を公開する場合があります。証明書エラーを検証の無効化で解決しないでください。
CODENOMAD_SKIP_AUTH=false は、--dangerously-skip-auth を指定しない限り認証を有効に保ちます。 1、true、yes、on は認証のバイパスを有効にし、大文字・小文字と前後の空白は無視されます。0、false、no、off、空または空白のみの値、未定義の変数ではバイパスは無効のままです。それ以外の値では、CLI フラグを指定してもサーバーは起動しません。フラグは有効な無効化値より優先します。CLI リファレンスを参照してください。
ホストの境界を理解する
--workspace-root は開けるワークスペースを制限し、--unrestricted-root は参照を緩和します。どちらも OS の隔離領域、コンテナー、ファイルシステムのサンドボックスではなく、許可されたネイティブツールの動作を制限しません。エージェント、シェルコマンド、プラグイン、MCP ツールは、実行ホストの権限と、それぞれ設定した認証情報で動作します。
SideCar は信頼された追加機能です。CodeNomad は自身のサインイン Cookie とペアリング済み端末の Cookie を SideCar サービスに渡しませんが、SideCar のページは CodeNomad と同じオリジンで読み込まれ、そのスクリプトはサインイン済みのセッションで操作できます。CodeNomad 自体と同程度に信頼できるサービスだけを登録してください。
実際の分離が必要なら、OS アカウント、コンテナー/VM、上流の権限設定を使用してください。1 つのタブしか見えないはずだという期待だけで、端末にアクセスを与えないでください。サーバー設定と共有 OpenCode サービスは、他の会話/プロジェクトに影響する場合があります。それぞれの境界について、OpenCode のセットアップ、権限、拡張機能を参照してください。
認証情報と診断情報を非公開にする
プロバイダー接続とグローバルな会話ストレージは OpenCode が管理します。CodeNomad は、対応する使用量連携のため、接続メタデータと選択した認証情報をサーバー側で読み取ります。ブラウザー API はプロバイダーの秘密値を返しません。外部管理の OAuth ログイン更新は管理元の責任であり、CodeNomad はその更新トークンを交換しません。プロバイダーを参照してください。
| 情報 | 扱い |
|---|---|
| パスワード、初期設定トークン、ペアリングリンク、Cookie | Issue、スクリーンショット、シェルの記録、共有ログに貼り付けないでください。 |
auth.json、TLS 秘密鍵、トンネル識別情報、設定の秘密情報 |
OS 権限と暗号化バックアップで保護し、サポートのためにディレクトリ全体をアップロードしないでください。 |
| 会話テキスト、添付、ワークスペースパス、リモートアドレス | 人、プロジェクト、インフラを特定する場合があるため、共有前に確認・伏せ字にしてください。 |
| プロバイダーキーと音声の認証情報 | 意図した設定/認証管理元だけに入力し、どのプロバイダーにデータが送られるか確認します。音声を参照してください。 |
| debug/trace ログとネットワークキャプチャ | 必要な分だけ収集し、ローカルで確認して報告前に伏せ字にします。下流ツールの出力に秘密がないとは想定しないでください。 |
設定 → 情報 → バグを報告 は、リスナー、アドレス、パス、認証情報、会話内容を事前入力せず、範囲を限定した診断を準備します。自分で追加する内容も、送信前に確認してください。サポートを参照してください。