在 SSH 环境中舒服地使用 Claude Code:Tabby + Herdr + Reviewr 完整配置

3603 字
18 分钟
在 SSH 环境中舒服地使用 Claude Code:Tabby + Herdr + Reviewr 完整配置

概述#

在 Windows 本机通过 SSH 连接远程 macOS 或 Linux,并在远端运行 Claude Code 时,常见体验并不理想:

  • Shift + Enter 会直接发送消息,无法自然换行。
  • Windows 剪贴板里的截图不能直接粘贴给远端 Claude Code。
  • Agent 修改代码后,只能依靠 git diff 或编辑器逐个检查。
  • SSH 窗口关闭后,正在运行的 Claude Code 会话容易丢失。
  • 同时运行多个 Agent 时,很难判断哪个正在工作、哪个已经完成或等待输入。

本文使用下面这套组合改善远程开发体验:

Windows 本机
└─ Tabby
├─ tabby-ssh-image-clipboard:跨 SSH 粘贴图片
├─ tabby-nv-shift-enter:Shift + Enter 换行
└─ SSH
└─ 远端 macOS / Linux
└─ Herdr
├─ Claude Code
└─ herdr-reviewr:查看和评论代码变更

最终可以实现:

Shift + Enter → 在 Claude Code 中换行
Tabby 粘贴快捷键 → 上传截图并插入远端路径
Reviewr → 在终端侧栏查看和评论 Agent 修改
关闭 Tabby → Herdr、Claude Code 和其他进程继续运行
重新执行 herdr → 恢复之前的工作现场
安装位置

两个 Tabby 插件安装在 Windows 本机;Herdr、Reviewr 和 Claude Code 安装在代码实际所在的远端 macOS 或 Linux 机器上。

组件安装位置作用
TabbyWindows 本机SSH 终端和本地输入入口
tabby-ssh-image-clipboardWindows 本机将本地剪贴板图片上传到远端
tabby-nv-shift-enterWindows 本机Shift + Enter 提供纯换行
Herdr远端机器保持会话并管理多个 Agent Pane
Reviewr远端机器查看 Diff、添加评论并发送给 Agent
Claude Code远端机器在远端项目中执行开发任务

配置 Tabby SSH 连接#

在 Tabby 中创建一个真正的 SSH 配置:

Tabby
→ 设置
→ 配置和连接
→ 新建配置
→ SSH 连接

填写远端连接信息:

主机:远端机器的 IP 或域名
用户名:远端用户名
端口:22
认证:密码或私钥

以后直接从 Tabby 的配置列表打开这个 SSH 连接。

不要使用下面这种方式:

Tabby 本地 PowerShell
→ 手动执行 ssh user@server
→ 进入远端

图片插件必须取得由 Tabby 管理的 SSH 会话和 SFTP 对象。手动在本地终端里再执行一层 ssh 时,Tabby 仍然把当前标签视为本地终端,插件无法直接通过当前会话上传文件。

此外还需要确保:

  • 当前活动标签是 Tabby 内置 SSH 标签页。
  • SSH 已经完成连接。
  • 远端 SSH 服务支持 SFTP。
  • 远端 /tmp 目录可写。

在远端安装 Herdr#

Herdr 是一个运行在终端中的 Agent 多路复用器,可以管理多个 Claude Code、Codex 或其他 Agent Pane,并让会话独立于当前 SSH 窗口持续运行。

Herdr 应安装在代码和 Claude Code 实际运行的远端机器上。

使用官方脚本安装#

在远端 macOS 或 Linux 中执行:

Terminal window
curl -fsSL https://herdr.dev/install.sh | sh

安装脚本会根据当前平台和架构下载对应的稳定版二进制,并将其加入 PATH

使用 Homebrew 安装#

已经安装 Homebrew 时,也可以执行:

Terminal window
brew install herdr

验证安装:

Terminal window
herdr --version

Herdr 官方为 Linux 和 macOS 提供稳定版本;原生 Windows 版本目前属于预览状态。本文只在远端 macOS 或 Linux 中运行 Herdr。

启动并恢复会话#

进入项目目录:

Terminal window
cd "/path/to/project"

启动 Herdr:

Terminal window
herdr

Herdr 会创建或连接默认的后台会话。然后在 Pane 中启动 Claude Code:

Terminal window
claude

Herdr 会识别 Agent,并在侧栏显示 workingblockeddoneidle 等状态。

使用 Herdr 后,可以直接关闭 Tabby,或者主动断开客户端。Herdr 服务和 Pane 中的 Agent 仍会在远端运行。重新连接 SSH 后再次执行:

