被10个终端窗口逼疯后,我用Rust写了个零依赖跨平台终端Agent启动神器

一、那个让人崩溃的下午

上个月的某个下午,我正在工位上处理一个紧急需求。领导突然走过来:"小王的项目需要紧急支持,你把那几个Agent任务都启动一下,测试环境要用。"

我盯着屏幕上密密麻麻的10个项目目录,心里一阵发麻。每个项目都需要启动不同的Agent CLI工具------有的用codex,有的用claude,还有几个用自研的命令行工具。按照以往的流程,我需要:

  1. 打开第一个终端,cd到项目A目录
  2. 输入codex start启动Agent
  3. 重复步骤1-2,再开9个窗口...

15分钟后,我的任务栏挤满了终端窗口,像极了失控的浏览器标签页。更要命的是,测试完成后还要一个个关闭这些窗口。那一刻我意识到:一定有更优雅的解决方案

二、Rust重构之路

当晚回家后,我打开了VSCode。作为一名Rust开发者,我决定用最擅长的语言来解决这个痛点。核心需求很明确:

  • 批量管理项目目录 :不想再手动cdcd
  • 复用常用命令:那些Agent CLI命令应该存起来,不用每次都敲
  • 一键启动全部:选择目录+选择命令,剩下的交给工具

三个晚上的开发后,open-terminal-agents诞生了。项目代码完全基于Rust标准库,零外部依赖,编译产物只有几MB,非常适合离线环境使用。

三、核心设计思路

3.1 TOML配置驱动

配置文件采用TOML格式,存储在用户主目录的.open-terminal-agents/settings.toml:

ini 复制代码
terminal = "powershell"
language = "zh"

[[paths]]
path = "D:\projects\api-service"
alias = "api"

[[paths]]
path = "D:\projects\web-app"
alias = "web"

agent_commands = ["codex", "claude --model sonnet", "ccr code"]

为什么选TOML?相比JSON更易读,比YAML规则简单,Rust生态支持完善。

3.2 跨平台终端适配

最头疼的是跨平台支持。Windows、Linux、macOS的终端启动方式完全不同:

Windows策略:

css 复制代码
// 优先使用Windows Terminal
if Command::new("wt").arg("--version").status().is_ok() {
    Command::new("wt")
        .args(["new-tab", "-d", &path, "powershell", "-NoExit", "-Command", &cmd])
        .spawn()?;
}

Linux策略:

scss 复制代码
// 依次尝试常见终端,优雅降级
for terminal in &["gnome-terminal", "konsole", "xfce4-terminal", "alacritty"] {
    if Command::new(terminal).arg("--version").status().is_ok() {
        // 找到可用终端,启动任务
        break;
    }
}

macOS策略:

lua 复制代码
// 使用AppleScript调用原生Terminal
let script = format!(
    r#"tell application "Terminal"
        do script "cd {} && {}"
    end tell"#,
    path, cmd
);
Command::new("osascript").arg("-e").arg(&script).spawn()?;

3.3 交互式选择器

使用空格键多选目录和命令,按A全选,按Q退出。这套交互逻辑参考了fzf等工具的最佳实践:

less 复制代码
$ ota
┌─ 选择项目目录 ──────────────────┐
│ [x] api-service (api)           │
│ [x] web-app (web)               │
│ [ ] data-pipeline               │
└─────────────────────────────────┘
Space: 选择 | A: 全选 | Q: 退出

┌─ 选择Agent命令 ─────────────────┐
│ [x] codex                       │
│ [x] claude --model sonnet       │
│ [ ] ccr code                    │
└─────────────────────────────────┘

四、实战效果

回到开头的场景,现在只需要:

ruby 复制代码
$ ota  # 启动交互式选择器
# 勾选10个项目目录
# 勾选需要的Agent命令
# 回车确认

3秒钟,10个终端窗口全部就绪。同事看到后直呼"这也太爽了",纷纷来要工具链接。

更让我惊喜的是,工具还解决了团队知识沉淀的问题。新同事入职时,只需要把团队常用的命令配置好:

csharp 复制代码
$ ota agent-command --add "codex"
$ ota agent-command --add "claude"

新人clone代码后,直接ota选择项目启动,完全不需要查阅冗长的文档。

五、快速上手

安装

perl 复制代码
# Rust用户
cargo install --path .

# Windows用户可以通过npm安装
npm install -g open-terminal-agents

基础使用

csharp 复制代码
# 添加项目目录
ota path --add ~/projects/my-app app

# 添加常用命令
ota agent-command --add "codex"

# 一键启动
ota

配置Windows终端

bash 复制代码
# 切换到PowerShell
ota terminal powershell

# 或使用CMD
ota terminal cmd

六、写在最后

这个工具目前已在团队内部使用三周,累计节省了大约20小时的重复劳动。下一步计划:

  • 支持Windows Terminal的窗格模式,自定义 iTerm 配置文件

如果你也被多终端窗口折磨过,不妨试试这个工具。项目已开源(MIT协议),欢迎提Issue和PR。

GitHub仓库 : open-terminal-agents
命令别名 : ota(比全称好敲多了)


如果你有什么好的想法建议,欢迎评论区分享~

原文移步个人博客

相关推荐
深度学习机器3 小时前
如何选择合适的 AI Agent框架?OpenAI vs Claude vs LangGraph功能特点汇总
llm·openai·agent
华仔AI智能体17 小时前
Qwen3(通义千问3)、OpenAI GPT-5、DeepSeek 3.2、豆包最新模型(Doubao 4.0)通用模型能力对比
人工智能·python·语言模型·agent·智能体
大模型教程20 小时前
万字详解让大模型写出好代码:上下文窗口的工程化实践
程序员·llm·agent
大模型教程21 小时前
AI大模型从0到1:你的90天蜕变计划,告别小白直通前沿!
程序员·llm·agent
AI大模型21 小时前
RAG彻底爆了!一文读懂其架构演进及核心要点
程序员·llm·agent
AI大模型1 天前
用Macbook微调Qwen3!手把手教你用微调给Qwen起一个新名字
程序员·llm·agent
alwaysrun1 天前
Rust中模式匹配
rust·match·模式匹配·if let·while let·值绑定
编码浪子2 天前
Dioxus hot-dog 总结
rust
安思派Anspire2 天前
能动AI:构建长期记忆
aigc·openai·agent