Pi 编码代理使用教程:从交互界面到 CLI 实战

本教程基于 Pi 官方文档 Using Pi 整理,覆盖日常使用的全部细节:交互界面、斜杠命令、消息队列、会话管理、上下文文件、项目信任机制,以及完整的 CLI 参考。

Pi 是一个刻意做小的编码代理(coding agent):核心只提供读写文件、执行命令、会话管理等基础能力,把 MCP、子代理、权限弹窗、计划模式这些"大代理"功能全部留给扩展和技能生态。这篇教程按"先上手、再进阶、后进阶"的顺序,帮你把它的日常用法一次讲透。


1. 交互界面速览

直接运行 pi 即进入交互模式。界面分为四个区域:

区域内容
启动头部快捷键、已加载的上下文文件、提示词模板、技能与扩展
消息区用户消息、模型回复、工具调用与结果、通知与错误
编辑器你输入内容的地方;边框颜色表示当前思考等级(thinking level)
底部状态栏工作目录、会话名、token/缓存用量、花费、上下文占用、当前模型

编辑器还可以被内置 UI(如 /settings)或自定义扩展 UI 临时替换。

编辑器高频技巧

功能操作
引用文件输入 @ 模糊搜索项目文件
路径补全按 Tab
多行输入Shift+Enter(Windows Terminal 用 Ctrl+Enter)
复制回复Ctrl+X:在 /tree 中复制选中消息;否则复制最后一条助手回复
粘贴图片Ctrl+V(Windows 用 Alt+V)或直接拖入终端
执行 shell 命令!command —— 执行并把输出发给模型
静默执行 shell 命令!!command —— 执行但不发给模型
外部编辑器Ctrl+G 打开 externalEditor / $VISUAL / $EDITOR

一个非常实用的组合是 ! 前缀:比如 !git status,模型能直接"看到"命令输出并接着分析,省去复制粘贴。


2. 斜杠命令

输入 / 打开命令补全。扩展可以注册自定义命令,技能以 /skill:name 形式调用,提示词模板通过 /templatename 展开。常用命令如下:

会话类

命令说明
/resume从历史会话中选择恢复
/new开新会话
/name <name>设置会话显示名
/session查看会话文件、ID、消息数、token 与花费
/tree跳转会话中任意节点,从那里继续
/fork从之前某条用户消息分叉出新会话
/clone把当前活跃分支复制为新会话
/compact [prompt]手动压缩上下文,可附自定义指令

模型与配置类

命令说明
/login / /logout管理 OAuth 或 API key 凭据
/model切换模型;在选择器里按 Ctrl+S 保存为启动默认值
/thinking切换思考等级;同样支持 Ctrl+S 保存默认
/scoped-models配置 Ctrl+P 循环切换的模型集合
/llama下载/加载/卸载 llama.cpp 路由模型(本地模型)
/settings主题、消息投递、传输等偏好
/trust保存当前项目的信任决定
/reload重载按键绑定、扩展、技能、模板、主题、上下文文件

导出与反馈类

命令说明
/copy复制最后一条助手回复到剪贴板
/export [file]导出为 HTML 或 JSONL
/share上传为私有 GitHub gist,得到可分享的 HTML 链接
/bug [描述]向 Pi 开发者报告 bug
/hotkeys / /changelog / /quit快捷键总览 / 版本历史 / 退出

其中 /tree 是 Pi 的特色:会话在文件里是一棵消息树,你可以回到任何一个历史节点继续对话,还能对放弃的分支做摘要总结。


3. 消息队列:边跑边说

Pi 允许在代理还在干活时继续提交消息:

  • Enter —— 发送"转向消息"(steering),在当前这轮助手工具调用执行完后立即投递;
  • Alt+Enter —— 发送"追加消息"(follow-up),等代理完成全部工作后再投递;
  • Escape —— 中止并把排队中的消息退回编辑器;
  • Alt+Up —— 把排队消息取回编辑器。

投递行为可在 /settings 里通过 steeringModefollowUpMode 配置。注意 Windows Terminal 默认把 Alt+Enter 绑定为全屏,需要按官方 terminal-setup 文档重新映射。

实际体验:代理在跑长任务时,你发现方向偏了,直接 Enter 敲一句"注意别动测试文件",它会在当前工具调用结束后收到并调整——这就是 steering 的价值。


4. 会话管理

会话自动保存到 ~/.pi/agent/sessions/,按工作目录归档。

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

配合 /session/tree/fork/clone/compact,可以完整掌控会话生命周期:

  • 上下文快满了?/compact 把旧消息摘要压缩,腾出窗口;
  • 想试另一条思路?/fork 从早期某条消息分叉,主线不受影响;
  • 想把成果留档?/export 导出 HTML,或 /share 生成可分享链接(开源研究还可以用 badlogic/pi-share-hf 发布到 Hugging Face datasets)。

5. 上下文文件(AGENTS.md)

Pi 启动时按以下层级加载 AGENTS.mdCLAUDE.md

  1. 全局~/.pi/agent/AGENTS.md
  2. 父目录:从当前目录逐级向上查找
  3. 当前目录

若某目录中存在 AGENTS.override.md,该目录只加载它(取代 AGENTS.md/CLAUDE.md),其他目录仍正常分层。

用途:项目约定、常用命令、安全规则、个人偏好都写在这里。用 --no-context-files(或 -nc)可以禁用加载。

自定义系统提示词

  • 项目级:.pi/SYSTEM.md
  • 全局:~/.pi/agent/SYSTEM.md

不想整体替换、只想追加?在任一位置放 APPEND_SYSTEM.md 即可。


