在自己的桌面上跑 Agent 而不是又一个网页聊天框
扣瓦(Kova)是一个原生桌面应用:内嵌流式会话界面,由独立的本地 Agent 运行时 驱动模型对话、工具执行与会话持久化。它不能改什么、要不要先问你, 都由你而不是模型决定。
三个不一样的选择
大多数 AI 助手要么是浏览器标签页,要么是把一切都塞进云端的聊天框。 扣瓦换了一条路:应用在本地,模型可选,agent 可约束。
数据与凭据不经过中间服务器
会话、记忆、子代理定义与 MCP 配置写在 ~/.kova/ 和工作区的
.kova/ 里。API Key 交给系统钥匙串,
macOS 上的服务名是 com.kova.assistant。
你随时可以打开目录,看它到底存了什么。
一次会话里真正在发生什么
你看到的是一个流式会话。背后跑的是一个确定的循环—— 而其中只有第二步属于模型,其余全是本地代码。
组装上下文
取会话历史,注入长期记忆与已装载技能,附上 @ 提及的文件内容与附件。 上下文占用过多时先做压缩,保留关键决策与已产出文件。
调用模型
交给当前选中的模型,拿到增量文本或一组工具调用。换模型只影响这一步。
逐个判定工具调用
每个调用先过会话模式(这一档能不能改), 再过权限档位(这一档要不要问)。 两者都放行才继续。
该问就停下来问
需要审批时回合挂起、状态保留,你的选择回来之后从同一步继续。 被拒绝的调用作为 blocked 结果回给模型,让它换一条路,而不是卡死。
执行、回灌、落检查点
工具在 sidecar 内执行,结果回灌进上下文,循环回到第二步。 每次调用与文件改动都记成检查点,随时能回到某一步重来。
它不会悄悄替你做决定
界面上是两个独立的下拉,合起来才是最终行为。把它们混为一谈 是关于扣瓦最常见的误解。
完整工具集。默认模式——读写文件、跑命令、调子代理。
结构性只读。只能读和规划,通过 plan_exit 拿到批准后回到 agent 实施。
规划与实施在权限上分开,读代码阶段拿不到写权限。
纯只读子集,没有 bash。适合”就问问,别动手”。
完整工具集加跨轮自治。你说的第一句话就是目标,模型一路做到完, 中途不用点”继续”。细节见 目标模式。
工作区内与可写根清单内的目录免确认;bash 仍要点头, 但支持”允许并记住这类命令”生成前缀规则。
拒绝、仅这一次、允许并记住。“记住”记的是命令词前缀,不是一张通行证: 解释器类与破坏性命令没有这个按钮,命中要逐段校验,重定向与命令替换按 shell 的词法挡掉。可写根清单只负责”能落到哪些目录”——你永远不会因此获得 没批准过的目录写权限。
workspace-write 档管不住 bash
——命令可以通过 shell 写到工作区之外的任何位置。这是有意的取舍,
docs/permission-modes.md 里有专门章节说明,不是设计疏漏。
真正需要隔离时请用沙箱或容器。核心能力
多线程会话、附件与 @ 提及、提示词排队
多会话管理、附件与 @ 提及、斜杠命令、模型选择器、语音输入, 会话标题由 AI 自动总结。提示词排队让你在 agent 还在跑的时候 把后续要求写进去,条目会持久化到会话转录——刷新、重启、切线程都不丢。
从配置到统计,都在你自己的机器上
选个方向,或者直接说事。
功能详解
十个主题,每个都有完整的设计文档——从会话工作区到提示词缓存,点击进入。
会给你打开来用的工作台
插件不只是一段提示词,而是能真正操作的界面。关键在于产物是结构化数据—— agent 改的是同一份文档,不是给你看一张图。
四层结构
把 agent 拆成独立进程是有意的:长任务不拖垮界面,界面崩溃不打断活儿, 多端复用同一份运行时。详见 架构总览。
五分钟跑起来
需要 Bun、Rust 工具链与 Node.js。 完整说明见 快速开始。
适合谁
代码、数据、文件都在自己的机器上,不想为了用一个助手把工作区上传到某台服务器。
已经在用多个 MCP 服务器,需要一个把它们管起来、并且每次调用都留痕的地方。
需要的是能导出 .pptx 和 .xlsx 的真文档,
而不是聊天框里的一张预览图。
这是可直接改造的模板:monorepo 结构清晰,跨端契约集中在
packages/pi-protocol,换品牌一条命令。
Kova · 扣瓦 — 以 Apache License 2.0 开源发布。 基于本仓库二次开发并分发时,请保留 LICENSE 与上游依赖各自的许可声明。
