一键导入
add-provider-models-to-pi
往 pi 的 models.json 新增/适配 provider 模型,含取参、思考三层合成、capture.ts 实测验证与固定。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
往 pi 的 models.json 新增/适配 provider 模型,含取参、思考三层合成、capture.ts 实测验证与固定。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
将所有机器上的 Pi 和 OMP 会话整理成主题聚合的结构化日报,可选写入 Obsidian 工作日志。
按需求从 npm pi-package 生态检索符合的 Pi Agent 扩展/技能/主题/prompt 包,采集 npm 元数据与 GitHub 信号,质量评估后整理成表格。与 pi-trending 互补(后者做热度发现)。
Free up disk space on Arch Linux WSL through layered cleanup: cache purge, orphan removal, package audit, and large file scanning. Use whenever the user mentions disk space, cleanup, storage, package review, or wants to shrink their WSL footprint — even if they just say "空间不够", "磁盘满了", "WSL 太大了", or "clean up my system". Prefer this skill over ad-hoc cleanup commands on Arch WSL.
Search and rewrite code by AST structure across 25 languages with ast-grep (sg). Use when the task is structural - find function calls shaped like X, rewrite console.log to logger.info, find all `as any`, migrate require() to import, find empty catch blocks, missing await, codemod a class hierarchy, scan project against YAML rules. Preferred over grep when the user mentions code SHAPE or needs deterministic refactoring across many files. Triggers: 'ast-grep', 'sg', 'ast grep', 'astgrep', 'find all functions that', 'find every call to', 'codemod', 'structural search', 'pattern match code', 'replace pattern across files', 'rename function everywhere', 'find usages of pattern', 'apply this transformation to all', 'migrate X to Y'.
Audit installed Hermes Agent skills for usage frequency and generates an interactive XLSX with Chinese descriptions, dropdown decision columns, and color-coded recommendations. Supports apply mode: reads decisions from XLSX and executes cleanup (delete/disable/enable) after user confirmation, with automatic backup. Smart filtering: already-disabled skills are not re-suggested for cleanup. Uses hermes internal API for authoritative skill classification (builtin/hub/local/external). Use when the user asks about Hermes skill usage statistics, wants to clean up unused Hermes skills, needs to disable low-usage skills, or mentions "技能审计", "清理技能", "不用的技能", "哪些技能可以删", "技能热度", "技能使用频率", "audit hermes skills". This skill is specific to Hermes Agent — do not use for other agents. Make sure to load this skill whenever Hermes skill management, cleanup, or usage analysis is mentioned.
Automate chezmoi dotfiles sync — fetch remote, pull changes, detect chezmoi-level changes (source vs home), smart re-add, commit, and push. Use whenever the user wants to sync dotfiles, says "同步", "chezmoi sync", "提交 dotfiles", "备份配置", wants to record home changes into the dotfiles repo, or is about to run chezmoi git commands manually.
| name | add-provider-models-to-pi |
| disable-model-invocation | true |
| description | 往 pi 的 models.json 新增/适配 provider 模型,含取参、思考三层合成、capture.ts 实测验证与固定。 |
把"往 pi 的 models.json 加模型"这件带判断的操作固化成可复用的执行规程。
对应 provider(leading word):模型实际被托管/调用的 provider,以其 baseUrl/api 为准——不是模型的厂商。例:火山方舟(ark.cn-beijing.volces.com)托管了 MiniMax/Kimi,但 models.dev 里只有 minimax.io/kimi.com 厂商端点。参数必须取自对应 provider,否则 API 格式/窗口会错。
/home/cnife/.pi/agent/models.json 中已存在的 provider key,或用户要新建并命名。minimax-m3、kimi-k2.7-code)。baseUrl + api。api/baseUrl 与之相同的 provider:命中则取参;未命中(如方舟)则回退抓该对应 provider的官方 API 文档(web)。按目标 provider 的 api 类型查 api-adapters.md 对应节,确认该 api 的 compat 字段集、思考参数机制、off 语义、maxTokens 字段名、缓存与 tool 格式(per-api 事实依据)。
id:用用户给的 id;与源确认是端点实际接受的模型名(方舟支持全小写,也接受控制台原名)。name:显示名。reasoning:来自源。thinkingLevelMap:见第 4 步三层合成。input:pi schema 仅接受 text/image;源的 video 等丢弃。contextWindow / maxTokens:以对应 provider官方文档为准;与 models.dev 冲突时取官方文档(如方舟 M3 为 512k 而非目录 1M)。cost:源有按 token 计价填;订阅/套餐制(如 Coding Plan)省略(pi 默认 0)。api 类型查 api-adapters.md 对应节的「思考参数机制」「off 语义」(pi 如何把 thinkingLevelMap/compat 翻译成实际请求参数);源码指针亦在该文件。reasoning 否?toggle?分级?常开?)。thinkingLevelMap):null 表示该档位不支持(pi 不展示、不可选),非 null 字符串表示支持且 pi 实际发送该端点值。off 行为因 api 而异(completions 多数 thinkingFormat 发显式关闭信号、responses 发 explicit effort、anthropic 不发参数)--具体见 api-adapters.md 的「off 语义」,勿假设"off=不发"。off 映射非 null(如 "none")= 支持关闭(pi 可选 off 档,具体发送行为见 api-adapters.md);off->null = 不支持关闭。其余档位按模型实际支持情况映射成端点接受的 effort/toggle 字符串,不支持者置 null。同 provider 已有模型仅作交叉校验,不盲抄。off/minimal/low/medium/high/xhigh/max 的映射值;null=不支持,非 null 字符串=支持且为端点接受值;Layer1 已查 api-adapters.md 对应节(不可凭记忆跳过),off 语义已确认(支持关闭->非 null,不支持关闭->null)。跑完取参+适配,产出 brief 再让用户确认一次,确认后才写入:
models.json 写入且 jq empty 校验通过。验证阶段(步骤 6–9):测试-抓取-循环-固定--写入配置后立即验证,用 capture.ts 扩展抓取 pi 实际发送的请求和响应,通过 ≤3 轮测试-改进循环收敛到正确配置,最终固定。
前提:步骤 5 已写入 models.json 且 jq empty 通过;capture.ts 位于技能 scripts/capture.ts。
用 pi --extension 临时加载 capture.ts,执行一个 agentic 任务(多轮工具调用),
一次性覆盖四个调试维度:
PI_CAPTURE_LOG=/tmp/pi-verify-<provider>.jsonl \
pi --extension <skill-dir>/scripts/capture.ts \
--print --model <provider>/<model> \
'用 bash 工具列出 /tmp 目录下的前 5 个文件名,然后告诉我一共多少个'
<skill-dir> 替换为本技能实际路径(fd add-provider-models-to-pi 定位)。--print(非交互模式),事件自动触发。PI_CAPTURE_LOG 指定路径(默认 /tmp/pi-capture.jsonl),格式为 JSONL(一行一个聚合 CALL 块)。读取 JSONL 日志,用 jq 按 CALL 块分析四维度(每行一个聚合块:assistant 含 request.payload/responses/message,user/toolResult 为精简块 callIndex=null):
| 维度 | jq 证据(JSONL 字段) |
|---|---|
| 基础链路 | .responses[].status=200;.message.stopReason 非 error |
| 思考参数 | .request.payload 含 reasoning/thinking/reasoning_effort;.message.content.thinkingBlocks>0 |
| tool 格式 | .request.payload.tools 非空;.message.stopReason=toolUse + .message.content.toolCalls 非空 |
| 缓存 | assistant 块第 2+ 个 .message.usage.cacheRead>0 |
L=/tmp/pi-verify-<provider>.jsonl
# 基础链路
jq -c 'select(.role=="assistant") | {callIndex, status: .responses[0].status, stopReason: .message.stopReason, errorMessage: .message.errorMessage}' "$L"
# 思考参数(请求侧字段 + 响应侧 thinkingBlocks)
jq -c 'select(.role=="assistant") | {callIndex, reasoning: .request.payload.reasoning, thinking: .request.payload.thinking, reasoningEffort: .request.payload.reasoning_effort, thinkingBlocks: .message.content.thinkingBlocks}' "$L"
# tool 格式
jq -c 'select(.role=="assistant") | {callIndex, toolCount: (.request.payload.tools // [] | length), stopReason: .message.stopReason, toolCalls: .message.content.toolCalls}' "$L"
# 缓存
jq -c 'select(.role=="assistant") | {callIndex, cacheRead: .message.usage.cacheRead, cacheWrite: .message.usage.cacheWrite}' "$L"
注意事项:
before_provider_headers 事件拿不到 Authorization--pi 在事件返回后才注入 auth。调试 API key 靠"跑通与否"判断。callIndex=null(无 provider 请求),分析时用 select(.role=="assistant") 过滤。如果步骤 7 发现配置问题,进入改进循环:
git diff models.json 还原。models.json 配置:
thinkingLevelMap 档位映射错 → 调整第 4 步得出的映射。compat 推断不对 → 显式设置 compat 字段覆盖自动推断。PI_CAPTURE_LOG 覆盖旧日志,确认问题已解决。models.json。一轮定义:一次 pi --extension capture.ts --print 运行 + 日志分析。
同轮内多次运行(修复后重测)仍算同一轮。
配置验证通过后固定最终结果:
models.json 未引用 capture.ts(无 --extension 依赖)。jq empty /home/cnife/.pi/agent/models.json 确保 JSON 有效。pi --list-models 2>&1 | grep <provider> 确认新模型可见。rm -f /tmp/pi-verify-<provider>.jsonl。