内容
# 克里亚(桌面版MCP)
> **构建可被AI代理理解和操作的桌面应用程序** — 直接通过应用程序的实际键入操作,而不是通过截图和猜测点击位置。
## 代理与软件的三个前沿
AI代理需要操作软件。这种交互正在分为三个层次 — 其中两个有新兴的标准,一个还没有:
```
┌─────────────────────────────────────────────────────┐
│ 代理如何访问软件的当前方式 │
├─────────────┬─────────────────┬─────────────────────┤
│ Web应用 │ 云API │ 桌面/本地应用 │
│ │ │ │
标准 │ WebMCP │ MCP │ ❌ 无 │
│ (W3C试验)│ (Linux基金会) │ │
代理接口 │ 声明的 │ REST/工具模式 │ 截图 + 点击像素 │
│ 页面中的工具│ │ │
治理 │ 浏览器 │ 网关级(不成熟)│ ❌ 无 — │
│ 沙箱 │ │ 无法许可、审计或门控 │
谁在构建它 │ Google, │ Anthropic, │ ← 克里亚在此 │
│ 浏览器厂商 │ OpenAI, │ │
└─────────────┴─────────────────┴─────────────────────┘
```
**空白点:** 本地应用,无API和私有数据 — POS终端、金融工具、医疗工作站 — 无法从外部治理。治理必须在数据和人所在的位置:**在应用内,在设备上。** 这是克里亚构建的前沿。([完整文章 →](https://medium.com/@sandeepshekhar26/the-three-frontiers-of-agent-meets-software-and-the-one-nobodys-building-for-a7cafda13715))
---
每个应用程序今天都是为人类点击按钮而构建的。现在,AI代理需要使用相同的应用程序 — 而且它们不应该为了做到这一点而盯着像素。借助克里亚,您可以声明应用程序的每个功能作为一个键入的**操作**:人类通过点击触发它,代理通过调用它 — **相同**的代码在底层。代理对应用程序的整个视图是结构化状态和键入的操作菜单。无需截图,无需DOM抓取,无需猜测。
*可以理解为:React/Electron,但适用于AI代理时代。* 构建一个新应用程序,或者**将其添加到您已经有的应用程序中** — 并通过MCP将这些操作暴露给任何代理(Claude Desktop、Cursor等)。
并且由于操作实际应用程序的代理需要防护措施,克里亚将它们内置:每个操作都通过**权限 → 人工审批 → 预算 → 签名的审计 trail**,在设备上,在触及数据之前。
<p align="center">
<img src="examples/actual-budget-bolt-on/demo.gif" alt="AI代理通过克里亚操作Actual Budget - 例行操作运行并签名;涉及资金的操作被阻止,待审批;每个收据可验证" width="760">
<br><em>代理通过克里亚操作<a href="https://actualbudget.org">Actual Budget</a>:例行操作运行并签名;涉及资金的操作被阻止,待审批;每个操作离线验证。</em>
</p>
## 为什么是"kriya"?
**克里亚**(梵文,क्रिया)意为*动作* — 而在语法中,意为*动词*。这正是我们的理念:代理不应该盯着像素,而应该**通过应用程序的动词操作**。它工作的单位是*克里亚* — 一个单独的键入的、受控的操作。我们将代理绑定到**动作**,而不是截图。同一个词,同样的赌注:软件您通过*执行*操作,无论您是人类还是机器。
## 一个应用程序,两个入口
```
人类 ──点击按钮──┐
├──▶ 相同的键入操作 ──▶ 您的处理程序 ──▶ 状态 ──▶ UI
代理 ──调用操作──┘ (受控:权限 · 审批 · 预算 · 审计)
```
您声明每个功能一次 — `registerAction(...)` 用于新应用程序,或 `wrapAction(...)` 用于已有的应用程序。代理永远不会模拟人类:它直接调用键入的操作,**无法**绕过防护措施,因为**主机**(不是代理)拥有策略和签名密钥。
## 它如何组合在一起
每个路径 — 人类点击、本地代理或外部代理通过MCP — 都落在同一个注册表中,并运行相同的验证流程,然后才能触及数据:
```mermaid
flowchart TB
subgraph HOST[kriya主机 - 在设备上,代理无法绕过]
direction TB
REG[操作注册表:registerAction或wrapAction] --> PERM{权限?}
PERM -->|拒绝| NO[阻止]
PERM -->|需要审批| APPR[人工审批:批准或拒绝]
APPR -->|拒绝| NO
PERM -->|允许| BUD[预算:每分钟上限]
APPR -->|批准| BUD
BUD --> RUN[运行注册的处理程序]
RUN --> SIGN[签名Ed25519收据]
end
H([人类点击按钮]) --> REG
A([本地代理调用操作]) --> REG
EXT([外部代理 - Claude Desktop, Cursor]) -->|MCP| MCP[kriya-mcp 受控服务器]
MCP --> REG
RUN --> STATE[(应用程序状态)]
STATE --> UI[UI重新渲染]
SIGN --> AUDIT[(追加审计日志)]
RUN --> MEM[(内存:SQLite,跨运行)]
STATE -. 结构化状态 .-> A
MEM -. 回忆 .-> A
INF[推理:确定性 / claude-cli / ollama / anthropic] -. 选择下一个操作 .-> A
```
代理对应用程序的整个视图是右侧:**结构化状态**加上键入的**操作菜单**。它永远不会看到像素。左侧 — 权限、审批、预算、签名 — 在主机进程中强制执行,因此即使行为不端的或越狱的代理也无法通过。
## 您获得的内容
- **键入操作,而不是像素。** 声明一个功能一次;人类点击它,代理调用它,两者运行相同的处理程序。代理根据结构化状态和键入的工具模式进行推理 — 快速可靠,并且在您重新设计按钮时不会损坏。
- **内置治理。** 代理提出的每个操作都会运行此验证流程,在设备上执行,然后才能执行:
1. **权限** — 默认拒绝策略:允许/需要批准/拒绝。
2. **人工审批** — 受控操作在您的应用程序的UI中暂停以获取批准/拒绝决定。
3. **预算** — 每分钟操作上限*和*每小时推理调用上限停止失控或循环的代理(第二个模型成本边界,而不是仅仅是操作突发)。
4. **签名审计** — 每个操作的Ed25519收据 → 追加日志,可离线验证。
另外还有持久的**内存**,跨运行的**策略检查**和**逐步**调试。
- **支持MCP。** 您的操作成为MCP工具;受控的`kriya-mcp`服务器允许任何外部代理驱动您的应用程序 — 每个调用都通过门控,而不是绕过它们。
- **跨Shell,跨语言。** 在Tauri后端运行,或作为独立的`kriya-host`边车,Electron,普通Node和**Python**应用程序通过stdio驱动 — 在渲染器无法篡改的进程中进行治理。一个Rust主机,每个语言的绑定(目前TS + Python;.NET/JVM下一个)。
## 采用两种方式
**构建新的本地优先代理应用程序:**
```bash
npm create kriya-app@latest my-app # Tauri 2 + React + Rust主机,安全层预连接
```
然后声明一个功能是一个小的代码块 — 与您的按钮已经调用的**相同**处理程序:
```ts
import { registerAction, str } from "kriya-core";
registerAction({
id: "create_note",
description: "使用标题和内容创建新笔记。",
parameters: { title: str, content: str },
permissions: ["write:notes"], // 策略决定:允许/需要批准/拒绝
handler: ({ title, content }) => // ←您的普通业务逻辑,特殊之处
db.notes.insert({ title, content }),
});
```
这就是整个合同。人类点击**新建笔记**;代理调用`create_note` — 两者运行完全相同的**处理程序**,并且代理的调用仍然在进入时经过权限 → 审批 → 预算 → 审计。代理自动发现它(克里亚将其转换为键入的工具模式),因此您编写应用程序逻辑,而不是代理管道。添加下一个功能是另一个`registerAction`。
**将其添加到您已经有的应用程序中** — 包装一个它**已经公开**的功能,无需重写:
```ts
import { wrapAction } from "kriya-core";
wrapAction(actual.updateTransaction, {
id: "categorize_transaction",
description: "为交易分配类别。",
parameters: { id: str, category: str },
mapParams: (p) => [p.id, { category: p.category }],
});
wrapAction(actual.deleteTransaction, {
id: "delete_transaction",
description: "永久删除交易。",
parameters: { id: str },
mapParams: (p) => [p.id], // 策略:require_approval — 为人类暂停
});
```
该代码段是上面的演示:[`examples/actual-budget-bolt-on/`](examples/actual-budget-bolt-on/)提供了一个前端代理受控访问[Actual Budget](https://actualbudget.org) — 一个真正的本地优先金融应用程序,**没有HTTP API** — 约37行,无需更改Actual的代码。
(`kriya wrap <file>`从您的导出函数中构建包装器。)
> **更少的行 — 而且少得多token。** 已发布的基准测试(Reflex,2026年5月)在同一任务上运行基于视觉和键入操作的代理,使用Claude Sonnet:基于视觉需要**551,000输入token,跨53步**(~17分钟);键入操作需要**12,000token,8次调用**(~20秒)— **〜45倍更多token和〜50倍更慢**。在克里亚自己的Actual Budget演示中,比例相似:分类交易通过键入操作花费〜700token,而截图和点击相同编辑花费〜8,000-15,000token。键入操作更便宜**因为**模型推理含义,而不是像素。
> <br><sub>(基准测试:[Reflex,2026年5月](https://medium.com/@sandeepshekhar26/the-three-frontiers-of-agent-meets-software-and-the-one-nobodys-building-for-a7cafda13715);克里亚估计使用Anthropic的文件图像token公式。)</sub>
## 盒子里有什么
| 包/ crate | 什么 |
|---|---|
| [`kriya-core`](packages/core/) | TypeScript SDK — `registerAction`, `wrapAction`, 验证,MCP/JSON-Schema导出,`kriya` CLI (`dump`, `wrap`) |
| [`kriya-sidecar`](packages/sidecar/) | Node/TS绑定 — 从stdio托管运行时从Electron或普通Node |
| [`kriya-inspector`](packages/inspector/) | 插入式React开发检查器 — 步进日志,批准模态,内存重放 |
| [`create-kriya-app`](packages/create-kriya-app/) | 新本地优先代理应用程序的脚手架 |
| [`kriya`](crates/kriya/) | Rust代理主机 — 步进循环,可交换推理,权限,预算,签名审计,内存,**受控MCP服务器模式** |
| [`kriya` (Python)](bindings/python/) | **Python绑定** — `register_action` / `wrap_action` + `Host`_stdio驱动,用于PyQt/PySide/Tk应用程序,FreeCAD/Blender插件,数据和量化工具 (`pip install kriya`) |
**二进制文件:** `kriya-mcp`(受控MCP服务器 — 外部代理通过门控驱动您的应用程序)· `kriya-host`(stdio边车)· [`tools/verify-receipts`](tools/verify-receipts/)(离线审计日志验证器)。
**参考应用程序:** [`apps/note-app`](apps/note-app/)和[`apps/task-manager`](apps/task-manager/) — 两个域在一个共享的主机crate上。
## 快速开始
尝试带有零设置的受控插件(内存预算,无实际数据):
```bash
cd examples/actual-budget-bolt-on && ./demo.sh # 构建所有内容并在第一次运行,然后播放
```
或运行参考桌面应用程序:
```bash
npm install
npm run build --workspace kriya-core
npm run tauri dev --workspace note-app # 首次运行编译Rust后端(几分钟)
```
使用`AGENT_BACKEND`选择推理后端(默认为`deterministic`,或`claude-cli` / `ollama` / `anthropic`)。
## 文档
- [docs/THREE-FRONTIERS.md](docs/THREE-FRONTIERS.md) — **定位论文**(*为什么*):代理通过软件访问的三个表面,以及没有治理的桌面/本地表面
- [architecture.md](architecture.md) — 模式的工作原理,端到端
- [docs/SECURITY.md](docs/SECURITY.md) — 签名审计轨迹如何防篡改(以及诚实的威胁模型)
- [docs/ROADMAP.md](docs/ROADMAP.md) — 已构建的内容和下一步
- [docs/PRODUCT_GAPS.md](docs/PRODUCT_GAPS.md) — 诚实的特性完成跟踪器
- [docs/CONTINUE.md](docs/CONTINUE.md) — 复制粘贴提示以将路线图推进一项
## 为什么现在很重要
- **欧盟AI法案**高风险(附件III)义务被推迟到2027年12月2日,数字Omnibus(2026年5月同意;附件I嵌入式系统→2028年8月)— 但要求不变:触及受监管数据的代理需要可审计的受控接口,不合规罚款高达**€15M / 3%**全球营业额(第7% / €35M层级是*禁止*行为)。
- **Gartner**预测40%的企业应用程序将在2026年末嵌入AI代理 — 40%的企业将因治理空白而降级或停用自主代理到2027年。
- **NSA AI安全中心**(2026年5月)警告MCP的快速采用已经超过其安全模型; **CoSAI**白皮书确定了12类别中近40个MCP特定威胁。
- 对于桌面/本地应用程序,唯一的GA产品是Microsoft Copilot Studio — 仍然基于视觉,仍然无治理。这是克里亚填补的空白。
## 企业 — 克里亚控制台
此存储库中的运行时使**单个**应用程序在设备上安全地可由代理驱动,并且**永久免费**。运行多个应用程序、用户和机器的组织需要一个额外的层:一个可以监督和**证明**每个代理执行了什么,并从一个位置设置策略的地方。那就是**克里亚控制台** — 一个单独的商业产品,构建在此开源运行时之上。
控制台永远不会改变运行时的工作方式 — 它使用相同的Ed25519签名收据和相同的`agent-policy.yaml`,开源主机已经发出和执行:
- **跨应用审计,本地验证。** 聚合每个克里亚应用程序的签名审计日志,并在设备上验证它们 - 什么都不离开机器。篡改或伪造的条目被标记,提供一个值得信赖的组织中每个代理实际执行的操作的视图。
- **集中式策略。** 决定每个代理可以执行什么 - 允许,需要批准或拒绝 - 跨所有应用程序从一个位置,查看您尚未治理的操作,并验证它后再发布。控制台生成开源运行时强制执行的策略。
- **监管部署的基础。** 防篡改审计日志和集中式策略执行是**欧盟AI法案**(2026年8月生效)和**SOC 2**对代理触及真实数据时要求的内容 - 在设备上,而云MCP网关在结构上无法达到。(一键式合规证据导出正在控制台的路线图上。)
企业和受监管的部署 → [kriyanative.com](https://kriyanative.com) ·
Sandeepshekhar26@gmail.com。
## 状态
Alpha。模式、跨Shell运行时和完整的安全层端到端工作 — 键入操作、受控MCP服务器模式、Electron/Node边车、`wrapAction`插件和Actual Budget旗舰版均已发布。 API在稳定版本之前可能会更改。 遵循MIT许可。
连接信息
猜你喜欢
暂无推荐服务器