@shanmukhdheekonda/skillporter 2.0.3 → 3.0.0

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,158 +1,117 @@
1
- # SKILLPORTER
1
+ # Skillporter 3.0
2
2
 
3
- ## ONE SKILL. EVERY AGENT.
4
-
5
- **Install, manage, validate, security-scan, and synchronize AI-agent skills across the entire agent ecosystem.**
3
+ **The package manager, dependency resolver, and supply-chain security layer for AI agent skills.**
6
4
 
7
5
  [![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-blue)](https://www.python.org/)
8
- [![Harnesses: 19 Verified](https://img.shields.io/badge/harnesses-19%20supported-00b4d8)](docs/harnesses/README.md)
9
- [![Tests: 115 Passing](https://img.shields.io/badge/tests-115%20passing-brightgreen)](tests/)
10
- [![Zero Dependencies](https://img.shields.io/badge/dependencies-0-success)](pyproject.toml)
6
+ [![Harnesses: 19 Supported](https://img.shields.io/badge/harnesses-19%20supported-00b4d8)](docs/harnesses/README.md)
7
+ [![Zero Runtime Dependencies](https://img.shields.io/badge/dependencies-0-success)](pyproject.toml)
11
8
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
12
9
 
13
- <p align="center">
14
- <img src="docs/assets/demo.svg" alt="Skillporter Terminal Demonstration" width="860" />
15
- </p>
16
-
17
- Every AI coding and autonomous agent harness reads skills from a **different directory**:
18
-
19
- | Harness | Project Path | Personal / Global Path | Support |
20
- |---|---|---|---|
21
- | **Claude Code** | `.claude/skills/` | `~/.claude/skills/` | `NATIVE` |
22
- | **OpenAI Codex** | `.agents/skills/` | `~/.agents/skills/` | `NATIVE` |
23
- | **Cursor** | `.agents/skills/`, `.cursor/skills/` (+2 compat) | `~/.agents/skills/`, `~/.cursor/skills/` | `NATIVE` |
24
- | **GitHub Copilot** | `.github/skills/`, `.agents/skills/` (+1 compat) | `~/.copilot/skills/`, `~/.agents/skills/` | `NATIVE` |
25
- | **Gemini CLI** | `.agents/skills/`, `.gemini/skills/` | `~/.agents/skills/`, `~/.gemini/skills/` | `NATIVE` |
26
- | **Google Antigravity** | `.agents/skills/` (+1 compat) | `~/.gemini/config/skills/` | `NATIVE` |
27
- | **Windsurf** | `.windsurf/skills/` | `~/.codeium/windsurf/skills/` | `NATIVE` |
28
- | **Cline** | `.cline/skills/`, `.clinerules/skills/` (+2 compat) | `~/.cline/skills/` | `NATIVE` |
29
- | **Roo Code** | `.roo/skills/`, `.agents/skills/` | `~/.roo/skills/`, `~/.agents/skills/` | `NATIVE` |
30
- | **OpenCode** | `.opencode/skills/`, `.agents/skills/` (+1 compat) | `~/.config/opencode/skills/` (+2 compat) | `NATIVE` |
31
- | **Zed** | `.agents/skills/` | `~/.agents/skills/` | `NATIVE` |
32
- | **Replit Agent** | `.agents/skills/`, `.claude/skills/` | `~/.config/agents/skills/` | `NATIVE` |
33
- | **JetBrains Junie** | `.junie/skills/`, `.agents/skills/` | `~/.junie/skills/`, `~/.agents/skills/` | `NATIVE` |
34
- | **Hermes Agent** | `.hermes/skills/` | `$HERMES_HOME/skills/<category>/<name>` | `NATIVE` |
35
- | **OpenClaw** | `.openclaw/skills/`, `skills/`, `.agents/skills/` | `~/.openclaw/skills/`, `~/.agents/skills/` | `NATIVE` |
36
- | **OpenHands** | `.agents/skills/`, `.openhands/skills/` | `~/.agents/skills/`, `~/.openhands/skills/` | `NATIVE` |
37
- | **Goose** | `.agents/skills/`, `.goose/skills/` | `~/.agents/skills/`, `~/.config/goose/skills/` | `NATIVE` |
38
- | **Continue** | `.continue/skills/` (`.continue/rules/` adapted) | `~/.continue/skills/` | `COMPATIBLE` |
39
- | **Aider / AiderDesk** | `.aider-desk/skills/` (`CONVENTIONS.md` adapted) | `~/.aider-desk/skills/` | `ADAPTED` |
40
-
41
- 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.
42
-
43
- **Skillporter solves the entire lifecycle:** one command resolves skills from GitHub or local paths, runs a static security and supply-chain scan, deduplicates shared destinations (`.agents/skills`), tracks ownership and SHA-256 content hashes, detects content drift across copies, and supports deterministic lockfiles (`skillporter.lock`) and transactional rollback.
44
-
45
10
  ---
46
11
 
47
- ## One-Command Installation & Zero-Install Execution
12
+ ## 1. What Is Skillporter?
48
13
 
49
- ```bash
50
- # 1. Run immediately via uvx from PyPI (zero install)
51
- uvx skillporter diagnose .
14
+ Skillporter is a lightweight, zero-runtime-dependency CLI and Model Context Protocol (MCP) server that installs, synchronizes, pins, audits, and rolls back `SKILL.md` packages across 19 AI coding and autonomous agent harnesses.
52
15
 
53
- # 2. Install globally via uv tool or pipx from PyPI
54
- uv tool install skillporter
55
- pipx install skillporter
16
+ ## 2. Why Do I Need It?
56
17
 
57
- # 3. Run via npx from npm (or directly from GitHub)
58
- npx @shanmukhdheekonda/skillporter diagnose .
59
- npx github:Shanmukh-l33t/skillporter diagnose .
18
+ Every AI agent harness reads skills from a different directory (`.claude/skills/`, `.agents/skills/`, `.github/skills/`, `.windsurf/skills/`, `$HERMES_HOME/skills/`, `~/.openclaw/skills/`).
60
19
 
61
- # 4. Install globally via curl (Linux/macOS — bypasses PEP 668 externally-managed-environment)
62
- curl -fsSL https://raw.githubusercontent.com/Shanmukh-l33t/skillporter/main/install.sh | sh
63
- ```
20
+ - A skill placed in `.claude/skills/` is invisible to OpenAI Codex, Gemini CLI, Zed, and Windsurf.
21
+ - Hand-rolled symlinks break inside Docker builds, CI checkouts, `git worktree`, and Windows checkouts.
22
+ - Manual copies across directories silently drift out of sync across teammates, while naive removals from shared `.agents/skills/` directories break other agents.
23
+
24
+ ## 3. What Does It Protect Me From?
25
+
26
+ Agent skills are untrusted supply-chain packages: agents load `SKILL.md` directly into system context and execute bundled scripts. Skillporter helps defend against:
64
27
 
65
- ### Native Agent Integration (MCP Server)
28
+ - **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`.
29
+ - **Known static supply-chain hazards**: Inspects Python ASTs, JavaScript/TypeScript scripts, Markdown instructions, and bounded Base64/Hex/PowerShell payloads for embedded credentials, prompt-injection override patterns, hidden Unicode/comments, shell-pipe RCE, unsafe deserialization, symlink escapes, and multi-file staged execution before installation.
30
+ - **Unsafe archive & filesystem operations**: Blocks Zip-Slip/Tar-Slip (`../`, `..\`, drive paths, Windows reserved device names, Unicode NFC/NFD collisions, symlinks, special files, decompression bombs) and stages installs transactionally with crash-recovery journals.
31
+ - **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`).
66
32
 
67
- Register Skillporter directly inside Claude Code, Codex, Cursor, Windsurf, or Hermes so your agent can diagnose, scan, and synchronize skills on command:
33
+ > **Important Security Note**: Static scanning (`STATIC_SECURITY_ASSESSMENT`) inspects files for known dangerous patterns and structural anomalies. **A clean static scan does not prove or guarantee that a skill is safe at runtime.** Novel natural-language prompt injections or dynamically fetched payloads can still steer an agent at runtime.
34
+
35
+ ## 4. How Do I Install It?
68
36
 
69
37
  ```bash
70
- claude mcp add skillporter -- uvx skillporter mcp
71
- codex mcp add skillporter -- uvx skillporter mcp
72
- ```
38
+ # Option A: Run immediately without global installation via uvx or npx
39
+ uvx skillporter diagnose .
40
+ npx @shanmukhdheekonda/skillporter diagnose .
73
41
 
74
- ---
42
+ # Option B: Install from PyPI with uv or pipx (PEP 668 safe)
43
+ uv tool install skillporter
44
+ pipx install skillporter
45
+
46
+ # Option C: Standalone verified release installer (Linux & macOS)
47
+ # Verifies SHA256SUMS.txt + GitHub OIDC provenance attestation (`gh attestation verify`)
48
+ # or an out-of-band pinned digest (`SKILLPORTER_SHA256=<64-hex>`). Never falls back to mutable `main`.
49
+ curl -fsSL https://github.com/Shanmukh-l33t/skillporter/releases/download/v3.0.0/install.sh -o install.sh
50
+ SKILLPORTER_VERSION=v3.0.0 sh install.sh
51
+ ```
75
52
 
76
- ## 60-Second Quick Start
53
+ ## 5. How Do I Use It? (60-Second Quick Start)
77
54
 
78
55
  ```bash
79
- # 1. Detect which AI agent harnesses are installed or active in your repo
80
- skillporter detect .
56
+ # 1. Run the zero-residue interactive demo (heals broken symlinks & SHA-256 drift in a temp dir)
57
+ skillporter demo
81
58
 
82
- # 2. Install a skill from GitHub across all detected harnesses (validates + security-scans first)
59
+ # 2. Install a skill across harnesses (validates spec, runs static security scan, deduplicates .agents/skills)
83
60
  skillporter add anthropics/skills --skill pdf --harness all
84
61
 
85
- # 3. Diagnose reachability, broken symlinks, duplicate loading, and SHA-256 content drift
86
- skillporter diagnose .
87
-
88
- # 4. Run a static supply-chain security scan on any skill directory
62
+ # 3. Inspect & security-scan skills (text, JSON, or SARIF 2.1.0 for GitHub Code Scanning)
89
63
  skillporter scan .
64
+ skillporter scan . --format sarif > skillporter.sarif
90
65
 
91
- # 5. Initialize skillporter.yaml, synchronize teammates, and pin skillporter.lock
66
+ # 4. Initialize manifest, synchronize transitive dependencies, and verify reproducible lockfile in CI
92
67
  skillporter init
93
68
  skillporter sync
94
- skillporter lock
69
+ skillporter lock --check
70
+
71
+ # 5. Diagnose reachability, audit provenance/override logs, or roll back to a verified snapshot
72
+ skillporter diagnose .
73
+ skillporter audit .
74
+ skillporter rollback pdf
95
75
  ```
96
76
 
97
77
  ---
98
78
 
99
- ## Real-World Evidence: Why Skillporter Exists
100
-
101
- Built after auditing the exact failure modes reported across upstream agent ecosystems:
79
+ ## Core Differentiators
102
80
 
103
- - **[agentskills/agentskills#15](https://github.com/agentskills/agentskills/issues/15)** (130+ comments) — *"Claude is looking at `.claude/skills/` and GitHub Copilot is looking at `.github/skills/`… create symlinks that match the specific folder of each harness"*
104
- - **[thn-inc/claude-tweaks#3000](https://github.com/thn-inc/claude-tweaks/issues/3000)** — skill resolution misses `.agents/skills` when the symlink is absent or inside a **git worktree**
105
- - **[openclaw/openclaw#14593](https://github.com/openclaw/openclaw/issues/14593)** — symlinked skill installs fail inside Docker build contexts
106
- - **[squne121/loop-protocol](https://github.com/squne121/loop-protocol/issues)** — replacing broken Codex skill symlinks with a fail-closed `.agents/skills` bridge
81
+ - **Multi-Harness Management**: Writes shared `.agents/skills/` once across 8 primary harnesses while preserving shared directories when individual harnesses are removed.
82
+ - **Deterministic Lockfiles (`skillporter.lock`)**: Pins `resolved_commit`, `tree_hash`, per-file SHA-256 `file_hashes`, `pin_state` (`PINNED_COMMIT` / `PINNED_CONTENT` / `UNPINNED_MUTABLE`), dependencies, and adapter version.
83
+ - **Reproducible Synchronization**: `skillporter sync` honors locked Git commit SHAs even when upstream branches move, and rejects unexpected upstream content changes without `--force`.
84
+ - **Multi-Layer Static Security Assessment**: Combines Python AST analysis, JS/TS checks, Markdown prompt/delegation inspection, bounded Base64/Hex/PowerShell decoding, cross-file chain detection, completeness tracking (`INCOMPLETE_ASSESSMENT` on truncated/unreadable files), and optional NVIDIA SkillSpector integration.
85
+ - **SHA-256 Drift & Duplicate Detection**: `diagnose`, `status`, and `doctor` detect diverging copies across harnesses and duplicate loading within the same harness.
86
+ - **Transactional Rollback & Crash Recovery**: Stages replacements in `.skillporter/tmp/txn-*` with a write-ahead `journal.json` and snapshots prior versions in `.skillporter/backups/` for atomic `skillporter rollback`.
107
87
 
108
88
  ---
109
89
 
110
- ## Key Features
111
-
112
- ### 1. Universal Source Resolution (`skillporter add`)
113
- Install skills from:
114
- - **GitHub shorthand**: `skillporter add owner/repo` or `skillporter add owner/repo/skills/my-skill@v1.2.0`
115
- - **GitHub tree URLs**: `skillporter add https://github.com/owner/repo/tree/main/skills/my-skill`
116
- - **Git URLs & commit SHAs**: `skillporter add https://example.com/skills.git --ref ceb64c6`
117
- - **ZIP & tar.gz archives**: `skillporter add ./bundle.zip` (hardened against Zip-Slip and symlink escapes)
118
- - **Registry slugs**: `skillporter add registry:anthropics/skills`
119
- - **Local directories**: `skillporter add ./authoring/my-skill --harness claude-code --harness codex`
120
-
121
- ### 2. SHA-256 Content-Drift & Duplicate Detection (`skillporter diagnose`)
122
- Competing tools copy files once and report success forever. Skillporter hashes every file inside every installed skill copy (`SHA-256`).
123
- - **Drift**: If you edit `.claude/skills/my-skill/SKILL.md` and forget to update `.agents/skills/my-skill/SKILL.md`, `skillporter diagnose` flags `DRIFT` with the exact diverging hashes and exits `1`.
124
- - **Duplicate loading**: If a skill is installed in both `.agents/skills` and `.cursor/skills`, `diagnose` flags `DUPLICATE` so Cursor does not load the same skill twice.
125
-
126
- ### 3. Static Security & Supply-Chain Protection (`skillporter scan`)
127
- Agent skills contain natural-language instructions and executable scripts. Before installing any skill, Skillporter inspects all Markdown and script files for:
128
- - **Embedded secrets & private keys** (`sec-private-key`, `sec-aws-key`, `sec-github-token`, `sec-api-key`)
129
- - **Prompt injection & covert overrides** (`sec-prompt-override`, `sec-hidden-unicode`, `sec-html-comment-instruction`)
130
- - **Dangerous execution patterns** (`sec-curl-pipe-sh`, `sec-reverse-shell`, `sec-credential-harvest`, `sec-dynamic-eval`)
131
- - **Filesystem escapes** (`sec-symlink-escape`, `sec-path-traversal`, `sec-binary-artifact`)
132
-
133
- *Transparency note: Static scanning inspects files for known dangerous patterns and structural escapes; it does not guarantee runtime safety.*
134
-
135
- ### 4. Manifest (`skillporter.yaml`), Lockfile (`skillporter.lock`) & Rollback
136
- Declare your project's skills in `skillporter.yaml`:
137
-
138
- ```yaml
139
- schema_version: 1
140
- project: acme-platform
141
- scope: project
142
- strategy: copy
143
- security_policy: HIGH
144
- harnesses:
145
- - claude-code
146
- - codex
147
- - cursor
148
- - github-copilot
149
- skills:
150
- - name: skillporter
151
- source: Shanmukh-l33t/skillporter/skills/skillporter
152
- ref: main
153
- ```
154
-
155
- Run `skillporter sync` to reconcile the workspace, `skillporter lock` to pin exact git commits and SHA-256 tree hashes in `skillporter.lock`, and `skillporter rollback <skill>` to restore the previous snapshot from `.skillporter/backups/` if an update introduces a regression.
90
+ ## Harness Compatibility & Verification Matrix (19 Harnesses)
91
+
92
+ 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 tested against a live harness runtime.
93
+
94
+ | Harness | Project Path | User / Global Path | Support | Verification Evidence |
95
+ |---|---|---|---|---|
96
+ | **Hermes Agent** | `.hermes/skills/` | `$HERMES_HOME/skills/<cat>/<name>` | `NATIVE` | `RUNTIME_VERIFIED` |
97
+ | **Claude Code** | `.claude/skills/` | `~/.claude/skills/` | `NATIVE` | `INTEGRATION_TESTED` |
98
+ | **OpenAI Codex** | `.agents/skills/` | `~/.agents/skills/` | `NATIVE` | `INTEGRATION_TESTED` |
99
+ | **Cursor** | `.agents/skills/`, `.cursor/skills/` (+2 compat) | `~/.agents/skills/`, `~/.cursor/skills/` | `NATIVE` | `INTEGRATION_TESTED` |
100
+ | **GitHub Copilot** | `.github/skills/` (+2 compat) | `~/.copilot/skills/` (+1 compat) | `NATIVE` | `FIXTURE_TESTED` |
101
+ | **Gemini CLI** | `.agents/skills/`, `.gemini/skills/` | `~/.agents/skills/`, `~/.gemini/skills/` | `NATIVE` | `FIXTURE_TESTED` |
102
+ | **Google Antigravity** | `.agents/skills/` (+1 compat) | `~/.gemini/config/skills/` | `NATIVE` | `FIXTURE_TESTED` |
103
+ | **Windsurf** | `.windsurf/skills/` | `~/.codeium/windsurf/skills/` | `NATIVE` | `FIXTURE_TESTED` |
104
+ | **Cline** | `.cline/skills/` (+3 compat) | `~/.cline/skills/` | `NATIVE` | `FIXTURE_TESTED` |
105
+ | **Roo Code** | `.roo/skills/` (+1 compat) | `~/.roo/skills/` (+1 compat) | `NATIVE` | `FIXTURE_TESTED` |
106
+ | **OpenCode** | `.opencode/skills/` (+2 compat) | `~/.config/opencode/skills/` (+2 compat) | `NATIVE` | `FIXTURE_TESTED` |
107
+ | **Zed** | `.agents/skills/` | `~/.agents/skills/` | `NATIVE` | `FIXTURE_TESTED` |
108
+ | **Replit Agent** | `.agents/skills/` (+1 compat) | `~/.config/agents/skills/` | `NATIVE` | `FIXTURE_TESTED` |
109
+ | **JetBrains Junie** | `.junie/skills/` (+1 compat) | `~/.junie/skills/` (+1 compat) | `NATIVE` | `FIXTURE_TESTED` |
110
+ | **OpenClaw** | `.openclaw/skills/` (+2 compat) | `~/.openclaw/skills/` (+1 compat) | `NATIVE` | `FIXTURE_TESTED` |
111
+ | **OpenHands** | `.agents/skills/` (+2 compat) | `~/.agents/skills/` (+1 compat) | `NATIVE` | `FIXTURE_TESTED` |
112
+ | **Goose** | `.agents/skills/` (+1 compat) | `~/.agents/skills/` (+1 compat) | `NATIVE` | `FIXTURE_TESTED` |
113
+ | **Continue** | `.continue/skills/` (`.continue/rules/` adapted) | `~/.continue/skills/` | `COMPATIBLE` | `FIXTURE_TESTED` |
114
+ | **Aider / AiderDesk** | `.aider-desk/skills/` (`CONVENTIONS.md` adapted) | `~/.aider-desk/skills/` | `ADAPTED` | `FIXTURE_TESTED` |
156
115
 
157
116
  ---
158
117
 
@@ -160,72 +119,28 @@ Run `skillporter sync` to reconcile the workspace, `skillporter lock` to pin exa
160
119
 
161
120
  | Command | Description |
162
121
  |---|---|
163
- | `skillporter add <source>` | Resolve, validate, security-scan, and install skills from GitHub, Git, archive, or local path |
122
+ | `skillporter add <source>` | Resolve, validate, security-scan, and install skills (`--dry-run`, `--allow-risky`, `--force`, `--json`) |
123
+ | `skillporter install <dir>` | Security-scan and install a local skill directory (`--dry-run`, `--allow-risky`, `--force`, `--json`) |
124
+ | `skillporter remove <skill>` | Safely remove a skill while preserving shared `.agents/skills/` still owned by other harnesses (`--dry-run`, `--json`) |
125
+ | `skillporter sync [path]` | Resolve pinned/transitive dependencies, verify lockfile hashes, and synchronize harnesses (`--dry-run`, `--json`) |
126
+ | `skillporter lock [path] [--check]` | Write or CI-verify (`--check`) deterministic `skillporter.lock` |
127
+ | `skillporter scan [path]` | Run static security & supply-chain assessment (`--format text\|json\|sarif`, `--max-risk-score`) |
128
+ | `skillporter audit [path]` | Inspect installed skill origins, security posture, lockfile drift, and `.skillporter/audit.jsonl` events |
164
129
  | `skillporter diagnose [path]` | Check reachability, broken symlinks, SHA-256 content drift, duplicates, and spec compliance |
165
- | `skillporter doctor [path] [--fix]` | Run full workspace health check and optionally auto-repair missing/drifted installs |
166
- | `skillporter scan [path]` | Run static supply-chain and prompt-injection security assessment |
167
- | `skillporter validate [path]` | Validate `SKILL.md` frontmatter and body against the [Agent Skills spec](https://agentskills.io/specification) |
168
- | `skillporter inspect <source>` | Inspect a local or remote skill package (files, scripts, security, adapted previews) before installing |
169
- | `skillporter detect [path]` | Detect which AI agent harnesses are installed on the machine or active in the project |
170
- | `skillporter matrix` | Print the 19-harness compatibility and verification matrix (`--json` supported) |
171
- | `skillporter init [path]` | Generate `skillporter.yaml` from discovered skills and active harnesses |
172
- | `skillporter sync [path]` | Reconcile workspace skills across target harnesses and update `skillporter.lock` |
173
- | `skillporter lock [path]` | Write deterministic `skillporter.lock` with SHA-256 content tree hashes |
174
- | `skillporter list [path]` | List managed and discovered skills with ownership, hashes, and active harnesses |
175
- | `skillporter update [skill]` | Update tracked skills from their recorded upstream source |
176
- | `skillporter rollback <skill>` | Restore a skill to its previous backup snapshot in `.skillporter/backups/` |
177
- | `skillporter install <path>` | Low-level local directory installer (`--strategy copy\|symlink`, `--adapt`, `--force`) |
178
- | `skillporter remove <skill>` | Remove a skill from target harnesses (`uninstall` alias supported) |
179
- | `skillporter search [query]` | Search the seed and configured skill registry catalog |
180
- | `skillporter info <target>` | Show detailed metadata for a harness adapter or registry package |
181
- | `skillporter pack [path]` | Build an immutable `.tar.gz` release archive and `provenance.json` checksum manifest |
182
- | `skillporter mcp` | Start the zero-dependency stdio JSON-RPC 2.0 MCP server |
183
-
184
- ### Exit Codes (CI Contract)
185
- - `0` — Clean / all checks passed
186
- - `1` — Findings detected (missing reachability, content drift, broken symlink, spec error, or security policy block)
187
- - `2` — Usage or runtime error (invalid path, unknown harness, unsafe overwrite refusal)
188
-
189
- ---
190
-
191
- ## GitHub Action Integration
192
-
193
- Validate `SKILL.md` compliance, scan for security risks, and verify harness reachability automatically on every pull request:
194
-
195
- ```yaml
196
- name: Skillporter Check
197
- on: [push, pull_request]
198
- jobs:
199
- skills:
200
- runs-on: ubuntu-latest
201
- steps:
202
- - uses: actions/checkout@v4
203
- - uses: Shanmukh-l33t/skillporter@v2
204
- with:
205
- command: validate
206
- path: .
207
- run-security-scan: "true"
208
- ```
209
-
210
- ---
211
-
212
- ## Documentation
213
-
214
- - [Getting Started](docs/getting-started/README.md)
215
- - [Installation & Distribution (uvx, npx, binaries, MCP)](docs/installation/README.md)
216
- - [Supported Harnesses & Evidence Directory (19 Harnesses)](docs/harnesses/README.md)
217
- - [CLI Command Reference](docs/commands/README.md)
218
- - [Configuration (`skillporter.yaml` & `skillporter.lock`)](docs/configuration/README.md)
219
- - [Security & Supply-Chain Model](docs/security/README.md)
220
- - [System Architecture](ARCHITECTURE.md)
221
- - [Adapter Development SDK](docs/adapters/README.md)
222
- - [Registry & Immutable Packaging](docs/registry/README.md)
223
- - [Troubleshooting](docs/troubleshooting/README.md)
224
- - [Contributing Guide](CONTRIBUTING.md)
225
- - [Product Roadmap](ROADMAP.md)
226
-
227
- ---
228
-
229
- ## License
230
-
231
- MIT — see [LICENSE](LICENSE).
130
+ | `skillporter doctor [path] [--fix]` | Comprehensive workspace health check and tamper-safe repair (`--dry-run`, `--json`) |
131
+ | `skillporter status [path]` | Unified workspace manifest, lockfile, per-harness installed/locked state, and drift summary |
132
+ | `skillporter update [skill]` | Fetch, security-gate, backup, and update tracked skills (`--dry-run`, `--allow-risky`, `--json`) |
133
+ | `skillporter rollback <skill>` | Atomically restore a skill (and dependency graph) from SHA-256-verified `.skillporter/backups/` (`--dry-run`, `--json`) |
134
+ | `skillporter validate [path]` | Validate `SKILL.md` against the Agent Skills specification (`--format text\|json\|sarif`) |
135
+ | `skillporter inspect <source>` | Inspect local/remote package structure, security posture, and adapted rule previews |
136
+ | `skillporter graph [path]` | Render or export (`--json`) topological skill dependency graph |
137
+ | `skillporter sandbox run <skill>` | **[Experimental]** Opt-in non-mutating dry-run behavioral trace |
138
+ | `skillporter explain <finding>` | Explain any diagnostic, lockfile, validation, or `sec-*` finding code with remediation commands |
139
+ | `skillporter search / info / pack / publish` | Search catalog, inspect metadata, build deterministic `.tar.gz` + `provenance.json`, or publish |
140
+ | `skillporter detect / matrix / demo` | Detect installed harnesses, print 19-harness matrix, or run zero-residue demo |
141
+ | `skillporter mcp` | Run hardened JSON-RPC 2.0 MCP server (read-only by default; `--allow-writes` opt-in) |
142
+
143
+ ### Exit Codes
144
+ - `0`: Clean / operation succeeded
145
+ - `1`: Policy or diagnostic finding (drift, broken symlink, spec error, security block, lockfile mismatch, cycle/conflict)
146
+ - `2`: Usage or runtime error (invalid argument, unknown harness, missing path)
Binary file
package/package.json CHANGED
@@ -1,8 +1,12 @@
1
1
  {
2
2
  "name": "@shanmukhdheekonda/skillporter",
3
- "version": "2.0.3",
4
- "description": "ONE SKILL. EVERY AGENT. Universal package manager, validator, security scanner, and synchronizer for AI-agent skills.",
3
+ "version": "3.0.0",
4
+ "description": "AI agent skill manager for multi-agent skill synchronization, skill lifecycle management, and deterministic skill lockfile security across 19+ harnesses.",
5
5
  "keywords": [
6
+ "ai-agent-skill-manager",
7
+ "multi-agent-skill-synchronization",
8
+ "skill-lifecycle-management",
9
+ "skill-lockfile",
6
10
  "agent-skills",
7
11
  "ai-agents",
8
12
  "claude-code",