基于 Godot 和 Rust 的终端复用器(终端窗格及更多)
摘要
gPTY 是基于 Godot 和 Rust 构建的 PTY 基础架构,提供终端窗格的平铺网格,并通过 JSON-RPC/MCP 集成 AI 代理,实现自动化和可观测性。
查看缓存全文
缓存时间: 2026/09/11 17:24
godot-pty/gpty
源码地址:https://github.com/godot-pty/gpty
gPTY (https://godot-pty.github.io/gpty/) - 一个基于 Godot 和 Rust 构建的 PTY 基础框架。它为窗格(终端、代码编辑器、文件树等)提供平铺网格布局、概念捕获引擎以及 JSON-RPC/MCP 控制接口,使得 AI 代理和自动化工具无需抓取终端用户界面即可创建窗格、注入文本并观察输出。
概述
-
PTY - 在可调整大小的平铺网格中生成和管理独立的 shell 会话。通过
alacritty_terminal实现完整的DEC STD 070标准支持:16/256/真彩色显示,支持正则表达式搜索的滚动历史,以及自动换行文本选择。 -
公共 API - 提供 JSON-RPC IPC 套接字 + 命令行工具(
gpty new-pane、gpty inject等)+ MCP 服务器。AI 代理、脚本和编排工具可通过文档化的版本化协议驱动工作区。 -
概念引擎 - 使用正则表达式触发器捕获 PTY 输出,将捕获内容路由到相邻窗格(代码查看器、检查器)。可自定义或使用内置默认规则。概念引擎仅捕获和显示输出——不会向 shell 注入任何输入。
-
代理可观测性 - 推理窗格被动投射文档化的代理生命周期事件(OMP,可扩展);检查器窗格运行无需额外工具的私有问答会话。仅提供可观测性——gpty 不编排代理状态。
-
持久化 - 滚动历史、设置、工作区(命名标签页集)和配置文件自动保存到 SQLite/JSON,重启时恢复;支持跨窗格持久化历史的全文搜索。
-
跨平台 - 提供 Linux、macOS 和 Windows 的独立二进制文件。运行无需 Godot 或 Rust 工具链。
-
文档 - https://godot-pty.github.io/gpty/
注:本代码库的绝大部分内容(包括大部分 Godot UI 布局和 Rust (
gpty-core) GDExtension 桥接层)由 LLM 生成;因此底层代码可能包含非惯用模式或错误。
| 组件 | 选择 | 理由 |
|---|---|---|
| PTY 库 | portable-pty | 跨平台(Linux /dev/ptmx + Windows ConPTY),统一 API |
| ANSI 解析 | vte crate | 高速 Rust ANSI 状态机 |
| 异步运行时 | tokio | 每终端独立任务;基于通道的捕获状态机 |
| I/O 线程 | 为每个 PTY 分配专用 std::thread | 可预测的阻塞读取;通过 mpsc 桥接 tokio |
| 概念捕获 | 基于解析后 LineParser 输出的 Rust regex | 线性时间匹配(ReDoS 安全);捕获缓冲区原始字节以忠实重现网格内容 |
| 网格渲染 | alacritty_terminal | 完整的 DEC STD 070 网格状态机;通过数组传递至 Godot _draw() |
| Godot 桥接 | gdext 0.5 | 适用于 Godot 4.7+ 的原生 GDExtension |
| Rust 版本 | 2024 | 要求 Rust >= 1.85 |
安装与使用
独立二进制文件(无需安装 Godot)已发布在 GitHub Releases,支持 Linux、macOS 和 Windows 平台。
| 平台 | 安装包 |
|---|---|
| Linux | gpty-v0.5.3-linux-x86_64.tar.gz - 解压后运行 ./gpty |
| macOS | gpty-v0.5.3-macos.zip - 解压后,右键点击 .app → 打开 |
| Windows | gpty-v0.5.3-windows-x86_64.zip - 解压后运行 gpty.exe |
命令行工具
gpty 二进制文件通过 JSON-RPC IPC 控制运行中的 GUI。可使用 cargo build -p gpty(或 cargo build --workspace)构建。
GUI 启动后(通过 Godot 或发行版二进制文件启动),CLI 通过 Unix 套接字连接(Linux 为 $XDG_RUNTIME_DIR/gpty.sock,或设置 GPTY_SOCKET 环境变量):
# 检查 GUI 是否运行
gpty version
# 输出内置代理技能(适用于在窗格中运行的编码代理)
gpty --skill
# 创建新的终端窗格
gpty new-pane --pane-type terminal
# 列出所有活动窗格
gpty list-panes
# 向窗格发送文本(按标签指定,例如 T1)
gpty inject T1 --text "echo hello"
# 关闭窗格
gpty kill-pane T1
# 保存和加载命名布局
gpty layout save my-setup
gpty layout load my-setup
gpty layout list
# 管理 GUI 守护进程
gpty daemon status
gpty daemon stop
# 生成 AI 工具清单(无需 GUI)
gpty schema
gpty schema --format mcp
# 作为 MCP 服务器运行(通过标准输入输出,无需 GUI)
echo '{"jsonrpc":"2.0","id":1,"method":"initialize"}' | gpty mcp
完整子命令和选项请参见 gpty --help。
MCP 集成
gpty 内置 MCP(模型上下文协议)服务器,供 AI 代理和编码工具控制工作区。仓库根目录的 mcp.json 配置了自动发现机制:
{
"mcpServers": {
"gpty": {
"command": "gpty",
"args": ["mcp"]
}
}
}
- 直接运行:通过标准输入输出执行
gpty mcp- 为每个 CLI 子命令(new-pane、list-panes、kill-pane、focus-pane、inject、pane-read、pane-status、pane-run、pane-wait、broadcast、layout-*、daemon-*、concept-*、version)暴露对应工具。 - 清单生成:
gpty schema --format mcp输出 MCP 工具清单(JSON Schema 格式,无需运行 GUI),可用于代理配置。工具架构与 CLI 使用相同的 clap 定义生成(crates/gpty-cli/src/commands/schema.rs),确保与gpty --help保持一致。
路线图
完整功能清单请参见 ROADMAP.md。
安全
威胁模型、报告流程以及 gpty 不防御的方面,请参见 SECURITY.md。
实现规则——概念引擎的 ReDoS 处理策略、PTY 环境净化、IPC 加固、OSC 52 限制——详见 AGENTS.md。
贡献指南
设置说明、构建命令、测试、代码风格及拉取请求流程,请参见 CONTRIBUTING.md。
更新日志
完整版本变更历史,请参见 CHANGELOG.md。
许可证
gPTY 是自由软件,根据 GNU 通用公共许可证第 3 版或更高版本 授权 —— 请参阅 LICENSE 获取完整文本。
LICENSE-EXCEPTIONS.md 在该许可证第 7 条下添加了两项额外权限,使生态系统保持开放性:
-
插件、扩展和适配器无需强制使用 GPLv3 许可。
任何通过 CLI、JSON-RPC、MCP 或事件接口与 gPTY 协作的组件(包括原生窗格类型),均可采用 Apache-2.0、MIT 或您选择的其他许可条款,无需承担与 gPTY 捆绑分发的义务。 -
配置和数据文件不受 copyleft 约束。
配置文件、工作区、布局、概念和设置可按您意愿授权;gPTY 默认提供的*.json文件采用 Apache-2.0 许可。
版权所有 (C) 2026 Neil Pathare。
gPTY 分发时希望其能对您有用,但不提供任何担保,且不承担最终用户使用产生的任何责任;甚至不包含适销性或特定用途适用性的默示保证。详情请参阅 GNU 通用公共许可证。
相似文章
Show HN: Rmux – 一款可编程终端复用器,带有 Playwright 风格 SDK
Rmux 是一款用 Rust 编写的新式可编程终端复用器,提供与 tmux 兼容的命令行接口、类型化 SDK 以及面向智能体工作流的功能,支持在 Linux、macOS 和 Windows 上创建可分离、可脚本化的终端会话。
Show HN:OmniPTY — 面向 macOS 和 Linux 的固执己见的终端模拟器
Show HN:OmniPTY(原名 Oxide)是一款用 Rust 编写、面向 macOS 和 Linux 的 GPU 渲染终端模拟器,设计理念鲜明。它将通常需要外挂 tmux、文件树、提示符框架以及 vim 风格复制模式才能实现的功能内置其中,并通过单个支持自动重新加载的 TOML 文件完成配置。
@Ryrenz:太强大了,tuios 让单个终端窗口同时监控多个 AI 编码代理。GitHub 已获 5092 星……
tuios 是一个用 Go 编写的终端多路复用器/窗口管理器,可在一个终端窗口中同时监控多个 AI 编码代理(如 Claude Code、Codex、Gemini CLI)的状态,支持 BSP 平铺、vim 风格键位和守护进程会话保持,GitHub 已获 5092 星。
我做了一个感觉像GPT-Live的东西,但你可以在Rust中自己运行
一个基于Rust的工具,复制了GPT-Live的体验,用户可以在本地运行。
@GitHub_Daily: 用 tmux 管理终端会话,可以在终端里打开多个对话窗口,即便关掉还能在后台继续。 但现在,经常同时开好几个 Agent 干活,想用 tmux 做终端自动化,得写一堆脚本很麻烦。 于是有位开发者用 Rust 从零写了 rmux,专为 Ag…
介绍 rmux,一个用 Rust 编写的现代终端复用器,专为 AI Agent 和自动化场景设计,可协调多个 Agent 同时运行,兼容 90 多条 tmux 命令,并提供 Python SDK 和浏览器共享会话功能。