
Pi + Herdr:极简与强大的完美组合
前言:两种哲学的碰撞
2026 年的开发工具领域出现了两种截然不同的设计哲学:
极简主义:
- 刻意不做决定
- 核心保持最小
- 通过扩展实现功能
- 让用户定义工具
系统主义:
- 提供完整运行时
- 管理复杂状态
- 优化协同工作
- 让工具管理 agents
代表人物是两个工具:
- Pi:极简的终端编码工具
- Herdr:Coding agents 的运行时环境
表面上,它们是竞争关系。 实际上,它们是完美的互补。
一、两个工具,两种哲学
Pi:极简主义的极致
一句话说清楚:
Pi is a minimal terminal coding harness. It is designed to stay small at the core while being extended through TypeScript extensions, skills, prompt templates, themes, and pi packages.
设计哲学:
- 刻意不做决定
- 核心保持最小
- 通过扩展实现功能
- 让用户定义工具
核心能力:
- 终端 AI 交互
- TypeScript 扩展
- Skills 系统
- 提示模板
- 主题定制
安装和启动:
npm install -g @mariozechner/pi-coding-agent
pi认证:
/login # 订阅提供商
# 或
export ANTHROPIC_API_KEY=your_key
piHerdr:系统主义的实践
一句话说清楚:
The runtime your coding agents live on.
设计哲学:
- 提供完整运行时
- 管理复杂状态
- 优化协同工作
- 让工具管理 agents
核心能力:
- 终端复用
- 状态管理(Working/Blocked/Idle)
- Agent 驱动(CLI + Socket API)
- 远程访问
- 插件系统
安装和启动:
curl -fsSL https://herdr.dev/install.sh | sh
herdr二、为什么它们是完美的组合?
互补而非竞争
Pi 的优势:
- 极简核心
- 灵活扩展
- TypeScript 生态
- Skills 系统
Herdr 的优势:
- 状态管理
- 多 agent 协同
- 远程访问
- 持久化
组合的优势:
- Pi 负责智能交互
- Herdr 负责运行时管理
- 互补而不重叠
实际场景
场景 1:多 Agent 协同
用 Herdr 管理 Pi 的多个 session:
Herdr Session
├── Pane 1: Pi (Code Review Agent)
├── Pane 2: Pi (Testing Agent)
├── Pane 3: Pi (Documentation Agent)
└── Pane 4: Main Agent (Coordinator)场景 2:远程开发
用 Herdr 连接远程 Pi session:
本地终端 → SSH → 远程 Herdr → Pi Sessions场景 3:持久化工作
用 Herdr 保持 Pi sessions:
- 关闭笔记本
- Pi sessions 继续
- 重新连接恢复
三、最佳实践 1:基础工作流
第一步:启动 Herdr
# 在项目目录
cd /path/to/project
herdr基础操作:
Ctrl+b %:水平分割"Ctrl+b ":垂直分割Ctrl+b c:创建新窗格
第二步:在 Herdr 中启动 Pi
# 在 Herdr 窗格中
piPi 的基础操作:
- 直接输入问题
- 用扩展执行任务
- 用 Skills 自动化
第三步:分割窗格,创建多个 Pi 实例
# 创建第二个窗格
Ctrl+b %
# 启动第二个 Pi
pi用途:
- 一个 Pi 负责代码生成
- 一个 Pi 负责代码审查
- 一个 Pi 负责测试
第四步:Detaching 和 Reattaching
# Detach(Herdr 继续运行)
Ctrl+b d
# 重新连接
herdr attach价值:
- Pi sessions 继续
- 长时间任务不中断
- 远程访问
四、最佳实践 2:多 Agent 协同
场景:代码开发流程
目标:从需求到测试的完整流程。
架构设计:
┌─────────────────────────────────────────────────┐
│ Herdr Session │
├─────────┬─────────┬─────────┬─────────┬───────┤
│ Pane 1 │ Pane 2 │ Pane 3 │ Pane 4 │ Pane 5│
├─────────┼─────────┼─────────┼─────────┼───────┤
│需求分析 │代码生成 │代码审查 │测试生成 │文档 │
│ Pi │ Pi │ Pi │ Pi │ Pi │
└─────────┴─────────┴─────────┴─────────┴───────┘实施步骤
步骤 1:创建窗格
# 在 Herdr 中
Ctrl+b % # 水平分割
Ctrl+b % # 再分割
Ctrl+b " # 垂直分割
# ... 创建 5 个窗格步骤 2:在每个窗格启动 Pi
# 窗格 1:需求分析
pi
> 分析需求:实现一个用户认证系统
# 窗格 2:代码生成
pi
> 根据需求生成代码
# 窗格 3:代码审查
pi
> 审查以下代码
# 窗格 4:测试生成
pi
> 为以下代码生成测试
# 窗格 5:文档
pi
> 为以下代码生成文档步骤 3:协同工作
Herdr 的状态管理让协同更高效:
- 看到哪些 Pi 实例在 Working
- 看到哪些 Pi 实例 Blocked(需要输入)
- 看到哪些 Pi 实例 Idle(可接受新任务)
五、最佳实践 3:扩展开发
用 Pi 扩展 Herdr 的 Agent 能力
目标:让 Pi 的 Skills 可以驱动 Herdr。
扩展示例:Herdr Skill for Pi
创建 Skill:
// ~/.pi/skills/herdr-skill/skill.ts
export class HerdrSkill {
async createPane(command: string) {
const { exec } = require('child_process');
exec(`herdr pane create --command "${command}"`);
}
async waitForPane(paneId: string) {
const { exec } = require('child_process');
exec(`herdr pane wait --pane-id ${paneId}`);
}
async getPaneStatus(paneId: string) {
const { exec } = require('child_process');
return new Promise((resolve) => {
exec(`herdr pane status --pane-id ${paneId}`, (error, stdout) => {
resolve(stdout.trim());
});
});
}
}在 Pi 中使用:
pi
> 启动一个代码审查 agent
> [使用 herdr-skill 创建新窗格]
> 等待审查完成
> [使用 herdr-skill 检查状态]用 Herdr 管理 Pi 的扩展
目标:让 Herdr 可以管理 Pi 的扩展生命周期。
场景:
# 在 Herdr 中创建一个"扩展管理"窗格
Ctrl+b c
# 启动 Pi
pi
# 管理扩展
> 列出所有扩展
> 启用代码审查扩展
> 禁用测试扩展六、最佳实践 4:远程工作流
场景:远程开发
架构:
┌─────────────┐ SSH ┌─────────────┐
│ 本地终端 │ ───────────→ │ 远程服务器 │
│ │ │ │
│ herdr attach│ │ Herdr │
└─────────────┘ │ ┌───┬───┐ │
│ │Pi1│Pi2│ │
│ └───┴───┘ │
└─────────────┘实施步骤
步骤 1:在远程服务器启动 Herdr
# SSH 到服务器
ssh user@server
# 启动 Herdr
cd /path/to/project
herdr步骤 2:在 Herdr 中启动 Pi
# 在 Herdr 窗格中
pi步骤 3:Detaching
# Detach Herdr
Ctrl+b d
# 可以断开 SSH
exit步骤 4:本地重新连接
# 从本地
ssh user@server
herdr attach价值:
- Pi sessions 在远程运行
- 本地只是终端
- 灵活连接
- 资源高效
七、最佳实践 5:状态管理
Herdr 的状态可视化
三种状态:
Working(工作中):
- Pi 正在生成代码
- 正在执行扩展
- 正在处理任务
Blocked(阻塞):
- Pi 等待用户输入
- 等待确认
- 需要人工介入
Idle(空闲):
- Pi 等待新任务
- 可接受新工作
- 资源可用
实践:基于状态的调度
场景:自动分配任务
流程:
1. 检查所有 Pi 窗格状态
2. 找到 Idle 的窗格
3. 分配新任务
4. 监控 Working 窗格
5. 发现 Blocked 时提示用户实现:
// Pi 扩展:自动调度
async function scheduleTask(task: string) {
// 1. 获取所有窗格状态
const panes = await getAllPaneStatus();
// 2. 找到 Idle 窗格
const idlePane = panes.find(p => p.status === 'idle');
if (!idlePane) {
console.log('No available pane. Waiting...');
return;
}
// 3. 分配任务
await sendToPane(idlePane.id, task);
}八、最佳实践 6:插件集成
Herdr 的插件系统
Marketplace:https://herdr.dev/plugins/
常见插件:
- 状态指示器
- 自动化脚本
- 集成工具
Pi 的扩展系统
扩展类型:
- TypeScript 扩展
- Skills
- 提示模板
- 主题
组合使用
场景:用 Pi 扩展增强 Herdr 插件
示例:
// Pi 扩展:增强 Herdr 状态指示
export class EnhancedStatusIndicator {
async getDetailedStatus() {
// 获取 Herdr 状态
const herdrStatus = await this.callHerdrAPI('status');
// 获取每个 Pi 实例的详细信息
const piDetails = await this.getPiDetails();
// 组合显示
return this.formatStatus(herdrStatus, piDetails);
}
}九、最佳实践 7:性能优化
减少资源占用
策略 1:按需启动 Pi
# 不要在所有窗格启动 Pi
# 只在需要时启动
# 在 Herdr 中
Ctrl+b c # 创建窗格
pi # 需要时才启动策略 2:及时 Detach
# 完成任务后 Detach
Ctrl+b d
# 需要时重新连接
herdr attach优化 Pi 启动时间
策略 1:缓存扩展
# 预加载常用扩展
pi --preload code-review,testing策略 2:使用主题
# 使用轻量主题
pi --theme minimal十、最佳实践 8:错误处理
Herdr 的错误处理
场景 1:Pane 崩溃
# 检查崩溃的窗格
herdr pane list
# 重新启动
herdr pane restart --pane-id <id>场景 2:Session 丢失
# 查看所有 sessions
herdr session list
# 恢复 session
herdr attach -t <session-name>Pi 的错误处理
场景 1:扩展加载失败
# 检查扩展
pi --list-extensions
# 重新安装
pi --install-extension <name>场景 2:API 错误
# 检查 API Key
pi --check-auth
# 重新认证
/login十一、实战案例
案例 1:全栈开发工作流
场景:开发一个完整的 Web 应用。
架构:
┌─────────────────────────────────────┐
│ Herdr Session │
├────────┬────────┬────────┬──────────┤
│Backend│Frontend│ Test │ Docs │
│ Pi │ Pi │ Pi │ Pi │
└────────┴────────┴────────┴──────────┘流程:
步骤 1:后端开发(Pane 1)
pi
> 生成 Express.js API
> 添加用户认证
> 实现数据模型步骤 2:前端开发(Pane 2)
pi
> 生成 React 组件
> 实现状态管理
> 添加样式步骤 3:测试(Pane 3)
pi
> 为后端生成测试
> 为前端生成测试
> 运行测试步骤 4:文档(Pane 4)
pi
> 生成 API 文档
> 生成组件文档
> 生成部署文档协同:
- Herdr 管理状态
- 看到 Pane 3 Blocked 时(测试失败),回到 Pane 1 修复
- 看到 Pane 4 Idle 时,继续生成文档
案例 2:代码审查工作流
场景:团队的代码审查流程。
架构:
┌─────────────────────────────────────┐
│ Herdr Session │
├────────┬────────┬────────┬──────────┤
│ PR │Review 1│Review 2│ Merge │
│ Pi │ Pi │ Pi │ Pi │
└────────┴────────┴────────┴──────────┘流程:
步骤 1:创建 PR(Pane 1)
pi
> 创建 Pull Request
> 生成描述
> 添加标签步骤 2:自动审查(Pane 2)
pi
> 审查代码质量
> 检查安全问题
> 生成审查报告步骤 3:人工审查(Pane 3)
pi
> 总结变更
> 提供审查要点
> 等待人工确认步骤 4:合并(Pane 4)
pi
> 检查所有审查通过
> 合并 PR
> 删除分支十二、总结
两个工具的价值
Pi 的价值:
- 极简核心
- 灵活扩展
- TypeScript 生态
- Skills 系统
Herdr 的价值:
- 状态管理
- 多 agent 协同
- 远程访问
- 持久化
组合的价值
1 + 1 > 2:
- Pi 负责智能交互
- Herdr 负责运行时管理
- 互补而不重叠
核心思想
极简不是简陋,而是聚焦。系统不是复杂,而是完整。
Pi 的极简让它灵活,Herdr 的系统让它强大。
两者结合,才是最佳实践。
三个关键点
1. 分工明确
- Pi:智能交互
- Herdr:运行时管理
2. 状态驱动
- Herdr 的状态管理
- 指导 Pi 的任务分配
3. 远程友好
- Herdr 的远程访问
- Pi 的轻量核心
记住
最好的工具不是全功能的,而是可组合的。
Pi + Herdr = 极简与强大的完美组合。
参考资源
- Pi:https://github.com/mariozechner/pi-coding-agent
- Herdr:https://github.com/herdrdev/herdr
- Herdr 文档:https://herdr.dev/docs/
- Herdr 插件:https://herdr.dev/plugins/
声明:本文基于开源项目分析,具体使用请参考官方文档。