6. 项目信任机制

首次进入一个包含项目级配置/资源/.agents/skills 且没有信任记录的目录时,Pi 会询问是否信任该项目。信任后才允许:

  • 加载 .pi/settings.json.pi 资源;
  • 安装缺失的项目包;
  • 执行项目扩展。

信任前的启动只加载上下文文件、用户/全局扩展和 CLI -e 扩展(以便它们能处理 project_trust 事件)。这条规则在切换到不同 cwd 的会话时同样生效。

几个要点:

  • 非交互模式(-p--mode json--mode rpc)不会弹窗询问,按 ~/.pi/agent/settings.json 里的 defaultProjectTrustask/always/never,默认 ask)处理;也可用 --approve/-a--no-approve/-na 单次覆盖。
  • pi config 与包命令走同样的信任流程;pi update 从不询问。
  • /trust 写入 ~/.pi/agent/trust.json,但当前会话不会重载,需要重启 pi 生效。

7. CLI 完整参考

pi [options] [--] [@files...] [messages...]

包管理

pi install <source> [-l]     # 安装包,-l 为项目级
pi remove <source> [-l]      # 移除
pi update [source|self|pi]   # 更新 pi 或某个包
pi update --all              # 更新 pi + 全部包
pi list                      # 列出已安装包
pi config                    # 启用/禁用包资源

运行模式

参数说明
默认交互模式
-p, --print打印回复后退出
--mode json所有事件以 JSON lines 输出(适合脚本对接)
--mode rpc基于 stdin/stdout 的 RPC 模式
--export <in> [out]导出会话为 HTML

打印模式还会读取管道 stdin 并合并进初始提示词:

cat README.md | pi -p "Summarize this text"

模型选项

选项说明
--provider <name>供应商,如 anthropicopenaigoogle
--model <pattern>模型名或 ID,支持 provider/id:thinking 后缀
--api-key <key>覆盖环境变量的 API key
--thinking <level>off/minimal/low/medium/high/xhigh/max
--models <patterns>Ctrl+P 循环切换的模型模式串
--list-models [search]列出可用模型

工具选项

选项说明
--tools <list> / -t只允许指定工具
--exclude-tools <list> / -xt禁用指定工具
--no-builtin-tools / -nbt禁用内置工具,保留扩展工具
--no-tools / -nt全部禁用

内置工具:readbashpowershell(Windows)、editwritegrepfindls

资源选项

选项说明
-e, --extension <source>加载扩展(路径/npm/git),可重复
--no-extensions禁用扩展发现
--skill <path>加载技能,可重复
--no-skills禁用技能发现
--prompt-template <path>加载提示词模板,可重复
--theme <path>加载主题,可重复
--no-context-files, -nc禁用 AGENTS.md/CLAUDE.md 发现

组合 --no-* + 显式加载,可以精确控制加载内容:

pi --no-extensions -e ./my-extension.ts

文件参数

@ 前缀把文件并入消息:

pi @prompt.md "Answer this"
pi -p @screenshot.png "What's in this image?"
pi @code.ts @test.ts "Review these files"

常用示例

# 交互模式带初始提示
pi "List all .ts files in src/"

# 非交互
pi -p "Summarize this codebase"

# 以破折号开头的提示词
pi -p -- "- Summarize these points"

# 管道输入
cat README.md | pi -p "Summarize this text"

# 命名的一次性会话
pi --name "release audit" -p "Audit this repository"

# 指定供应商与模型
pi --provider openai --model gpt-4o "Help me refactor"
pi --model openai/gpt-4o "Help me refactor"

# 模型 + 思考等级简写
pi --model sonnet:high "Solve this complex problem"

# 限制 Ctrl+P 切换范围
pi --models "claude-*,gpt-4o"

# 只读模式(代码审查很合适)
pi --tools read,grep,find,ls -p "Review the code"

# 只禁用某一个工具
pi --exclude-tools ask_question

其他常用参数:--system-prompt 替换默认系统提示词(上下文文件和技能仍会追加)、--append-system-prompt 追加、--tui-mode regular|fullscreen 切换 TUI 模式、--use-theme 单次指定主题、-a/-na 单次控制项目信任、-h/-v 查看帮助与版本。

关于 fullscreen 模式:消息流在终端视口内滚动,队列消息、工作状态、编辑器、底部栏固定在底部;支持 Kitty 图形协议的终端(Kitty、Ghostty)可显示内联图片,iTerm2 会退化为文本占位符。regular 模式则使用终端自带回滚。


8. 设计哲学

Pi 的原则是核心做小,把工作流行为推给扩展、技能、提示词模板和包。它刻意不内置:

  • MCP
  • 子代理(sub-agents)
  • 权限弹窗
  • 计划模式(plan mode)
  • 待办列表(to-dos)
  • background bash

这些都可以作为扩展/包自己装,或者干脆用容器、tmux 等外部工具解决。完整的设计动机见作者 Mario Zechner 的博客文章


小结

一句话上手路径:

  1. pi 进交互模式,用 @ 引用文件、! 跑命令;
  2. /model/thinking 选好模型和思考等级,Ctrl+S 存默认;
  3. 项目根放 AGENTS.md 写约定,首次进入时信任项目;
  4. 长任务用消息队列(Enter 转向、Alt+Enter 追加);
  5. 会话自动保存,pi -c 续上,/tree 回溯,/compact 压缩;
  6. 脚本化用 pi -p + 管道,或 --mode json
  7. 不够用的能力,装扩展或技能,而不是等官方内置。

官网教程链接:https://pi.dev/docs/latest/usage

标签: none

添加新评论