终端控制库

一个为AI代理提供程序化终端控制和检查的Rust库和MCP服务器,支持会话管理、结构化网格检查、截图渲染等功能。

  • by plyght
  • Rust
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 plyght/crescent

使用说明

Crescent

Playwright for terminals — programmatic terminal control and inspection for AI agents



Rust库和MCP服务器,为AI代理提供对终端会话的完全语义访问。启动进程、发送击键和鼠标事件、读取结构化网格状态、截屏并等待输出模式——所有这些都通过干净的异步API或模型上下文协议实现。

特性

  • 会话管理:启动、调整大小和关闭由真实PTY支持的多个并发终端会话
  • 结构化网格检查:将终端读取为包含字符、颜色和属性(粗体、斜体、下划线)的二维单元格网格
  • 屏幕截图渲染:通过自动系统字体检测生成PNG屏幕截图
  • 完全输入支持:键入文本,发送带有修饰符的键(ctrl/alt/shift),单击(左/中/右),然后滚动
  • 图案等待:异步等待正则表达式模式出现在终端输出中,并具有可配置的超时
  • MCP服务器:10个工具MCP服务器通过stdio直接集成AI代理
  • 交叉平台的:通过以下方式在macOS和Linux上工作 portable-pty

安装

# Build from source
git clone https://github.com/plyght/crescent.git
cd crescent
cargo build --release

MCP服务器二进制文件将位于 target/release/crescent-mcp.

用法

作为MCP服务器

Crescent通过stdio传输公开了10个工具。将MCP客户端指向二进制文件:

{
  "command": "/path/to/crescent-mcp"
}

工具:

工具 说明
terminal_launch 启动会话(命令、列、行)
terminal_type 在会话中键入UTF-8文本
terminal_key 发送带有可选修饰符的按键
terminal_click 在行/列处发送鼠标点击
terminal_scroll 上下滚动N行
terminal_resize 调整会话大小
terminal_grid 获取结构化单元格数据、光标和尺寸
terminal_screenshot 捕获base64编码的PNG
terminal_wait_for 阻塞,直到出现正则表达式模式
terminal_close 结束会话

作为图书馆

use crescent::{Session, SessionManager, RendererConfig};

let manager = SessionManager::new();
let id = manager.launch("zsh", 80, 24).await?;
let session = manager.get(&id).await?;

session.type_text("echo hello\n")?;
session.wait_for("hello", Some(5000)).await?;

let grid = session.grid()?;
let png = session.screenshot(&RendererConfig::default())?;

配置

变量 目的
CRESCENT_FONT 自定义等宽字体(.ttf/.otf)的路径。回到系统字体(Menlo、SF Mono、DejaVu Sans Mono等)
RUST_LOG 控制MCP服务器的日志详细程度(默认值: info,记录到stderr)

建筑

crates/
  crescent/          Core library
    src/
      session.rs     PTY lifecycle, background reader, session manager
      grid.rs        2D grid extraction from vt100 screen state
      input.rs       Key/mouse/scroll encoding to escape sequences
      renderer.rs    PNG rendering with system font detection
      wait.rs        Async regex pattern polling
  crescent-mcp/      MCP server
    src/
      main.rs        Tool definitions, stdio transport, session routing

发展

cargo build
cargo test

需要Rust 1.70+。关键依赖项:便携式pty、vt100、rmcp、ab_glyph、image、tokio、ratatui。

许可证

MIT许可证