{"id":47998945,"url":"https://github.com/anyt-io/pspm-cli","last_synced_at":"2026-04-04T12:10:43.793Z","repository":{"id":334324106,"uuid":"1140943248","full_name":"anyt-io/pspm-cli","owner":"anyt-io","description":"NPM for agent skills , skill with version control , private skills , lock files , etc ","archived":false,"fork":false,"pushed_at":"2026-03-19T19:55:10.000Z","size":455,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-20T10:57:37.756Z","etag":null,"topics":["agent","claude-code","codex","package-manager","skills"],"latest_commit_sha":null,"homepage":"https://pspm.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anyt-io.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-24T01:00:32.000Z","updated_at":"2026-03-19T19:55:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/anyt-io/pspm-cli","commit_stats":null,"previous_names":["anyt-io/pspm-cli"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/anyt-io/pspm-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anyt-io%2Fpspm-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anyt-io%2Fpspm-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anyt-io%2Fpspm-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anyt-io%2Fpspm-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anyt-io","download_url":"https://codeload.github.com/anyt-io/pspm-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anyt-io%2Fpspm-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31398901,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent","claude-code","codex","package-manager","skills"],"created_at":"2026-04-04T12:10:43.269Z","updated_at":"2026-04-04T12:10:43.785Z","avatar_url":"https://github.com/anyt-io.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PSPM - Package manager for AI agent skills\n\nVersion control. Dependencies. Private registries. Inspired by pnpm.\n\nSupports **Claude Code**, **Cursor**, **Codex**, **Gemini CLI**, **Windsurf**, and [30+ more agents](#supported-agents).\n\n**Website:** [pspm.dev](https://pspm.dev)\n\n## Install a Skill\n\n```bash\nnpx @anytio/pspm add @user/anyt/youtube-downloader\n```\n\n### Source Formats\n\n```bash\n# GitHub shorthand (owner/repo)\npspm add vercel-labs/agent-skills\n\n# Full GitHub URL\npspm add https://github.com/vercel-labs/agent-skills\n\n# Direct path to a skill in a repo\npspm add https://github.com/vercel-labs/agent-skills/tree/main/skills/web-design\n\n# GitHub with prefix (explicit format)\npspm add github:owner/repo\npspm add github:owner/repo/path/to/skill@v1.0.0\n\n# Registry (with semver versioning)\npspm add @user/username/skill-name\npspm add @user/username/skill-name@^2.0.0\n\n# Well-known URL (RFC 8615 discovery)\npspm add https://acme.com\n\n# Local path (for development)\npspm add ./my-local-skills\npspm add ../shared-skills\npspm add file:../my-local-skills\n```\n\n### Options\n\n| Option | Description |\n|--------|-------------|\n| `-g, --global` | Install to user home directory instead of project |\n| `--agent \u003cagents\u003e` | Comma-separated agents for symlinks (e.g., `claude-code,cursor`) |\n| `-y, --yes` | Skip agent selection prompt and use defaults |\n\n### Examples\n\n```bash\n# Add multiple skills at once\npspm add @user/alice/skill1 @user/bob/skill2\n\n# Add from GitHub URL (copy-paste from browser)\npspm add https://github.com/vercel-labs/agent-skills/tree/main/skills/web-design\n\n# Add from GitHub shorthand\npspm add vercel-labs/agent-skills/skills/web-design\n\n# Install to specific agents only\npspm add @user/alice/my-skill --agent claude-code,cursor\n\n# Install globally (available across all projects)\npspm add vercel-labs/agent-skills -g\n\n# Skip prompts (CI-friendly)\npspm add @user/alice/my-skill -y --agent claude-code\n\n# Add from well-known endpoint\npspm add https://acme.com\n```\n\n### Installation Scope\n\n| Scope | Flag | Skills Location | Symlink Location |\n|-------|------|-----------------|------------------|\n| **Project** | (default) | `.pspm/skills/` | `./\u003cagent\u003e/skills/` |\n| **Global** | `-g` | `~/.pspm/skills/` | `~/\u003cagent\u003e/skills/` |\n\n## Installation\n\n```bash\nnpm install -g @anytio/pspm\n```\n\nOr use with npx (no install needed):\n\n```bash\nnpx @anytio/pspm \u003ccommand\u003e\n```\n\n## Quick Start\n\n```bash\n# Initialize a new skill project\npspm init\n\n# Add a skill from the registry\npspm add @user/username/skill-name\n\n# Add a skill from GitHub\npspm add github:owner/repo/path@main\n\n# List installed skills\npspm list\n\n# Install all skills from lockfile\npspm install\n```\n\n## Commands\n\n| Command | Description |\n|---------|-------------|\n| `pspm add \u003cspecifiers...\u003e` | Add skills from registry, GitHub, local paths, or well-known URLs |\n| `pspm install [specifiers...]` | Install from lockfile, or add specific packages (alias: `i`) |\n| `pspm remove \u003cname\u003e` | Remove an installed skill (alias: `rm`) |\n| `pspm list` | List installed skills (alias: `ls`) |\n| `pspm update` | Update skills to latest compatible versions |\n| `pspm outdated [packages...]` | Check for outdated skills |\n| `pspm search [query]` | Search and discover skills from the registry (alias: `find`) |\n| `pspm audit` | Verify integrity of installed skills |\n| `pspm link` | Recreate agent symlinks without reinstalling |\n| `pspm init` | Create pspm.json manifest |\n| `pspm publish` | Publish skill to registry |\n| `pspm login` | Authenticate via browser or API key |\n| `pspm skill-list \u003csubcommand\u003e` | Manage skill lists (list, create, show, delete, update, add-skill, remove-skill, install) |\n| `pspm notebook \u003csubcommand\u003e` | Manage notebooks (upload, list, download, delete) |\n| `pspm upgrade` | Update pspm itself to the latest version |\n\n### `pspm install`\n\nInstall all skills from the lockfile, or add and install specific packages.\n\n```bash\n# Install all from lockfile\npspm install\n\n# Install with frozen lockfile (CI/CD - fails if lockfile is outdated)\npspm install --frozen-lockfile\n\n# Install to a custom directory\npspm install --dir ./custom-path\n\n# Install specific packages\npspm install @user/alice/skill1 github:org/repo\n\n# Install all skills from a skill list\npspm install --list @user/alice/my-favorites\npspm install --list @org/myorg/team-skills\n```\n\n### `pspm search`\n\nSearch and discover skills from the registry.\n\n```bash\n# Search by keyword\npspm search typescript\n\n# Output as JSON\npspm search react --json\n\n# Sort by recent or name\npspm search --sort recent --limit 10\n```\n\n### `pspm audit`\n\nVerify integrity of installed skills and check for issues.\n\n```bash\n# Run audit\npspm audit\n\n# Output as JSON (for CI)\npspm audit --json\n```\n\nChecks for: missing packages, deprecated versions, corrupted installations (missing SKILL.md).\n\n### `pspm list`\n\n```bash\n# List all installed skills\npspm list\n\n# Output as JSON\npspm list --json\n```\n\n### `pspm outdated`\n\n```bash\n# Check for outdated skills\npspm outdated\n\n# Include up-to-date packages\npspm outdated --all\n\n# Check specific packages\npspm outdated @user/alice/skill1\n\n# Output as JSON\npspm outdated --json\n```\n\n### `pspm update`\n\n```bash\n# Update all skills to latest compatible versions\npspm update\n\n# Preview what would change\npspm update --dry-run\n```\n\n## Source Formats\n\n### Registry Specifiers\n\nPSPM has a built-in registry with full semver support, just like npm.\n\n```bash\n@user/username/skillname          # Latest version\n@user/username/skillname@2.0.0    # Exact version\n@user/username/skillname@^2.0.0   # Compatible range (\u003e=2.0.0 \u003c3.0.0)\n@user/username/skillname@~2.1.0   # Patch range (\u003e=2.1.0 \u003c2.2.0)\n```\n\n### GitHub Specifiers\n\nAll of these formats are supported:\n\n```bash\n# Shorthand (most common)\nowner/repo                                  # Entire repo (default branch)\nowner/repo/path/to/skill                    # Subdirectory within repo\n\n# Full GitHub URL (copy-paste from browser)\nhttps://github.com/owner/repo\nhttps://github.com/owner/repo/tree/main/path/to/skill\n\n# Explicit prefix (with version/ref support)\ngithub:owner/repo                           # Entire repo (default branch)\ngithub:owner/repo@main                      # Specific branch or tag\ngithub:owner/repo/path/to/skill             # Subdirectory within repo\ngithub:owner/repo/path/to/skill@v1.0.0      # Subdirectory with tag\n```\n\n### Local Specifiers\n\n```bash\n./my-local-skills        # Relative path (no prefix needed)\n../shared-skills         # Parent directory\nfile:../path/to/skill    # Explicit file: prefix (also supported)\n```\n\n### Well-Known URLs\n\nAny HTTPS URL serving a `/.well-known/skills/index.json` endpoint. See [Well-Known Skills Discovery](../../docs/well-known-skills-discovery.md).\n\n```bash\nhttps://acme.com         # Discovers skills at acme.com/.well-known/skills/\n```\n\n## Agent Symlinks\n\nPSPM installs skills to a central `.pspm/skills/` directory and creates symlinks in each agent's expected location.\n\n```bash\n# Install for specific agents\npspm add \u003cspecifier\u003e --agent claude-code,cursor\n\n# Skip symlink creation\npspm install --agent none\n\n# Recreate symlinks for a specific agent\npspm link --agent codex\n\n# Interactive agent selection (default without -y)\npspm add \u003cspecifier\u003e\n```\n\n## Supported Agents\n\n| Agent | `--agent` value | Skills Directory |\n|-------|----------------|------------------|\n| AdaL | `adal` | `.adal/skills/` |\n| Amp | `amp` | `.agents/skills/` |\n| Antigravity | `antigravity` | `.agent/skills/` |\n| Augment | `augment` | `.augment/skills/` |\n| Claude Code | `claude-code` | `.claude/skills/` |\n| Cline | `cline` | `.agents/skills/` |\n| CodeBuddy | `codebuddy` | `.codebuddy/skills/` |\n| Codex | `codex` | `.agents/skills/` |\n| Command Code | `command-code` | `.commandcode/skills/` |\n| Continue | `continue` | `.continue/skills/` |\n| Cortex Code | `cortex` | `.cortex/skills/` |\n| Crush | `crush` | `.crush/skills/` |\n| Cursor | `cursor` | `.agents/skills/` |\n| Droid | `droid` | `.factory/skills/` |\n| Gemini CLI | `gemini-cli` | `.agents/skills/` |\n| GitHub Copilot | `github-copilot` | `.agents/skills/` |\n| Goose | `goose` | `.goose/skills/` |\n| iFlow CLI | `iflow-cli` | `.iflow/skills/` |\n| Junie | `junie` | `.junie/skills/` |\n| Kilo Code | `kilo` | `.kilocode/skills/` |\n| Kimi Code CLI | `kimi-cli` | `.agents/skills/` |\n| Kiro CLI | `kiro-cli` | `.kiro/skills/` |\n| Kode | `kode` | `.kode/skills/` |\n| MCPJam | `mcpjam` | `.mcpjam/skills/` |\n| Mistral Vibe | `mistral-vibe` | `.vibe/skills/` |\n| Mux | `mux` | `.mux/skills/` |\n| Neovate | `neovate` | `.neovate/skills/` |\n| OpenClaw | `openclaw` | `skills/` |\n| OpenCode | `opencode` | `.agents/skills/` |\n| OpenHands | `openhands` | `.openhands/skills/` |\n| Pi | `pi` | `.pi/skills/` |\n| Pochi | `pochi` | `.pochi/skills/` |\n| Qoder | `qoder` | `.qoder/skills/` |\n| Qwen Code | `qwen-code` | `.qwen/skills/` |\n| Replit | `replit` | `.agents/skills/` |\n| Roo Code | `roo` | `.roo/skills/` |\n| Trae | `trae` | `.trae/skills/` |\n| Trae CN | `trae-cn` | `.trae/skills/` |\n| Universal | `universal` | `.agents/skills/` |\n| Windsurf | `windsurf` | `.windsurf/skills/` |\n| Zencoder | `zencoder` | `.zencoder/skills/` |\n\n## Publishing Skills\n\n### Authentication\n\n```bash\npspm login                        # Authenticate via browser\npspm login --api-key \u003ckey\u003e        # Authenticate with API key\npspm logout                       # Clear stored credentials\npspm whoami                       # Show current user info\n```\n\n### Versioning\n\n```bash\npspm version major                # 1.0.0 -\u003e 2.0.0\npspm version minor                # 1.0.0 -\u003e 1.1.0\npspm version patch                # 1.0.0 -\u003e 1.0.1\npspm version patch --dry-run      # Preview without writing\n```\n\n### Publishing\n\n```bash\npspm publish --access public      # Publish as public (irreversible)\npspm publish --access private     # Publish as private (requires Pro)\npspm publish --access team --org myorg       # Publish under org (team-only)\npspm publish --access private --bump patch   # Bump and publish\n```\n\n`--access` is required (`public`, `private`, or `team`). Use `--org \u003corgname\u003e` to publish under an organization namespace. `--access team` requires `--org`. Before uploading, `pspm publish` shows a preview of included files and package size. Max package size is **10MB**.\n\n### Managing Published Skills\n\n```bash\npspm unpublish \u003cspec\u003e --force     # Remove a version (within 72 hours)\npspm deprecate \u003cspec\u003e [message]   # Mark as deprecated\npspm deprecate \u003cspec\u003e --undo      # Remove deprecation\npspm access --public              # Make package public (irreversible)\npspm access \u003cspec\u003e --private      # Make package private\n```\n\n## Creating a Skill\n\nA skill is a directory containing at minimum a `SKILL.md`:\n\n```markdown\n---\nname: my-skill\ndescription: A helpful skill that does X\n---\n\n# My Skill\n\nInstructions for the agent to follow when this skill is activated.\n\n## When to Use\n\nDescribe when this skill applies.\n\n## Steps\n\n1. First, do this\n2. Then, do that\n```\n\nFor publishing to the registry, also include `pspm.json` (created with `pspm init`):\n\n```json\n{\n  \"name\": \"@user/myusername/my-skill\",\n  \"version\": \"1.0.0\",\n  \"description\": \"A helpful skill for...\",\n  \"files\": [\"pspm.json\", \"SKILL.md\"]\n}\n```\n\n## Ignoring Files (.pspmignore)\n\nControl which files are excluded when publishing:\n\n```\n# .pspmignore\n*.test.ts\n__tests__/\n.env*\n*.log\n```\n\n- If `.pspmignore` exists, use it for ignore patterns\n- Otherwise, fall back to `.gitignore` if present\n- Always ignores `node_modules`, `.git`, and `.pspm-publish`\n\n## Directory Structure\n\n```\nproject/\n+-- pspm.json               # Manifest with dependencies\n+-- pspm-lock.json           # Lockfile (version pinning + integrity)\n+-- .pspmrc                  # Project config (optional)\n+-- .pspm/\n|   +-- skills/              # Installed skills (central store)\n|   |   +-- username/        # Registry skills\n|   |   |   +-- skillname/\n|   |   |       +-- SKILL.md\n|   |   +-- _github/         # GitHub skills\n|   |   |   +-- owner/\n|   |   |       +-- repo/\n|   |   +-- _wellknown/      # Well-known skills\n|   |   |   +-- acme.com/\n|   |   |       +-- skill-name/\n|   |   +-- _local/          # Local skill symlinks\n|   +-- cache/               # Tarball cache\n+-- .claude/\n|   +-- skills/              # Symlinks for Claude Code\n+-- .cursor/\n    +-- skills/              # Symlinks for Cursor (if configured)\n```\n\n## CI/CD Integration\n\n```bash\n# Set API key via environment variable\nexport PSPM_API_KEY=sk_ci_key\n\n# Install with frozen lockfile (fails if lockfile is outdated)\npspm install --frozen-lockfile\n\n# Audit installed skills\npspm audit --json\n```\n\n## Configuration\n\n### User Config (`~/.pspmrc`)\n\n```ini\nregistry = https://registry.pspm.dev\nauthToken = sk_...\nusername = myuser\n```\n\n### Project Config (`.pspmrc`)\n\n```ini\nregistry = https://custom-registry.example.com\n```\n\n### Lockfile (`pspm-lock.json`)\n\nTracks exact versions, resolved URLs, and integrity hashes for reproducible installs:\n\n```json\n{\n  \"lockfileVersion\": 5,\n  \"registryUrl\": \"https://registry.pspm.dev\",\n  \"packages\": { ... },\n  \"githubPackages\": { ... },\n  \"localPackages\": { ... },\n  \"wellKnownPackages\": { ... }\n}\n```\n\n## Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| `PSPM_API_KEY` | Override API key for authentication |\n| `PSPM_DEBUG` | Enable debug logging |\n| `GITHUB_TOKEN` | GitHub token for private repos and higher rate limits |\n\n## Self-Update\n\n```bash\npspm upgrade\n```\n\nAuto-detects your package manager (pnpm, npm, yarn, bun). The CLI also checks for updates every 24 hours and notifies you when a newer version is available.\n\n## License\n\nThis project is licensed under [The Artistic License 2.0](LICENSE), the same license used by npm.\n\n\u003c!-- @doc-sync: 1f5c64d | 2026-03-18 10:30 --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanyt-io%2Fpspm-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanyt-io%2Fpspm-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanyt-io%2Fpspm-cli/lists"}