Skip to main content
本地优先 · 数据与凭据不出机器

在自己的桌面上跑 Agent 而不是又一个网页聊天框

扣瓦(Kova)是一个原生桌面应用:内嵌流式会话界面,由独立的本地 Agent 运行时 驱动模型对话、工具执行与会话持久化。它不能改什么、要不要先问你, 都由你而不是模型决定。

Tauri v2 原生窗口本地 sidecar 运行时MCP 多服务器接入Expo 移动端
扣瓦 · 客厅灯光助手
+ 新对话
自动化
插件 / 专家 / 技能
我的文件
任务 / 项目
灯光场景调试 2 小时
周末清洁脚本 1 天
月度报表模板 3 天
把客厅的灯调到 30%,顺手生成一份能耗报告。
已执行 灯光场景写入 · 客厅灯组 → 30%
已经调好了:客厅两组灯都到 30%。能耗报告在右侧面板,另外把明早 7 点的定时也加上了。
输入任务指令 @选择智能体,/打开指令菜单
客厅灯组30%
阳台灯组0%
传感器3 在线
定时任务2 条
Why local

三个不一样的选择

大多数 AI 助手要么是浏览器标签页,要么是把一切都塞进云端的聊天框。 扣瓦换了一条路:应用在本地,模型可选,agent 可约束。

01 / 本地优先

数据与凭据不经过中间服务器

会话、记忆、子代理定义与 MCP 配置写在 ~/.kova/ 和工作区的 .kova/ 里。API Key 交给系统钥匙串, macOS 上的服务名是 com.kova.assistant。 你随时可以打开目录,看它到底存了什么。

~/.kova/Keychainrusqlite
02 / 模型可选

换模型只是一个下拉项

模型选择器里配置多家供应商。工具执行、会话持久化、上下文压缩与权限判定 全部由本地 sidecar 完成,与具体模型无关—— 换一个模型不会绕过任何一道审批。

多供应商回合级切换
03 / 可约束

停下来问你,是本地逻辑不是模型自觉

挂起、批准、拒绝、回滚都发生在确定性代码里。模型说”我做完了”不算数—— 出口工具要带目标 id 比对,过期的完成信号会被拒绝。

stale-turn guardprefix rules
The loop

一次会话里真正在发生什么

你看到的是一个流式会话。背后跑的是一个确定的循环—— 而其中只有第二步属于模型,其余全是本地代码。

组装上下文

取会话历史,注入长期记忆与已装载技能,附上 @ 提及的文件内容与附件。 上下文占用过多时先做压缩,保留关键决策与已产出文件。

调用模型

交给当前选中的模型,拿到增量文本或一组工具调用。换模型只影响这一步。

逐个判定工具调用

每个调用先过会话模式(这一档能不能改), 再过权限档位(这一档要不要问)。 两者都放行才继续。

该问就停下来问

需要审批时回合挂起、状态保留,你的选择回来之后从同一步继续。 被拒绝的调用作为 blocked 结果回给模型,让它换一条路,而不是卡死。

执行、回灌、落检查点

工具在 sidecar 内执行,结果回灌进上下文,循环回到第二步。 每次调用与文件改动都记成检查点,随时能回到某一步重来。

Permission model

它不会悄悄替你做决定

界面上是两个独立的下拉,合起来才是最终行为。把它们混为一谈 是关于扣瓦最常见的误解。

agent会话模式

完整工具集。默认模式——读写文件、跑命令、调子代理。

plan会话模式

结构性只读。只能读和规划,通过 plan_exit 拿到批准后回到 agent 实施。 规划与实施在权限上分开,读代码阶段拿不到写权限。

ask会话模式

纯只读子集,没有 bash。适合”就问问,别动手”。

goal会话模式

完整工具集加跨轮自治。你说的第一句话就是目标,模型一路做到完, 中途不用点”继续”。细节见 目标模式。

workspace-write权限档位

工作区内与可写根清单内的目录免确认;bash 仍要点头, 但支持”允许并记住这类命令”生成前缀规则。

审批卡只有三个按钮

拒绝、仅这一次、允许并记住。“记住”记的是命令词前缀,不是一张通行证: 解释器类与破坏性命令没有这个按钮,命中要逐段校验,重定向与命令替换按 shell 的词法挡掉。可写根清单只负责”能落到哪些目录”——你永远不会因此获得 没批准过的目录写权限。

直说一件事
workspace-write 档管不住 bash ——命令可以通过 shell 写到工作区之外的任何位置。这是有意的取舍, docs/permission-modes.md 里有专门章节说明,不是设计疏漏。 真正需要隔离时请用沙箱或容器。
Capabilities

