存储格式

会话以 JSONL 文件存储,支持树形结构。每条记录有 id 和 parentId,原地分支无需创建新文件。

默认存储位置:~/.pi/agent/sessions/(按工作目录组织)

CLI 选项

pi -c                    # 继续最近的会话
pi -r                    # 浏览并选择历史会话
pi --no-session          # 临时模式(不保存)
pi --name "my task"      # 启动时设置会话名
pi --session <path|id>   # 使用指定会话文件或 ID
pi --fork <path|id>      # Fork 指定会话到新会话

分支操作

/tree

在 TUI 内导航会话树:

  • 输入文字搜索
  • Ctrl+←/→ 或 Alt+←/→ 折叠/展开并跳转分支
  • ←/→ 翻页
  • 过滤模式(Ctrl+O):default → no-tools → user-only → labeled-only → all
  • Shift+L 标记书签,Shift+T 切换标签时间戳

/fork

从当前活跃分支的某条历史 user 消息创建新会话文件。选择后,将所选 prompt 放入编辑器供修改,然后作为新会话的起点。

/clone

将当前活跃分支完整复制为新会话文件(保留完整历史,但编辑器为空)。

--fork <path|id>

从 CLI 直接 fork 现有会话文件,将完整源会话复制到当前项目的新会话文件。

Context 压缩(Compaction)

长会话可能耗尽 context window,压缩可将旧消息摘要化同时保留近期消息。

  • 手动:/compact 或 /compact <自定义指令>
  • 自动:默认启用,在 context 溢出或接近上限时触发
  • 可通过 /settings 或 settings.json 配置
  • 压缩是有损的,完整历史仍保留在 JSONL 文件中,可通过 /tree 回溯
  • extensions 可自定义压缩行为

会话标识

在交互模式中用 /session 查看当前会话 ID(JSONL 文件路径、消息数、token 用量、成本等),然后可通过 --session <id> 或 --fork <id> 复用。