这篇记录基于 Windows 环境与 Pi 0.85.0,整理了第三版之后影响实际工作流的几项变化:原生 PowerShell、上下文压缩、模型继承、MCP 生命周期、界面汉化与桌面通知。以下保留原帖中的关键配置、命令、验证步骤和风险边界;完整叙述与后续讨论请以原帖为准。

一、原生 PowerShell:工具名、子代理与权限要一起改

Pi 从 0.84.2 开始支持 defaultTools,0.84.3 加入可选的原生 powershell 工具。在 Windows 上仅修改 shellPath 不够,还要显式选择工具:

{
  "shellPath": "C:\\Program Files\\PowerShell\\7\\pwsh.exe",
  "defaultTools": [
    "read", "powershell", "edit", "write",
    "grep", "find", "ls"
  ]
}

原生工具会优先寻找 pwsh.exe,找不到才回退到 Windows PowerShell;编辑器中的 !、!! 仍走 Bash 入口。主会话启用 PowerShell 后,不会覆盖角色配置中已写死的 tools,所以常规子代理也要同步加入 powershell。

Plan 模式的 defaultPlanTools 也要单独加入 powershell。原帖特别提醒:命中自定义 safeSubcommands 信任前缀后,Plan 会跳过整条命令的解析检查,因此它不能被视为严格的只读保证。三个 plan-* 专用角色仍只保留 read/grep/find/ls。

若使用 @gotgenes/pi-permission-system,还要让权限插件识别新的 shell 工具名:

{
  "shellTools": {
    "powershell": {
      "commandArgument": "command"
    }
  }
}

这段配置应合并到权限插件的现有配置中,不能覆盖原有规则。即便角色没有 edit/write,仍可能借助 PowerShell 写文件,因此工具权限和协作规则都要一起审查。

二、Magic Context 接管长会话整理

第三版使用 Pi 原生自动压缩、pi-ultra-compact 和 context-mode;第四版移除 pi-ultra-compact,改用 @cortexkit/pi-magic-context:

  • context-mode 继续索引和检索大段工具输出;
  • Magic Context 用标签、ctx_reduce 与 Historian 移出旧内容,必要时用 ctx_expand 回读原始消息;
  • Pi 原生自动压缩关闭,由 Magic Context 接管自动整理。

安装方式二选一:

npx @cortexkit/magic-context@latest setup --harness pi

或:

pi install npm:@cortexkit/pi-magic-context

直接安装 Pi 包不会自动创建 magic-context.jsonc,需要手动配置;不要把两个安装命令连续执行。若此前安装了旧的压缩插件,应先处理冲突,例如:

pi remove npm:pi-ultra-compact

Pi 自身配置中关闭原生压缩:

{
  "compaction": {
    "enabled": false,
    "reserveTokens": 65536,
    "keepRecentTokens": 24000
  }
}

原作者的 Magic Context 配置开启压缩和自动更新检查,使用中文,执行阈值为 65%,历史预算为 18%,保护 24 个标签;同时关闭长期记忆、embedding、Dreamer、Sidekick、Todo、smart drops 与文本压缩。该配置位于用户级 CortexKit 配置目录,项目级配置仍可覆盖它。

日常更新建议:先结束当前任务和后台子代理,退出所有共用数据库的会话;再定向更新扩展并运行诊断:

pi update npm:@cortexkit/pi-magic-context
npx @cortexkit/magic-context@latest doctor --harness pi

@cortexkit/magic-context 是提供 setup/doctor 的统一 CLI,@cortexkit/pi-magic-context 才是 Pi 加载的扩展。doctor 可能迁移旧配置位置,并非完全只读;升级前应备份实际数据目录,不建议顺手加 --force 或 --clear。跨版本更新后最好完整退出并重启,避免多个进程混用同一数据库。

三、多供应商切换:子代理继承,Historian 单独同步

主会话通过 /model 与 /thinking 做出的临时选择只在当前会话生效,按 Ctrl+S 才保存为启动默认。为了避免主会话切换供应商后,子代理仍停留在旧的 provider/model:

  • Plan 专用角色改为 model: inherit;scout 使用 low,researcher 与 reviewer 使用 medium;
  • 常规角色删除固定的 subagents.defaultModel,各角色改用 model: inherit,同时删除旧的固定 fallbackModels;
  • 单次调用若显式指定模型,仍会覆盖继承设置;已运行的子代理不会中途随父会话切换。

Magic Context 的 Historian 使用独立配置,不能直接继承。原作者写了本地扩展,在 model_select 事件发生时同步完整供应商、模型 ID 与思考等级,同时删除旧的 fallback;并注册 /sync-magic-model,用于手动同步当前选择并 reload。这里只同步 Historian,不会重写普通子代理配置。多开会话时,后一次写入全局 Historian 配置可能影响其他会话后续读取,应避免并发修改。

四、MCP 改为按需启动

原作者保留 context-mode、sequential-thinking、时间服务与任务管理器为 eager;把 Context7、DeepWiki、Playwright 和 Chrome DevTools 改为 lazy。Context7 仅直接暴露 resolve-library-id 与 query-docs,浏览器类 MCP 通过适配器代理。

lifecycle: lazy 控制何时连接服务,directTools 控制工具如何暴露给模型;两者不是同一件事。这样能避免每次启动会话就连接暂时用不到的文档和浏览器服务。

五、界面、汉化与通知

Pi 0.84.2 至 0.85.0 增加了全屏搜索、思考块/工具结果展开、Windows/WSL 快捷键调整、fullscreenCopyOnSelect、Jump to latest message,以及长对话搜索缓存和高亮优化。

原作者移除维护不及时的 pi-di18n,改用 rpiv-i18n 管理已接入扩展的中文界面。它不会翻译整个 Pi、全部内置工具或发给模型的提示词。

桌面通知使用 @pi-unipi/notify,只开启原生桌面渠道,关闭 Gotify、Telegram、ntfy 与模型摘要。重点事件包括 agent_end、agent_settled、提问和权限确认;其中 agent_end 只是单次运行结束,agent_settled 才表示重试、压缩和排队续跑结束后的稳定状态。

六、验证清单与适用边界

完成迁移后可按以下顺序检查:

  1. 确认 Pi 版本与插件版本符合配置前提;
  2. 在主会话和普通子代理中分别验证 powershell 是否可用;
  3. 检查权限插件是否确实拦截 PowerShell 命令;
  4. 运行 Magic Context 的 doctor,重启后用 /ctx-status 查看当前状态;
  5. 切换供应商、模型和思考等级,执行 /sync-magic-model,确认 Historian 已同步;
  6. 验证 Context7、DeepWiki 和浏览器服务只在需要时连接;
  7. 触发任务结束、稳定结束、提问和权限确认,分别确认桌面通知。

这套方案针对 Windows、PowerShell 7 与 Pi 0.85.0。配置片段需要合并进现有文件,不能直接覆盖;不同版本的 Pi 或插件可能改变字段和行为。原帖也明确指出,PowerShell 本身仍可写文件、safeSubcommands 不是绝对只读边界、doctor 可能迁移配置,多会话共享全局配置时还存在相互影响。

原作者:xk128
原帖:https://linux.do/t/topic/2860399