## Problem
Closing a project tab only hid it in that window. The backend workspace
record kept routing the folder's events, notifications, auto-accept and
pending-request recovery, invisibly, until the palette-only **Stop
Workspace** command was run on the active tab. That command still showed
the V1 message "Stop OpenCode instance? This will stop the server."
although V2 has one shared OpenCode service, and it called
`debug.location.evict`, which (per OpenCode source) rejects pending
permissions, cancels pending Forms, fails plugin RPC and kills terminals
of that directory, even for sessions started elsewhere. OpenCode loads
locations on demand and unloads idle ones itself.
## Change
- **Closing a project tab** (×, Ctrl/Cmd+W) removes that tab's backend
workspace record. CodeNomad stops following it; sessions keep running in
OpenCode and reappear when the project is reopened.
- **Another tab of the same folder** has its own record and is
unaffected.
- **The same record shown in another window**: that window's tab closes
through the existing `workspace.stopped` broadcast, with an info
notification ("closed from another window"); the initiating window shows
nothing.
- **CodeNomad never evicts OpenCode locations**: eviction, its
serialization helpers and `locationOwned` bookkeeping are removed. A
failed launch now always removes its logical record (the retention only
existed to retry a failed eviction).
- **Stop Workspace removed** (command, confirm dialog, i18n keys in all
locales).
- Unchanged: opening an open project still offers a new tab (recent row)
or switching (switch button); temporary projects keep Keep / Discard /
Cancel; window close, app quit, reload, restore and backend shutdown
delete nothing; disconnected-instance dismissal stays local.
- Delete failure: error toast, record kept and reachable from the home
page, no automatic retry.
## Docs
Help in all 10 locales (`projects`, `index`, `desktop`, `server`,
`opencode`, `missions`), `AGENTS.md`, `CONTRIBUTING.md`,
`dev-docs/architecture.md`, `packages/server/README.md` and the
architecture-guide skill now describe the new contract.
## Validation
- UI store tests (`--conditions=browser`): app-tabs,
temporary-instances, workspace-list-reconciliation-fence,
instances-restore-ownership — 30/30.
- Server: manager + shared service 54/54; event ownership and workspace
identity suites pass.
- New real-component browser regression (click ×, Ctrl+W, Cmd+W): 3/3;
project restoration (Electron/Tauri) and new-instance launcher browser
suites pass.
- `npm run test:help` 9/9 (250 pages); UI, server and Electron
typechecks.
9.6 KiB
CodeNomad ヘルプ
このガイドでは、OpenCode サービスに接続した現在の CodeNomad デスクトップ版またはブラウザー版ワークスペースの操作方法を説明します。OpenCode の設定チュートリアルや過去のバージョンの記録ではなく、CodeNomad の操作、実行範囲、復旧に焦点を当てています。
最初にお読みください
CodeNomad は、ワークスペースを 1 つの共有 OpenCode バックグラウンドサービスに接続します。セッションとメッセージは OpenCode が、タブ、入力欄の下書き、レイアウトは CodeNomad クライアントが管理します。タブを閉じると CodeNomad 内でそのプロジェクトが閉じられますが、セッションは OpenCode で続き、プロジェクトを開き直すと再び確認できます。CodeNomad を閉じても OpenCode は停止しません。
- ホストの要件と OpenCode のセットアップを確認します。
- プロジェクトを開き、会話のエージェント、モデル、思考の設定を選びます。
- 認証情報の変更、サービスの再起動、履歴の削除を行う前に、影響する範囲を確認します。他のクライアントも同じネイティブサービスを使用している場合があります。
公開ヘルプサイトは、CodeNomad、そのバックエンド、ログインがなくても利用できます。デスクトップの ヘルプ → CodeNomad ヘルプ とコマンドパレットの ヘルプを開く は、現在の UI 言語でヘルプを別に開きます。言語を変更しても、保存済みの会話は翻訳されません。
ローカルデスクトップクライアントの 設定 は、ネイティブの 設定 ウィンドウを開きます。ブラウザーおよびリモートクライアントでは、埋め込みの設定画面を使用します。設定 → プロバイダー のような経路は、どちらでも同じ設定セクションを指します。
準備済みのホストでスタンドアロンのブラウザーワークスペースを使用する場合は、サーバーガイドで、次の起動方法と認証・TLS の要件を説明しています。
npx @neuralnomads/codenomad --generate-token --launch
クライアントを選ぶ
| 機能 | ローカルデスクトップ | 直接接続のブラウザーまたはリモートサーバーウィンドウ | リモートコントロールでペアリングした端末 |
|---|---|---|---|
| プロジェクト、会話、ファイル、履歴 | バックエンドのフォルダーとネイティブセッション | 接続先サーバーのフォルダーとセッション | ホストの許可されたワークスペース画面 |
| ネイティブの設定とデスクトップウィンドウ | 利用可能 | ブラウザー/リモート設定はクライアント内で表示 | ホスト専用のデスクトップ操作は利用不可 |
| セッションのブラウザープレビュー | Electron と Windows Tauri ではネイティブ、その他の Tauri 環境では iframe | 利用可能な環境で iframe | ホスト専用のプレビューエンドポイントは利用不可 |
| ネイティブのデスクトップ/ブラウザー自動操作 | 所有するローカルウィンドウ/プレビュー | ネイティブのデスクトップ自動操作の代替にはならない | ホスト専用の自動操作エンドポイントは利用不可 |
| 認証 | ローカル初期設定またはパスワードセッション | サーバーパスワードセッション | ペアリング済み端末の認証情報 |
| PWA のインストール | ネイティブアプリまたはブラウザーを使用 | ブラウザー依存。安全なコンテキストが必要 | ブラウザー依存。ペアリングも必要 |
詳細な制限は、ブラウザープレビューと SideCar、リモートコントロール、モバイル/PWAを参照してください。リモートウィンドウを開いても、端末のファイルシステムがサーバーのワークスペースになるわけではありません。
状態の管理元を理解する
| 用語 | CodeNomad での意味 |
|---|---|
| プロジェクトタブ/ワークスペース/インスタンス | 明示的に開いたフォルダーへの CodeNomad の接続。複数のタブが共有サービスを使用できます。 |
| 会話/セッション | ディレクトリに関連付けられた、OpenCode ネイティブの履歴と実行。 |
| ファミリー | 会話と、その配下の再帰的なサブセッション。移動、アクティビティ、Yolo、ミッション操作に関係します。 |
| ワークツリー | 閲覧またはセッション配置用に選んだ、所有関係が確認されたリポジトリのチェックアウト。閲覧しても会話は移動しません。 |
| Location | ディレクトリ単位の OpenCode ネイティブ実行コンテキスト。プロジェクトタブを閉じても CodeNomad はこれを解放せず、OpenCode がその寿命を管理します。 |
| CodeNomad バックエンド | ワークスペース、Git、認証、クライアント接続を提供するサーバー。そのアカウントと環境が、バックエンドのファイルシステムへのアクセスを決めます。 |
| 設定 | サーバーの設定ディレクトリにある CodeNomad の設定。グローバル/プロジェクトの OpenCode 設定には、固有のネイティブな適用範囲があります。 |
| ウィンドウ | 独自のタブ、ナビゲーション、下書き、復元された表示を持ちます。ネイティブ履歴は共有され、ウィンドウごとには複製されません。 |
| デスクトップデータプロファイル | 明示的なネイティブ/クライアントストレージの選択。OpenCode セッションや、すべての共有設定を自動的に分離するものではありません。 |
ワークスペースのルートは、CodeNomad が開くフォルダーを制限しますが、エージェントのサンドボックスではありません。ホストの公開や広いツールアクセスの許可に先立ち、セキュリティを確認してください。
目的から探す
| 目的 | ガイド |
|---|---|
| ワークスペースのインストールまたは配信 | インストール、サーバーリファレンス、ネットワークと TLS |
| 複数のチェックアウトや会話で作業 | プロジェクト、会話、ファイル |
| 履歴の検索や安全な整理 | 履歴 |
| ネイティブの質問や権限リクエストへの回答 | 権限 |
| 範囲を限定した作業や日々の作業の調整 | ミッション |
| 実行環境と連携の設定 | OpenCode、プロバイダー、連携 |
| 別の端末からの接続 | リモートコントロール、セキュリティ、モバイル |
| ワークスペースのカスタマイズ | 設定、ショートカット、音声、拡張機能 |
| ネイティブアプリの管理 | デスクトップ、ブラウザープレビューと SideCar、更新 |
| 問題の診断や貢献 | トラブルシューティング、サポートとソースビルド |
作業を変更せずに監視する
ステータスパネルには、アクティブなセッションのプロバイダー使用量とネイティブのバックグラウンド Shell が表示されます。会話の状態と子のアクティビティにより、作業中、コンパクト化中、入力待ちのセッションを識別できます。バックグラウンド Shell の監視は、入力欄からの Shell リクエストの送信や、別途ホストされるターミナル SideCar の使用とは異なります。
- 選択した会話の Location(会話を選んでいない場合は開いているワークスペース)で ステータス → バックグラウンドシェル を開きます。
- 提供されているコマンド、シェル、ディレクトリ、状態、PID、終了コードを確認し、出力を表示 で利用可能なネイティブ出力を開きます。
- 破棄するには、実行中なら 停止して削除、終了後なら 削除 を使用し、対象を確認します。
実行中の Shell を削除すると、そのプロセスは停止します。出力ウィンドウを閉じるだけでは停止しません。更新/再接続では、見逃した出力イベントを再構築せず、現在のネイティブ状態を読み取ります。
表示用スナップショットは、ネイティブの変更、再接続、表示時の必要に応じて更新されます。再生が保証されたログではありません。結果が不確かな場合は、変更操作を再試行する前に正規の状態を更新してください。通知やイベントを見逃したという理由だけで、再送信しないでください。