diff --git a/README.md b/README.md
index 45f44e8..f30809c 100644
--- a/README.md
+++ b/README.md
@@ -1,114 +1,62 @@
+
+
# TermFlow
-> 通过浏览器、手机与原生客户端安全远程控制 tmux 终端与 Agent Broker 事件流。
+Resilient remote tmux terminal & 4-level guarded Agent Broker across Web, Mobile, and Native clients.
[](https://github.com/mcocdaa)
[](https://github.com/mcocdaa/TermFlow/actions/workflows/ci.yml)
[](https://github.com/mcocdaa/TermFlow/releases)
-[](LICENSE)
[](https://www.python.org/)
-[](https://www.typescriptlang.org/)
-[](deploy/compose.yaml)
+[](https://www.typescriptlang.org/)
+[](deploy/compose.yaml)
+[](LICENSE)
-
-
-
+[English](README.md) · [简体中文](README_CN.md)
-TermFlow 让你通过浏览器、手机或原生客户端远程使用另一台电脑上的 tmux 终端。
+

-```text
-手机浏览器 / 桌面浏览器 / Windows、Linux、macOS、Android、iOS Simulator 客户端
- ↓ HTTPS / WSS
- Control Plane B + Web C
- ↑ A 主动连接
- Computer A(tmux、命令和工作目录)
-```
+
-关闭客户端或短暂断网不会停止 A 上运行的命令。v0.2.0 在
-`Computer → Term → Window → Pane` 之上加入 Agent Broker(OpenCode 后端、人工审批、
-可回放的 Agent 事件流和固定 Compose 参考部署);语音能力不属于这个版本。
+## ✨ Highlights
-## 安装 B + Web C
+- **Outbound-Only Node A (`Computer → Term → Window → Pane`)**: Computer A dials out over TLS/WSS to Control Plane B with zero inbound ports (`A 主动连接 B`, `A 不开放端口`); closing browsers or losing mobile connectivity never interrupts running `tmux` jobs.
+- **Mobile-First Web & Native Terminal**: Responsive `xterm.js` workspace equipped with a tactile `MobileKeyBar` (`Esc`, `Tab`, `Ctrl`, `Alt`, arrow keys, and quick tmux chords) plus 7 curated geek themes.
+- **4-Level Guarded Agent Broker (`OpenCode`)**: Replayable agent event streams with a 4-tier risk guard and mandatory human-in-the-loop approval before any write or critical terminal action executes.
+- **Zero-Trust TOTP & One-Time Pairing**: Control Plane authentication protected by TOTP MFA, short-lived one-time node enrollment tokens, and device authorization via QR code or pairing code.
+- **Multi-Platform Native Clients**: Unified Vue 3 + TypeScript + Tauri 2 client architecture shipping across Web, Windows, Linux, macOS, Android, and iOS Simulator.
+- **Strict Control Plane Boundary**: Control Plane B authenticates, routes, and relays terminal streams without executing host shell commands, keeping Node A as the sole terminal authority.
-### 发布镜像 Compose(推荐,含 Agent)
+## 🚀 Quick Start
-发布镜像同时包含 B、Web C 和 Agent Broker。下面的流程从 GitHub 取部署文件,Compose
-只拉取 GHCR 上已发布的镜像,不在本地构建,也不需要 checkout 源码:
+### 1. Deploy Control Plane B + Web C + Agent Broker (Docker Compose)
+
+**Option A — Published Release Images (Recommended)**
```bash
-TAG=v0.2.0 # 换成 Release 页面的精确 tag
+TAG=v0.2.0
BASE="https://raw.githubusercontent.com/mcocdaa/TermFlow/${TAG}"
mkdir -p termflow && cd termflow
curl -fsSLO "${BASE}/deploy/compose.release.yaml"
curl -fsSLO "${BASE}/deploy/opencode-config.yaml"
curl -fsSLo .env "${BASE}/.env.example"
chmod 0600 .env
-```
-按 `.env` 注释生成 `TERMFLOW_ADMIN_TOKEN`、`OPENCODE_SERVER_*`、
-`OPENCODE_AGENT_MCP_TOKEN`、`DEEPSEEK_API_KEY`,把 `TERMFLOW_RELEASE_IMAGE_TAG` 设为上面的
-`TAG`,并按可核验证据填写 DeepSeek disclosure 字段(没有证据时 B 会 fail closed)。
-然后启动并检查:
-
-```bash
+# Configure TERMFLOW_ADMIN_TOKEN, OPENCODE_SERVER_*, OPENCODE_AGENT_MCP_TOKEN,
+# DEEPSEEK_API_KEY, and set TERMFLOW_RELEASE_IMAGE_TAG=${TAG} in .env
docker compose --env-file .env -f compose.release.yaml up -d
-curl -fsS "http://127.0.0.1:${TERMFLOW_HOST_PORT:-8765}/healthz"
-```
-
-首次启动需要十几秒,`healthz` 立即失败时稍等重试。B 的 Web/API 默认发布到
-`127.0.0.1:${TERMFLOW_HOST_PORT:-8765}`,数据保存在 `termflow-data`、
-`termflow-totp-key`、`termflow-opencode-data` 三个命名卷。升级或回退只改
-`TERMFLOW_RELEASE_IMAGE_TAG`,再 `docker compose --env-file .env -f compose.release.yaml pull`
-和 `up -d`;不要删除数据卷,也不要用 `latest` 做需要复现的部署(它只随稳定 tag 移动)。
-公网部署时,把 HTTPS/WSS 反向代理指向该端口,并把 `TERMFLOW_PUBLIC_BASE_URL` 设置为
-用户实际访问的 HTTPS origin,`TERMFLOW_ALLOW_INSECURE_LOOPBACK` 保持 false。
-
-### 单容器 B(仅终端,不含 Agent)
-
-只需要终端、不需要 Agent 时,可以用已发布镜像直接运行 B;下面的命令使用本地目录保存
-数据库与 TOTP 主密钥,并通过宿主机 `127.0.0.1:8000` 发布 Web/API:
-
-```bash
-mkdir -p data totp-secrets
-docker network create termflow-net
-
-docker run -d \
- --name termflow-control-plane \
- --restart unless-stopped \
- --network termflow-net \
- --publish 127.0.0.1:8000:8000 \
- --volume "$PWD/data:/app/data" \
- --volume "$PWD/totp-secrets:/app/totp-secrets" \
- --env TERMFLOW_ADMIN_TOKEN='<至少 32 字节的管理员 token>' \
- --env TERMFLOW_DATABASE_URL=sqlite+aiosqlite:////app/data/termflow.db \
- --env TERMFLOW_PUBLIC_BASE_URL=https://termflow.example.com \
- --env TERMFLOW_ALLOW_INSECURE_LOOPBACK=false \
- --env TERMFLOW_TOTP_AUTO_MASTER_KEY_FILE=/app/totp-secrets/totp-master-key \
- ghcr.io/mcocdaa/termflow-control-plane:v0.2.0
+curl -fsS http://127.0.0.1:8765/healthz
```
-检查服务(首启需要十几秒):
+**Option B — Local Source Checkout**
```bash
-curl -fsS http://127.0.0.1:8000/healthz
+cp .env.example .env
+docker compose --env-file .env -f deploy/compose.yaml up -d --build
+curl -fsS http://127.0.0.1:8765/healthz
```
-单容器 B 不含 Agent 运行时,Agent 页面会显示 `provider_selection_unavailable`。
-公网部署与反向代理要求和上面相同。B 启动后,在 Web C 的 Computers 页面生成
-Computer A 使用的一次性注册码。
-
-B 的 Web/API 通过宿主机 loopback 端口发布;A 主动连接 B,是连接 B 的客户端,不是 B 的网关。
-
-发布镜像 Compose 是生产部署路径。开发或验证源码时,使用
-[部署与恢复](docs/operations.md) 中的 `docker compose -f deploy/compose.yaml` 本地参考
-部署(project `termflow-v020-local`);它与发布 Compose 的服务形状一致,但会从当前
-checkout 构建镜像。两种 B 部署对应的 A 网络和服务地址不同,Docker A 一节分别说明。
-
-## 安装 Computer A
-
-### Linux
-
-Linux x86_64 需要 tmux 3.2 或更高版本:
+### 2. Enroll Linux Node A (`tmux 3.2+`)
```bash
curl -fsSL \
@@ -117,37 +65,50 @@ curl -fsSL \
termflow login \
--server https://termflow.example.com \
- --code '