Add Herdr agent fork command menu

This commit is contained in:
2026-09-18 09:07:04 +00:00
parent d6697d46f8
commit 6e420b2db5
7 changed files with 897 additions and 4 deletions
+27 -1
View File
@@ -27,7 +27,7 @@ sidebar 插入 UI,也不能让 thin client 从一个 server 原地改连另一
- Linux
- Python 3.11+
- tmux 3.4+
- Herdr 0.8.2+
- Herdr 0.9+(本地和需要 Fork 的远端目标均需支持 0.9 的控制 API)
- OpenSSH client
检查当前环境:
@@ -93,6 +93,7 @@ Hub 使用独立 tmux socket `herdr-hub`,不会接管普通 tmux server。外
| 操作 | 快捷键 / 命令 |
| --- | --- |
| 点击切换 | 鼠标点击顶部 session |
| 打开 Herdr 命令菜单 | `Ctrl+A h` |
| 打开 Session 弹窗 | 点击左上角 `Sessions` 或 `Ctrl+A g` |
| 上一个/下一个 window | `Ctrl+A p` / `Ctrl+A n` |
| 按编号切换 | `Ctrl+A 0..9` |
@@ -105,6 +106,31 @@ Hub 使用独立 tmux socket `herdr-hub`,不会接管普通 tmux server。外
| 重新进入 Hub | `herdr-hub` |
| 停止 Hub clients | `herdr-hub stop` |
### Fork 当前 Agent 到新 Tab
按 **Ctrl+A h** 打开独立的 Herdr 命令菜单,选择“Fork 当前会话到新 Tab”,
按 Enter 或单击执行,Esc 关闭。菜单只显示当前 Agent、Workspace、主操作和必要的状态信息。
操作正在执行时需等待结果后再关闭,以免将关闭弹窗误认为取消已经发送的请求。
Sessions 弹窗仍使用 `Ctrl+A g`;两个菜单都使用 Hub 外层的 `Ctrl+A` 前缀。
快捷键集中定义在 `herdr_hub/control.py` 的 `CONTROL_KEY` 常量中。
Fork 复制的是 **Codex / Claude conversation**,并保留正在运行的原 Agent 和原 Tab。
它在同一个 Herdr Workspace、相同 cwd 新建 Tab,使用当前 pane 已报告的 conversation ID:
Codex 执行 `codex fork UUID`;Claude 执行 `claude --resume SESSION_ID --fork-session`。
新 Agent 被 Herdr 确认为就绪后才切换焦点。它不会新建外层 Herdr named session,
也不会创建 Git worktree;两个 Agent 会编辑同一工作目录,需自行协调并发修改。
支持本地 default / named session,以及通过 SSH 控制的远端 native / Windows SSH endpoint。
控制目标取自触发菜单的 Hub window metadata,不使用 popup 继承的 Herdr socket 或 pane 环境变量。
目标必须运行 Herdr 0.9+,并安装对应 Agent;当前 pane 必须已报告可用的 Agent session ID。
远端控制使用非交互 SSH(需要已信任的主机密钥和可用认证);Windows 需要 PowerShell。
启动 blocked、失败、超时或响应不完整时,菜单保留错误信息,**不会自动关闭任何 Tab**。
超时并不代表远端没有创建或启动成功,请先检查提示中的新 Tab,再重新打开菜单重试。
CLI 入口是 `herdr-hub control`。弹窗打开时会锁定 Hub 当前激活的 managed window,
再从其 Endpoint 对应的 Herdr server 读取当前页面的 Agent conversation。
更新后运行 `herdr-hub refresh` 配置现有 Hub 的快捷键。`herdr-hub doctor` 会显示入口和版本要求。
## 远端 Session 弹窗
弹窗由 tmux `display-popup` 和 Hub 内置选择器组成,不依赖 fzf。它会立即显示已打开的