@shanmukhdheekonda/skillporter 2.4.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,194 +1,239 @@
1
- # SKILLPORTER — The AI Agent Skill Manager
1
+ <div align="center">
2
+ <br />
3
+ <a href="https://www.skillporter.dev">
4
+ <picture>
5
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/Shanmukh-l33t/skillporter/main/website/public/brand/skillporter-lockup.png" />
6
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/Shanmukh-l33t/skillporter/main/website/public/brand/skillporter-lockup-light.png" />
7
+ <img alt="Skillporter" src="https://raw.githubusercontent.com/Shanmukh-l33t/skillporter/main/website/public/brand/skillporter-lockup-light.png" width="380" />
8
+ </picture>
9
+ </a>
10
+ <br /><br />
11
+ <p><strong>ONE SKILL. EVERY AGENT.</strong></p>
12
+ <p>The package manager, dependency resolver, and supply-chain security layer for AI agent skills.</p>
13
+
14
+ <p>
15
+ <a href="https://pypi.org/project/skillporter/"><img src="https://img.shields.io/pypi/v/skillporter?style=flat-square&label=PyPI&color=155BE8" alt="PyPI v3.0.0" /></a>
16
+ <a href="https://www.npmjs.com/package/@shanmukhdheekonda/skillporter"><img src="https://img.shields.io/npm/v/%40shanmukhdheekonda%2Fskillporter?style=flat-square&label=npm&color=1461ED" alt="npm v3.0.0" /></a>
17
+ <a href="https://github.com/Shanmukh-l33t/skillporter/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/Shanmukh-l33t/skillporter/ci.yml?branch=main&style=flat-square&label=CI" alt="CI status" /></a>
18
+ <a href="https://github.com/Shanmukh-l33t/skillporter/blob/main/docs/harnesses/README.md"><img src="https://img.shields.io/badge/harnesses-19%20supported-F18A50?style=flat-square" alt="19 harnesses supported" /></a>
19
+ <a href="https://github.com/Shanmukh-l33t/skillporter/blob/main/pyproject.toml"><img src="https://img.shields.io/badge/runtime%20deps-0-155BE8?style=flat-square" alt="Zero runtime dependencies" /></a>
20
+ <a href="https://github.com/Shanmukh-l33t/skillporter/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-263249?style=flat-square" alt="MIT License" /></a>
21
+ </p>
22
+
23
+ <p>
24
+ <a href="https://www.skillporter.dev"><strong>Website</strong></a> ·
25
+ <a href="https://www.skillporter.dev/docs"><strong>Documentation</strong></a> ·
26
+ <a href="https://www.skillporter.dev/install"><strong>Install</strong></a> ·
27
+ <a href="#harness-support-matrix-19-harnesses"><strong>19 Harnesses</strong></a> ·
28
+ <a href="https://www.skillporter.dev/docs/security"><strong>Security</strong></a> ·
29
+ <a href="#mcp-server"><strong>MCP Server</strong></a> ·
30
+ <a href="https://www.skillporter.dev/faq"><strong>FAQ</strong></a> ·
31
+ <a href="https://www.skillporter.dev/blog"><strong>Blog</strong></a>
32
+ </p>
33
+ </div>
2
34
 
3
- **ONE SKILL. EVERY AGENT.** Multi-agent skill synchronization, skill lifecycle management, 0–100 security risk scoring, and deterministic `skillporter.lock` lockfiles across 19 AI coding harnesses.
35
+ ---
36
+
37
+ # Skillporter
38
+
39
+ **Skillporter, is the package manager for AI agent skills.** It is a zero runtime dependency CLI and MCP server that installs, pins, audits, synchronizes and rolls back `SKILL.md` packages across 19 AI coding and autonomous agent harnesses, including Claude Code, OpenAI Codex, Cursor, Windsurf, GitHub Copilot, Gemini CLI, Hermes Agent, OpenHands and Goose.
4
40
 
5
41
  ```bash
6
- # Zero-install execution (<60s): diagnose your repo or run the interactive demo
7
- uvx skillporter diagnose .
8
- uvx skillporter demo
42
+ uvx skillporter diagnose . # run the CLI without installing it (uv)
43
+ pipx install skillporter # install the CLI globally (PEP 668 safe)
44
+ npx @shanmukhdheekonda/skillporter diagnose . # run the CLI without installing it (npm)
9
45
  ```
10
46
 
