终端共享服务器

一个基于tmux的MCP服务器,使Claude能够在tmux窗格中执行命令,实现Claude与用户之间的共享终端体验。

  • by cni-locates-rumen
  • JavaScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 cni-locates-rumen/t-pane

使用说明

t-pane MCP服务器

MCP(模型上下文协议)服务器,使Claude能够在tmux窗格中执行命令,在Claude和用户之间提供共享的终端体验。

特性

  • 目录感知窗格管理:为每个目录/项目创建单独的窗格
  • 命令执行:使用捕获的输出在tmux窗格中运行命令
  • 智能输出捕获:使用唯一标记来精确捕获命令输出,而不管缓冲区大小如何
  • 多会话支持:每个Claude实例都会根据工作目录获得自己的窗格
  • 会话保持:命令在tmux中保持可见,以便用户交互
  • 交互式提示检测:自动检测命令何时需要用户输入(密码、确认等)
  • 目录特定日志记录:命令记录到 .t-pane/logs/ 在当前目录中
  • 后台任务:在后台窗格中启动Claude实例以执行研究/分析任务

安装

cd /Users/rumen.d/github/mcp-servers/t-pane
npm install
npm run build

配置

添加到您的Claude配置文件(~/Library/Application Support/Claude/config.json):

{
  "mcpServers": {
    "t-pane": {
      "command": "node",
      "args": ["/Users/rumen.d/github/mcp-servers/t-pane/dist/index.js"]
    }
  }
}

用法

配置后,Claude可以使用以下工具:

1.执行命令

在tmux窗格中执行命令并捕获输出。

execute_command({
  command: "ls -la",
  pane: "claude-terminal",  // optional, defaults to "claude-terminal"
  captureOutput: true       // optional, defaults to true
})

2.创建窗格

使用特定名称创建新的tmux窗格。

create_pane({
  name: "my-pane",         // optional, defaults to "claude-terminal"
  split: "horizontal"      // optional: "horizontal" or "vertical"
})

3.捕获输出

从tmux窗格捕获最近的输出。

capture_output({
  pane: "claude-terminal",  // optional
  lines: 100               // optional, number of lines to capture
})

4.小组成员名单

列出所有可用的tmux窗格。

list_panes()

5.发送密钥

将文本发送到tmux窗格而不执行它(对于预填充命令很有用)。

send_keys({
  text: "git push origin main",
  pane: "claude-terminal",  // optional, defaults to directory-specific pane
  enter: false             // optional, set to true to also send Enter
})

6.启动后台任务

创建一个背景窗格,用于运行具有特定研究/分析任务的Claude。

launch_background_task({
  task: "Research TypeScript 5.x features and create a summary",
  outputFile: "typescript-features.md",  // saved to .t-pane/tasks/
  timeout: 300000                       // optional, default 5 minutes
})

7.检查后台任务

检查所有后台任务的状态。

check_background_tasks()

运作原理

  1. 命令执行:当Claude执行命令时,它会用唯一的标记进行包装:

    echo '===CMD_${commandId}_START==='; <your-command>; echo '===CMD_${commandId}_END==='
    
  2. 输出捕获:服务器:

    • 在tmux缓冲区中查找START标记
    • 计算从末尾开始要捕获的行数
    • 仅提取标记之间的输出
    • 将干净的输出返回给Claude
  3. 交互式提示检测:当命令需要用户输入时:

    • 检测常见的提示模式(密码、用户名、是/否等)
    • 返回一个特殊响应,提醒Claude需要用户交互
    • Claude将通知您切换到tmux窗格并提供输入
  4. 命令记录:所有命令和输出都记录到:

    • 主要位置: .t-pane/logs/ 在当前工作目录中
    • 回退位置: ~/.t-pane/logs/{directory-hash}/ 如果本地目录不可写
    • 格式:JSON行(每行一个JSON对象)
    • 包括:时间戳、命令、输出(如果>2KB则截断)、退出代码、持续时间、目录
    • 禁用: export T_PANE_DISABLE_LOGGING=true
  5. 效率:这种方法通过以下方式有效地处理任何输出大小(甚至100k+行)的命令:

    • 使用唯一ID避免冲突
    • 从缓冲区末端捕获
    • 仅提取相关部分

示例会话

当Claude使用此服务器时,您将看到:

  • 具有目录特定命名的新tmux窗格(例如。, claude-t-pane 对于t-pane目录)
  • 每个目录都有自己的专用窗格
  • 在不同目录中工作的多个Claude实例不会干扰
  • Claude执行的所有命令都显示在相应的窗格中
  • 您可以与同一终端进行交互
  • 命令历史记录按目录保留

发展

# Watch mode for development
npm run watch

# Build for production
npm run build

需求

  • tmux已安装并在PATH中可用
  • 必须在tmux会话中运行才能获得完整功能
  • Node.js 18+

故障排除

  1. “未安装tmux”:使用包管理器安装tmux
  2. “不在tmux会话中运行”:首先使用以下命令启动tmux tmux new-session
  3. 命令未出现:检查窗格名称是否与Claude正在使用的名称匹配

目录感知会话

t-pane服务器为每个目录创建单独的tmux窗格:

  • 窗格名称基于最后2个目录组件(例如。, claude-mcp-servers-t-pane)
  • 在不同目录中工作的每个Claude实例都有自己的窗格
  • 日志存储在每个项目目录的本地
  • 多个Claude实例可以同时工作而不受干扰

互动提示

当命令需要用户输入时(如 git push 请求凭据),服务器将:

  1. 检测交互提示
  2. 在tmux窗格中预填充命令(不按Enter键)
  3. 向Claude返回一条消息,表示需要用户交互
  4. 你会看到这样的消息:“⚠️ tmux窗格中需要用户交互”
  5. 切换到tmux窗格,其中命令已预先填充并准备好供您查看/执行

命令记录

默认情况下,所有命令都会记录到 .t-pane/logs/ 在当前目录中:

{"timestamp":"2024-06-27T10:30:00Z","command":"git status","output":"...","exitCode":0,"duration":150,"directory":"/path/to/project"}

要禁用日志记录,请执行以下操作:

export T_PANE_DISABLE_LOGGING=true

背景任务(实验)

t-pane服务器可以在后台窗格中启动Claude实例进行研究或分析:

  1. 启动任务:创建一个包含任务说明的新窗格
  2. 手动执行:切换到窗格并运行 claude 启动任务
  3. 输出位置:结果保存到 .t-pane/tasks/
  4. 状态跟踪:使用 check_background_tasks() 监控进度

此功能是实验性的,需要在创建的窗格中手动调用Claude。

未来的增强功能

  • [x] 交互式提示检测
  • [x] 命令记录
  • [x] 后台任务执行(实验)
  • []后台任务的自动Claude调用
  • []支持多个并发命令
  • []长时间运行的命令的进度指示器
  • []与集成 /resume 用于会话连续性

8.读取文件

使用tmux窗格中的cat/head命令读取文件内容。

9.编辑文件

在tmux窗格中使用sed编辑文件(用户可见)。