Claude会话管理工具

Zellij-Claude是一个终端多路复用工具,用于管理多个Claude Code会话,支持命令行操作、服务器管理和手机监控。

  • by jheyduk
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 jheyduk/zellij-claude

使用说明

细胞克劳德

在Zellij中管理多个Claude Code会话——从您的终端或手机。


特性

  • 命名会话 --以名为Zellij选项卡的方式运行多个Claude Code会话(@main, @hub, @infra)
  • 完整CLI --从命令行切换、检查和向任何会话发送消息
  • MCP服务器 --让Claude管理兄弟会话:打开、发送、检查、导航
  • 电报集成 --监控会话、处理权限请求以及从手机发送语音消息
  • 秘密消毒 -在任何输出离开终端之前,API密钥、令牌和凭据都将被屏蔽
  • 智能输出解析 --从TUI中提取克劳德的最后一个响应,过滤旋转和噪声
  • 零运行时依赖关系 --基于Node.js内置构建;服务器只需要MCP SDK

先决条件


快速开始

npm install -g zellij-claude    # or: npx zellij-claude <command>

zellij-claude ls                         # list active sessions
zellij-claude last @hub                  # last response from @hub
zellij-claude send @hub "run tests"      # send a message to @hub
zellij-claude open ~/prj/myapp           # open a new session for myapp

CLI 参考

命令 参数 描述
ls -- 列出活动的Claude Code会话
last @<name> [count] 显示会话的最后一个响应
send @<name> <message> 向会话发送消息
open [--name @<name>] <path> [-- flags] 在新选项卡中打开新会话
goto @<name> 将焦点切换到会话选项卡
rename @<old> @<new> 重命名会话
mcp -- 启动MCP服务器(stdio传输)
install-hooks -- 将Telegram挂钩安装到Claude Code设置中

MCP服务器设置

将以下内容添加到您的克劳德代码中 settings.json (通常 ~/.claude/settings.json):

{
  "mcpServers": {
    "zellij-claude": {
      "command": "npx",
      "args": ["zellij-claude", "mcp"]
    }
  }
}

这为Zellij中运行的任何Claude会话提供了六个工具:

工具 说明
zellij_ls 列出活动的Claude Code会话
zellij_last 显示会话的最后响应
zellij_send 向会话发送消息
zellij_open 在新选项卡中打开新的Claude Code会话
zellij_goto 切换到会话选项卡
zellij_rename 重命名会话

会话命名

由zellij claude管理的选项卡前缀为 @ --例如。, @main, @hub, @infraThe @ 前缀将选项卡标记为会话,并使其可由所有CLI命令和MCP工具寻址。

当您打开一个新会话时 zellij-claude open <path>,会话名称是从目录名称自动派生的。如果具有该名称的选项卡已存在,则会附加一个数字后缀(@myapp-2, @myapp-3等等)。

您可以用以下命令覆盖自动派生的名称 --name 标志:

zellij-claude open --name @backend ~/prj/myapp/api

电报集成

设置

  1. 需要 克劳德代码电报插件 --先安装并配对。
  2. 配置您的聊天ID:
    • 环境变量: export ZELLIJ_CLAUDE_CHAT_ID=<your-chat-id>
    • 配置文件:创建 ~/.config/zellij-claude/telegram.json 与:
      { "chatId": "<your-chat-id>" }
      
  3. 安装挂钩:
    npx zellij-claude install-hooks
    

你得到了什么

  • 完工通知 --当会话完成任务时,您将通过Telegram收到最后一个响应
  • 权限按钮 --非-@main 会话向Telegram发送允许/拒绝按钮以请求工具权限
  • 语音信息转录 --给克劳德发一条语音留言;它被转录并作为正常信息处理

电报插件补丁(用于权限按钮)

Claude Code Telegram插件会自动丢弃未知的回调查询。一个小补丁将它们作为通道消息转发,因此 @main 可以处理其他会话中的“允许/拒绝”按钮按下。

补丁——添加了3行 if (!m) 分支在 callback_query:data 处理程序:

// File: ~/.claude/plugins/marketplaces/claude-plugins-official/external_plugins/telegram/server.ts
// Find the callback_query handler's `if (!m)` branch and replace:

// Before:
if (!m) {
  await ctx.answerCallbackQuery().catch(() => {})
  return
}

// After:
if (!m) {
  void mcp.notification({
    method: 'notifications/claude/channel',
    params: {
      content: `callback:${data}`,
      meta: { chat_id: String(ctx.from.id), user: ctx.from.username ?? String(ctx.from.id) },
    },
  }).catch(() => {})
  await ctx.answerCallbackQuery().catch(() => {})
  return
}

或者直接让Claude Code来应用它:

“将zellij claude回叫转发补丁应用于Telegram插件。向 if (!m) 分支在 callback_query:data 处理程序在 ~/.claude/plugins/marketplaces/claude-plugins-official/external_plugins/telegram/server.ts.通过将未知回调作为通道消息转发 mcp.notification 而不是默默地放下它们。"

注: 在Telegram插件更新后,可能需要重新应用此补丁。

在@main中处理回调

当用户按下允许/拒绝时,回调到达 @main 作为一个频道消息,如 callback:allow:hub.添加以下内存条目 @main 自动处理这些:

When a Telegram message matches "callback:allow:<name>" or "callback:deny:<name>":
- allow → send Enter keystroke: zellij action go-to-tab-name @<name> && zellij action write 13
- deny  → send ESC keystroke:   zellij action go-to-tab-name @<name> && zellij action write 27

语音信息

先决条件

brew install whisper-cpp ffmpeg

这 ggml-base 该型号(约140 MB)附带Homebrew配方。默认情况下启用语言自动检测。

配置

export ZELLIJ_CLAUDE_WHISPER_LANG=auto  # default — or set: en, de, fr, etc.

用法

将以下内存条目添加到 @main 因此Claude会自动处理传入的语音消息:

When a Telegram message has attachment_kind="voice":
1. Download via download_attachment with the attachment_file_id
2. Transcribe: bash <path-to-zellij-claude>/hooks/transcribe.sh <file>
3. Reply with transcription prefixed by 🎤
4. Process transcribed text as a normal message

运作原理

CLI / MCP Server
      ↓
dispatch.js  (command routing)
      ↓
┌─────────────────┬──────────────────┬────────────────┐
│  registry.js    │  screen-parse.js │  sanitize.js   │
│  (tab naming,   │  (TUI output     │  (mask API     │
│   collision     │   parser,        │   keys and     │
│   resolution)   │   noise filter)  │   credentials) │
└─────────────────┴──────────────────┴────────────────┘
      ↓
zellij.js  (Zellij CLI wrapper — uses $ZELLIJ_SESSION_NAME)
  • dispatch.js --解析命令并将其路由到正确的处理程序
  • registry.js --发现 @-前缀选项卡、导出会话名称、解决冲突
  • screen-parse.js --捕获当前窗格内容并提取最后一个Claude响应
  • sanitize.js -在转发任何输出之前屏蔽机密(API密钥、令牌、密码)
  • zellij.js --薄薄的包裹 zellij CLI;读取 $ZELLIJ_SESSION_NAME 本届会议

许可证

麻省理工学院——见 许可证.