在 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 机器上。
| 组件 | 安装位置 | 作用 |
|---|---|---|
| Tabby | Windows 本机 | SSH 终端和本地输入入口 |
tabby-ssh-image-clipboard | Windows 本机 | 将本地剪贴板图片上传到远端 |
tabby-nv-shift-enter | Windows 本机 | 为 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 中执行:
curl -fsSL https://herdr.dev/install.sh | sh安装脚本会根据当前平台和架构下载对应的稳定版二进制,并将其加入 PATH。
使用 Homebrew 安装
已经安装 Homebrew 时,也可以执行:
brew install herdr验证安装:
herdr --versionHerdr 官方为 Linux 和 macOS 提供稳定版本;原生 Windows 版本目前属于预览状态。本文只在远端 macOS 或 Linux 中运行 Herdr。
启动并恢复会话
进入项目目录:
cd "/path/to/project"启动 Herdr:
herdrHerdr 会创建或连接默认的后台会话。然后在 Pane 中启动 Claude Code:
claudeHerdr 会识别 Agent,并在侧栏显示 working、blocked、done 或 idle 等状态。
使用 Herdr 后,可以直接关闭 Tabby,或者主动断开客户端。Herdr 服务和 Pane 中的 Agent 仍会在远端运行。重新连接 SSH 后再次执行:
herdr即可恢复之前的工作现场。
如果需要真正结束整个 Herdr 服务,执行:
herdr server stop常用 Herdr 快捷键
Herdr 的默认前缀键是:
Ctrl + B文档中的 prefix + v 不是同时按下 Ctrl + B + V,而是按顺序操作:
按下 Ctrl + B松开再按 V常用快捷键如下:
| 操作 | 快捷键 |
|---|---|
| 向右分屏 | Ctrl + B,然后按 V |
| 向下分屏 | Ctrl + B,然后按 - |
| 切换 Pane | Ctrl + B,然后按 H/J/K/L |
| 放大或还原当前 Pane | Ctrl + 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 标签页还需要已经登录的 gh、glab 或带 Azure DevOps 扩展的 az CLI,并且仓库存在可识别的 origin 或 upstream 远端。
安装并打开 Reviewr
在远端执行:
herdr plugin install persiyanov/herdr-reviewr打开当前工作区的 Reviewr:
herdr plugin action invoke open --plugin persiyanov.reviewr插件安装的是预编译版本,不需要额外准备 Rust 工具链。
为 Reviewr 设置快捷键
创建并编辑 Herdr 配置文件:
mkdir -p ~/.config/herdrnano ~/.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重新加载配置:
herdr server reload-config以后依次按下:
Ctrl + BShift + O即可打开或关闭 Reviewr。
快捷键冲突
prefix + Shift + O是本文添加的自定义快捷键,并非 Reviewr 默认键。如果发生冲突,可以改成其他未占用组合,再通过Ctrl + B、?查看实际生效的绑定。
Reviewr 的日常审查流程
让 Claude Code 修改完代码后,打开 Reviewr:
- 使用
j/k选择修改文件。 - 按
Tab切换到代码 Diff。 - 按
v开始选择代码行。 - 使用
j/k扩大选择范围。 - 按
c添加评论。 - 输入评论后按
Enter保存。 - 重复检查其他文件和代码行。
- 按
s将全部评论发送给 Agent,S也可以触发发送。
常用 Diff 范围:
| 按键 | 范围 | 说明 |
|---|---|---|
u | Uncommitted | 工作区相对 HEAD 的已暂存、未暂存和未跟踪变更 |
b | Branch | 当前工作区相对基准分支 merge-base 的变更 |
t | Last turn | Agent 最近一轮开始后产生的变更 |
其他常用操作:
| 按键 | 操作 |
|---|---|
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]直接全局安装:
npm install -g tabby-ssh-image-clipboard还可能因为 tabby-ssh 的 postinstall 脚本失败:
npm error path ...\node_modules\tabby-sshnpm error run-script-os was unable to execute the script 'postinstall'这时不要全局安装,而是将插件安装到 Tabby 自己的用户插件目录。
彻底关闭 Tabby:
Get-Process Tabby -ErrorAction SilentlyContinue | Stop-Process -Force进入插件目录:
Set-Location "$env:APPDATA\tabby\plugins"清理安装失败的残留:
Remove-Item ` ".\node_modules\tabby-ssh-image-clipboard" ` -Recurse -Force -ErrorAction SilentlyContinue安装插件本体,同时跳过宿主依赖和安装脚本:
--legacy-peer-deps ` --ignore-scripts ` --no-audit ` --no-fund验证入口文件:
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 是否可写:
touch /tmp/tabby-image-test &&rm /tmp/tabby-image-test检查上传后的图片:
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。插件管理器正常工作时,不需要手动安装。
手动安装预编译插件包
直接执行:
npm install tabby-nv-shift-enter可能再次触发 tabby-ssh 的 postinstall 错误。
这种情况下,可以只下载并解压已经编译好的插件包,不安装它声明的 Tabby 宿主依赖。
彻底关闭 Tabby:
Get-Process Tabby -ErrorAction SilentlyContinue | Stop-Process -Force然后执行:
$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 = ( 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,然后按 - |
| 切换 Pane | Ctrl + B,然后按 H/J/K/L |
| 放大当前 Pane | Ctrl + B,然后按 Z |
| 断开并保留后台会话 | Ctrl + B,然后按 Q |
| 查看快捷键 | Ctrl + B,然后按 ? |
| 打开或关闭 Reviewr | Ctrl + B,然后按 Shift + O,需要本文自定义配置 |
Reviewr
| 操作 | 快捷键 |
|---|---|
| 未提交修改 | u |
| 当前分支修改 | b |
| Agent 上一轮修改 | t |
| 移动 | j / k |
| 切换文件列表和 Diff | Tab |
| 选择代码行 | v |
| 添加评论 | c |
| 发送全部评论 | s 或 S |
| 查看当前快捷键 | ? |
完成配置后,SSH 环境中的 Claude Code 不再只是一个能够运行的远程命令行,而会形成完整的开发工作台:
Tabby 负责本地输入和 SSH 连接Herdr 负责远端会话和 Agent 管理Reviewr 负责代码审查图片插件负责跨 SSH 发送截图NV Shift Enter 负责自然的多行输入这套方案适合使用 Windows 本机,通过 Tabby SSH 连接 macOS 或 Linux 服务器,并在远端运行 Claude Code 的开发方式。