// AGENT MULTIPLEXER

Herdr
快速入門

把它想成「更懂 AI coding agents 的 tmux」:保留真正的 terminal、支援 detach / reattach,同時用 workspace、tab、pane 與 agent 狀態幫你管理多個開發工作。

$ cd my-project
$ herdr
# 開啟 / 接回預設 session

$ claude
# 或 codex、其他 terminal agent
● working
● blocked
● done

它到底是什麼?

Herdr 是 terminal workspace manager,也是 agent-aware multiplexer。背景 server 擁有真正的 terminal process,所以你關掉 terminal 或 SSH 斷線後,pane 裡的 agent 仍能繼續跑。

WORKSPACE

一個 project 一個 Workspace

拿來對應 repo、任務或 investigation。每個 workspace 擁有自己的 tabs 與 panes。

PANE + TAB

保留真實 Terminal

Pane 就是真正的 terminal,可左右或上下分割;Tab 則把不同 layout 分開,例如 agents、logs、server。

AGENT AWARE

直接看 Agent 狀態

Herdr 能辨識支援的 coding agents,sidebar 會顯示 working、blocked、done、idle,方便知道哪個工作需要你。

Herdr vs tmux

兩者核心模型很接近,但 Herdr 把「管理多個 AI agents」當成一級需求。

Herdrtmux
Process persistence✅ detach 後繼續執行✅ detach 後繼續執行
Pane / split✅ 支援,且 mouse-native✅ 成熟、鍵盤導向
AI Agent 狀態✅ working / blocked / done / idle❌ 不理解 agent lifecycle
Workspace 概念✅ project-level container主要以 session / window 組織
滑鼠操作✅ 點選、拖曳、右鍵、resize 都是一級操作可開 mouse mode,但不是核心 UX
Automation✅ CLI + local socket API,可讓 agent 控制 Herdr✅ CLI / scripting 很成熟

最短上手流程

第一次用其實不用先背快捷鍵,滑鼠就能完成大部分操作。

01

進專案後執行 herdr

Herdr 會啟動或接回預設 background session;沒有 workspace 時會自動建立一個。

02

在 Pane 裡啟動 Agent

例如 Claude Code 或 Codex。Herdr 會在 sidebar 顯示偵測到的 agent 與狀態。

03

Detach,之後再回來

按 prefix + q 或直接關 terminal。再次執行 herdr 就會 reattach;真的要全部停掉才用 herdr server stop。

先記這幾個快捷鍵

預設 prefix 是 Ctrl+B。做法是先按 Ctrl+B、放開,再按後面的 action key。

