会话
Pi 会将对话保存为会话,以便继续工作、从之前的轮次创建分支,并重新访问之前的路径。
会话存储
会话会自动保存到 ~/.pi/agent/sessions/,并按工作目录组织。每个会话都是一个具有树结构的 JSONL 文件。
pi -c # Continue most recent session
pi -r # Browse and select from past sessions
pi --no-session # Ephemeral mode; do not save
pi --name "my task" # Set session display name at startup
pi --session <path|id> # Use a specific session file or partial session ID
pi --fork <path|id> # Fork a session file or partial session ID into a new session在交互模式下使用 /session 查看当前会话文件、会话 ID、消息数量、token 和成本。
JSONL 文件格式和 SessionManager API 见 Session Format。
会话命令
| 命令 | 描述 |
|---|---|
/resume |
浏览并选择以前的会话 |
/new |
开始新会话 |
/name <name> |
设置当前会话显示名称 |
/session |
显示会话信息 |
/tree |
导航当前 session tree |
/fork |
根据先前的用户消息创建新会话 |
/clone |
将当前活动分支复制到新会话中 |
/compact [prompt] |
总结较旧的上下文;见 Compaction |
/export [file] |
将会话导出为 HTML |
/share |
上传为私有 GitHub Gist,并生成可分享的 HTML 链接 |
恢复和删除会话
/resume 打开当前项目的交互式会话选择器。 pi -r 在启动时打开相同的选择器。
在选择器中可以:
- 通过输入搜索
- 使用 Ctrl+P 切换路径显示
- 使用 Ctrl+S 切换排序模式
- 使用 Ctrl+N 过滤命名会话
- 使用 Ctrl+R 重命名
- 使用 Ctrl+D 删除,然后确认
如果可用,pi 使用 trash CLI 进行删除,而不是永久删除文件。
命名会话
使用 /name <name> 设置人类可读的会话名称:
/name Refactor auth module使用 --name 或 -n 设置启动时的名称:
pi --name "Refactor auth module"
pi --name "CI audit" -p "Review this build failure"命名会话在 /resume 和 pi -r 中更容易找到。
使用 /tree 进行分支
会话以树结构存储。每个条目都有 id 和 parentId,当前位置是活动叶节点。/tree 可以跳转到任意历史位置并从那里继续,而无需创建新文件。

形状示例:
├─ user: "Hello, can you help..."
│ └─ assistant: "Of course! I can..."
│ ├─ user: "Let's try approach A..."
│ │ └─ assistant: "For approach A..."
│ │ └─ user: "That worked..." ← active
│ └─ user: "Actually, approach B..."
│ └─ assistant: "For approach B..."树控件
| 按键 | 操作 |
|---|---|
| ↑/↓ | 导航可见条目 |
| ←/→ | 向上/向下翻页 |
| Ctrl+←/Ctrl+→ 或 Alt+←/Alt+→ | 折叠/展开,或在分支段之间跳转 |
| Shift+L | 设置或清除所选条目上的标签 |
| Shift+T | 切换标签时间戳 |
| Enter | 选择条目 |
| Escape/Ctrl+C | 取消 |
| Ctrl+O | 循环过滤模式 |
过滤器模式有:默认、无工具、仅用户、仅标记和全部。在 Settings 中配置默认值 treeFilterMode。
选择行为
选择用户或自定义消息:
- 将叶节点移动到所选消息的父级。
- 将选定的消息文本放置在编辑器中。
- 可以编辑并重新提交,从而创建新分支。
选择助手、工具、压缩或其他非用户条目:
- 将叶节点移动到该条目。
- 将编辑器留空。
- 可以从该位置继续。
选择根用户消息会将叶节点重置为空对话,并将原始 Prompt 放入编辑器。
/tree、/fork、/clone
| 功能 | /tree |
/fork |
/clone |
|---|---|---|---|
| 输出 | 相同的会话文件 | 新会话文件 | 新会话文件 |
| 视图 | 完整树 | 用户消息选择器 | 当前活动分支 |
| 典型用途 | 在原会话中探索替代方案 | 从之前的 Prompt 开始新会话 | 在继续前复制当前工作 |
| 摘要 | 可选分支摘要 | 无 | 无 |
想把替代方案保存在同一个会话中时,使用 /tree。需要单独会话文件时,使用 /fork 或 /clone。
分支摘要
当 /tree 从一个分支切换到另一个分支时,pi 可以总结被离开的分支,并将摘要附加到新位置。这样可以保留原路径中的重要上下文,而不必重放整个分支。
出现提示时,选择以下选项之一:
- 不生成摘要
- 使用默认 Prompt 生成摘要
- 使用自定义关注点说明生成摘要
请参阅 Compaction 了解分支摘要的内部机制和扩展 Hook。
会话格式
会话文件是 JSONL,包含消息条目、模型变更、thinking level 变更、标签、压缩、分支摘要和扩展条目。
解析器、扩展、SDK 用法和完整的 SessionManager API 见 Session Format。