flowchart LR
subgraph Tab1["🎯 Agent Tab"]
A1[Frontend Agent] --- A2[Backend Agent]
end
subgraph Tab2["🧪 测试 Tab"]
T1[Unit Tests] --- T2[E2E Tests]
end
subgraph Tab3["📋 日志 Tab"]
L1[Dev Server Logs] --- L2[Build Output]
end
18 第16章 最佳实践
18.1 Workspace 组织策略
18.1.1 核心原则:一个项目一个 Workspace
每个项目使用独立的 Herdr workspace,避免不同项目的 Agent 和文件相互干扰。
# 为新项目创建 workspace
cd ~/projects/new-saas-app
herdr init
# 这会创建 .herdr/ 目录
# .herdr/
# ├── config.toml # 项目级配置
# ├── workspace.toml # workspace 定义
# └── agents/ # 项目级 Agent 配置18.1.2 项目结构建议
~/projects/my-saas-app/
├── .herdr/
│ ├── config.toml # 项目配置
│ ├── workspace.toml # workspace 布局
│ └── agents/
│ ├── frontend.toml # 前端 Agent
│ ├── backend.toml # 后端 Agent
│ ├── reviewer.toml # 代码审查 Agent
│ └── tester.toml # 测试 Agent
├── src/
├── tests/
├── docs/
└── ...
18.1.3 多项目切换
# 不同项目使用不同 session
cd ~/projects/project-a && herdr attach project-a
cd ~/projects/project-b && herdr attach project-b
# 快速切换 session
herdr session switch project-b
Tip
使用 herdr session list 查看所有活跃 session,配合 Ctrl+a s 快速切换。
18.2 Tab 布局建议
18.2.1 标准三 Tab 模式
对于大多数开发场景,推荐使用三个 Tab:
| Tab 名称 | 用途 | 典型内容 |
|---|---|---|
| Agent Tab | AI Agent 工作区 | 2-4 个 Agent 窗格 |
| 测试 Tab | 运行和监控测试 | 单元测试、集成测试 |
| 日志 Tab | 查看运行日志 | 开发服务器、构建输出 |
18.2.2 创建标准布局
# .herdr/workspace.toml — 标准三 Tab 布局
[[tabs]]
name = "🤖 Agents"
panes = [
{ agent = "frontend", cwd = "src/frontend" },
{ agent = "backend", cwd = "src/backend" },
]
[[tabs]]
name = "🧪 Tests"
panes = [
{ command = "npm run test:watch", cwd = "." },
{ command = "npm run test:e2e", cwd = "." },
]
[[tabs]]
name = "📋 Logs"
panes = [
{ command = "npm run dev", cwd = "." },
{ command = "tail -f /var/log/app.log", cwd = "." },
]18.3 Agent 命名规范
18.3.1 标准命名方案
采用 角色 + 可选修饰 的命名模式:
| Agent 名称 | 职责 | 示例命令 |
|---|---|---|
frontend |
前端开发 | UI 组件、样式、路由 |
backend |
后端开发 | API、数据库、业务逻辑 |
reviewer |
代码审查 | PR 审查、代码质量检查 |
tester |
测试编写 | 单元测试、集成测试 |
docs |
文档维护 | README、API 文档、变更日志 |
devops |
部署运维 | CI/CD、Docker、基础设施 |
frontend-2 |
第二个前端 Agent | 并行开发不同模块 |
# 启动标准 Agent 团队
herdr agent start frontend --cwd src/frontend
herdr agent start backend --cwd src/backend
herdr agent start reviewer --watch-panes frontend,backend
herdr agent start tester --watch-panes frontend,backend18.3.2 多实例命名
当同一角色需要多个实例时:
# 模块名 + 角色
herdr agent start frontend-auth --cwd src/frontend/auth
herdr agent start frontend-dashboard --cwd src/frontend/dashboard
herdr agent start backend-api --cwd src/backend/api
herdr agent start backend-worker --cwd src/backend/worker
Note
Agent 名称建议使用小写字母和连字符(kebab-case),长度控制在 20 个字符以内,便于在侧边栏中完整显示。
18.4 多 Agent 任务拆分原则
18.4.1 任务拆分决策树
flowchart TD
T[任务] --> Q1{单一模块?}
Q1 -->|是| S1[单个 Agent 处理]
Q1 -->|否| Q2{模块间有依赖?}
Q2 -->|否| S2[并行 Agent 处理]
Q2 -->|是| Q3{依赖关系复杂?}
Q3 -->|否| S3["串行编排<br/>Agent A → Agent B"]
Q3 -->|是| S4["编排链<br/>A → B → C → D"]
18.4.2 拆分原则
| 原则 | 说明 | 示例 |
|---|---|---|
| 单一职责 | 每个 Agent 只负责一个明确任务 | frontend 不写后端代码 |
| 独立交付 | Agent 的产出可以独立验证 | tester 产出测试报告 |
| 最小依赖 | Agent 间依赖尽可能少 | backend 不依赖 frontend 的文件 |
| 可组合 | Agent 编排链可以灵活调整 | reviewer 可以审查任意 Agent 的输出 |
18.4.3 典型编排模式
18.4.3.1 模式一:并行开发
用户请求:"实现用户管理功能"
├── frontend Agent → 实现用户列表页面
├── backend Agent → 实现 API 接口
└── tester Agent → 等待前两者完成后编写测试
18.4.3.2 模式二:代码审查自动化
Agent 完成编码
↓
reviewer Agent 自动启动
↓
审查结果写入 /tmp/review-report.md
↓
如果发现问题 → 创建新 Agent 修复
如果审查通过 → 通知用户
18.4.3.3 模式三:流水线
# 编排链:设计 → 实现 → 测试 → 审查 → 文档
herdr agent chain \
--step 1:backend --task "实现数据库模型和 API" \
--step 2:tester --task "为 API 编写测试" --after 1 \
--step 3:reviewer --task "审查 API 实现" --after 1 \
--step 4:docs --task "更新 API 文档" --after 318.5 安全规则与最佳实践
18.5.1 Agent 权限控制
# .herdr/config.toml — 安全配置
[security]
# 限制 Agent 可执行的命令
agent_command_allowlist = [
"git", "npm", "node", "python", "pytest",
"eslint", "prettier", "tsc", "vite"
]
# 禁止 Agent 执行的命令
agent_command_blocklist = [
"rm -rf /", "sudo", "chmod 777", "curl.*|.*sh"
]
# 限制 Agent 的工作目录
restrict_to_workspace = true
# Agent 超时自动终止
agent_timeout = 3600 # 秒(1 小时)18.5.2 安全清单
| 检查项 | 说明 | 状态 |
|---|---|---|
| Agent 工作目录限制 | 仅允许在 workspace 内操作 | ☐ |
| 命令白名单 | 仅允许安全的开发命令 | ☐ |
| 敏感文件排除 | .env、密钥文件不可被 Agent 访问 |
☐ |
| 网络访问控制 | 按需限制 Agent 的网络访问 | ☐ |
| 超时终止 | 防止 Agent 长时间运行浪费资源 | ☐ |
| 日志审计 | 记录 Agent 执行的所有命令 | ☐ |
Warning重要安全提示
- 永远不要让 Agent 拥有
sudo权限 - Agent 不应能修改
.herdr/config.toml(防止自我提权) - 在生产环境中使用
--dry-run先预览 Agent 的操作 - 定期审查 Agent 执行的命令日志
18.6 团队协作工作流
18.6.1 代码审查自动化
sequenceDiagram
participant Dev as 开发者
participant FE as Frontend Agent
participant Rev as Reviewer Agent
participant Git as Git 仓库
Dev->>FE: 实现新功能
FE->>Git: 提交代码
FE->>Rev: 触发审查(on_done 钩子)
Rev->>Git: 读取变更
Rev->>Rev: 分析代码质量
alt 发现问题
Rev->>Dev: 报告问题 + 建议修改
else 审查通过
Rev->>Dev: ✅ 审查通过
Rev->>Git: 添加 approved 标签
end
配置示例:
# .herdr/agents/reviewer.toml
[agent]
name = "reviewer"
command = "claude-code --task code-review"
[agent.hooks]
on_start = "echo '🔍 Reviewer started'"
on_done = "cat /tmp/review-report.md"
on_block = "echo '⚠️ Reviewer needs input'"
[agent.watch]
panes = ["frontend", "backend"]
trigger = "done" # 当被监控的 Agent 完成时自动启动18.6.2 并行开发工作流
┌──────────────────────────────────────────────────┐
│ 共享代码仓库 │
│ (main branch, protected) │
└──────────────┬───────────────────┬────────────────┘
│ │
┌─────────┴─────┐ ┌───────┴───────┐
│ Worktree A │ │ Worktree B │
│ (auth 模块) │ │ (dashboard) │
│ │ │ │
│ frontend-auth│ │ frontend-dash │
│ Agent │ │ Agent │
└─────────┬─────┘ └───────┬───────┘
│ │
┌─────────┴─────┐ ┌───────┴───────┐
│ Worktree C │ │ Worktree D │
│ (API 模块) │ │ (worker 模块) │
│ │ │ │
│ backend-api │ │ backend-worker│
│ Agent │ │ Agent │
└───────────────┘ └───────────────┘
# 并行启动 4 个 Agent,各负责一个模块
herdr agent start frontend-auth \
--worktree auth \
--base-branch develop
herdr agent start frontend-dash \
--worktree dashboard \
--base-branch develop
herdr agent start backend-api \
--worktree api \
--base-branch develop
herdr agent start backend-worker \
--worktree worker \
--base-branch develop18.6.3 CI/CD 集成
#!/bin/bash
# .herdr/scripts/pre-merge-check.sh
# 在 CI 中运行的 Herdr 自动化检查
# 1. 启动 Herdr server(无头模式)
herdr server start --headless
# 2. 创建临时 workspace
herdr init --name ci-check
# 3. 启动 Agent 执行检查
herdr agent start reviewer \
--task "审查所有变更文件" \
--output-format json \
--timeout 300
herdr agent start tester \
--task "运行完整测试套件" \
--timeout 600
# 4. 等待所有 Agent 完成
herdr agent wait --all --timeout 900
# 5. 收集结果
REVIEW_RESULT=$(herdr agent result reviewer)
TEST_RESULT=$(herdr agent result tester)
# 6. 根据 Agent 结果决定是否合并
if [[ "$REVIEW_RESULT" == *"approved"* ]] && \
[[ "$TEST_RESULT" == *"passed"* ]]; then
echo "✅ 所有检查通过,可以合并"
exit 0
else
echo "❌ 检查未通过"
exit 1
fi18.7 远程开发最佳实践
18.7.1 SSH 连接复用
# ~/.ssh/config — 优化 Herdr 远程连接
Host herdr-dev-server
HostName dev.example.com
User developer
# 连接复用(避免每次新建连接)
ControlMaster auto
ControlPath ~/.ssh/cm-%r@%h:%p
ControlPersist 10m
# 保持连接
ServerAliveInterval 60
ServerAliveCountMax 3
# 压缩传输
Compression yes18.7.2 远程 Workspace 管理
# 在远程服务器创建持久化 workspace
ssh herdr-dev-server "cd ~/projects/api && herdr init --name api-prod"
# 从本地 attach 到远程 workspace
herdr remote attach herdr-dev-server api-prod
# detach 后远程 workspace 继续运行
herdr remote detach herdr-dev-server api-prod18.7.3 网络断连处理
# 配置自动重连
[remote]
manage_ssh_config = true
auto_reconnect = true
reconnect_interval = 5 # 重连间隔(秒)
reconnect_max_retries = 12 # 最多重试次数
Tip
在网络不稳定的环境中,设置 auto_reconnect = true 可以在断线后自动恢复连接。Agent 会在远程继续运行,不受断线影响。
18.8 配置管理:团队共享 vs 个人
18.8.1 分层配置策略
flowchart TD
G["全局配置<br/>~/.config/herdr/config.toml<br/>个人偏好:shell、主题、字体"]
P["项目配置<br/>.herdr/config.toml<br/>团队共享:Agent 定义、编排规则"]
L["本地覆盖<br/>.herdr/config.local.toml<br/>个人覆盖:调试选项、实验功能"]
G --> M[合并]
P --> M
L --> M
M --> F[最终生效配置]
| 层级 | 文件 | Git 管理 | 内容 |
|---|---|---|---|
| 全局 | ~/.config/herdr/config.toml |
dotfiles 仓库 | 个人偏好(shell、主题) |
| 项目 | .herdr/config.toml |
项目仓库 | 团队共享(Agent、布局) |
| 本地覆盖 | .herdr/config.local.toml |
.gitignore |
临时调试、个人定制 |
# .gitignore 中添加
.herdr/config.local.toml
.herdr/sessions/
.herdr/worktrees/18.8.2 团队配置模板
# .herdr/config.toml — 团队共享配置
# 统一的 Agent 定义
[agents.frontend]
command = "claude-code"
cwd = "src/frontend"
timeout = 3600
[agents.backend]
command = "claude-code"
cwd = "src/backend"
timeout = 3600
# 统一的编排规则
[orchestration]
auto_review = true
reviewer_agent = "reviewer"
review_trigger = "agent_done"
# 统一的安全策略
[security]
restrict_to_workspace = true
agent_command_allowlist = [
"git", "npm", "node", "python", "pytest", "eslint"
]18.9 性能优化建议
18.9.1 窗格与 Tab 管理
| 指标 | 建议值 | 说明 |
|---|---|---|
| 每个 Tab 的窗格数 | ≤ 4 | 过多会降低可读性和性能 |
| 同时活跃的 Tab 数 | ≤ 5 | 关闭不使用的 Tab |
| 同时运行的 Agent 数 | ≤ 6 | 每个 Agent 消耗 CPU 和内存 |
| 窗格最小尺寸 | 80×24 | 确保输出可读 |
18.9.2 输出历史优化
[experimental]
pane_history = true
pane_history_lines = 2000 # 适中即可,过大会消耗内存
detection_interval_ms = 2000 # 检测间隔,增大可降低 CPU
detection_max_panes = 15 # 限制扫描范围18.9.3 Agent 数量与资源消耗
graph LR
subgraph 轻量级["轻量级运行 ≤ 3 Agent"]
L1[CPU: < 5%]
L2[内存: < 200MB]
L3[适合日常开发]
end
subgraph 标准["标准运行 4-6 Agent"]
N1[CPU: 5-15%]
N2[内存: 200-500MB]
N3[适合多模块并行]
end
subgraph 重度["重度运行 7+ Agent"]
H1[CPU: 15%+]
H2[内存: 500MB+]
H3[需要高性能机器]
end
18.10 从 tmux 迁移的完整路径
18.10.1 迁移步骤
flowchart LR
T1["Step 1<br/>安装 Herdr"] --> T2["Step 2<br/>导入 tmux 习惯"]
T2 --> T3["Step 3<br/>配置键绑定"]
T3 --> T4["Step 4<br/>逐步替换工作流"]
T4 --> T5["Step 5<br/>利用 Agent 能力"]
T5 --> T6["Step 6<br/>完全迁移"]
18.10.2 迁移配置对照
# 为 tmux 用户提供的兼容配置
[keys]
# 保持 tmux 风格的前缀键
prefix = "Ctrl+b" # tmux 默认前缀
[keys.prefix_mode]
# tmux 风格的键绑定
new_pane = "\"" # tmux: 水平分割
new_vpane = "%" # tmux: 垂直分割
close_pane = "x" # tmux: 关闭窗格
new_tab = "c" # tmux: 新建窗口
close_tab = "&" # tmux: 关闭窗口
detach = "d" # tmux: detach
list_sessions = "s" # tmux: session 列表
rename_session = "$" # tmux: 重命名 session
Tip
详细的 tmux 到 Herdr 迁移对照请参考附录 C《Herdr vs tmux 完整对比》。
18.11 检查清单:理想的 Herdr 工作环境
在开始正式使用 Herdr 进行日常开发前,确认以下事项:
18.12 小结
本章总结了使用 Herdr 的最佳实践:
- Workspace:一个项目一个 workspace,配置纳入版本管理
- Tab 布局:标准三 Tab 模式(Agent / 测试 / 日志)
- Agent 命名:角色化命名,支持多实例
- 任务拆分:单一职责、独立交付、最小依赖
- 安全:命令白名单、工作目录限制、超时终止
- 团队协作:代码审查自动化、并行开发、CI/CD 集成
- 远程开发:SSH 连接复用、自动重连、持久化 workspace
- 配置管理:全局(个人)+ 项目(团队)+ 本地覆盖三层架构
- 性能优化:合理控制窗格和 Agent 数量
- tmux 迁移:渐进式替换,先保持习惯再逐步利用 Agent 能力
遵循这些最佳实践,你将能够充分发挥 Herdr 多 Agent 协作的优势,打造高效、安全、可维护的终端工作空间。