新增 Tabprefix + c
向右分割 Paneprefix + v
向下分割 Paneprefix + -
Pane 間移動prefix + h/j/k/l
Workspace 導航prefix + w
全部位置快速跳轉prefix + g
放大目前 Paneprefix + z
關閉目前 Paneprefix + x
Copy modeprefix + [
快捷鍵說明prefix + ?
Detachprefix + q
切換 Sidebarprefix + b

常用 CLI

Herdr 的背景 server 和 client 是分離的,所以「關畫面」和「真的停止工作」是兩件事。

# 啟動 / reattach 預設 session
herdr

# 建立或接回具名 session(需要隔離環境時)
herdr session attach work

# 真正停止目前 server 與其中 panes
herdr server stop

設定檔完整教學

Herdr 的行為可用 TOML 自訂。這裡從存放路徑、Dracula theme、Sidebar 格式,到 Agent 狀態通知與快捷鍵,附可直接複製的完整範例。

01 · FILE

設定檔在哪?

Linux / macOS:~/.config/herdr/config.toml
Windows:%APPDATA%\herdr\config.toml

02 · EDIT

用本機預設值開始

herdr --default-config 可以印出完整帶註解的預設設定,再依自己的需求修改。

03 · RELOAD

修改後重載

herdr server reload-config。大部分 UI 設定可立即套用,僅部分啟動時設定需要重新啟動。

建立、備份、重載

mkdir -p ~/.config/herdr
# 已有 config 時先備份,避免覆蓋現有設定
if [ -f ~/.config/herdr/config.toml ]; then
  cp ~/.config/herdr/config.toml ~/.config/herdr/config.toml.bak
fi

# 想從官方預設值重新開始,才執行下一行
herdr --default-config > ~/.config/herdr/config.toml

# 編輯後重載
herdr server reload-config

只有已存在 config.toml 時才會備份。注意:> 會覆蓋原始檔,請先備份。

Dracula + 緊湊 Sidebar 範例

下載範例檔

這個版本特別設計給同時跑 Claude Code / Codex 等多個 Agent 的情境:Sidebar 不顯示冗餘的 Local、保留 Tab 名稱與 Agent 名稱,若有動態摘要就多一列 cyan 文字。

# ~/.config/herdr/config.toml
# Dracula + 緊湊 Sidebar 範例
onboarding = false

[ui]
status_indicators = "symbols"
pane_borders = "always"
pane_outer_borders = true
pane_scrollbars = false
pane_gaps = true
show_agent_labels_on_pane_borders = true
sidebar_width = 30
sidebar_min_width = 20
sidebar_max_width = 50
tab_bar_position = "top"
copy_on_select = true

[ui.sidebar.agents]
row_gap = 0
rows = [
  ["state_icon", { token = "tab", fg = "#f8f8f2", bold = true, dim = false }, { token = "machine", rules = [{ equals = "Local", hide = true }] }],
  ["agent"],
  [{ token = "$summary", fg = "#8be9fd", dim = true }]
]

[ui.sidebar.spaces]
row_gap = 0
rows = [
  ["state_icon", "workspace"],
  ["branch", "git_status"]
]

[ui.toast]
delivery = "terminal"
delay_seconds = 2

[ui.sound]
enabled = false

[theme]
name = "dracula"
auto_switch = false

[theme.custom]
accent = "#bd93f9"
sidebar_bg = "#282a36"
active_row_bg = "#44475a"
selection_bg = "#44475a"

[keys]
prefix = "ctrl+b"
new_tab = "prefix+c"
goto = "prefix+g"
focus_pane_left = "prefix+h"

設定項目逐項解說

設定作用與建議
ui.status_indicatorssymbols 用不同形狀區分 working / blocked / done;dots 是精簡圓點。
ui.pane_bordersauto 只在分割時顯示、always 單一 Pane 也畫框、off 隱藏。
ui.pane_outer_borders決定是否畫最外框;如果用 always 想讓單一 Pane 也有邊框,就要設 true。
ui.pane_scrollbars / pane_gaps關閉 scrollbar 可多一欄寬度;gaps 控制分割 pane 的間距。
ui.show_agent_labels_on_pane_borders當 Pane 沒有手動標籤時,分割 Pane 邊框可顯示 Agent 名稱。
ui.sidebar_width / min / max調整 Sidebar 欄寬;空間較小可改成 24 / 18 / 36。
ui.sidebar.agents.rows控制 Agent 清單每行有哪些 token,順序就是渲染順序。
ui.sidebar.spaces.rows控制 Workspace 區塊顯示名稱、branch 和 Git 狀態。
ui.toast.deliveryoff、herdr、terminal 或 system;terminal 取決於外層終端機的通知支援。
ui.sound.enabledfalse 可完全關掉 Agent 狀態變更音效。
theme.name / theme.custom選擇內建 Dracula 主題,再選擇性覆蓋 accent、sidebar 背景、選取列背景。
keys.prefix預設 ctrl+b。若和 tmux 衝突,可改為其他按鍵,但需注意終端機能否送出組合鍵。

Sidebar 自訂 Rows 的邏輯

每一個陣列就是一行;token 不存在時不會硬畫空字串。可以用 fg、bold、dim 指定單一 token 的樣式,或用 rules 判斷內容並隱藏。例如:

TEXT TOKENS

常見內建欄位

state_icon:狀態符號
workspace:專案空間
tab:分頁名稱
machine:主機標籤
agent:偵測到的 Agent
state_text:狀態文字
branch / git_status:Git 資訊

CUSTOM TOKEN

$summary 不會自動出現

$summary 是自訂 metadata token。必須由 script / integration 主動 report 值才有內容;它不是內建的 description。
Pane 框線上顯示 Agent 標籤,也不代表 Sidebar 就有摘要。

用 CLI 寫入自訂摘要

herdr pane report-metadata <pane_id> \
  --source my-agent-hook \
  --token summary="reviewing authentication"

實際使用時把 <pane_id> 替換成有效 Pane ID;內容會顯示在對應 Agent 的 $summary 那一行。

進階:只改 Claude 的 Sidebar Rows

如果只想讓 Claude 顯示較多細節,而其他 Agent 維持預設,可以加以下段落。這份設定是取代 Claude 的 rows,不是附加在一般 rows 後面。

[ui.sidebar.agents.rows_by_agent]
claude = [
  ["state_icon", "agent", "state_text"],
  [{ token = "$summary", fg = "#8be9fd" }],
  ["workspace", "tab"]
]

這個 override 使用 canonical ID claude;Codex 則是 codex。如果你的設定檔中已經有 [ui.sidebar.agents.rows_by_agent],把內容合併進同一個 table,避免 TOML 重複宣告。

進階:狀態列、視窗名稱、通知方式

這三段是獨立片段,不要把多個 [ui] 或 [ui.toast] table 原封不動重複貼進同一份 TOML。請把 key 加到已存在的區塊即可。

# 把以下 key 合併到現有 [ui] 區塊
tab_bar_right = [
  { type = "zoom" },
  { type = "hostname" },
  { type = "datetime", format = "%H:%M" }
]
tab_bar_right_separator = " · "
window_title = "{hostname}: {workspace}"

# 加到現有 [ui.toast] 內:
# delivery = "herdr"
# delay_seconds = 1

# 加到現有 [ui.sound] 內:
# enabled = true

遇到設定不生效,先檢查這些

Sidebar 有 Agent,但沒有 summary?

這通常不是排版錯誤:$summary 需要 metadata reporter 寫入資料。先確認 plugin / script 有送出 summary token,再看 rows 裡是否包含 $summary。

Pane 框線有名稱,Sidebar 卻沒有?

show_agent_labels_on_pane_borders 影響的是 Pane border 標籤;Sidebar 要由 rows 決定顯示欄位。兩者互不等價。

我改了檔案,Herdr 怎麼沒變?

先執行 herdr server reload-config,或從 Herdr 選單選 reload config。部分 startup-only 選項需要重開;如果值無效,Herdr 會顯示警告並採用安全預設值。

遠端 SSH Herdr 到底用哪台機器的設定?

Theme、Sidebar、複製等 presentation 由本機 client 設定決定;Pane defaults、Worktrees、Integrations、Custom commands 由遠端 server 的設定決定。

如何完全確認我的版本支援哪些欄位?

先執行 herdr --default-config 查看本機版本的完整預設;官方 Config reference ↗ 可查所有設定的型別、預設值和可用值。

參考來源:Herdr Configuration · Config Reference

最重要的差異: 如果你只是關掉 terminal 或按 prefix + q,agent 並沒有被停掉。這就是 Herdr 適合長時間跑 Claude Code / Codex、多 project 並行工作的地方。