Terminal window
herdr

即可恢复之前的工作现场。

如果需要真正结束整个 Herdr 服务,执行:

Terminal window
herdr server stop

常用 Herdr 快捷键#

Herdr 的默认前缀键是:

Ctrl + B

文档中的 prefix + v 不是同时按下 Ctrl + B + V,而是按顺序操作:

按下 Ctrl + B
松开
再按 V

常用快捷键如下:

操作快捷键
向右分屏Ctrl + B,然后按 V
向下分屏Ctrl + B,然后按 -
切换 PaneCtrl + B,然后按 H/J/K/L
放大或还原当前 PaneCtrl + B,然后按 Z
断开客户端并保留后台会话Ctrl + B,然后按 Q
查看所有快捷键Ctrl + B,然后按 ?

这种 prefix-first 操作方式可以减少与 Claude Code、Shell 和编辑器快捷键的冲突。

安装 Herdr Reviewr#

herdr-reviewr 是 Herdr 的代码审查侧栏,可以:

  • 查看未提交修改。
  • 查看当前分支相对基准分支的变化。
  • 只查看 Agent 上一轮修改。
  • 浏览整个工作区文件。
  • 在具体代码行上添加评论。
  • 将所有评论一次发送回 Agent。
  • 只读查看当前分支的 PR 信息、检查结果和评论。

Reviewr 不会主动修改工作区。只有按下发送键后,保存的评论才会进入 Agent 输入框。

使用条件#

Reviewr 当前要求:

  • Herdr 0.7.0 或更高版本,并启用插件系统。
  • git 已加入远端 PATH
  • 终端支持真彩色和 Unicode 绘图字符。
  • 运行环境为 macOS 或 Linux。

PR 标签页还需要已经登录的 ghglab 或带 Azure DevOps 扩展的 az CLI,并且仓库存在可识别的 originupstream 远端。

安装并打开 Reviewr#

在远端执行:

Terminal window
herdr plugin install persiyanov/herdr-reviewr

打开当前工作区的 Reviewr:

Terminal window
herdr plugin action invoke open --plugin persiyanov.reviewr

插件安装的是预编译版本,不需要额外准备 Rust 工具链。

为 Reviewr 设置快捷键#

创建并编辑 Herdr 配置文件:

Terminal window
mkdir -p ~/.config/herdr
nano ~/.config/herdr/config.toml

加入:

[[keys.command]]
key = "prefix+shift+o"
type = "plugin_action"
command = "persiyanov.reviewr.toggle"
description = "打开或关闭 Reviewr"

Herdr 在 macOS 和 Linux 中的默认配置路径是:

~/.config/herdr/config.toml

重新加载配置:

Terminal window
herdr server reload-config

以后依次按下:

Ctrl + B
Shift + O

即可打开或关闭 Reviewr。

快捷键冲突

prefix + Shift + O 是本文添加的自定义快捷键,并非 Reviewr 默认键。如果发生冲突,可以改成其他未占用组合,再通过 Ctrl + B? 查看实际生效的绑定。

Reviewr 的日常审查流程#

让 Claude Code 修改完代码后,打开 Reviewr:

  1. 使用 j / k 选择修改文件。
  2. Tab 切换到代码 Diff。
  3. v 开始选择代码行。
  4. 使用 j / k 扩大选择范围。
  5. c 添加评论。
  6. 输入评论后按 Enter 保存。
  7. 重复检查其他文件和代码行。
  8. s 将全部评论发送给 Agent,S 也可以触发发送。

常用 Diff 范围:

按键范围说明
uUncommitted工作区相对 HEAD 的已暂存、未暂存和未跟踪变更
bBranch当前工作区相对基准分支 merge-base 的变更
tLast turnAgent 最近一轮开始后产生的变更

其他常用操作:

