PiPi
快速开始
使用 Pi
  • 简体中文
  • English
快速开始
使用 Pi
  • 简体中文
  • English
  • 从这里开始

    • 快速开始
    • 使用 Pi
    • 提供商
    • 安全
    • 容器化
    • 设置
    • 键位绑定
    • 会话
    • 压缩与分支总结
  • 自定义

    • 扩展
    • 技能
    • 提示词模板
    • 主题
    • Pi 包
    • 自定义模型
    • 自定义提供商
  • 参考

    • 会话文件格式
  • 编程式使用

    • SDK
    • RPC 模式
    • JSON 事件流模式
    • TUI 组件
  • 平台设置

    • Windows 设置
    • Termux(Android)设置
    • tmux 设置
    • 终端设置
    • Shell 别名
  • 开发

    • 开发

Pi 可以帮助你创建 Pi 包。让它打包你的扩展、技能、提示模板或主题。

Pi 包

Pi 包会打包扩展、技能、提示模板和主题,以便你通过 npm 或 git 分享它们。包可以在 package.json 的 pi 键下声明资源,也可以使用约定目录。

目录

  • 安装和管理
  • 包来源
  • 创建 Pi 包
  • 包结构
  • 依赖
  • 包过滤
  • 启用和禁用资源
  • 作用域和去重

安装和管理

安全性: Pi 包会以完整系统访问权限运行。扩展会执行任意代码,技能可以指示模型执行任何操作,包括运行可执行文件。安装第三方包前请先审查源代码。

pi install npm:@foo/bar@1.0.0
pi install git:github.com/user/repo@v1
pi install https://github.com/user/repo  # 原始 URL 也可用
pi install /absolute/path/to/package
pi install ./relative/path/to/package

pi remove npm:@foo/bar
pi list                     # 显示设置中已安装的包
pi update                   # 仅更新 pi
pi update --all             # 更新 pi、更新包,并协调固定的 git ref
pi update --extensions      # 仅更新包并协调固定的 git ref
pi update --self            # 仅更新 pi
pi update --self --force    # 即使当前已安装也重新安装 pi
pi update npm:@foo/bar      # 更新单个包
pi update --extension npm:@foo/bar

这些命令用于管理 Pi 包,pi update 可以更新 Pi CLI 安装。要卸载 Pi 本身,请参阅 快速开始。

默认情况下,install 和 remove 会写入用户设置(~/.pi/agent/settings.json)。使用 -l 可改为写入项目设置(.pi/settings.json)。项目设置可以与团队共享,并且在项目受信任后,Pi 会在启动时自动安装任何缺失的包。

如果想在不安装的情况下试用某个包,请使用 --extension 或 -e。这只会为当前运行安装到临时目录:

pi -e npm:@foo/bar
pi -e git:github.com/user/repo

包来源

Pi 在设置和 pi install 中接受三种来源类型。

npm

npm:@scope/pkg@1.2.3
npm:pkg
  • 带版本的规范会被固定,并且包更新(pi update --extensions、pi update --all)会跳过它们。
  • 用户安装位于 ~/.pi/agent/npm/ 下。
  • 项目安装位于 .pi/npm/ 下。
  • 在 settings.json 中设置 npmCommand,可将 npm 包查找和安装操作固定到特定包装命令,例如 mise 或 asdf。

示例:

{
  "npmCommand": ["mise", "exec", "node@20", "--", "npm"]
}

git

