docs/research/desktop-layout-reflection.md
Rama main · réplica de lectura del repositorio original.
# 桌面客户端布局反思:普通用户需要什么?
> Note: The `bash` tool has been removed. `shell` is now the only command execution tool. See `2026-06-03-shell-unification-design.md`.
> 基于当前 Mao 桌面端(Electron + Vue)的界面现状,从**普通用户**视角反思布局问题,并提出适合大众使用者的信息架构方向。
> 本文是**设计反思**,不替代 `desktop-ux-refactor-plan.md` 中的技术实施清单。
---
## 一、我们在为谁设计?
### 1.1 两类用户,两种心智模型
| 维度 | 开发者 / 高级用户 | 普通用户 |
|------|------------------|----------|
| 目标 | 让 Agent 在仓库里改代码、跑命令、出 PR | 把一件事办完:写报告、查资料、整理文档、回答问题 |
| 成功标准 | 命令输出正确、diff 可审查、工具链可追溯 | **答案清晰、步骤少、不用懂技术名词** |
| 对「工作目录」的理解 | 项目根路径,和 git 强绑定 | 「这是在哪干活?」—— 最好根本不用看到 |
| 对「对话列表」的理解 | 会话 = 一次任务尝试,可回溯 | 和微信聊天记录一样:找上次聊过什么 |
| 容忍的界面复杂度 | 高(VS Code、终端、多面板) | 低(ChatGPT、备忘录、邮件客户端) |
当前界面明显按**左栏开发者工具 + 顶栏管理后台 + 聊天里嵌终端**来组织,三类用户心智被叠在同一屏里,导致「什么都有一点,但没有一件事被照顾到」。
### 1.2 普通用户打开应用时只想回答三个问题
1. **我现在能找谁帮忙?**(选 Agent / 选能力)
2. **上次做到哪了?**(继续未完成的任务)
3. **接下来我该说什么?**(输入框是唯一行动点)
其余一切——Hub、创建 Agent、执行模式、WebSocket 连接状态、工作目录路径、工具名 `@bash`——都是**实现细节**,应默认隐藏或收纳到「高级设置」。
---
## 二、当前布局为何「杂乱、毫无重点」?
### 2.1 结构层:导航与内容抢同一块注意力
```
┌─────────────────────────────────────────────────────────────┐
│ Logo 工作台 | Hub | 创建 Agent 🔔 用户 │ ← 全局导航(3 个产品级入口)
├──────────┬──────────────────────────────────────────────────┤
│ 对话 │ Tool Agent ●本地已连接 [+ 新对话] │ ← 会话级标题 + 技术状态
│ ───── │ 工作目录 /Users/.../myagent [更换] │ ← 路径条(开发者信息)
│ ls -l │ │
│ 你有哪些│ [用户气泡] [终端黑框 ls 输出] [@ bash] │ ← 聊天 + 工具原始输出
│ tools? │ [助手长文解释权限 rwx...] │
│ ... │ [输入框........................] 📎 发送 │
└──────────┴──────────────────────────────────────────────────┘
```
**问题归纳:**
| 现象 | 对普通用户的伤害 |
|------|------------------|
| 顶栏 3 Tab + 左侧「对话」+ 聊天头「新对话」 | 三条路径都能「开始新东西」,不知道点哪个 |
| 会话列表每项显示 Agent 名 + 相对时间,标题常是命令片段(`ls -l`) | 无法扫一眼认出「这是哪件事」 |
| 聊天区 max-width 900px 居中,两侧大量留白 | 主内容显得小,侧栏反而挤 |
| 工作目录条常驻主区顶部 | 长路径占视线,像报错信息 |
| 终端输出以黑框全宽嵌在对话流里 | 像进了黑客电影,和上方解释性文字**重复叙述同一件事** |
| 「本地已连接」与「云端模式」并列在标题旁 | 用户不关心传输层,只关心「能不能用」 |
本质是:**没有单一视觉锚点**。用户的眼睛在顶栏、侧栏、标题、路径、黑终端、灰气泡之间跳转,找不到「我现在只需要看这里」。
### 2.2 内容层:技术叙事压过任务叙事
截图中的典型一轮交互:
1. 用户发 `ls -l`
2. Agent 返回**完整终端 listing**(十几行权限、大小、日期)
3. 用户发 `?`
4. Agent 再用**自然语言**解释 `-rw-r--r--` 含义
对开发者:步骤 2 是「证据」,步骤 4 是「解读」。
对普通用户:步骤 2 已经吓退一半人,步骤 4 才是他们唯一需要的内容——**布局却把最吓人的放在最显眼的位置**。
工具卡片(`ToolCallCard`)、`@bash` 标签、mono 字体路径,都在强化「这是一个开发环境」,而不是「这是一个帮我干活的助手」。
### 2.3 流程层:首页与聊天页是两套产品
- **工作台**:Agent 卡片网格 → 点击 → 弹窗选 CLOUD/LOCAL → 进入聊天
- **聊天页**:自带会话侧栏、工作目录、连接状态
普通用户的预期(来自 ChatGPT / 豆包 / Copilot):
- 打开 → **直接就是对话**,或「继续上次对话」
- Agent 选择是**换助手**,不是换「页面模式」
当前路径:`工作台 → 选 Agent → 选模式 → 聊天 → 再发现还要选工作目录`,**四步才到输入框**,心流已断。
---
## 三、普通用户适用的布局原则
### 3.1 一个主舞台(One Primary Stage)
任意时刻,屏幕上**只有一个区域**承担 80% 注意力:
| 场景 | 主舞台 | 其余全部降级 |
|------|--------|--------------|
| 对话中 | 消息流 + 底部输入框 | 历史、设置、工具详情 → 可折叠/抽屉 |
| 选助手 | Agent 列表或搜索 | 无侧栏、无顶栏多 Tab |
| 看结果 | 任务结果摘要(非原始日志) | 原始终端 →「查看详情」二级 |
**反例(当前)**:顶栏、侧栏、header、workspace、消息、输入 —— 六层水平带同时存在。
### 3.2 任务语言,而非系统语言
界面文案与列表标题应使用**人话**:
| 系统语言(应避免作为主文案) | 任务语言(应用作标题/摘要) |
|------------------------------|----------------------------|
| `ls -l` | 查看项目里有哪些文件 |
| Tool Agent | 文件与命令助手 |
| LOCAL / WebSocket 已连接 | 在本机运行(小字提示即可) |
| `/Users/.../myagent` | 当前项目:myagent |
| `@bash` 工具调用成功 | 已执行命令(展开可看) |
会话列表应用**首条用户意图**或**自动摘要**作标题,而不是最后一条命令。
### 3.3 渐进披露(Progressive Disclosure)
```
默认看到:结论 + 一两句说明 + [展开过程]
点击展开:命令、完整输出、文件 diff、连接诊断
进入设置:执行模式、白名单、Hub、创建 Agent
```
普通用户路径:**输入 → 等 → 读结论**;
高级用户路径:同一屏面上多一个「过程」抽屉,而不是把终端塞进对话气泡。
### 3.4 导航按频率分层,不按功能模块分层
| 频率 | 应放位置 | 当前问题 |
|------|----------|----------|
| 每天多次 | 侧栏或底部:最近对话 | 与工作台 Agent 网格重复 |
| 每周几次 | 二级:换 Agent、Hub | 与「工作台」同级顶栏 Tab |
| 很少 | 设置 / 高级:创建 Agent、模式、目录 | 「创建 Agent」与「工作台」并列顶栏 |
顶栏 ideal 状态:**只有 Logo + 当前上下文标题 + 用户菜单**。
「Hub」「创建 Agent」进设置或「发现更多助手」入口。
### 3.5 空间:宽聊窄辅,而非窄聊宽辅
聊天产品(iMessage、ChatGPT、Slack DM)的共同规律:
- **对话列占 60–75% 宽度**(当前约 50%,且被 max-width 限制得更窄)
- 辅助信息 **≤25%**,且可收起为图标
- 移动端逻辑:**辅助信息变抽屉,而不是永久占宽**
当前侧栏 + 居中窄列,造成「辅助信息比正文还抢眼」的倒置。
---
## 四、推荐的布局范式(三种可选方向)
### 方案 A:对话优先(最贴近普通用户)
适合:以「问问题、得答案」为主,工具执行为后台能力。
```
┌────────────────────────────────────────────────────────────┐
│ ← 文件助手 · 本机运行 ▾ ⚙ 👤 │ 单行顶栏:上下文 + 收纳菜单
├────────────┬───────────────────────────────────────────────┤
│ 今天 │ │
│ · 整理… │ [助手] 已帮你看过项目目录, │
│ 昨天 │ 共 12 个文件,主要包括… │
│ · 天气… │ [查看执行过程] │
│ │ │
│ [收起 ◀] │ ┌─────────────────────────────────────────┐ │
│ │ │ 输入你想做的事… 📎 ➤ │ │
│ │ └─────────────────────────────────────────┘ │
└────────────┴───────────────────────────────────────────────┘
```
要点:
- 默认**无**工作目录条;项目在首次本地任务时以轻提示选择「文件夹」
- 工具输出默认折叠为一行摘要卡片
- 侧栏按**日期分组** + 任务化标题
- Hub / 创建 Agent 不在顶栏
### 方案 B:任务优先(适合「交办一件事」)
适合:用户说「帮我把登录模块 refactor 掉」,过一会儿回来看结果。
```
┌────────────────────────────────────────────────────────────┐
│ 工作台 [+ 新任务] 👤 │
├────────────────────────────────────────────────────────────┤
│ 进行中 │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ ● 整理 Q1 报告 · 文档助手 正在写第 3 节… [打开] │ │
│ └──────────────────────────────────────────────────────┘ │
│ 最近完成 · 昨天 · 更早 │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ 代码助手│ │ 写作助手│ │ + 更多 │ ← 次要:选助手 │
│ └────────┘ └────────┘ └────────┘ │
└────────────────────────────────────────────────────────────┘
```
进入任务后,布局退回方案 A 的单对话主舞台;工作台不再是 Agent 卡片墙。
### 方案 C:双栏审查(适合本地改文件的高级场景,非默认)
仅当用户开启「开发者模式」或 Agent 类型为 Code 时启用:
```
┌────────────────────────────────────────────────────────────┐
│ 任务:修复单元测试失败 [完成] │
├──────────────────────┬─────────────────────────────────────┤
│ 对话(摘要为主) │ 过程 / 变更(可切换 Tab) │
│ │ · 执行步骤时间线 │
│ │ · 文件 diff │
└──────────────────────┴─────────────────────────────────────┘
```
**普通用户不应默认看到双栏**;这是 power user 的 opt-in。
---
## 五、对现有组件的具体映射
| 现有组件 | 建议处置(普通用户默认) |
|----------|-------------------------|
| `TopNav` 三 Tab | 收敛为:Logo + 当前页标题;Hub/创建进菜单 |
| `SessionPanel` | 保留但:日期分组、任务标题、默认更窄或可收起 |
| `ChatHeader` 连接状态 | 合并为一个状态点;断连才 toast |
| `WorkspaceBar` | 收进首次本地任务引导或设置;主区不常驻 |
| `ToolCallCard` 展开终端 | 默认折叠 + 人话摘要;「查看原始输出」二级 |
| `WorkbenchView` Agent 网格 | 改为「进行中任务」列表;Agent 选择降级 |
| 模式选择弹窗 | 记住上次;或按 Agent 预设,不每次询问 |
---
## 六、信息优先级清单(设计自检用)
设计或评审任一屏时,可按下面排序检查视觉权重是否一致:
1. **用户下一步行动**(输入框、继续按钮、审批)
2. **任务结果 / 助手回复正文**(人话、结构化结论)
3. **当前上下文**(哪个助手、哪次对话 — 一行即可)
4. **历史入口**(侧栏,可收起)
5. **执行过程**(折叠卡片)
6. **系统/连接/路径/工具名**(仅故障或高级模式展示)
若 6 比 2 更显眼,该屏对普通用户不合格。
---
## 七、与「Apple 风」视觉的关系
项目设计 token 参考了 Apple 官网式克制(大留白、少阴影、单一 Action Blue)。
**克制不等于空洞**:Apple 产品页也有明确**视觉焦点**(一张产品图、一句 headline)。
当前客户端学到了「浅灰背景 + SF 字体」,但没学到「**每屏只有一个 hero**」。
普通用户需要的不是更多灰色分区,而是:
- 更大的**可读回复区**
- 更少的**并行横条**
- 更明确的**主按钮**(发送 / 继续 / 批准)
美学应服务「一眼知道看哪里」,而不是增加分区数量。
---
## 八、结论:什么样的布局才「适合普通用户」?
一句话:**把 Mao 从「开发环境里的聊天插件」改成「以对话为主、以任务为记忆、以结论为默认展示」的助手产品。**
具体意味着:
1. **默认单栏对话**,侧栏可收起;顶栏极简;工作目录与连接状态不抢主舞台。
2. **首页展示「我要继续的事」**,不是 Agent 卡片墙。
3. **列表和标题说人话**,不说命令、路径、工具名。
4. **工具输出渐进披露**,终端/Diff 是详情,不是主内容。
5. **导航按使用频率分层**,创建 Agent、Hub、模式选择进二级。
6. **开发者双栏、审查、日志** 作为高级能力 opt-in,而非默认布局。
若只做一件事:**让用户打开应用 3 秒内看到输入框,且眼睛只被输入框和最后一条助手回复吸引**——其余信息都是可选背景。
当前布局的失败,不在于组件丑,而在于**从未决定「谁才是这一屏的主角」**。普通用户需要的,正是这个主角——**他们的问题和 Agent 的回答**,而不是工作台、Hub、路径和终端。
---
## 附录:与现有文档的关系
| 文档 | 侧重点 |
|------|--------|
| 本文 `desktop-layout-reflection.md` | 普通用户心智、布局范式、信息优先级 |
| `desktop-ux-refactor-plan.md` | Codex 映射、组件拆分、实施优先级 P0–P3 |
| `docs/best-agent-spec/DESIGN.md` | 视觉 token 与品牌规范 |
建议实施顺序:先按本文确定**默认布局范式(推荐方案 A + 任务化首页 B)**,再在 refactor plan 中落地组件与状态管理。