将任何CLI代理无缝集成到终端中
一位开发者创建了Terminai,一个透明包裹器,允许用户在终端中按需调用AI编码代理,而无需切换上下文或更换终端模拟器。该项目用Rust编写,通过修改ratatui和rat-salsa解决了TUI渲染问题,并提供了MCP服务器和CLI工具与AI交互。
一位软件工程师在工作和个人生活中都遇到了同样的难题:在终端中工作时,希望借助AI理解最近的输出或编写命令,但手动复制粘贴上下文到聊天窗口非常繁琐,而预先运行完整的CLI编码代理又破坏了终端工作的效率。他想要的是,让已经使用的编码代理在需要时弹出到终端中,其余时间保持不可见。
现有的工具无法满足这一需求:iTerm2的AI功能不允许使用已有的AI订阅,Warp需要更换整个终端模拟器和工作流程,并订阅新的服务。因此,他决定开发一个透明包裹器,能够与现有工具协同工作,仅在通过快捷键召唤时才显现。
项目从pvolok优秀的mprocs项目代码库起步,负责终端模拟和渲染。使用Claude和Codex剥离了mprocs特定代码,添加了按需覆盖的AI终端界面和一个MCP服务器。通过CLI标志,MCP服务器被注入到AI代理的配置中,并在系统提示中添加指令,解释AI如何与终端交互。
代理可以检索终端内容、元数据和历史记录,并发送用户批准后的输入到被控终端。此外,还提供了一个CLI命令,具备MCP服务器的全部功能,以便不支持MCP的代理使用,或将输出管道化而非直接送入AI上下文。
实现真正透明化的最大挑战在于TUI渲染。为了让覆盖层完全无缝,必须分叉ratatui TUI工具包和rat-salsa组件库,解决三个底层问题:终端滚动回退、损坏的复制粘贴以及空行末空白字符。通过采用传统方式——在屏幕顶部写入内容并追加足够换行符强制原生终端滚动——解决了滚动回退问题。对于复制粘贴,修复了末尾空字符和换行导致的复制错误,确保ratatui利用宿主终端进行换行而非移动光标。
该工具采用MIT许可证,用Rust编写,注重效率、显式错误处理,并利用类型系统来强制不变性。隐私方面,零遥测、零跟踪、无数据收集,日志仅本地存储用于调试。安全方面,MCP服务器运行在127.0.0.1的HTTP服务器上,通过运行时生成并传递给AI代理的Bearer令牌保护。AI代理可以直接使用环境变量中的认证信息,或者通过stdio MCP服务器代理请求。
项目大部分代码由Claude和Codex编写,但作者提供了大量方向指导并进行了广泛测试,最终功能性和稳定性足以说明问题。