按键操作
1 / 2 / 3切换 Changes、All files、PR 标签页
] / [下一个或上一个 Diff 块
f / F下一个或上一个文件
/搜索文件和代码
Ctrl + F在当前文件中查找
w切换自动换行
m切换 Markdown 源码和预览
r刷新当前内容
?显示当前可用快捷键
q关闭 Reviewr

安装图片粘贴插件#

tabby-ssh-image-clipboard 可以读取 Windows 剪贴板中的图片,通过当前 Tabby SSH 会话的 SFTP 上传到远端 /tmp,再把远端路径输入 Claude Code。

为什么普通 SSH 不能直接粘贴图片#

Claude Code 实际运行在远端机器上:

Windows 剪贴板
Tabby
↓ SSH
远端 macOS / Linux
Claude Code

普通文本可以通过终端发送,但图片剪贴板不会自动通过 SSH 传输。

直接粘贴时可能提示:

No image found in clipboard

也可能出现 Windows 本地路径:

C:\Users\你的用户名\AppData\Local\Temp\image.png

这个路径只存在于 Windows,远端机器无法访问。

图片插件采用的方式是:

读取 Windows 剪贴板图片
→ 转换为 PNG
→ 通过当前 SSH 会话上传
→ 在远端生成真实 PNG 文件
→ 把远端路径输入 Claude Code

通过插件管理器安装#

打开:

Tabby
→ 设置
→ 插件

搜索:

tabby-ssh-image-clipboard

安装后彻底退出并重新启动 Tabby。

重新进入:

设置 → 插件 → Clipboard Sync

确认:

Enabled:开启
Show Notifications:开启

正确理解图片粘贴快捷键#

图片插件监听的是 Tabby 的 paste 粘贴动作,并没有硬编码一个独立的插件快捷键。

Tabby 在 Windows 上默认使用:

Ctrl + Shift + V

作为粘贴快捷键。因此默认配置下按 Ctrl + Shift + V 会触发插件;如果修改过 Tabby 的粘贴快捷键,应使用修改后的快捷键。

插件触发后会检查剪贴板:

  • 有图片:上传图片并输入远端路径。
  • 没有图片:交还给 Tabby 执行普通文本粘贴。

在线安装出现 [object Object]#

部分 Windows 环境会在 Tabby 中显示:

ssh-image-clipboard 中的错误:
[object Object]

直接全局安装:

Terminal window
npm install -g tabby-ssh-image-clipboard

还可能因为 tabby-sshpostinstall 脚本失败:

npm error path ...\node_modules\tabby-ssh
npm error run-script-os was unable to execute the script 'postinstall'

这时不要全局安装,而是将插件安装到 Tabby 自己的用户插件目录。

彻底关闭 Tabby:

Terminal window
Get-Process Tabby -ErrorAction SilentlyContinue |
Stop-Process -Force

进入插件目录:

Terminal window
Set-Location "$env:APPDATA\tabby\plugins"

清理安装失败的残留:

Terminal window
Remove-Item `
".\node_modules\tabby-ssh-image-clipboard" `
-Recurse -Force -ErrorAction SilentlyContinue

安装插件本体,同时跳过宿主依赖和安装脚本:

Terminal window
npm install tabby-ssh-image-[email protected] `
--legacy-peer-deps `
--ignore-scripts `
--no-audit `
--no-fund

验证入口文件:

Terminal window
Test-Path `
".\node_modules\tabby-ssh-image-clipboard\dist\index.js"

正常应返回:

True

插件发布包已经包含构建完成的 dist/index.js,因此使用 --ignore-scripts 安装后仍可被 Tabby 加载。

使用图片粘贴#

首先通过 Tabby 保存的 SSH 配置连接远端,然后启动 Herdr 和 Claude Code。

在 Windows 上截图:

Win + Shift + S

回到 Claude Code,按下 Tabby 当前配置的粘贴快捷键。默认情况下是:

Ctrl + Shift + V

插件会完成:

Windows 剪贴板图片
→ PNG
→ SFTP
→ 远端 /tmp/clipboard_<时间戳>.png
→ 在 Claude Code 中输入远端路径

输入框中会出现类似路径:

"/tmp/clipboard_1785200000000.png"

继续补充问题即可:

请查看这张截图,分析其中的报错:"/tmp/clipboard_1785200000000.png"

如果 Claude Code 没有自动读取普通路径,可以改用明确的文件引用:

@/tmp/clipboard_1785200000000.png

图片插件无效时检查#

确认当前标签是 Tabby 直接建立的 SSH 会话,而不是本地 PowerShell 中手动执行的 ssh

在远端检查 /tmp 是否可写:

Terminal window
touch /tmp/tabby-image-test &&
rm /tmp/tabby-image-test

检查上传后的图片:

Terminal window
file /tmp/clipboard_*.png

正常应显示:

PNG image data

如果粘贴快捷键仍然只粘贴普通文字,通常说明剪贴板中没有真实图片,或者插件没有取得当前 SSH 会话。建议重新使用 Win + Shift + S 截图后立即粘贴。

安装 NV Shift Enter#

Claude Code 可以使用:

Ctrl + J

插入换行,但多数聊天软件使用 Shift + Enter,频繁切换并不自然。

tabby-nv-shift-enter 可以让 Tabby 在按下 Shift + Enter 时发送自定义内容或纯换行。

插件提供两种行为:

反斜杠 + 换行
纯换行

当前 1.0.1 版本依赖 Tabby 1.0.197-nightly.1 或更高版本。

通过插件管理器安装#

在 Tabby 插件页面搜索:

tabby-nv-shift-enter

安装并彻底重启 Tabby。插件管理器正常工作时,不需要手动安装。

手动安装预编译插件包#

直接执行:

Terminal window
npm install tabby-nv-shift-enter

可能再次触发 tabby-sshpostinstall 错误。

这种情况下,可以只下载并解压已经编译好的插件包,不安装它声明的 Tabby 宿主依赖。

彻底关闭 Tabby:

Terminal window
Get-Process Tabby -ErrorAction SilentlyContinue |
Stop-Process -Force

然后执行:

Terminal window
$pluginRoot = "$env:APPDATA\tabby\plugins"
$target = Join-Path $pluginRoot "node_modules\tabby-nv-shift-enter"
Set-Location $pluginRoot
Remove-Item $target `
-Recurse -Force -ErrorAction SilentlyContinue
New-Item -ItemType Directory `
-Path $target -Force | Out-Null
$tgz = (
npm pack tabby-nv-shift-[email protected] --silent |
Select-Object -Last 1
).Trim()
if (-not $tgz -or -not (Test-Path $tgz)) {
throw "插件包下载失败"
}
tar -xzf $tgz `
-C $target `
--strip-components=1
if ($LASTEXITCODE -ne 0) {
throw "插件解压失败"
}
Remove-Item $tgz -Force
if (Test-Path "$target\dist\index.js") {
Write-Host "安装成功:$target"
} else {
throw "安装失败:缺少 dist\index.js"
}

插件 1.0.1 的发布包入口是 dist/index.js,并且发布内容中包含已经构建好的 dist 目录,因此这种解压方式不需要本地编译。

配置纯换行#

打开:

Tabby
→ 设置
→ NV Shift Enter

关闭:

Include backslash before newline

然后进入:

设置
→ 快捷键

找到:

Send configured custom text

绑定为:

Shift + Enter

最终效果:

Shift + Enter → Claude Code 输入框内换行
Enter → 发送消息

为什么换行时会出现反斜杠#

插件默认开启:

Include backslash before newline

这个模式主要用于 Bash 或 Zsh 命令续行,会发送:

反斜杠 + 换行

在 Claude Code 输入框中可能表现为:

第一行
第二行 \
第三行

这不是 Claude Code 自动添加的字符,而是插件主动发送的内容。关闭该选项后,插件只发送纯换行。

快捷键速查#

Tabby 与 Claude Code#

操作快捷键
输入换行Shift + Enter
发送消息Enter
上传并插入剪贴板图片Tabby 粘贴快捷键,Windows 默认是 Ctrl + Shift + V

Herdr#

操作快捷键
向右分屏Ctrl + B,然后按 V
向下分屏Ctrl + B,然后按 -
切换 PaneCtrl + B,然后按 H/J/K/L
放大当前 PaneCtrl + B,然后按 Z
断开并保留后台会话Ctrl + B,然后按 Q
查看快捷键Ctrl + B,然后按 ?
打开或关闭 ReviewrCtrl + B,然后按 Shift + O,需要本文自定义配置

Reviewr#

操作快捷键
未提交修改u
当前分支修改b
Agent 上一轮修改t
移动j / k
切换文件列表和 DiffTab
选择代码行v
添加评论c
发送全部评论sS
查看当前快捷键?

完成配置后,SSH 环境中的 Claude Code 不再只是一个能够运行的远程命令行,而会形成完整的开发工作台:

Tabby 负责本地输入和 SSH 连接
Herdr 负责远端会话和 Agent 管理
Reviewr 负责代码审查
图片插件负责跨 SSH 发送截图
NV Shift Enter 负责自然的多行输入

这套方案适合使用 Windows 本机,通过 Tabby SSH 连接 macOS 或 Linux 服务器,并在远端运行 Claude Code 的开发方式。

参考#

在 SSH 环境中舒服地使用 Claude Code:Tabby + Herdr + Reviewr 完整配置
https://lunary.cc/posts/在-ssh-环境中舒服地使用-claude-codetabby--herdr--reviewr-完整配置/
作者
鹤望兰
发布于
2026-07-28
许可协议
CC BY-NC-SA 4.0