pi-forkme0.2.2
Fork the active Pi session into a new Herdr tab or macOS terminal window with /forkme.
Untested on omp
This is a pi package. No one has reported whether it works on omp yet. If you try it, add your result below.
Reports 0
No reports yet.
Readme
pi-forkme
在 Pi 内输入 /forkme [name],将当前会话分叉到新终端,原会话保持不变。
[name] 为可选参数;指定名称时无需输入方括号,省略时自动命名。
无需指定 session ID,创建分叉不会调用模型。
| 当前环境 | Fork 的打开位置 |
|---|---|
| Herdr 内,无论外层是什么终端 | 调用方 pane 当前所在 workspace 的新 tab |
| macOS Ghostty,直接运行 Pi | 新 Ghostty 窗口 |
| macOS iTerm2,直接运行 Pi | 新 iTerm2 窗口 |
| macOS Terminal,直接运行 Pi | 新 Terminal 窗口 |
Herdr 创建新标签页时立即切换过去,不等待新 Pi 启动就绪。启动完成后不会再次抢焦点,因此你可以在等待期间自由切换到其他标签页。原会话保留,不切换会话文件、不重写。
安装
pi install npm:pi-forkme
或直接从 GitHub 安装:
pi install https://github.com/jasonz3g/pi-forkme
使用
在已经运行的 Pi 会话中,重新加载扩展后执行命令:
/reload
/forkme
新启动的 Pi 会话会自动加载扩展。在 Agent 空闲时输入 /forkme 即可,也可以指定新会话名称:
/forkme 问题 A
新会话名称为 问题 A,不追加 fork 后缀,原会话保持不变。Herdr 新标签页使用相同名称;原生终端窗口标题不做专门控制。
/forkme或仅包含空白的参数沿用自动命名:原会话名称(或工作目录名)加上· fork <id>。- 命令后面的整段文本作为名称,去除首尾空白,保留中间空格,换行转换为空格。
- 不需要引号;引号和 shell 语法均按字面保留。支持中文、emoji 和重名,自定义名称不截断,也不清除已有 fork 后缀。
- 剩余 ASCII 控制字符(包括内部制表符、NUL 和 ESC)会在创建 fork 前被拒绝。
名称保存在 fork 文件中,重新打开或启动失败后恢复时仍然有效。
运行要求
- Pi 0.85.1+,已在
0.85.1测试。 - Node 版 Pi 使用 Node.js 22.19.0+。
- Herdr 已在 0.9.0 测试,需要
pane current、tab create、agent start接口。 - 原生窗口仅支持 macOS;Ghostty 需要 1.3.0+,并启用 AppleScript(
macos-applescript默认开启)。
首次使用可能需要允许 macOS 自动化权限。原生适配器确认终端接受了创建窗口请求,不像 Herdr 那样额外等待新 Pi 输入就绪。
普通 SSH、Herdr 之外的 tmux/screen、未知终端、非 macOS 的原生窗口暂未适配,会明确报错。Herdr 优先识别;远端 Herdr 内也通过远端本机 CLI/socket 打开标签页。
分叉语义
- 复制当前活动分支及已完成回答。使用
/tree后,不会误复制磁盘末尾的其他分支。 - Pi SDK 处理 labels、compaction 和持久化的扩展条目。
- 保留工作目录、模型、思考级别和来源会话关系。
- 创建新的 session ID 和 JSONL 文件,权限
0600,原会话不变。 - 先保存快照再开终端,不会因启动延迟混入原会话后续消息。
- 忙碌、有排队消息时拒绝执行,不中断正在运行的回复或工具。
- 临时会话(如
--no-session)先确认是否允许把内容保存到磁盘。
只 Fork 会话,不 Fork 项目文件。 两个 Agent 默认共享同一项目目录,不创建 Git worktree。
这不是进程内存快照。未提交的编辑器草稿、正在运行的工具、扩展的纯内存状态不会复制。新进程正常加载全局/项目配置,不复制临时 -e、--system-prompt、--tools 等 CLI 覆盖项。
会传递 Pi 配置目录和 PATH,但不会把 API key 或整个父进程环境写进命令。仅通过当前 shell 临时 export 设置的认证可能需要在 Pi 或目标终端重新配置。
失败恢复
启动失败/超时时不会自动重试、关闭新 tab 或删除已经生成的 Fork。
- 先检查新窗口/tab 是否已经打开或正在等待授权。
- 已保存副本时,原 Pi 会显示会话路径和恢复命令。
- 确认没有其他进程使用该副本后,再在新终端执行恢复命令。
不要同时打开同一副本两次。
开发与测试
npm ci
npm run verify
测试覆盖会话快照、终端识别、失败恢复和 npm 包安装。macOS 上已安装对应终端时,还会编译其 AppleScript。常规测试不会打开窗口或发送模型请求。
开发时可在仓库根目录执行 pi install .,让 Pi 加载本地代码。
Herdr 的可选实测:
# 仅在 Herdr 内、且 PATH 中存在 pi 时执行:
npm run test:herdr
该测试创建一个临时 tab,不抢焦点,启动 Pi 并验证分叉会话后关闭测试 tab,不发送模型请求。
维护者发布流程见 docs/RELEASING.md。
协议
MIT。