一键导入
pi-skill-publish
Reusable workflow for packaging a Pi extension/skill for public release, publishing to GitHub + npm, and submitting to community platforms.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Reusable workflow for packaging a Pi extension/skill for public release, publishing to GitHub + npm, and submitting to community platforms.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | pi-skill-publish |
| description | Reusable workflow for packaging a Pi extension/skill for public release, publishing to GitHub + npm, and submitting to community platforms. |
Reusable workflow for packaging a Pi extension/skill for public release, publishing to GitHub + npm, and submitting to community platforms.
Trigger on: "publish this skill", "release this package", "make this public", "submit to community", "publish to npm", "share this extension", "package for release".
Check the project root for required files:
| File | Required | Check |
|---|---|---|
package.json | ✅ | Must have name, version, description, "keywords": ["pi-package"], license, repository.url, "pi": { "extensions": [...] } |
README.md | ✅ | Must exist and include: feature list, install command, usage, screenshot/preview |
LICENSE | ✅ | Must exist (MIT recommended for Pi ecosystem) |
index.ts or extension entry | ✅ | Must match pi.extensions path in package.json |
.gitignore | ⚠️ | Recommended: node_modules/, *.log, .DS_Store |
CHANGELOG.md | ⚠️ | Recommended for releases after v0.1.0 |
Validation actions:
package.json and verify all required fields"keywords" doesn't include "pi-package", add it (required for pi.dev/packages discovery)repository.url points to the correct GitHub URL## Installation section with pi install commandReport any issues before proceeding. Fix automatically if confidence ≥ 90%.
Ensure the README contains these sections in order:
# {emoji} {package-name}
> One-line description
 ← screenshot/preview image
## ✨ Features ← bullet list of capabilities
## 📦 Installation ← pi install command + manual settings.json
## 🚀 Usage ← slash command + keyboard shortcuts
## 🔍 How it works ← technical details (optional but recommended)
## ⚙️ Configuration ← customization options (if any)
## 🤝 Contributing ← PR welcome note
## 📄 License ← license + author link
Screenshot handling:
preview.png after the tagline in READMEhttps://raw.githubusercontent.com/{owner}/{repo}/{branch}/preview.png) is used for external embeds# 1. Stage and commit any changes from Steps 1-2
cd {project_root}
git add -A
git commit -m "docs: prepare for public release v{version}"
# 2. Create public GitHub repo (if not exists)
gh repo create {owner}/{repo} \
--public \
--source=. \
--remote=origin \
--description="{description}" \
--push
# 3. Tag and create release
git tag v{version}
git push origin v{version}
gh release create v{version} \
--title "v{version} — {release_title}" \
--notes "{release_notes}"
npm publish is the primary gateway to:
pi-package keyword)# Check npm auth
npm whoami
# If not logged in:
npm login
# or: npm adduser
# Publish (public, unscoped)
npm publish --access public
If user is not logged into npm: Flag it as a manual follow-up action. Do NOT block the rest of the workflow on npm auth.
Always dual-publish to GitHub Packages so the package appears on Ben's GitHub profile Packages tab. This runs immediately after Step 4.
cd {project_root}
$GH_TOKEN = gh auth token
# Temp .npmrc for GitHub Packages auth
"@cymatistatic:registry=https://npm.pkg.github.com`n//npm.pkg.github.com/:_authToken=$GH_TOKEN" | Set-Content .npmrc
# Temporarily scope the package name
node -e "const fs=require('fs'); const p=JSON.parse(fs.readFileSync('package.json','utf8')); fs.writeFileSync('package.json.bak',JSON.stringify(p,null,2)); p.name='@cymatistatic/'+p.name.replace('@cymatistatic/',''); p.publishConfig={registry:'https://npm.pkg.github.com'}; fs.writeFileSync('package.json',JSON.stringify(p,null,2));"
# Publish to GitHub Packages
npm publish
# Restore original package.json and clean up
mv package.json.bak package.json
rm .npmrc
Requires: gh auth must have write:packages scope.
If missing: gh auth refresh -h github.com -s write:packages
Verify: gh api user/packages?package_type=npm --jq '.[].name'
Execute all applicable submissions:
Create a showcase post in the General category:
gh api graphql -f query='mutation {
createDiscussion(input: {
repositoryId: "R_kgDOPbFNkw",
categoryId: "DIC_kwDOPbFNk84Cz0vb",
title: "{emoji} {package-name} — {short_description}",
body: "{discussion_body}"
}) { discussion { url } }
}'
Discussion body template:
## {package-name}
{one-paragraph description}

### Features
{bullet list}
### Install
\```
pi install {owner}/{repo}
\```
Or add to `~/.pi/agent/settings.json`:
\```json
"packages": ["github:{owner}/{repo}"]
\```
Then type `/{command}` in any Pi session.
**Repo:** https://github.com/{owner}/{repo}
**License:** {license}
The awesome-pi-coding-agent list
auto-discovers npm packages with the pi-package keyword daily. If the package is
published to npm, it will appear automatically — no PR needed.
If NOT on npm, open a PR to add a manual entry:
gh repo fork shaftoe/awesome-pi-coding-agent --clone
# Add entry to README.md under ## Extensions section
# Follow the table format: | Health | Name | Description | Popularity | Updated |
gh pr create --title "Add {package-name}" --body "..."
r/PiCodingAgent post:
🎴 pi-skill-deck — categorized skill browser with bookmarks & frecency
Replaces the flat skill list with a two-pane TUI. Features:
- Categories, search, bookmarks (Ctrl+B), Top 10, daily suggestions
- Scans all standard skill locations automatically
Install: `pi install {owner}/{repo}`
Repo: https://github.com/{owner}/{repo}
Twitter/X post:
🎴 Just shipped {package-name} for @PiCodingAgent
{one-line pitch}
pi install {owner}/{repo}
{screenshot_url}
[PUBLISH REPORT]
Package: {package-name} v{version}
GitHub: https://github.com/{owner}/{repo} ✅
Release: v{version} ✅
npm: {published | ⚠️ needs npm login}
Discussion: {url} ✅
Awesome PR: {url | skipped (not on npm)}
Reddit: {posted | template ready}
Follow-up:
- [ ] npm login + npm publish (for pi.dev/packages auto-discovery)
- [ ] Post to Reddit/X/Discord
| Platform | URL | How to submit |
|---|---|---|
| pi.dev/packages | https://pi.dev/packages | Auto-discovered from npm (pi-package keyword) |
| awesome-pi-coding-agent | https://github.com/shaftoe/awesome-pi-coding-agent | Auto from npm; manual PR for GitHub-only |
| Pi Discussions | https://github.com/earendil-works/pi/discussions | Create discussion (General category) |
| skills.sh | https://skills.sh | npx skills publish (for SKILL.md-based skills) |
| r/PiCodingAgent | Post with template | |
| X / Twitter | — | Post with screenshot |
| Discord | Pi community server | Share in #showcase or #extensions |
pi-package keyword in package.json is critical — it's how pi.dev/packages auto-discovers extensionspi install github:{owner}/{repo} but miss the npm auto-discovery channels