6.0 KiB
6.0 KiB
herdr
个人 herdr 配置与迁移笔记。配置由 tmux/.tmux.conf 映射而来。
config.toml— 真实配置,经script/herdr-init.sh软链到~/.config/herdr/config.toml- 校验:
herdr config check - 热重载:
prefix+shift+r(本配置改为prefix+r)或herdr server reload-config - 默认值参考:
herdr --default-config - 官方速查:https://herdr.dev/docs/concepts/ ,给 agent 看的:
herdr --skill
概念对照
| tmux | herdr | 说明 |
|---|---|---|
| session | workspace | herdr 的 workspace 对应“一个项目/任务”,侧栏按 workspace 汇总 agent 状态 |
| (无对应) | session | herdr 的 named session 是独立的 server 命名空间(herdr session attach work),跟 tmux 的 session 不是一回事 |
| window | tab | |
| pane | pane | 只能向右(right)或向下(down)切 |
| prefix mode | prefix mode (ctrl+b) |
相同;另有 terminal mode / navigate mode |
| status bar + 脚本 | sidebar | 鼠标可点、可拖分隔条、右键菜单 |
| (无对应) | agent | herdr 识别 pane 里的 coding agent,状态 working/blocked/done/idle/unknown |
| tmux-resurrect | session.json + [experimental] pane_history |
布局自动持久化,agent 原生会话恢复需要装 integration |
| tpm 插件 | 无插件系统 | fzf 类能力内建(prefix+w workspace picker、prefix+g goto);自定义动作用 [[keys.command]] |
| tmux over ssh | herdr --remote <ssh-target> |
远端跑 server,本地 attach |
和 tmux 的主要差异
- 鼠标优先。所有交互都能用鼠标完成;键位是可选层。
prefix+?可实时列出当前所有有效绑定。 - agent 感知。侧栏能看到每个 pane 里的 agent 状态,
blocked(等你审批/回答)会被顶到前面。tmux 只能靠 pane 标题自己写。 - CLI + 本地 socket API。
herdr pane split/run/read/wait-output、herdr agent prompt/wait这类命令可以从脚本或 agent 内部驱动布局和读输出,tmux 的send-keys做不到等待与状态判定。 - 配置是单个 TOML,没有插件系统,也没有
run-shell状态栏脚本;但支持[[keys.command]]自定义命令(type = "shell"/"pane"/"popup",可指定宽高百分比),基本能覆盖原来用插件/脚本做的事。 - 直接快捷键。除
prefix+...外还支持ctrl+alt+...这类直通键位(适合想摆脱 prefix 的用法)。反过来,被 OS 或外层终端占用的组合 herdr 收不到,表现为“绑了没反应”。 - 没有
escape-time/terminal-overrides/ 真彩色开关。那些是 tmux 作为终端适配层才需要的,herdr 自己处理能力协商。通知走[ui.toast] delivery,剪贴板走[ui] copy_on_select。 - 不支持嵌套启动(
experimental.allow_nested = false):herdr pane 里再跑herdr会被拒绝。tmux 里tmux是能套的。 [remote] manage_ssh_config默认开启:herdr --remote会生成一份私有 ssh config,先 include 你的~/.ssh/config,再补ServerAliveInterval/ServerAliveCountMax兜底,并用私有 control socket 复用连接。所以~/.ssh/config里已有的 keepalive 仍然优先,我们的Include ~/.ssh/config.d/*也照常生效。
切换时的注意事项
- 分屏按分隔线的形状记:
|是竖线 → 切成左右;-是横线 → 切成上下。herdr 就是按形状命名的(split_vertical= 竖线 = 向右切,split_horizontal= 横线 = 向下切),而 tmux 的splitw -v/-h按“排列方向”命名,两者相反:tmuxsplitw -v(上下堆叠)对应 herdrsplit_horizontal,tmuxsplitw -h(左右并排)对应split_vertical。本配置按形状对齐(-上下、|左右)。 herdr裸跑会 attach;herdr server是前台 headless server。别为了“看看帮助”敲herdr server——它不返回,会把调用它的地方永久挂住(踩过一次:pi 的 bash 工具卡了 46 分钟)。要看帮助用herdr --help、herdr <group>(如herdr pane);停 server 用herdr server stop。- prefix 都是
ctrl+b,两套配置不冲突,但同时开难免按错。切过去之前建议先退掉 tmux,避免双层状态栏/双层 prefix。 - 没有
-c '#{pane_current_path}'这个开关:新建 pane/tab 的目录策略在[terminal] new_cwd(follow/home/current/ 固定路径),本配置是follow。 - resize 步长不可配。tmux 那边是固定 10 格;herdr 直接绑定(本配置
prefix+shift+hjkl)用默认步长,或prefix+r进 resize mode 再动。 mouse on/off没有运行时快捷键:由[ui] mouse_capture决定,运行时去prefix+s设置面板改。用copy_on_select = false可以在拖选后保留选区,等Ctrl+C再复制。- 复制模式:
mode-keys vi在 herdr 没有等价配置。本配置给copy_mode绑了prefix+[(herdr 0.8.2 支持该校验通过,但未写进--default-config),复制模式的内部键位不可配;平时直接鼠标拖选即可。想把 scrollback 丢进$EDITOR用prefix+e。 - 中文/IME:如果你在 pane 里用 pi/claude/codex 这类自绘光标的 TUI 遇到输入法候选框错位,可试开
[experimental] reveal_hidden_cursor_for_cjk_ime = true(可用cjk_ime_agents限定只对某些 agent 生效)。默认关闭。 - 别再跑 tpm:
script/tmux-init.sh会克隆 tpm 并装插件,那是 tmux 的;herdr 不需要。两套可以并存,但别指望插件搬到 herdr。 - 升级:
herdr update(stable 通道);0.8.2 → 0.9.0 已经可用。用包管理器装的则走包管理器。
迁移状态
herdr/config.toml(tmux 键位/UI 行为映射,herdr config check通过)script/herdr-init.sh(软链 + 备份 + 幂等 + 校验)- 装 agent integration(
herdr integration install claude等),才有原生会话恢复与状态上报 - 需要时启用
reveal_hidden_cursor_for_cjk_ime