aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorCan Celik <ogulcancelik@gmail.com>2026-09-01 15:48:22 +0300
committerGitHub <noreply@github.com>2026-09-01 15:48:22 +0300
commit207be3c771d281baae6e5fa0fb74be9a056e97a2 (patch)
treed7b037ecdf629224a048c841d11659efdc23507d /docs
parent8a6d697308162874a236c84aac0b0f8c7ac01f83 (diff)
refactor: render the shell in the client (#3487)
* feat: add opt-in client-rendered shell * feat: add client-owned shell mouse controls * feat: complete client-owned shell chrome * feat: add client-owned shell settings and notifications * feat: run client shell custom commands * feat: render popup terminals in client shell * feat: add client-owned scrollback and copy mode * fix: preserve client worktree trust defaults * feat: render startup diagnostics in client shell * feat: render onboarding in client shell * feat: render product announcements in client shell * feat: render release notes in client shell * feat: render mobile switcher in client shell * feat: render kitty graphics in client shell * fix: preserve client shell lifecycle coherence * refactor: route client shell commands through endpoint connections * refactor: make the client-rendered shell the default * refactor: remove monolithic launch mode * refactor: complete client-rendered shell cutover * perf: retain client pane surface updates * perf: scale retained pane surface updates * perf: remove remote pane input latency * test: make client shell checks platform-independent * fix: prevent client timer starvation * test: fix client shell platform gates * test: accept retained surfaces in cross-area checks * test: make client mode assertions platform-neutral * fix: badge only outdated integrations
Diffstat (limited to 'docs')
-rw-r--r--docs/next/api/herdr-api.schema.json650
-rw-r--r--docs/next/website/src/content/docs/cli-reference.mdx1
-rw-r--r--docs/next/website/src/content/docs/how-to-work.mdx2
-rw-r--r--docs/next/website/src/content/docs/ja/cli-reference.mdx1
-rw-r--r--docs/next/website/src/content/docs/ja/how-to-work.mdx2
-rw-r--r--docs/next/website/src/content/docs/ja/persistence-remote.mdx10
-rw-r--r--docs/next/website/src/content/docs/persistence-remote.mdx10
-rw-r--r--docs/next/website/src/content/docs/socket-api.mdx8
-rw-r--r--docs/next/website/src/content/docs/zh-cn/cli-reference.mdx1
-rw-r--r--docs/next/website/src/content/docs/zh-cn/how-to-work.mdx2
-rw-r--r--docs/next/website/src/content/docs/zh-cn/persistence-remote.mdx10
-rw-r--r--docs/next/website/src/data/config-reference.json2
12 files changed, 658 insertions, 41 deletions
diff --git a/docs/next/api/herdr-api.schema.json b/docs/next/api/herdr-api.schema.json
index aa0a8c22..8bc06f10 100644
--- a/docs/next/api/herdr-api.schema.json
+++ b/docs/next/api/herdr-api.schema.json
@@ -1700,6 +1700,47 @@
],
"type": "object"
},
+ "CommandInvokeParams": {
+ "properties": {
+ "command_id": {
+ "description": "Opaque endpoint-issued command identifier from the client-shell projection.",
+ "type": "string"
+ },
+ "pane_id": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "selection": {
+ "anyOf": [
+ {
+ "$ref": "#/schemas/request/$defs/PaneSelectionReadParams"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Client-owned selection coordinates, validated against the pane's content revision."
+ },
+ "tab_id": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "workspace_id": {
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "command_id"
+ ],
+ "type": "object"
+ },
"EmptyParams": {
"type": "object"
},
@@ -2403,6 +2444,94 @@
],
"type": "object"
},
+ "PaneCopyMotion": {
+ "enum": [
+ "line_end",
+ "first_non_blank",
+ "next_word_start",
+ "previous_word_start",
+ "next_word_end",
+ "next_big_word_start",
+ "previous_big_word_start",
+ "next_big_word_end",
+ "previous_paragraph",
+ "next_paragraph"
+ ],
+ "type": "string"
+ },
+ "PaneCopyMotionParams": {
+ "properties": {
+ "content_revision": {
+ "format": "uint64",
+ "minimum": 0,
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "cursor": {
+ "$ref": "#/schemas/request/$defs/PaneTextPoint"
+ },
+ "motion": {
+ "$ref": "#/schemas/request/$defs/PaneCopyMotion"
+ },
+ "pane_id": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "pane_id",
+ "cursor",
+ "motion"
+ ],
+ "type": "object"
+ },
+ "PaneCopySearchDirection": {
+ "enum": [
+ "forward",
+ "backward"
+ ],
+ "type": "string"
+ },
+ "PaneCopySearchParams": {
+ "properties": {
+ "content_revision": {
+ "format": "uint64",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "cursor": {
+ "$ref": "#/schemas/request/$defs/PaneTextPoint"
+ },
+ "direction": {
+ "$ref": "#/schemas/request/$defs/PaneCopySearchDirection"
+ },
+ "pane_id": {
+ "type": "string"
+ },
+ "previous": {
+ "anyOf": [
+ {
+ "$ref": "#/schemas/request/$defs/PaneTextRange"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "query": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "pane_id",
+ "query",
+ "direction",
+ "cursor",
+ "content_revision"
+ ],
+ "type": "object"
+ },
"PaneCurrentParams": {
"properties": {
"caller_pane_id": {
@@ -2581,6 +2710,47 @@
},
"type": "object"
},
+ "PaneLinkActivateParams": {
+ "properties": {
+ "col": {
+ "format": "uint16",
+ "maximum": 65535,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "content_revision": {
+ "format": "uint64",
+ "minimum": 0,
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "offset_from_bottom": {
+ "format": "uint64",
+ "minimum": 0,
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "pane_id": {
+ "type": "string"
+ },
+ "viewport_row": {
+ "format": "uint16",
+ "maximum": 65535,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "pane_id",
+ "viewport_row",
+ "col"
+ ],
+ "type": "object"
+ },
"PaneListParams": {
"properties": {
"workspace_id": {
@@ -3011,6 +3181,50 @@
],
"type": "string"
},
+ "PaneScrollParams": {
+ "properties": {
+ "offset_from_bottom": {
+ "format": "uint64",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "pane_id": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "pane_id",
+ "offset_from_bottom"
+ ],
+ "type": "object"
+ },
+ "PaneSelectionReadParams": {
+ "properties": {
+ "anchor": {
+ "$ref": "#/schemas/request/$defs/PaneTextPoint"
+ },
+ "content_revision": {
+ "format": "uint64",
+ "minimum": 0,
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "cursor": {
+ "$ref": "#/schemas/request/$defs/PaneTextPoint"
+ },
+ "pane_id": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "pane_id",
+ "anchor",
+ "cursor"
+ ],
+ "type": "object"
+ },
"PaneSendInputParams": {
"properties": {
"keys": {
@@ -3158,6 +3372,41 @@
],
"type": "object"
},
+ "PaneTextPoint": {
+ "properties": {
+ "col": {
+ "format": "uint16",
+ "maximum": 65535,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "row": {
+ "format": "uint32",
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "row",
+ "col"
+ ],
+ "type": "object"
+ },
+ "PaneTextRange": {
+ "properties": {
+ "end": {
+ "$ref": "#/schemas/request/$defs/PaneTextPoint"
+ },
+ "start": {
+ "$ref": "#/schemas/request/$defs/PaneTextPoint"
+ }
+ },
+ "required": [
+ "start",
+ "end"
+ ],
+ "type": "object"
+ },
"PaneWaitForOutputParams": {
"properties": {
"lines": {
@@ -3631,6 +3880,21 @@
}
]
},
+ "ProductAnnouncementDismissParams": {
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "version",
+ "id"
+ ],
+ "type": "object"
+ },
"ReadFormat": {
"enum": [
"text",
@@ -3647,6 +3911,17 @@
],
"type": "string"
},
+ "ReleaseNotesDismissParams": {
+ "properties": {
+ "version": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "version"
+ ],
+ "type": "object"
+ },
"ServerLiveHandoffParams": {
"properties": {
"expected_protocol": {
@@ -4182,6 +4457,13 @@
"string",
"null"
]
+ },
+ "source_workspace_id": {
+ "description": "Workspace whose focused pane supplies the `follow` cwd policy.",
+ "type": [
+ "string",
+ "null"
+ ]
}
},
"type": "object"
@@ -4568,6 +4850,54 @@
{
"properties": {
"method": {
+ "const": "product_announcement.dismiss",
+ "type": "string"
+ },
+ "params": {
+ "$ref": "#/schemas/request/$defs/ProductAnnouncementDismissParams"
+ }
+ },
+ "required": [
+ "method",
+ "params"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "method": {
+ "const": "release_notes.dismiss",
+ "type": "string"
+ },
+ "params": {
+ "$ref": "#/schemas/request/$defs/ReleaseNotesDismissParams"
+ }
+ },
+ "required": [
+ "method",
+ "params"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "method": {
+ "const": "command.invoke",
+ "type": "string"
+ },
+ "params": {
+ "$ref": "#/schemas/request/$defs/CommandInvokeParams"
+ }
+ },
+ "required": [
+ "method",
+ "params"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "method": {
"const": "client.window_title.set",
"type": "string"
},
@@ -5336,6 +5666,86 @@
{
"properties": {
"method": {
+ "const": "pane.scroll",
+ "type": "string"
+ },
+ "params": {
+ "$ref": "#/schemas/request/$defs/PaneScrollParams"
+ }
+ },
+ "required": [
+ "method",
+ "params"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "method": {
+ "const": "pane.edit_scrollback",
+ "type": "string"
+ },
+ "params": {
+ "$ref": "#/schemas/request/$defs/PaneTarget"
+ }
+ },
+ "required": [
+ "method",
+ "params"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "method": {
+ "const": "pane.selection.read",
+ "type": "string"
+ },
+ "params": {
+ "$ref": "#/schemas/request/$defs/PaneSelectionReadParams"
+ }
+ },
+ "required": [
+ "method",
+ "params"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "method": {
+ "const": "pane.copy_motion",
+ "type": "string"
+ },
+ "params": {
+ "$ref": "#/schemas/request/$defs/PaneCopyMotionParams"
+ }
+ },
+ "required": [
+ "method",
+ "params"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "method": {
+ "const": "pane.copy_search",
+ "type": "string"
+ },
+ "params": {
+ "$ref": "#/schemas/request/$defs/PaneCopySearchParams"
+ }
+ },
+ "required": [
+ "method",
+ "params"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "method": {
"const": "pane.list",
"type": "string"
},
@@ -5416,6 +5826,22 @@
{
"properties": {
"method": {
+ "const": "pane.link.activate",
+ "type": "string"
+ },
+ "params": {
+ "$ref": "#/schemas/request/$defs/PaneLinkActivateParams"
+ }
+ },
+ "required": [
+ "method",
+ "params"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "method": {
"const": "pane.rename",
"type": "string"
},
@@ -5704,6 +6130,22 @@
{
"properties": {
"method": {
+ "const": "integration.list",
+ "type": "string"
+ },
+ "params": {
+ "$ref": "#/schemas/request/$defs/EmptyParams"
+ }
+ },
+ "required": [
+ "method",
+ "params"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "method": {
"const": "integration.install",
"type": "string"
},
@@ -7171,6 +7613,33 @@
],
"type": "object"
},
+ "IntegrationInfo": {
+ "properties": {
+ "available": {
+ "type": "boolean"
+ },
+ "command": {
+ "type": "string"
+ },
+ "label": {
+ "type": "string"
+ },
+ "state": {
+ "$ref": "#/schemas/success_response/$defs/IntegrationState"
+ },
+ "target": {
+ "$ref": "#/schemas/success_response/$defs/IntegrationTarget"
+ }
+ },
+ "required": [
+ "target",
+ "label",
+ "command",
+ "available",
+ "state"
+ ],
+ "type": "object"
+ },
"IntegrationInstallResult": {
"properties": {
"messages": {
@@ -7185,6 +7654,14 @@
],
"type": "object"
},
+ "IntegrationState": {
+ "enum": [
+ "not_installed",
+ "current",
+ "outdated"
+ ],
+ "type": "string"
+ },
"IntegrationTarget": {
"enum": [
"pi",
@@ -8012,6 +8489,41 @@
],
"type": "object"
},
+ "PaneTextPoint": {
+ "properties": {
+ "col": {
+ "format": "uint16",
+ "maximum": 65535,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "row": {
+ "format": "uint32",
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "row",
+ "col"
+ ],
+ "type": "object"
+ },
+ "PaneTextRange": {
+ "properties": {
+ "end": {
+ "$ref": "#/schemas/success_response/$defs/PaneTextPoint"
+ },
+ "start": {
+ "$ref": "#/schemas/success_response/$defs/PaneTextPoint"
+ }
+ },
+ "required": [
+ "start",
+ "end"
+ ],
+ "type": "object"
+ },
"PaneZoomReason": {
"enum": [
"single_pane",
@@ -9282,6 +9794,103 @@
},
{
"properties": {
+ "pane_id": {
+ "type": "string"
+ },
+ "text": {
+ "type": "string"
+ },
+ "type": {
+ "const": "pane_selection",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "pane_id",
+ "text"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "content_revision": {
+ "format": "uint64",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "cursor": {
+ "$ref": "#/schemas/success_response/$defs/PaneTextPoint"
+ },
+ "pane_id": {
+ "type": "string"
+ },
+ "type": {
+ "const": "pane_copy_motion",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "pane_id",
+ "cursor",
+ "content_revision"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "content_revision": {
+ "format": "uint64",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "current": {
+ "format": "uint32",
+ "minimum": 0,
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "current_global": {
+ "format": "uint64",
+ "minimum": 0,
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "matches": {
+ "items": {
+ "$ref": "#/schemas/success_response/$defs/PaneTextRange"
+ },
+ "type": "array"
+ },
+ "pane_id": {
+ "type": "string"
+ },
+ "total": {
+ "format": "uint64",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "type": {
+ "const": "pane_copy_search",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "pane_id",
+ "content_revision",
+ "matches",
+ "total"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
"revision": {
"format": "uint64",
"minimum": 0,
@@ -9498,6 +10107,25 @@
},
{
"properties": {
+ "integrations": {
+ "items": {
+ "$ref": "#/schemas/success_response/$defs/IntegrationInfo"
+ },
+ "type": "array"
+ },
+ "type": {
+ "const": "integration_list",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "integrations"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
"details": {
"$ref": "#/schemas/success_response/$defs/IntegrationInstallResult"
},
@@ -9720,6 +10348,28 @@
},
{
"properties": {
+ "handled": {
+ "type": "boolean"
+ },
+ "type": {
+ "const": "pane_link_activated",
+ "type": "string"
+ },
+ "url": {
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "handled"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
"logs": {
"items": {
"$ref": "#/schemas/success_response/$defs/PluginCommandLogInfo"
diff --git a/docs/next/website/src/content/docs/cli-reference.mdx b/docs/next/website/src/content/docs/cli-reference.mdx
index 189be5b0..85fb3dad 100644
--- a/docs/next/website/src/content/docs/cli-reference.mdx
+++ b/docs/next/website/src/content/docs/cli-reference.mdx
@@ -15,7 +15,6 @@ herdr --session work # launch or attach to a named session
herdr --remote workbox # attach through SSH, using local keybindings
herdr --remote workbox --remote-keybindings server
herdr --remote workbox --handoff
-herdr --no-session # single-process escape hatch
herdr --default-config # print default config
herdr update # download and install from the configured channel
herdr update --handoff # opt into live handoff for supported running servers
diff --git a/docs/next/website/src/content/docs/how-to-work.mdx b/docs/next/website/src/content/docs/how-to-work.mdx
index 8d3ad081..6e74e59d 100644
--- a/docs/next/website/src/content/docs/how-to-work.mdx
+++ b/docs/next/website/src/content/docs/how-to-work.mdx
@@ -100,4 +100,4 @@ herdr --remote workbox
Use `herdr` for local work. Use `ssh you@server` then `herdr` when you want Herdr to behave like tmux on that remote shell or when you are using a phone SSH client. Use `herdr --remote <host>` when you want a local thin client for a remote session, including local clipboard image paste bridging.
-For remote bootstrap details, named remote sessions, custom binaries, direct terminal attach, and `--no-session`, see [Persistence and remote access](/docs/persistence-remote/).
+For remote bootstrap details, named remote sessions, custom binaries, and direct terminal attach, see [Persistence and remote access](/docs/persistence-remote/).
diff --git a/docs/next/website/src/content/docs/ja/cli-reference.mdx b/docs/next/website/src/content/docs/ja/cli-reference.mdx
index 0b3e06f3..d443f317 100644
--- a/docs/next/website/src/content/docs/ja/cli-reference.mdx
+++ b/docs/next/website/src/content/docs/ja/cli-reference.mdx
@@ -15,7 +15,6 @@ herdr --session work # 名前付きセッションを起動またはア
herdr --remote workbox # SSH 越しにアタッチ (ローカルのキーバインドを使用)
herdr --remote workbox --remote-keybindings server
herdr --remote workbox --handoff
-herdr --no-session # シングルプロセスの逃げ道
herdr --default-config # デフォルト設定を表示
herdr update # 設定済みチャンネルからダウンロードしてインストール
herdr update --handoff # 対応する実行中サーバーでライブハンドオフにオプトイン
diff --git a/docs/next/website/src/content/docs/ja/how-to-work.mdx b/docs/next/website/src/content/docs/ja/how-to-work.mdx
index 0365df0b..d6d6bd95 100644
--- a/docs/next/website/src/content/docs/ja/how-to-work.mdx
+++ b/docs/next/website/src/content/docs/ja/how-to-work.mdx
@@ -100,4 +100,4 @@ herdr --remote workbox
ローカル作業には `herdr` を使います。リモートシェル上で Herdr を tmux のように使いたいときや、スマートフォンの SSH クライアントを使っているときは `ssh you@server` してから `herdr` を使います。リモートセッション用のローカルシンクライアントが欲しいとき (ローカルクリップボードの画像貼り付けブリッジを含む) は `herdr --remote <host>` を使います。
-リモートブートストラップの詳細、名前付きリモートセッション、カスタムバイナリ、ダイレクトターミナルアタッチ、`--no-session` については[永続化とリモートアクセス](/ja/docs/persistence-remote/)を参照してください。
+リモートブートストラップの詳細、名前付きリモートセッション、カスタムバイナリ、ダイレクトターミナルアタッチについては[永続化とリモートアクセス](/ja/docs/persistence-remote/)を参照してください。
diff --git a/docs/next/website/src/content/docs/ja/persistence-remote.mdx b/docs/next/website/src/content/docs/ja/persistence-remote.mdx
index 266d407b..23c6e817 100644
--- a/docs/next/website/src/content/docs/ja/persistence-remote.mdx
+++ b/docs/next/website/src/content/docs/ja/persistence-remote.mdx
@@ -118,13 +118,3 @@ herdr terminal attach term_abc123
```bash
herdr terminal attach term_abc123 --takeover
```
-
-## シングルプロセスの逃げ道
-
-バックグラウンドのサーバー/クライアント分離なしで Herdr を実行するには `--no-session` を使います:
-
-```bash
-herdr --no-session
-```
-
-これは主にデバッグや互換性のための逃げ道です。デフォルトの永続セッションモードが通常の使い方です。
diff --git a/docs/next/website/src/content/docs/persistence-remote.mdx b/docs/next/website/src/content/docs/persistence-remote.mdx
index 5044c66d..bb8404c8 100644
--- a/docs/next/website/src/content/docs/persistence-remote.mdx
+++ b/docs/next/website/src/content/docs/persistence-remote.mdx
@@ -151,13 +151,3 @@ newline-delimited JSON commands on stdin. `terminal.input` sends text or
base64 bytes, `terminal.resize` changes the controller viewport,
`terminal.scroll` scrolls the attached viewport, and `terminal.release` closes
the controller. Only one controller owns input and resize at a time.
-
-## Single-process escape hatch
-
-Use `--no-session` to run Herdr without the background server/client split:
-
-```bash
-herdr --no-session
-```
-
-Use `--no-session` mainly for debugging or compatibility. Persistent session mode remains the default.
diff --git a/docs/next/website/src/content/docs/socket-api.mdx b/docs/next/website/src/content/docs/socket-api.mdx
index 8a055a36..4d4559c1 100644
--- a/docs/next/website/src/content/docs/socket-api.mdx
+++ b/docs/next/website/src/content/docs/socket-api.mdx
@@ -191,8 +191,8 @@ layers are placed in stable `(z_index, layer_id)` order. Each stream exclusively
closing it removes that layer. Inline frames accept `png`, `rgb`, `rgba`, or
`bgra`; BGRA is normalized once to owned RGBA. Herdr advances the host cache
one image transaction per render pass, so arbitrary layer sets progress without
-an aggregate frame. Headless transport keeps each transaction within its 32 MiB
-wire limit; local monolithic rendering does not apply that transport limit.
+an aggregate frame. Client transport keeps each transaction within its 32 MiB
+wire limit.
```json
{"id":"graphics_info","method":"pane.graphics.info","params":{"pane_id":"w1:p1"}}
@@ -219,8 +219,8 @@ inline. Herdr replies with a `pane_graphics_frame_ack` only after the terminal
accepts the file, or after a safe owned inline fallback is installed. Confirmed
file-transport failure disables direct files for that client connection without
disabling exact pixel mouse. A timeout or client loss closes the stream without
-acknowledging source reuse. Monolithic `--no-session` mode advertises neither
-fast file transport nor exact pixel mouse and remains on owned inline fallback.
+acknowledging source reuse. Clients that cannot negotiate direct file transport
+remain on the owned inline fallback.
Direct files are always complete canonical `width * height * 4` RGBA frames.
`file_frame_max_bytes` is the limit that remains eligible for owned inline fallback.
diff --git a/docs/next/website/src/content/docs/zh-cn/cli-reference.mdx b/docs/next/website/src/content/docs/zh-cn/cli-reference.mdx
index b00ad592..38a7a4f2 100644
--- a/docs/next/website/src/content/docs/zh-cn/cli-reference.mdx
+++ b/docs/next/website/src/content/docs/zh-cn/cli-reference.mdx
@@ -15,7 +15,6 @@ herdr --session work # 启动或连接命名会话
herdr --remote workbox # 通过 SSH 连接,使用本地按键绑定
herdr --remote workbox --remote-keybindings server
herdr --remote workbox --handoff
-herdr --no-session # 单进程逃生舱
herdr --default-config # 打印默认配置
herdr update # 从配置的通道下载并安装
herdr update --handoff # 对受支持的运行中服务器启用实时交接
diff --git a/docs/next/website/src/content/docs/zh-cn/how-to-work.mdx b/docs/next/website/src/content/docs/zh-cn/how-to-work.mdx
index 0df1b87f..5f455a66 100644
--- a/docs/next/website/src/content/docs/zh-cn/how-to-work.mdx
+++ b/docs/next/website/src/content/docs/zh-cn/how-to-work.mdx
@@ -100,4 +100,4 @@ herdr --remote workbox
本地工作用 `herdr`。想让 Herdr 在远程 shell 上表现得像 tmux,或者在用手机 SSH 客户端时,用 `ssh you@server` 再 `herdr`。想要一个连接远程会话的本地瘦客户端 (包括本地剪贴板图像粘贴桥接) 时,用 `herdr --remote <host>`。
-关于远程引导细节、命名远程会话、自定义二进制、直接终端附加和 `--no-session`,参见[持久化与远程访问](/zh-cn/docs/persistence-remote/)。
+关于远程引导细节、命名远程会话、自定义二进制和直接终端附加,参见[持久化与远程访问](/zh-cn/docs/persistence-remote/)。
diff --git a/docs/next/website/src/content/docs/zh-cn/persistence-remote.mdx b/docs/next/website/src/content/docs/zh-cn/persistence-remote.mdx
index ba50130e..3f142547 100644
--- a/docs/next/website/src/content/docs/zh-cn/persistence-remote.mdx
+++ b/docs/next/website/src/content/docs/zh-cn/persistence-remote.mdx
@@ -118,13 +118,3 @@ herdr terminal attach term_abc123
```bash
herdr terminal attach term_abc123 --takeover
```
-
-## 单进程逃生舱
-
-用 `--no-session` 在没有后台服务器/客户端分离的情况下运行 Herdr:
-
-```bash
-herdr --no-session
-```
-
-这主要是调试或兼容性的逃生舱。默认的持久会话模式才是常规路径。
diff --git a/docs/next/website/src/data/config-reference.json b/docs/next/website/src/data/config-reference.json
index 475c6a07..db22daf1 100644
--- a/docs/next/website/src/data/config-reference.json
+++ b/docs/next/website/src/data/config-reference.json
@@ -575,7 +575,7 @@
"key": "keys.detach",
"type": "keybinding",
"default": "\"prefix+q\"",
- "description": "Detach from server/client mode, or exit --no-session mode."
+ "description": "Detach the current client from its Herdr server."
},
{
"key": "keys.reload_config",