Skip to main content
会话工作区是扣瓦的主界面:左侧会话列表,中间是流式会话流, 右侧按需展开文件树、终端与工具详情。

多线程与标题总结

多个会话并行存在,互不干扰。标题不用你手写—— sidecar 会在对话进行到一定阶段时自动总结出一个标题, 把「帮我看下这个报错」变成「修复 TypeScript 类型收窄错误」。

提示词排队

这是被低估但很关键的一个设计。
agent 正在跑的时候输入框是锁死的。你只能等它跑完, 或者强行打断——而打断会丢掉这一轮已经产生的中间状态。
输入框一直可用。你把后续要求写进去,它进入一个队列, 在当前回合结束后按序送达。中途还可以调整队列内容。
排队设计详见仓库内的 docs/prompt-queue-design.md。

附件与 @ 提及

  • 拖入图片、文档,或从工作区文件树里挑文件送进上下文;
  • 用 @ 提及具体文件、目录或子代理,让上下文指向明确的位置, 而不是把整个项目塞进去;
  • 图像走多模态 part 传入,sidecar 侧有专门的 image part 处理与镜像逻辑。

检查点回溯

每一步工具调用与文件改动都会被记录成检查点。改动跑偏了, 可以回到任意一步重来,而不是靠回忆”我刚才让它改了什么”。 检查点和会话一起持久化,重启应用后依然可用。

斜杠命令

输入框里以 / 开头会拉出命令面板,常用的包括切换会话模式、切换权限档位、 新建会话、插入检查点等。命令面板由 cmdk 驱动, 支持模糊匹配和键盘导航。

模型选择器

模型下拉在输入框附近,随时可换。切换只影响后续回合的模型, 不影响已经在跑的工具调用。会话模式与权限档位是另外两个独立的下拉—— 这一点在介绍里经常被混为一谈:
扣瓦应用里有五个常被叫作”模式”的东西,实际互不相干: 会话模式(能不能改)、权限档位(问不问)、工作模式(面向谁)、 自动化权限档(无人值守专用),以及模型提供商选择。 界面上它们是分开的入口,详见 Agent 引擎。

流式渲染

会话流基于 Streamdown 做流式 Markdown 渲染, 并启用 CJK、数学公式与 Mermaid 插件。代码块、表格、图表在增量 token 到达时 不会被反复重排——流式消息渲染做过专门的性能优化。

Agent 在这些机制里做什么

会话工作区看着是 UI 设计,实际上好几个机制正是为了让 agent 能稳定工作而设计的。
决定模型看到什么是你的选择,不是它的猜测。 @ 指向具体文件或目录时,agent 拿到的是一个明确入口,按需读取, 而不是一次吞掉整个项目;图片走独立的多模态通道 (见 docs/image-part-design.md 与 docs/user-image-attachment-plan.md)。 这比”把仓库塞进去让模型自己找”既省 token,也更不容易找错文件。
队列对 agent 的意义是回合边界清晰。它知道你补的话要接在哪一轮之后, 于是按顺序注入,而不是打断当前回合、丢掉已经产生的中间状态。 agent 因此可以安全地跑长任务,你同时把后续要求写完。 设计见 docs/prompt-queue-design.md。
检查点记录的是工具调用与文件改动。回滚之后 agent 从那个状态重新出发, 不会带着”刚才那次运行失败”的错误假设继续推理。 对长任务来说,这比让它自我纠错更省 token,也更可预测。
sidecar 与前端之间是 NDJSON 事件流:模型增量、工具开始 / 结束、审批请求、 子代理活动各自是独立事件。前端只是把它们渲染成对话流里的不同形态, 所以工具调用能折叠、检查点能点开——这些是事件结构天然带来的。
这两个是你在控制 agent,不是 agent 在使用的能力。 模式 / 权限 / 模型三个下拉在回合之间生效,不影响正在跑的工具调用。

设置面一览

设置页按能力分成若干分区,以下模块都是真实存在的界面:

通用与外观

通用、外观、代码主题、快捷键、无障碍

模型与密钥

模型供应商、凭据与环境变量、额度补充字段

能力开关

MCP 服务器、技能、子代理、电脑控制

数据

备份与恢复、归档、会话记忆历史

远程

远程网关、配对设备管理

观测

可观测性接入、用量统计与热力图

下一步

看看 agent 本身怎么工作,以及它什么时候会停下来问你。