11
- [![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-blue)](https://www.python.org/)
12
- [![Harnesses: 19 Verified](https://img.shields.io/badge/harnesses-19%20supported-00b4d8)](docs/harnesses/README.md)
13
- [![Tests: 133 Passing](https://img.shields.io/badge/tests-133%20passing-brightgreen)](tests/)
14
- [![Zero Dependencies](https://img.shields.io/badge/dependencies-0-success)](pyproject.toml)
15
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
16
-
17
47
  <p align="center">
18
- <img src="docs/assets/demo.svg" alt="Skillporter Terminal Demonstration" width="860" />
48
+ <a href="https://www.skillporter.dev">
49
+ <img src="https://raw.githubusercontent.com/Shanmukh-l33t/skillporter/main/docs/assets/demo.svg" alt="Skillporter 3.0 CLI and multi-harness bridge fan-out" width="100%" />
50
+ </a>
19
51
  </p>
20
52
 
21
- Every AI coding and autonomous agent harness reads skills from a **different directory**:
22
-
23
- | Harness | Project Path | Personal / Global Path | Support |
24
- |---|---|---|---|
25
- | **Claude Code** | `.claude/skills/` | `~/.claude/skills/` | `NATIVE` |
26
- | **OpenAI Codex** | `.agents/skills/` | `~/.agents/skills/` | `NATIVE` |
27
- | **Cursor** | `.agents/skills/`, `.cursor/skills/` (+2 compat) | `~/.agents/skills/`, `~/.cursor/skills/` | `NATIVE` |
28
- | **GitHub Copilot** | `.github/skills/`, `.agents/skills/` (+1 compat) | `~/.copilot/skills/`, `~/.agents/skills/` | `NATIVE` |
29
- | **Gemini CLI** | `.agents/skills/`, `.gemini/skills/` | `~/.agents/skills/`, `~/.gemini/skills/` | `NATIVE` |
30
- | **Google Antigravity** | `.agents/skills/` (+1 compat) | `~/.gemini/config/skills/` | `NATIVE` |
31
- | **Windsurf** | `.windsurf/skills/` | `~/.codeium/windsurf/skills/` | `NATIVE` |
32
- | **Cline** | `.cline/skills/`, `.clinerules/skills/` (+2 compat) | `~/.cline/skills/` | `NATIVE` |
33
- | **Roo Code** | `.roo/skills/`, `.agents/skills/` | `~/.roo/skills/`, `~/.agents/skills/` | `NATIVE` |
34
- | **OpenCode** | `.opencode/skills/`, `.agents/skills/` (+1 compat) | `~/.config/opencode/skills/` (+2 compat) | `NATIVE` |
35
- | **Zed** | `.agents/skills/` | `~/.agents/skills/` | `NATIVE` |
36
- | **Replit Agent** | `.agents/skills/`, `.claude/skills/` | `~/.config/agents/skills/` | `NATIVE` |
37
- | **JetBrains Junie** | `.junie/skills/`, `.agents/skills/` | `~/.junie/skills/`, `~/.agents/skills/` | `NATIVE` |
38
- | **Hermes Agent** | `.hermes/skills/` | `$HERMES_HOME/skills/<category>/<name>` | `NATIVE` |
39
- | **OpenClaw** | `.openclaw/skills/`, `skills/`, `.agents/skills/` | `~/.openclaw/skills/`, `~/.agents/skills/` | `NATIVE` |
40
- | **OpenHands** | `.agents/skills/`, `.openhands/skills/` | `~/.agents/skills/`, `~/.openhands/skills/` | `NATIVE` |
41
- | **Goose** | `.agents/skills/`, `.goose/skills/` | `~/.agents/skills/`, `~/.config/goose/skills/` | `NATIVE` |
42
- | **Continue** | `.continue/skills/` (`.continue/rules/` adapted) | `~/.continue/skills/` | `COMPATIBLE` |
43
- | **Aider / AiderDesk** | `.aider-desk/skills/` (`CONVENTIONS.md` adapted) | `~/.aider-desk/skills/` | `ADAPTED` |
44
-
45
- A skill authored for Claude Code in `.claude/skills/` is silently invisible to OpenAI Codex, Gemini CLI, Zed, and Windsurf. Hand-rolled symlinks break in Docker build contexts, `git worktree`, and Windows checkouts — while manual copies silently drift out of sync.
46
-
47
53
  ---
48
54
 
49
- ## Why Skillporter? (Feature Comparison vs. Lookalike Tools)
55
+ ## Why skills need a package manager
50
56
 
51
- | Capability | **skillporter (v2.4)** | `skillport` | `agent-skill-porter` | `skill-porter` |
52
- |---|:---:|:---:|:---:|:---:|
53
- | **Supported AI Harnesses** | **19 (Evidence-Verified)** | 3 | 4 | 2 |
54
- | **Shared `.agents/skills` Deduplication** | **Yes (writes once for 14 agents)** | No | No | No |
55
- | **SHA-256 Content-Drift Detection** | **Yes (`diagnose`, `lock --check`)** | No | No | No |
56
- | **Security Engine & 0–100 Risk Score** | **NVIDIA SkillSpector + Built-in Fallback** | None | Basic regex | None |
57
- | **SARIF 2.1.0 & GitHub Code Scanning** | **Yes (`--format sarif`)** | No | No | No |
58
- | **Opt-in Dry-Run Sandbox (`sandbox run`)** | **Yes (WASM / gVisor / AST Tracer)** | No | No | No |
59
- | **Semver Dependency Resolver & `graph`** | **Yes (`skillporter.yaml` + `skillporter.lock` v2)** | No | No | No |
60
- | **Transactional Rollback (`.skillporter/backups/`)** | **Yes (atomic graph restore)** | No | No | No |
61
- | **Built-in MCP Server (`skillporter mcp`)** | **Yes (Claude, Codex, Cursor, LangChain, CrewAI, AutoGen)** | No | No | No |
57
+ Every AI agent harness reads skills from a different directory (`.claude/skills/`, `.agents/skills/`, `.github/skills/`, `.windsurf/skills/`, `$HERMES_HOME/skills/`, `~/.openclaw/skills/`), and each one resolves them differently.
62
58
 
63
- ---
59
+ - A skill placed in `.claude/skills/` is invisible to OpenAI Codex, Gemini CLI, Zed, and Windsurf.
60
+ - Hand-rolled symlinks break inside Docker builds, CI checkouts, `git worktree`, and Windows checkouts.
61
+ - Manual copies across directories silently drift out of sync across teammates, while naive removals from shared `.agents/skills/` directories break other agents.
62
+ - An upstream skill can change under you between two `sync` runs, and an agent loads whatever it finds into its system context.
64
63
 
65
- ## 60-Second Quick Start & Zero-Install Execution
64
+ Skillporter treats skills the way a package manager treats dependencies: one manifest, one lockfile, one resolution step, and one install path that every harness can read.
66
65
 
67
- ```bash
68
- # 1. Try the 60-second zero-residue demo (shows broken symlinks & SHA-256 drift being healed)
69
- uvx skillporter demo
66
+ ## What Skillporter does
67
+
68
+ | Capability | How it works |
69
+ |---|---|
70
+ | **Universal source resolution** | Fetches from GitHub shorthand (`owner/repo`), Git URLs, local paths, or archives without executing bundled scripts. |
71
+ | **Shared-path deduplication** | Writes `.agents/skills/<skill>` once across 8 primary harnesses and preserves it during single-harness `remove`. |
72
+ | **Static supply-chain assessment** | Inspects Python ASTs, JS/TS, Markdown instructions, and bounded Base64/Hex/PowerShell payloads before any file is written. |
73
+ | **Deterministic lockfiles** | Pins `resolved_commit`, `tree_hash`, per-file SHA-256 `file_hashes`, and `pin_state` in `skillporter.lock`. |
74
+ | **Crash-safe transactions** | Stages multi-harness installs behind a write-ahead `journal.json` and snapshots replaced copies into `.skillporter/backups/`. |
75
+ | **Hardened MCP server** | Exposes read-only workspace inspection over JSON-RPC 2.0 stdio (`--allow-writes` required for mutations). |
70
76
 
71
- # 2. Diagnose your repository immediately via uvx or npx
77
+ ## Installation
78
+
79
+ ```bash
80
+ # Option A: run immediately without a global install, via uvx or npx
72
81
  uvx skillporter diagnose .
73
82
  npx @shanmukhdheekonda/skillporter diagnose .
74
83
 
75
- # 3. Validate SKILL.md compliance and compute a 0-100 security risk score (JSON or SARIF)
76
- skillporter validate . --format json
77
- skillporter scan . --format sarif > skillporter.sarif
84
+ # Option B: install from PyPI with uv or pipx (PEP 668 safe)
85
+ uv tool install skillporter
86
+ pipx install skillporter
78
87
 
79
- # 4. Explain any diagnostic, lockfile, or security finding in plain English
80
- skillporter explain DRIFT
81
- skillporter explain sec-prompt-override
88
+ # Option C: standalone verified release installer (Linux and macOS)
89
+ # Verifies SHA256SUMS.txt and the GitHub OIDC provenance attestation
90
+ # (`gh attestation verify`) or an out-of-band pinned digest
91
+ # (`SKILLPORTER_SHA256=<64-hex>`). Never falls back to mutable `main`.
92
+ curl -fsSL https://github.com/Shanmukh-l33t/skillporter/releases/download/v3.0.0/install.sh -o install.sh
93
+ SKILLPORTER_VERSION=v3.0.0 sh install.sh
94
+ ```
95
+
96
+ Python 3.9 or newer is required, and the standalone installer checks for it before unpacking anything. The package ships with no runtime dependencies, so there is nothing else to audit or pin.
97
+
98
+ ## Quick start (60 seconds)
82
99
 
83
- # 5. Install a skill across all detected harnesses, resolve dependencies, and pin skillporter.lock
100
+ ```bash
101
+ # 1. Run the zero residue interactive demo (heals broken symlinks and SHA-256 drift in a temp dir)
102
+ skillporter demo
103
+
104
+ # 2. Install a skill across harnesses (validates spec, runs static security scan, deduplicates .agents/skills)
84
105
  skillporter add anthropics/skills --skill pdf --harness all
106
+
107
+ # 3. Inspect and security scan skills (text, JSON, or SARIF 2.1.0 for GitHub Code Scanning)
108
+ skillporter scan .
109
+ skillporter scan . --format sarif > skillporter.sarif
110
+
111
+ # 4. Initialize manifest, synchronize transitive dependencies, and verify the reproducible lockfile in CI
112
+ skillporter init
85
113
  skillporter sync
86
114
  skillporter lock --check
87
- skillporter graph
115
+
116
+ # 5. Diagnose reachability, audit provenance and override logs, or roll back to a verified snapshot
117
+ skillporter diagnose .
118
+ skillporter audit .
119
+ skillporter rollback pdf
88
120
  ```
89
121
 
90
- ---
122
+ ## Supply chain security
91
123
 
92
- ## Security Model, Risk Scoring & Experimental Dry-Run Sandbox
93
-
94
- Agent skills are untrusted supply-chain packages: they inject natural-language instructions directly into your LLM's system context and often bundle executable scripts (`scripts/*.py`, `scripts/*.sh`).
95
-
96
- ### 1. Dual-Engine Security Scanning & 0–100 Risk Score (`validate`, `scan`, `inspect`)
97
- - **Primary Backend**: Integrates **NVIDIA SkillSpector** (`skillspector scan --no-llm --format json`) when installed on `PATH`, merging its findings with Skillporter's built-in scanner.
98
- - **Built-in Offline Fallback**: When running offline (`--offline` or `SKILLPORTER_OFFLINE=1`) or without `skillspector` installed, Skillporter runs its zero-dependency static and semantic-heuristic engine (`skillporter-static v2.4.0`).
99
- - **Transparent 0–100 Risk Score & Category Breakdown**: Every scan computes a deterministic `0–100` risk score broken down across 6 categories:
100
- 1. `secrets` (`sec-private-key`, `sec-aws-key`, `sec-github-token`, `sec-api-key`)
101
- 2. `prompt_injection` (`sec-prompt-override`, `sec-hidden-unicode`, `sec-html-comment-instruction`, `sec-css-hidden-instruction`)
102
- 3. `code_execution` (`sec-curl-pipe-sh`, `sec-obfuscated-exec`, `sec-base64-decode`, `sec-reverse-shell`, `sec-dynamic-eval`)
103
- 4. `data_exfiltration` (`sec-env-exfil`, `sec-credential-harvest`, `sec-data-exfil`)
104
- 5. `filesystem_escape` (`sec-symlink-escape`, `sec-path-traversal`, `sec-markdown-path-traversal`, `sec-broken-symlink`)
105
- 6. `supply_chain` (`sec-binary-artifact`, `sec-script-outside-scripts-dir`, `sec-external-download`, `sec-oversized-file`)
106
- - **Configurable Fail-Closed Thresholds (`skillporter.yaml`)**:
107
- ```yaml
108
- schema_version: 2
109
- project: acme-platform
110
- security:
111
- policy: HIGH
112
- max_risk_score: 30
113
- ```
114
- Any skill scoring above `security.max_risk_score` blocks `skillporter add` and `skillporter sync` with exit code `1`. Structural escapes (`sec-symlink-escape`, `sec-path-traversal`) are unconditionally blocked even with `--allow-risky` or `--force`.
115
-
116
- ### 2. What Is Checked vs. What Is NOT Checked
117
- - **What IS Checked**:
118
- - Known prompt-injection override directives, hidden zero-width/bidi Unicode, HTML comments, and `display:none` CSS blocks in `SKILL.md`.
119
- - Hardcoded PEM private keys, AWS keys, GitHub PATs, and OpenAI/Anthropic/Slack tokens.
120
- - Pipe-to-shell RCE (`curl | sh`), base64/hex obfuscation, reverse shells, `os.environ` exfiltration, credential store reads (`~/.ssh`, `~/.aws`, `/etc/shadow`), and `eval`/`exec`/`os.system`.
121
- - Archive Zip-Slip/Tar-Slip path traversal, decompression bombs, and escaping symlinks.
122
- - **What Is NOT Checked (Honest Limitations)**:
123
- - **Static analysis does not guarantee runtime safety.** Novel semantic prompt injections phrased without known override patterns can still steer an LLM at runtime.
124
- - Dynamic payloads fetched at runtime from legitimate-looking domains after a skill is invoked by an agent.
125
- - Model-specific jailbreaks or downstream tool-call misconfigurations inside the host agent harness.
126
-
127
- ### 3. Experimental Opt-In Dry-Run Sandbox (`skillporter sandbox run <skill>`)
128
- To reduce (though not eliminate) runtime blind spots, `skillporter sandbox run <skill>` (default **OFF**, labeled **EXPERIMENTAL**) inspects and traces a skill using `wasmtime` (WASI capability sandbox with zero preopened write dirs and zero network sockets), `runsc` (gVisor rootless `--network=none` sandbox), or the built-in AST + shell behavioral interceptor:
129
- - Reports `proposed_file_writes`, `proposed_file_reads`, `proposed_network_calls`, `proposed_tool_invocations`, and `proposed_env_accesses`.
130
- - Mathematically verifies via before/after SHA-256 tree hashing that **zero host files or network sockets were mutated**.
124
+ Agent skills are untrusted supply chain packages: an agent loads `SKILL.md` directly into its system context and executes bundled scripts. Skillporter is built around that assumption rather than around convenience.
131
125
 
132
- ---
126
+ - **Silent skill drift and unpinned upstream changes**: `skillporter.lock` pins resolved Git commits, SHA-256 tree digests, and per-file hashes, blocking unexpected upstream mutations during `sync`.
127
+ - **Known static supply chain hazards**: inspects Python ASTs, JavaScript and TypeScript scripts, Markdown instructions, and bounded Base64, Hex and PowerShell payloads for embedded credentials, prompt injection override patterns, hidden Unicode and comments, shell pipe RCE, unsafe deserialization, symlink escapes, and multi-file staged execution before installation.
128
+ - **Unsafe archive and filesystem operations**: blocks Zip-Slip and Tar-Slip inputs (`../`, `..\`, drive paths, Windows reserved device names, Unicode NFC/NFD collisions, symlinks, special files, decompression bombs) and stages installs transactionally with crash recovery journals.
129
+ - **Unscoped agent filesystem writes**: constrains `skillporter mcp` to the workspace root with default-deny write permissions (`SKILLPORTER_MCP_ALLOW_WRITES=1` opt-in) and separates conflict overrides (`--force`) from security risk overrides (`--allow-risky`).
133
130
 
134
- ## Dependencies, Semver Constraints & Lockfile v2 (`skillporter.yaml` & `skillporter.lock`)
135
-
136
- Declare skill dependencies with semver ranges (`^1.0.0`, `~1.2.0`, `>=1.0.0 <2.0.0`, `*`) in `skillporter.yaml` or `SKILL.md` frontmatter:
137
-
138
- ```yaml
139
- schema_version: 2
140
- project: acme-platform
141
- scope: project
142
- strategy: copy
143
- security:
144
- policy: HIGH
145
- max_risk_score: 30
146
- harnesses:
147
- - claude-code
148
- - codex
149
- - cursor
150
- skills:
151
- - name: release-orchestrator
152
- source: ./skills/release-orchestrator
153
- version: "1.2.0"
154
- dependencies:
155
- - name: changelog-helper
156
- version: "^1.0.0"
157
- source: ./skills/changelog-helper
158
- ```
131
+ > **Important security note**: static scanning (`STATIC_SECURITY_ASSESSMENT`) inspects files for known dangerous patterns and structural anomalies. **A clean static scan is not proof that a skill is safe at runtime.** Novel natural-language prompt injections or dynamically fetched payloads can still steer an agent at runtime.
159
132
 
160
- - `skillporter graph [--format json]` prints the resolved topological dependency tree and exits `1` on cyclic dependencies or version conflicts.
161
- - `skillporter sync` installs the full transitive dependency set in topological order.
162
- - `skillporter lock --check` verifies in CI that `skillporter.lock` matches on-disk SHA-256 hashes and the resolved dependency graph (auto-migrating v1 lockfiles on read with a one-time warning).
163
- - `skillporter rollback <skill>` (or `skillporter rollback all`) atomically restores the skill and its transitive dependencies from `.skillporter/backups/`.
133
+ How the scan is graded and where its limits are is documented in [SECURITY.md](https://github.com/Shanmukh-l33t/skillporter/blob/main/SECURITY.md).
164
134
 
165
- ---
135
+ ## Lockfile, sync and rollback
136
+
137
+ `skillporter.lock` is the reproducible record of what is installed:
138
+
139
+ - Pins `resolved_commit`, `tree_hash`, per-file SHA-256 `file_hashes`, `pin_state` (`PINNED_COMMIT`, `PINNED_CONTENT` or `UNPINNED_MUTABLE`), dependencies, and adapter version.
140
+ - `skillporter sync` honors locked Git commit SHAs even when upstream branches move, and rejects unexpected upstream content changes without `--force`.
141
+ - `skillporter lock --check` verifies the lockfile in CI and fails on mismatch.
142
+ - `skillporter audit` reports installed origins, lockfile drift, and `.skillporter/audit.jsonl` events, so any risk override is visible after the fact.
143
+
144
+ Rollback is transactional rather than a re-download. Replacements are staged in `.skillporter/tmp/txn-*` behind a write-ahead `journal.json`, prior versions are snapshotted into `.skillporter/backups/`, and `skillporter rollback` restores a skill together with its dependency graph from SHA-256 verified backups.
145
+
146
+ ## Harness support matrix (19 harnesses)
147
+
148
+ Skillporter distinguishes **support status** (`NATIVE`, `COMPATIBLE`, `ADAPTED`) from **verification evidence** (`RUNTIME_VERIFIED`, `INTEGRATION_TESTED`, `FIXTURE_TESTED`, `DOCUMENTATION_VERIFIED`). An adapter is never marked `RUNTIME_VERIFIED` unless it has been tested against a live harness runtime.
149
+
150
+ | Harness | Project Path | User / Global Path | Support | Verification Evidence |
151
+ |---|---|---|---|---|
152
+ | **Hermes Agent** | `.hermes/skills/` | `$HERMES_HOME/skills/<cat>/<name>` | `NATIVE` | `RUNTIME_VERIFIED` |
153
+ | **Claude Code** | `.claude/skills/` | `~/.claude/skills/` | `NATIVE` | `INTEGRATION_TESTED` |
154
+ | **OpenAI Codex** | `.agents/skills/` | `~/.agents/skills/` | `NATIVE` | `INTEGRATION_TESTED` |
155
+ | **Cursor** | `.agents/skills/`, `.cursor/skills/` (+2 compat) | `~/.agents/skills/`, `~/.cursor/skills/` | `NATIVE` | `INTEGRATION_TESTED` |
156
+ | **GitHub Copilot** | `.github/skills/` (+2 compat) | `~/.copilot/skills/` (+1 compat) | `NATIVE` | `FIXTURE_TESTED` |
157
+ | **Gemini CLI** | `.agents/skills/`, `.gemini/skills/` | `~/.agents/skills/`, `~/.gemini/skills/` | `NATIVE` | `FIXTURE_TESTED` |
158
+ | **Google Antigravity** | `.agents/skills/` (+1 compat) | `~/.gemini/config/skills/` | `NATIVE` | `FIXTURE_TESTED` |
159
+ | **Windsurf** | `.windsurf/skills/` | `~/.codeium/windsurf/skills/` | `NATIVE` | `FIXTURE_TESTED` |
160
+ | **Cline** | `.cline/skills/` (+3 compat) | `~/.cline/skills/` | `NATIVE` | `FIXTURE_TESTED` |
161
+ | **Roo Code** | `.roo/skills/` (+1 compat) | `~/.roo/skills/` (+1 compat) | `NATIVE` | `FIXTURE_TESTED` |
162
+ | **OpenCode** | `.opencode/skills/` (+2 compat) | `~/.config/opencode/skills/` (+2 compat) | `NATIVE` | `FIXTURE_TESTED` |
163
+ | **Zed** | `.agents/skills/` | `~/.agents/skills/` | `NATIVE` | `FIXTURE_TESTED` |
164
+ | **Replit Agent** | `.agents/skills/` (+1 compat) | `~/.config/agents/skills/` | `NATIVE` | `FIXTURE_TESTED` |
165
+ | **JetBrains Junie** | `.junie/skills/` (+1 compat) | `~/.junie/skills/` (+1 compat) | `NATIVE` | `FIXTURE_TESTED` |
166
+ | **OpenClaw** | `.openclaw/skills/` (+2 compat) | `~/.openclaw/skills/` (+1 compat) | `NATIVE` | `FIXTURE_TESTED` |
167
+ | **OpenHands** | `.agents/skills/` (+2 compat) | `~/.agents/skills/` (+1 compat) | `NATIVE` | `FIXTURE_TESTED` |
168
+ | **Goose** | `.agents/skills/` (+1 compat) | `~/.agents/skills/` (+1 compat) | `NATIVE` | `FIXTURE_TESTED` |
169
+ | **Continue** | `.continue/skills/` (`.continue/rules/` adapted) | `~/.continue/skills/` | `COMPATIBLE` | `FIXTURE_TESTED` |
170
+ | **Aider / AiderDesk** | `.aider-desk/skills/` (`CONVENTIONS.md` adapted) | `~/.aider-desk/skills/` | `ADAPTED` | `FIXTURE_TESTED` |
171
+
172
+ Each harness record ships its detection rules, path precedence, and vendor documentation reference. `skillporter matrix` prints the same matrix from the installed CLI, and `skillporter detect` reports which harnesses exist on the current machine.
173
+
174
+ ## MCP server
175
+
176
+ `skillporter mcp` runs a hardened JSON-RPC 2.0 Model Context Protocol server so an agent can query a workspace instead of shelling out. It exposes nine tools (`diagnose`, `detect`, `scan`, `inspect`, `matrix`, `add`, `install`, `sync`, `remove`), is read-only by default, refuses paths outside the workspace root, and requires an explicit opt-in before any write tool becomes available:
177
+
178
+ ```bash
179
+ skillporter mcp # read-only
180
+ skillporter mcp --allow-writes # enable write tools
181
+ SKILLPORTER_MCP_ALLOW_WRITES=1 skillporter mcp # same, via the environment
182
+ ```
166
183
 
167
- ## CLI Reference
184
+ Client setup for Claude Code and other MCP clients is covered in the [MCP guide](https://www.skillporter.dev/docs/mcp).
185
+
186
+ ## CLI reference
168
187
 
169
188
  | Command | Description |
170
189
  |---|---|
171
- | `skillporter add <source>` | Resolve, validate, security-scan, and install skills (`--max-risk-score`, `--format json`) |
190
+ | `skillporter add <source>` | Resolve, validate, security scan, and install skills (`--dry-run`, `--allow-risky`, `--force`, `--json`) |
191
+ | `skillporter install <dir>` | Security scan and install a local skill directory (`--dry-run`, `--allow-risky`, `--force`, `--json`) |
192
+ | `skillporter remove <skill>` | Safely remove a skill while preserving shared `.agents/skills/` still owned by other harnesses (`--dry-run`, `--json`) |
193
+ | `skillporter sync [path]` | Resolve pinned and transitive dependencies, verify lockfile hashes, and synchronize harnesses (`--dry-run`, `--json`) |
194
+ | `skillporter lock [path] [--check]` | Write or CI verify (`--check`) the deterministic `skillporter.lock` |
195
+ | `skillporter scan [path]` | Run static security and supply chain assessment (`--format text\|json\|sarif`, `--max-risk-score`) |
196
+ | `skillporter audit [path]` | Inspect installed skill origins, security posture, lockfile drift, and `.skillporter/audit.jsonl` events |
172
197
  | `skillporter diagnose [path]` | Check reachability, broken symlinks, SHA-256 content drift, duplicates, and spec compliance |
173
- | `skillporter doctor [path] [--fix]` | Run full workspace health check and auto-repair missing/drifted installs |
174
- | `skillporter scan [path]` | Run security & supply-chain assessment with 0–100 risk score (`--format text\|json\|sarif`) |
175
- | `skillporter validate [path]` | Validate `SKILL.md` spec compliance and compute 0–100 risk score (`--format text\|json\|sarif`) |
176
- | `skillporter sandbox run <skill>` | **[Experimental]** Run opt-in dry-run behavioral sandbox (`--runtime auto\|wasm\|gvisor\|dry-run`) |
177
- | `skillporter demo` | Scaffold a temporary multi-harness workspace and demonstrate drift/symlink auto-repair in <60s |
178
- | `skillporter explain <finding>` | Translate any diagnostic code (`DRIFT`, `BROKEN`, `CYCLE`) or `sec-*` rule into plain English + fix |
179
- | `skillporter graph [path]` | Print or export (`--format json`) the resolved transitive skill dependency tree |
180
- | `skillporter sync [path]` | Resolve transitive dependencies, reconcile across harnesses, and update `skillporter.lock` |
181
- | `skillporter lock [path] [--check]` | Write or CI-verify (`--check`) deterministic `skillporter.lock` v2 |
182
- | `skillporter status [path]` | Show per-harness installed vs. locked state, copy drift, and lockfile drift |
183
- | `skillporter publish [path]` | Validate, security-gate (`risk_score <= 30`), pack, and publish to registry (`--dry-run`) |
184
- | `skillporter ci-report [path]` | Generate Markdown/JSON PR report for GitHub Actions and the Skillporter GitHub App |
185
- | `skillporter inspect <source>` | Inspect local/remote skill package with risk score, categories, and adapted previews |
186
- | `skillporter detect [path]` | Detect installed AI agent harnesses on the machine or active in the project |
187
- | `skillporter matrix` | Print the 19-harness compatibility and verification matrix (`--json` supported) |
188
- | `skillporter rollback <skill>` | Atomically restore a skill (and its dependency graph) from `.skillporter/backups/` |
189
- | `skillporter mcp` | Start the zero-dependency stdio JSON-RPC 2.0 MCP server |
190
-
191
- ### Exit Codes (CI Contract)
192
- - `0` — Clean / all checks passed
193
- - `1` — Findings detected (drift, broken symlink, spec error, security block, risk score > threshold, lock drift, or dependency cycle/conflict)
194
- - `2` — Usage or runtime error (invalid path, unknown harness, missing `--skill` name)
198
+ | `skillporter doctor [path] [--fix]` | Comprehensive workspace health check and tamper safe repair (`--dry-run`, `--json`) |
199
+ | `skillporter status [path]` | Unified workspace manifest, lockfile, per harness installed and locked state, and drift summary |
200
+ | `skillporter update [skill]` | Fetch, security gate, back up, and update tracked skills (`--dry-run`, `--allow-risky`, `--json`) |
201
+ | `skillporter rollback <skill>` | Atomically restore a skill and its dependency graph from SHA-256 verified `.skillporter/backups/` (`--dry-run`, `--json`) |
202
+ | `skillporter validate [path]` | Validate `SKILL.md` against the Agent Skills specification (`--format text\|json\|sarif`) |
203
+ | `skillporter inspect <source>` | Inspect local or remote package structure, security posture, and adapted rule previews |
204
+ | `skillporter graph [path]` | Render or export (`--json`) the topological skill dependency graph |
205
+ | `skillporter sandbox run <skill>` | **[Experimental]** Opt in, non-mutating dry run behavioral trace |
206
+ | `skillporter explain <finding>` | Explain any diagnostic, lockfile, validation, or `sec-*` finding code with remediation commands |
207
+ | `skillporter search / info / pack / publish` | Search the catalog, inspect metadata, build a deterministic `.tar.gz` with `provenance.json`, or publish |
208
+ | `skillporter detect / matrix / demo` | Detect installed harnesses, print the 19 harness matrix, or run the zero residue demo |
209
+ | `skillporter mcp` | Run the hardened JSON-RPC 2.0 MCP server (read-only by default; `--allow-writes` opt in) |
210
+
211
+ ### Exit codes
212
+
213
+ - `0`: clean, or the operation succeeded
214
+ - `1`: policy or diagnostic finding (drift, broken symlink, spec error, security block, lockfile mismatch, cycle or conflict)
215
+ - `2`: usage or runtime error (invalid argument, unknown harness, missing path)
216
+
217
+ ## Documentation
218
+
219
+ - [Website](https://www.skillporter.dev): overview, interactive terminal demo, and live 19-harness matrix.
220
+ - [Documentation home](https://www.skillporter.dev/docs): the full guide set, from installation through lockfiles, scanning, and CI.
221
+ - [Install](https://www.skillporter.dev/install): installation channels and provenance verification options.
222
+ - [FAQ](https://www.skillporter.dev/faq): frequently asked questions.
223
+ - [Blog](https://www.skillporter.dev/blog): engineering articles and release write-ups.
224
+
225
+ The same guides are versioned in the repository under [`docs/`](https://github.com/Shanmukh-l33t/skillporter/tree/main/docs) if you prefer to read them on GitHub.
226
+
227
+ ## Contributing
228
+
229
+ Issues and pull requests are welcome. The short version:
230
+
231
+ - Open an issue before starting a large architectural change.
232
+ - New harness adapters must link the vendor documentation that proves the skill discovery path, and must not claim a verification level that has not been tested.
233
+ - The core library stays on the Python standard library, with zero runtime dependencies.
234
+
235
+ Full setup instructions, the required local quality gates, and the adapter checklist are in [CONTRIBUTING.md](https://github.com/Shanmukh-l33t/skillporter/blob/main/CONTRIBUTING.md). To report a vulnerability, follow [SECURITY.md](https://github.com/Shanmukh-l33t/skillporter/blob/main/SECURITY.md) instead of opening a public issue.
236
+
237
+ ## License
238
+
239
+ MIT. See [LICENSE](https://github.com/Shanmukh-l33t/skillporter/blob/main/LICENSE).
Binary file
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@shanmukhdheekonda/skillporter",
3
- "version": "2.4.0",
3
+ "version": "3.0.1",
4
+ "mcpName": "io.github.Shanmukh-l33t/skillporter",
4
5
  "description": "AI agent skill manager for multi-agent skill synchronization, skill lifecycle management, and deterministic skill lockfile security across 19+ harnesses.",
5
6
  "keywords": [
6
7
  "ai-agent-skill-manager",