mtty 终端 · 编辑器 · 代理

AI 原生的终端与编辑器,本地与远程同样顺手。

终端、文件、远程主机和你的 AI 编程代理,放进同一个快速的原生窗口,共用同一套标签与分屏。用 Rust 编写,GPU 渲染,由性能门把关。不需要账号,不强制上云:mtty 托管你选择的代理,自己从不调用模型。

应用以 mtty 的名字发布(v0.0.5 及之前名为 miaotty),源码在 mtty 仓库。

  • macOSApple 芯片 · Intel
  • Linux.deb · AppImage · tar
  • WindowsMSI · zip

预发布。API 尚未稳定。macOS 是主要平台;Windows 与 Linux 已构建、测试,并在真实桌面上验收。Apple 公证与 Windows MSI 签名尚未完成。

当前 mtty 工作区:会话侧栏、Markdown 编辑器、Mermaid 渲染预览和分屏终端。
编辑器、Mermaid 预览与终端 · 同一个示例工作区
终端与远程
GPU 渲染的标签与分屏,主机库、SFTP、端口转发与跳板机,走你自己的 OpenSSH。
编辑器
内置查看与编辑器,Markdown 与 Mermaid 实时预览,在 100 MB 文件上设有性能门。
代理工作台
Claude Code、Codex、OpenCode 与 miao 上报四种状态,变成标签徽章、通知与提示队列。

00 三根支柱

终端、编辑器与代理,同在一个窗口。

01 引擎优先

引擎与应用,刻意分开。

依赖只向内指:宿主 → 渲染 → 内核。内核不含任何窗口或 GPU 代码,因此可以嵌入别的程序。应用是引擎的第一个使用者,而不是它的主人。

热路径不加锁,每帧零分配。

hostmtty-widgetwinit + wgpu 渲染循环,在同一帧合成 egui 界面
rendermtty-renderwgpu + glyphon 字形网格,四边形与图像管线
coremtty-corePTY、VT 解析、网格与回滚、选择、搜索、OSC、输入编码
并列模块mtty-graphicsmtty-configmtty-mtpmtty-ui

02 实测

性能预算,由 CI 把关。

每项指标都有留足余量的绝对预算:数量级的退化会让构建失败,运行器抖动不会。

VT 解析吞吐

73 MB/s

预算 ≥ 25 MB/s

屏幕快照,30 行

0.012 ms

预算 ≤ 2 ms

每帧行构建

0.12 ms

预算 ≤ 4 ms

命令面板排序,1 万条

2.0 ms

预算 ≤ 100 ms

基线为 M 系列 Mac 上的 release 构建。帧时间与按键到字形的延迟需要真实窗口和 GPU,因此手动测量,不作为 CI 门槛。

03 工作台

不只是一个带提示符的窗口。

04 界面

每个功能,都在真实应用里。

使用独立示例项目,从当前开发构建重新采集:代理徽章、实时预览、行内改动审阅、主机库、分屏和详情面板。代理状态事件与改动提议通过真实控制面驱动;主机地址为示例。

05 为代理而造

它知道每个窗格里的代理在做什么。

代理上报 idle、processing、awaiting 或 error 四种状态。mtty 把它变成标签上的徽章、代理需要你时的系统通知、代理工作时的防休眠,以及在窗格空闲后自动发送下一条消息的提示队列。

miao
通过内置集成上报状态,无需任何配置。
其他代理 CLI
mtty 能识别它们,安装状态钩子脚本,并复制好需要你自己添加的配置片段。绝不替你改动代理的配置。
Composer ⌘⇧E
多行提示编辑器,发送到当前窗格。

06 可脚本化

一个其他程序也能驱动的控制面。

MTP 通过仅属主可访问的每用户套接字(Windows 上为命名管道)收发按行分隔的 JSON。每个响应都带状态版本号;客户端可以阻塞等待它变化,或订阅事件流,而不必轮询。

通过 TCP 提供服务必须设置令牌,还可以用能力白名单限制可接受的请求。控制面会在你的 shell 中执行命令,请妥善保管令牌。

$ mtty-cli pane list
$ mtty-cli pane run --pane ID --data "cargo test"
$ mtty-cli events --topic agent.state
$ mtty-cli wait --since 42
$ mtty-cli view ./README.md
$ mtty-cli file read --path /etc/hosts   # ≤ 2 MB

07 键盘

快捷键

⌘T
新标签
⌘D / ⇧⌘D
向右 / 向下分屏
⌘K
快速打开
⌘F
查找
⌥⌘D
详情面板
⌘⇧E
Composer
⌘⇧T
Quick Terminal
⌘⇧Z
重新打开关闭的标签
⌘,
设置

macOS 上为 ⌘,其他平台使用对应的主修饰键。

试试预览版。

或者自己构建

$ git clone https://github.com/oxdingzg/mtty.git && cd mtty
$ cargo run --release -p mtty-app