职责边界
做什么、不做什么;与 CLI / 云 / SaaS 的分界。
为项目确定边界,其价值往往大于堆叠功能。明确产品「坚决不做什么」,是防止项目滑向失控复杂度的核心防线。
产品定位与产品宪法 C1–C5
Claude Chat Mobile 遵循明确的自托管产品宪法(见 docs/hard-rules.md):
C1
严格单用户 (n=1)
单实例单用户。通过鉴权的请求等价于物理坐在终端前的机主,不设立租户隔离或多账号概念。
C2
数据不出本机
模型 API Token、会话记录与开发源码绝不经过任何第三方托管平台或中心云中继。
C3
继承原生权限体系
完全复用本机 claude CLI 的已有配置(settings.json)与 MCP 规则,不发明并行的权限孤岛。
C4
单驾驶员防分叉
任意时刻同一会话只允许终端或 Web 之一持有写入锁,通过只读镜像与锁流转彻底杜绝数据分叉。
C5
终端行为等价性
CLI 有的功能 Web 端无缝对齐;CLI 放弃的复杂性 Web 坚决不自造轮子。
系统核心职责:做什么
- 提供移动端原生友好的终端等价界面。实时流式输出渲染、Markdown 与代码语法高亮、工具调用过程卡片、用户确认提问(AskUserQuestion)交互。
- 会话生命周期与双向同步。复用本机 CLI 的 Transcript 记录(
~/.claude/projects/),支持 Web 端发起会话、继续历史会话(resume)、工作区切换与中断。 - 安全闭环的人机权限审批。当 Agent 尝试执行白名单外的危险工具(如执行命令、写敏感文件)时,推送审批请求并在移动端提供一键同意/拒绝。
- 本地工作区保护与安全浏览。在显式配置的
WORKDIRS白名单内安全浏览、检索项目文件与查看 Git 变更,杜绝路径穿越。 - 自托管基础设施服务。结构化配置管理、启动自检(doctor)、智能离线推送与跨设备已读状态同步。
明确不做的技术债清单
| 编号 | 决议不做的方向 | 架构理由与考量 |
|---|---|---|
| AD-1 | 多租户、RBAC 角色权限与按用户数据隔离 | 违背 n=1 自托管核心。引入租户会严重破坏单用户与本机 CLI 的映射边界,带来数倍无收益复杂度。 |
| AD-2 | 云端托管代理或中心化 SaaS 服务 | 代码和会话是用户核心隐私,架构设计上只允许直连或点对点隧道连接。 |
| AD-3 | 重新实现 Agent 状态机与 LLM 编排层 | 直接依托官方 Agent SDK。自造 Agent 调度不仅极易滞后于官方演化,还会破坏工具执行契约。 |
| AD-4 | 开放免鉴权的网络数据端点 | 即使是 /health、/metrics 或静态状态检查,也一律过鉴权网关拦截,杜绝信息侧漏。 |
| AD-5 | 全端端到端加密(E2EE)离线推送 | 推送仅作为唤醒信号;真实正文拉取依然走 WebSocket 双向受控通道,避免引入重型加密握手协议。 |
| AD-6 | 自造插件系统与动态运行包管理 | 插件出仓库会导致静态类型与安全门禁体系全面失明,扩展统一使用 CLI 原生的 MCP 与 Skills。 |
与相邻系统的分工分界
flowchart LR
subgraph Client["移动端 (手机 PWA)"]
UI["聊天操作界面\n输入 · 审批 · 工作区切换"]
end
subgraph Edge["公网 / 隧道边缘"]
CF["Cloudflare Tunnel / 反代\n负责传输加密与外网接入"]
end
subgraph CCM["Claude Chat Mobile 本地服务"]
App["CCM Server\n鉴权 · 协议转发 · 镜像锁 · 状态同步"]
end
subgraph Native["本机环境与系统"]
CLI["claude CLI & Agent SDK\n执行决策 · 权限判断 · 工具调用"]
Disk["本地代码工作区 & ~/.claude\n项目源码 · 配置 · 会话记录"]
end
UI <-->|"HTTPS / WSS"| CF
CF <--> CCM
CCM <-->|"Agent SDK Stdio"| CLI
CLI <--> Disk
CCM -.->|"读元数据"| Disk
claude CLI
真实任务执行者,拥有工具执行与全局权限判定的最终决定权。
Cloudflare / 反代
外部网络打通与证书接入层,CCM 自身不负责动态管理 tunnel 守护进程。
Web Push / ntfy
仅提供异步通知唤醒功能,通道不可用不影响主流程的正常运转。