核心能力

对话工作区

多线程会话、附件与 @ 提及、提示词排队

多会话管理、附件与 @ 提及、斜杠命令、模型选择器、语音输入, 会话标题由 AI 自动总结。提示词排队让你在 agent 还在跑的时候 把后续要求写进去,条目会持久化到会话转录——刷新、重启、切线程都不丢。

prompt queue v2checkpointsstreamdown
Agent 运行时

独立 sidecar 进程

长任务不拖垮界面,界面崩溃不打断正在跑的活儿,多端复用同一份运行时。 内置编码、浏览器、HTTP、截图工具,带上下文压缩与长期记忆。

NDJSON over stdio
子代理

Task / TaskWait / TaskList / TaskStop

独立上下文与工具集,三层发现(内置 / 用户 / 插件), 活动过程边干边落盘,重启后可回放。

activity replay
MCP

多服务器连接池

配置双层合并、输出防护、OAuth,调用走同一套审批流程并留下审计记录。

Interface

从配置到统计,都在你自己的机器上

新对话
+ 新对话
自动化
插件 / 专家 / 技能
我的文件

选个方向,或者直接说事。

灵感写作写代码分析插件
输入任务指令 @选择智能体,/打开指令菜单
设置 · 使用统计
模型
凭据
MCP 服务器
使用统计
可观测性
备份与归档
累计 Token128.4 万
缓存命中率86%
Feature tour

功能详解

十个主题,每个都有完整的设计文档——从会话工作区到提示词缓存,点击进入。

01

对话工作区

多线程会话、附件与 @ 提及、检查点回溯、斜杠命令与语音输入。

02

提示词排队 v2

QueueEngine 快照持久化、三条幂等同步规则,排队条目连图片都不丢。

03

模式总览

五个常被叫作「模式」的东西彻底分开:会话模式、权限档位、工作模式、自动化档。

04

目标模式

显式状态机、两条停机阀、过期护栏,以及为什么刻意不做 token 预算。

05

子代理设计

Task 四件套、三层发现、活动过程持久化回放与 token 结算。

06

提示词缓存

prompt_cache_key 分片路由、同形摘要请求、两套命中率口径。

07

插件与工作台

office / canvas / ui-design 三个工作台与本地插件市场。

08

自动化

定时任务、合并补跑、无人值守审批档与 Webhook 通知。

09

远程与移动端

配对码换 token、三种网络接入、Expo 移动 App 与安全边界。

10

Agent 引擎

回合生命周期、内置工具表、上下文压缩与长期记忆。

Workspaces

会给你打开来用的工作台

插件不只是一段提示词,而是能真正操作的界面。关键在于产物是结构化数据—— agent 改的是同一份文档,不是给你看一张图。

office

幻灯片与表格

幻灯片逐页编辑、放映与导出 .pptx; 表格走 Univer 引擎,支持公式、样式、合并与冻结。

Univerpptxgenjs
canvas

无限画布

文本、形状、图片、Mermaid、表格、图表、网页嵌入自由摆放, 整幅导出 SVG。

*.canvas.json
ui-design

Figma 式设计工作台

页面 / 画板 / 图层树加完整属性检视。它自带 MCP 服务器, agent 因此能直接操作画布节点——增删改、对齐分布、堆叠排版、成组。

MCP 直控
Architecture

四层结构

把 agent 拆成独立进程是有意的:长任务不拖垮界面,界面崩溃不打断活儿, 多端复用同一份运行时。详见 架构总览。

repo map
Get started

五分钟跑起来

需要 Bun、Rust 工具链与 Node.js。 完整说明见 快速开始。

Terminal
Who it’s for

适合谁

想在本地干活的人数据

代码、数据、文件都在自己的机器上,不想为了用一个助手把工作区上传到某台服务器。

要接一堆外部工具的人集成

已经在用多个 MCP 服务器,需要一个把它们管起来、并且每次调用都留痕的地方。

要做办公产物的人产出

需要的是能导出 .pptx 和 .xlsx 的真文档, 而不是聊天框里的一张预览图。

想二次开发的团队工程

这是可直接改造的模板:monorepo 结构清晰,跨端契约集中在 packages/pi-protocol,换品牌一条命令。

装一个,或者读两行代码

取安装包配置一个模型就能开始对话;想改的话,monorepo 里每个目录都对应一个明确的职责。

Kova · 扣瓦 — 以 Apache License 2.0 开源发布。 基于本仓库二次开发并分发时,请保留 LICENSE 与上游依赖各自的许可声明。