git:github.com/user/repo@v1
git:git@github.com:user/repo@v1
https://github.com/user/repo@v1
ssh://git@github.com/user/repo@v1
  • 没有 git: 前缀时,只接受协议 URL(https://、http://、ssh://、git://)。
  • 有 git: 前缀时,接受简写格式,包括 github.com/user/repo 和 git@github.com:user/repo。
  • HTTPS 和 SSH URL 都受支持。
  • SSH URL 会自动使用你配置的 SSH 密钥(遵循 ~/.ssh/config)。
  • 对于非交互式运行(例如 CI),你可以设置 GIT_TERMINAL_PROMPT=0 来禁用凭据提示,并设置 GIT_SSH_COMMAND(例如 ssh -o BatchMode=yes -o ConnectTimeout=5)以快速失败。
  • refs 是固定的标签或提交。pi update --extensions 和 pi update --all 不会将它们移动到更新的 refs,但会将现有克隆协调到配置的 ref。
  • 使用 pi install git:host/user/repo@new-ref 更新设置,并将现有包移动到新的固定 ref。
  • 克隆到 ~/.pi/agent/git/<host>/<path>(全局)或 .pi/git/<host>/<path>(项目)。
  • 当协调过程改变 checkout 时,Pi 会重置并清理克隆,然后在存在 package.json 时运行 npm install。

SSH 示例:

# git@host:path 简写(需要 git: 前缀)
pi install git:git@github.com:user/repo

# ssh:// 协议格式
pi install ssh://git@github.com/user/repo

# 带版本 ref
pi install git:git@github.com:user/repo@v1.0.0

本地路径

/absolute/path/to/package
./relative/path/to/package

本地路径指向磁盘上的文件或目录,并会在不复制的情况下添加到设置中。相对路径会相对于它们所在的设置文件解析。如果路径是文件,它会作为单个扩展加载。如果路径是目录,Pi 会使用包规则加载资源。

创建 Pi 包

向 package.json 添加 pi 清单,或使用约定目录。包含 pi-package 关键字以便被发现。

{
  "name": "my-package",
  "keywords": ["pi-package"],
  "pi": {
    "extensions": ["./extensions"],
    "skills": ["./skills"],
    "prompts": ["./prompts"],
    "themes": ["./themes"]
  }
}

路径相对于包根目录。数组支持 glob 模式和 !exclusions。

图库元数据

包图库 会显示标记有 pi-package 的包。添加 video 或 image 字段以显示预览:

{
  "name": "my-package",
  "keywords": ["pi-package"],
  "pi": {
    "extensions": ["./extensions"],
    "video": "https://example.com/demo.mp4",
    "image": "https://example.com/screenshot.png"
  }
}
  • video:仅支持 MP4。在桌面端,悬停时自动播放。点击会打开全屏播放器。
  • image:PNG、JPEG、GIF 或 WebP。显示为静态预览。

如果两者都已设置,video 优先。

包结构

约定目录

如果不存在 pi 清单,Pi 会从这些目录自动发现资源:

  • extensions/ 加载 .ts 和 .js 文件
  • skills/ 递归查找 SKILL.md 文件夹,并将顶层 .md 文件作为技能加载
  • prompts/ 加载 .md 文件
  • themes/ 加载 .json 文件

依赖

第三方运行时依赖应放在 package.json 的 dependencies 中。不注册扩展、技能、提示模板或主题的依赖也应放在 dependencies 中。当 Pi 从 npm 或 git 安装包时,它会运行 npm install,因此这些依赖会自动安装。

Pi 为扩展和技能捆绑核心包。如果你导入其中任何一个,请在 peerDependencies 中使用 "*" 范围列出它们,并且不要捆绑它们:@earendil-works/pi-ai、@earendil-works/pi-agent-core、@earendil-works/pi-coding-agent、@earendil-works/pi-tui、typebox。

其他 Pi 包必须捆绑在你的 tarball 中。将它们添加到 dependencies 和 bundledDependencies,然后通过 node_modules/ 路径引用它们的资源。Pi 使用独立的模块根加载包,因此单独安装不会冲突或共享模块。

示例:

{
  "dependencies": {
    "shitty-extensions": "^1.0.1"
  },
  "bundledDependencies": ["shitty-extensions"],
  "pi": {
    "extensions": ["extensions", "node_modules/shitty-extensions/extensions"],
    "skills": ["skills", "node_modules/shitty-extensions/skills"]
  }
}

包过滤

使用设置中的对象形式过滤包加载的内容:

{
  "packages": [
    "npm:simple-pkg",
    {
      "source": "npm:my-package",
      "extensions": ["extensions/*.ts", "!extensions/legacy.ts"],
      "skills": [],
      "prompts": ["prompts/review.md"],
      "themes": ["+themes/legacy.json"]
    }
  ]
}

+path 和 -path 是相对于包根目录的精确路径。

  • 省略某个键会加载该类型的全部内容。
  • 使用 [] 会不加载该类型的任何内容。
  • !pattern 会排除匹配项。
  • +path 强制包含精确路径。
  • -path 强制排除精确路径。
  • 过滤器叠加在清单之上。它们会缩小已允许内容的范围。

启用和禁用资源

使用 pi config 启用或禁用来自已安装包和本地目录的扩展、技能、提示模板和主题。全局(~/.pi/agent)和项目(.pi/)作用域均适用。

作用域和去重

包可以同时出现在全局和项目设置中。如果同一个包同时出现在两者中,项目条目优先。身份由以下内容确定:

  • npm:包名
  • git:不含 ref 的仓库 URL
  • local:解析后的绝对路径
最近更新:: 2026/7/6 09:32
Contributors: seepine
Prev
主题
Next
自定义模型