Skip to content

Add Pi (earendil-works pi-coding-agent) adapter for skill scanning #13

Description

@TW-Hue

背景

Pi(@earendil-works/pi-coding-agent,简称 pi)是一个流行的本地 AI 编码代理。它实现了 Agent Skills 标准,技能结构与 Claude Code 完全兼容(目录 + SKILL.md,YAML frontmatter 含 name/description),因此可以直接复用现有的 scanSkillDir

目前 skm 支持 claude / codex / cursor / gemini / workbuddy / kimi,但没有 pi。许多用户同时使用 pi 与 Claude Code / Codex,pi 的技能积累同样面临"装了什么、有没有重复、来源在哪"的问题,值得纳入 skm 治理。

技能目录约定(来自 pi 官方文档 docs/skills.md)

用户级:

  • ~/.pi/agent/skills/(pi 默认内置技能库)
  • ~/.pi/skills/(用户技能)
  • ~/.agents/skills/(跨工具共享目录 —— Kimi 适配器已覆盖此路径)

项目级: .pi/skills/.agents/skills/(在 cwd 及祖先目录递归查找,直到 git 仓库根或文件系统根)

自定义: ~/.pi/agent/settings.json 中的 skills 数组可追加任意技能目录(文件或目录均可),例如用户可把 ~/.claude/skills 加进去。

建议实现

  1. 新增 src/adapters/pi.js,模式参考 kimi.js
    • 用户级:~/.pi/agent/skills~/.pi/skills~/.agents/skills(后者去重,避免与 Kimi 适配器重复计数)
    • 项目级:沿 cwd 祖先链找 .pi/skills.agents/skills
    • 解析 ~/.pi/agent/settings.jsonskills 数组,追加自定义目录
  2. src/paths.js 增加对应常量。
  3. 复用 scanSkillDir 扫描 SKILL.md(frontmatter 解析、安全审计、归档计数全部直接可用)。

与 Claude Code 的差异点(需要适配)

  1. 根级 .md 文件也算技能:在 ~/.pi/agent/skills/~/.pi/skills/ 下,直接放在根目录的 .md 文件(非 SKILL.md)只要含有效技能 frontmatter 且 description 非空,也会被 pi 当作独立技能加载。scanSkillDir 目前只处理子目录,需要补充对根级 .md 的扫描。
  2. 技能名可与目录名不同:pi 允许 skill 的 name 与父目录不一致(Agent Skills 标准不允许,但 pi 宽松实现,官方说明这是为跨工具共享技能目录优化)。合并去重逻辑需注意这一点。
  3. 嵌套技能目录~/.pi/agent/skills/ 下允许嵌套分组(如 my-skills/ 内再放多个技能),子目录含 SKILL.md 会被递归发现。而 ~/.agents/skills/ 中根级 .md 会被忽略、嵌套分组目录中的 .md 才会被发现 —— 两个目录的规则略有不同。

MCP

Pi 官方不原生支持 MCP(README 明确"No MCP",通过扩展机制可选支持),因此 pi 适配器只需扫描 skills,无需处理 MCP

参考

  • pi 文档:docs/skills.md(技能加载规则)、docs/settings.md(settings.json)
  • 共享目录 ~/.agents/skills 已被 kimi.js 适配器支持,注意跨适配器去重
  • 用户场景示例:~/.pi/agent/skills/ 下有 13+ 技能(含 my-skills 子目录 5 个个人技能),~/.pi/skills/~/.claude/skills/ 存在同名重复安装(smart-ocr、teach),正是 skm 擅长发现的重复问题

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions