docs(ssh): document ssh workspace sessions

This commit is contained in:
mika kuns
2026-10-02 14:34:34 +02:00
parent 8c5db95c01
commit 2e29e03a8e
3 changed files with 13 additions and 1 deletions
+2 -1
View File
@@ -11,7 +11,7 @@ process hosts (real `claude` TUI in a Mission Control tile).
Autonomous queue tasks are **not** covered here — they stay on the stream-json path via Autonomous queue tasks are **not** covered here — they stay on the stream-json path via
`TaskRunner`. See [worker-task-pipeline.md](worker-task-pipeline.md). `TaskRunner`. See [worker-task-pipeline.md](worker-task-pipeline.md).
## The four session kinds ## The five session kinds
| Kind | Hub spec method | Notes | | Kind | Hub spec method | Notes |
|---|---|---| |---|---|---|
@@ -19,6 +19,7 @@ Autonomous queue tasks are **not** covered here — they stay on the stream-json
| Ad-hoc | `GetAdHocLaunchSpec` | No `--effort` — CLI default | | Ad-hoc | `GetAdHocLaunchSpec` | No `--effort` — CLI default |
| Planning | (planning start/resume) | No `--effort`; uses `--permission-mode default`, **not** `plan` | | Planning | (planning start/resume) | No `--effort`; uses `--permission-mode default`, **not** `plan` |
| List handler | `GetMergeHelperLaunchSpec` / `GetMergeHelperHandoffLaunchSpec` | Model + effort fixed per role (`ModelRegistry.HandlerTriageAlias`/`HandlerWaitAlias`/`HandlerMergeAlias`), **not** from list config; `--permission-mode` via `PermissionModeResolver` (unattended) | | List handler | `GetMergeHelperLaunchSpec` / `GetMergeHelperHandoffLaunchSpec` | Model + effort fixed per role (`ModelRegistry.HandlerTriageAlias`/`HandlerWaitAlias`/`HandlerMergeAlias`), **not** from list config; `--permission-mode` via `PermissionModeResolver` (unattended) |
| SSH workspace | `GetSshLaunchSpec` | Exe is `ssh.exe`, not claude: `-R <random port>:127.0.0.1:<remote_mcp_port>` + one remote shell command that base64-decodes a `claudedo` MCP config (per-session token) to `~/.claudedo/mcp-<paneId>.json` and runs claude. **Not** recorded in `mission_control_sessions`, no `claudedo_pane`/handoff hint. Workspaces: `app_settings.ssh_workspaces`, Settings → SSH-Workspaces |
## ⚠️ Gotcha: never pass task free-text as a CLI argument ## ⚠️ Gotcha: never pass task free-text as a CLI argument
+8
View File
@@ -302,6 +302,14 @@ Weitere Punkte, gebaut + unit-getestet auf `main`, aber **nicht visuell verifizi
`ClaudeProcess`/`ClaudeCliPreflight` den Shim über `cmd.exe /c` tatsächlich startet, nicht `ClaudeProcess`/`ClaudeCliPreflight` den Shim über `cmd.exe /c` tatsächlich startet, nicht
nur, dass der Check ihn findet). nur, dass der Check ihn findet).
## Offene Verifikation (2026-10-02, SSH-Workspaces)
- [ ] Sichtprüfung Settings → SSH-Workspaces: Reiter wählt richtig, Zeilen-Layout, Host-Vorschläge aus `~/.ssh/config`, Papierkorb-Hover, Fehlermeldung bei ungültiger Zeile.
- [ ] VPS-Eintrag im Quick-Session-Menü startet eine Kachel; ssh-Prompts (Host-Key, Passphrase) erscheinen in der Kachel.
- [ ] In der Remote-Session zeigt `/mcp` `claudedo` verbunden, `list_task_lists` funktioniert.
- [ ] Kachel schließen baut den Tunnel ab (Port auf der VPS frei), zwei parallele Kacheln auf denselben Host gehen.
- [ ] Worker nach Update neu starten — erst dann lauscht der Remote-Listener auf 47823.
--- ---
## Bewusst verworfen (nicht erneut vorschlagen) ## Bewusst verworfen (nicht erneut vorschlagen)
+3
View File
@@ -276,6 +276,9 @@ non-obvious, behaviour-changing. A fixed bug is git history, not a finding.
- `worktree_root_strategy` (`sibling` | `central`), `central_worktree_root` - `worktree_root_strategy` (`sibling` | `central`), `central_worktree_root`
- `queue_backstop_interval_ms` (30000) — also the gate/throttle recovery timer - `queue_backstop_interval_ms` (30000) — also the gate/throttle recovery timer
- `company_remote_pattern` (`/_git/`) — Teilstring der origin-URL, an dem `CompanyRepo` ein Firmen-Repo erkennt; nur per Hand editierbar. Schaltet Fetch vor dem Unit-Root, Approve = Push + Draft-PR und Commits ohne Trailer (siehe Azure DevOps). - `company_remote_pattern` (`/_git/`) — Teilstring der origin-URL, an dem `CompanyRepo` ein Firmen-Repo erkennt; nur per Hand editierbar. Schaltet Fetch vor dem Unit-Root, Approve = Push + Draft-PR und Commits ohne Trailer (siehe Azure DevOps).
- `remote_mcp_port` (47823, 0 = SSH sessions off) — second loopback listener of the external MCP app that SSH
tiles reverse-tunnel to. `ExternalMcpAuthMiddleware` accepts **only** a `RemoteSessionTokenRegistry` token
(`X-ClaudeDo-Remote-Token`) there — never loopback trust or the API key, since tunnelled traffic is loopback too.
- `signalr_port` (47821), `claude_bin`, `ticket_api_base_url` — the two UI-writable fields - `signalr_port` (47821), `claude_bin`, `ticket_api_base_url` — the two UI-writable fields
(`claude_bin`: Settings → Dateien → CLAUDE CLI, hub `GetClaudeBin`/`SetClaudeBin`; (`claude_bin`: Settings → Dateien → CLAUDE CLI, hub `GetClaudeBin`/`SetClaudeBin`;
`ticket_api_base_url`: Settings → Externe Dienste, hub `GetTicketSettings`/`SetTicketApiBaseUrl`). `ticket_api_base_url`: Settings → Externe Dienste, hub `GetTicketSettings`/`SetTicketApiBaseUrl`).