vskill 0.5.129 → 0.5.130

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
@@ -2,15 +2,15 @@
2
2
 
3
3
  <p align="center">
4
4
  <strong>The package manager for AI skills.</strong><br/>
5
- Scan. Verify. Install. Across 49 agent platforms.
5
+ Author. Eval. Publish. Install across 53 agent platforms.
6
6
  </p>
7
7
 
8
8
  <p align="center">
9
9
  <a href="https://www.npmjs.com/package/vskill"><img src="https://img.shields.io/npm/v/vskill?color=cb3837&logo=npm" alt="npm" /></a>
10
10
  <a href="https://www.npmjs.com/package/vskill"><img src="https://img.shields.io/npm/dw/vskill?color=cb3837&logo=npm&label=downloads" alt="downloads" /></a>
11
- <img src="https://img.shields.io/badge/agents-49_platforms-0969DA" alt="49 agents" />
12
- <img src="https://img.shields.io/badge/plugins-5-8B5CF6" alt="5 plugins" />
13
- <img src="https://img.shields.io/badge/skills-8-10B981" alt="8 skills" />
11
+ <img src="https://img.shields.io/badge/agents-53_platforms-0969DA" alt="53 agents" />
12
+ <img src="https://img.shields.io/badge/plugins-8-8B5CF6" alt="8 plugins" />
13
+ <img src="https://img.shields.io/badge/skills-14-10B981" alt="14 skills" />
14
14
  <a href="https://verified-skill.com"><img src="https://img.shields.io/badge/registry-verified--skill.com-F59E0B" alt="registry" /></a>
15
15
  <img src="https://img.shields.io/badge/license-MIT-green" alt="MIT" />
16
16
  </p>
@@ -18,725 +18,157 @@
18
18
  <br/>
19
19
 
20
20
  ```bash
21
+ npx vskill studio # open the local IDE for AI skills
21
22
  npx vskill install remotion-best-practices
22
23
  ```
23
24
 
24
25
  <br/>
25
26
 
26
- ## The Problem
27
+ ## Why vskill
27
28
 
28
29
  **36.82% of AI skills have security flaws** ([Snyk ToxicSkills](https://snyk.io/blog/toxicskills-malicious-ai-agent-skills-clawhub/)).
30
+ And the ones that aren't malicious often *don't even improve the model* — they just feel like they should.
29
31
 
30
- When you install a skill today, you're trusting blindly:
32
+ vskill is built around three problems:
31
33
 
32
- - **No scanning** — malicious prompts execute with full system access
33
- - **No versioning** — silent updates can inject anything, anytime
34
- - **No deduplication** — the same skill lives in 3 repos, all diverging
35
- - **No blocklist** — known-bad skills install just fine
36
-
37
- vskill fixes all of this.
38
-
39
- <br/>
40
-
41
- ## How It Works
42
-
43
- ```
44
- ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
45
- │ Source │────>│ Scan │────>│ Verify │────>│ Install │
46
- │ │ │ │ │ │ │ │
47
- │ GitHub │ │ 38 rules │ │ LLM │ │ Pin SHA │
48
- │ Registry │ │ Blocklist│ │ analysis │ │ Lock ver │
49
- │ Local │ │ Patterns │ │ Intent │ │ Symlink │
50
- └──────────┘ └──────────┘ └──────────┘ └──────────┘
51
- ```
52
-
53
- Every install goes through the security pipeline. No exceptions. No `--skip-scan`.
34
+ - **Trust** — every install runs a 3-tier scan (52 patterns → blocklist → LLM intent). No `--skip-scan`.
35
+ - **Proof** — Skill Studio runs A/B evals so you can *show* a skill makes a model better, not assume it.
36
+ - **Reach** — one skill, 53 agents (Claude Code, Cursor, Copilot, Codex, Windsurf, Zed, Gemini CLI, Ollama, …).
54
37
 
55
38
  <br/>
56
39
 
57
- ## Quick Start
40
+ ## Skill Studio — the local IDE for skills
58
41
 
59
42
  ```bash
60
- # Install from any GitHub repo
61
- npx vskill install remotion-dev/skills/remotion-best-practices
62
-
63
- # Browse a repo and pick interactively
64
- npx vskill install remotion-dev/skills
65
-
66
- # Install a plugin (Claude Code)
67
- npx vskill install --repo anton-abyzov/vskill --plugin mobile
43
+ npx vskill studio
68
44
  ```
69
45
 
70
- Or install globally: `npm install -g vskill`
71
-
72
- > **Getting E401 errors?** If your project has a `.npmrc` pointing to a private registry (e.g. AWS CodeArtifact, GitHub Packages), npx may fail with `npm error code E401`. Fix it by overriding the registry:
73
- > ```bash
74
- > npx --registry https://registry.npmjs.org vskill install <skill>
75
- > ```
76
- > Or install globally once to avoid this entirely: `npm i -g vskill --registry https://registry.npmjs.org`
77
-
78
- <br/>
79
-
80
- ## Three-Tier Verification
81
-
82
- | Tier | How | Trust Level |
83
- |:-----|:----|:------------|
84
- | **Scanned** | 38 deterministic pattern checks against known attack vectors | Baseline |
85
- | **Verified** | Pattern scan + LLM-based intent analysis for subtle threats | Recommended |
86
- | **Certified** | Full manual security review by the vskill team | Highest |
46
+ A localhost workbench opens at a deterministic per-project port. You can:
87
47
 
88
- Every install is at minimum **Scanned**. The `vskill.lock` file tracks the SHA-256 hash, scan date, and tier for every installed skill. Running `vskill update` diffs against the locked version and re-scans before applying.
48
+ - **Author** new skills with an AI-assisted generator (Anthropic skill-creator engine *or* vskill native first-class peers, you pick).
49
+ - **Edit** SKILL.md live with a Linear/Raycast-grade UI.
50
+ - **Run benchmarks** with SSE-streamed pass/fail across Claude, GPT, Llama, Gemini, local Ollama / LM Studio.
51
+ - **A/B compare** with vs. without your skill — blind LLM judge ranks outputs as EFFECTIVE / MARGINAL / INEFFECTIVE / DEGRADING.
52
+ - **Cross-model sweep** the same skill across providers (Anthropic Batch API supported — 50% cheaper).
53
+ - **Find skills** from the verified-skill.com registry with a `⌘⇧K` palette, install with consent + provenance.
54
+ - **Publish** with one click — `git push` from the UI, then opens the submit form on verified-skill.com pre-filled.
89
55
 
90
- <br/>
91
-
92
- ## 49 Agent Platforms
93
-
94
- vskill auto-detects your installed agents and installs skills to all of them at once.
95
-
96
- **CLI & Terminal** — Claude Code, Cursor, GitHub Copilot, Windsurf, Codex, Gemini CLI, Amp, Cline, Roo Code, Goose, Aider, Kilo, Devin, OpenHands, Qwen Code, Trae, and more
97
-
98
- **IDE Extensions** — VS Code, JetBrains, Zed, Neovim, Emacs, Sublime Text, Xcode
99
-
100
- **Cloud & Hosted** — Replit, Bolt, v0, GPT Pilot, Plandex, Sweep
56
+ CORS-free by design: the browser only ever talks to localhost. The server proxies to verified-skill.com and to provider APIs. Every mutation is logged to `~/.vskill/studio-ops.jsonl` for audit.
101
57
 
102
58
  <br/>
103
59
 
104
- ## Plugin Marketplace
105
-
106
- vskill ships **7 expert skills** organized into **5 domain plugins**. Each plugin has its own namespace — install only what you need.
107
-
108
- ```bash
109
- npx vskill install --repo anton-abyzov/vskill --plugin mobile
110
- npx vskill install --repo anton-abyzov/vskill --plugin marketing
111
- ```
112
-
113
- Then invoke as `/plugin:skill` in your agent:
114
-
115
- ```
116
- /mobile:appstore /marketing:social-media-posting
117
- /google-workspace:gws /skills:scout
118
- ```
119
-
120
- ### Available Plugins
121
-
122
- | Plugin | Description | Skills |
123
- |--------|-------------|--------|
124
- | **mobile** | React Native, Expo, Flutter, SwiftUI, Jetpack Compose, app store | `appstore` |
125
- | **marketing** | Social media content creation, posting, and engagement across 11 platforms, plus Slack messaging | `social-media-posting` `slack-messaging` |
126
- | **google-workspace** | Google Workspace CLI (gws) for Drive, Sheets, Docs, Calendar, Chat, Admin | `gws` |
127
- | **skills** | Skill discovery, recommendations, and authoring | `scout` `skill-builder` |
128
- | **productivity** | Expert network survey completion and paid expertise sharing | `survey-passing` |
129
-
130
- <br/>
131
-
132
- ## Commands
133
-
134
- ```
135
- vskill install <source> Install skill after security scan
136
- vskill enable <skill> Enable a previously-installed skill in Claude Code
137
- vskill disable <skill> Disable a skill (keep files on disk; flip the toggle)
138
- vskill find <query> Search the verified-skill.com registry
139
- vskill scan <path> Run security scan without installing
140
- vskill list Show installed skills with status
141
- vskill list --installed Per-scope enabled/disabled status table
142
- vskill remove <skill> Remove an installed skill
143
- vskill update [skill] Update with diff scanning (--all for everything)
144
- vskill cleanup Remove stale plugin entries and orphaned cache
145
- vskill audit [path] Full project security audit with LLM analysis
146
- vskill info <skill> Show detailed skill information
147
- vskill submit <source> Submit a skill for verification
148
- vskill blocklist Manage blocked malicious skills
149
- vskill init Initialize vskill in a project
150
- vskill diff <s> <from> <to> Show multi-file diff between two versions
151
- vskill keys <cmd> [provider] Manage LLM API keys (set/list/remove/path)
152
- ```
153
-
154
- ## Enable / Disable
155
-
156
- `vskill install` extracts a skill's files and (when the source is a Claude
157
- Code marketplace plugin) registers the plugin in `~/.claude/settings.json`'s
158
- `enabledPlugins`. Once installed, you can toggle it without re-downloading:
159
-
160
- ```bash
161
- # Disable a skill — keeps files on disk, just removes the enabledPlugins entry.
162
- vskill disable foo
163
-
164
- # Re-enable later — same plugin id, no network round-trip.
165
- vskill enable foo
166
-
167
- # Project-scope toggle (writes <cwd>/.claude/settings.json instead of ~/).
168
- vskill enable foo --scope project
169
-
170
- # Preview what would happen (prints the exact `claude plugin install/uninstall`
171
- # invocation, no subprocess spawn).
172
- vskill enable foo --dry-run
173
- vskill disable foo --dry-run
174
-
175
- # Verbose — shows resolved binary path + scope + cwd.
176
- vskill enable foo --verbose
177
-
178
- # Machine-readable JSON.
179
- vskill enable foo --json
180
- ```
181
-
182
- Both commands wrap `claude plugin install/uninstall` per
183
- [ADR 0724-01](../../.specweave/docs/internal/architecture/adr/0724-01-skill-enable-disable-via-claude-cli.md)
184
- — vskill never writes `settings.json` directly. The commands are
185
- **idempotent**: running `vskill enable foo` twice prints
186
- `foo already enabled in user scope` on the second run and exits 0.
187
-
188
- ### Install with `--no-enable`
60
+ ## How install works
189
61
 
190
- For CI pipelines that want the files on disk and the lockfile entry written
191
- but **not** the plugin registered:
192
-
193
- ```bash
194
- vskill install anton-abyzov/skill-foo --no-enable
195
- # … later, when you actually want it active:
196
- vskill enable foo
197
- ```
198
-
199
- ### `vskill list --installed`
200
-
201
- Joins `vskill.lock` with `enabledPlugins` reads at user and project scope:
202
-
203
- ```
204
- $ vskill list --installed
205
-
206
- Installed Skills (3)
207
-
208
- Skill Version Source User Scope Project Scope
209
- foo 1.0.0 marketplace:o/r#foo enabled disabled
210
- bar 2.1.0 marketplace:o/r#bar disabled enabled
211
- baz 0.1.0 github:o/r#baz n/a n/a
212
- ```
213
-
214
- The `n/a` rows are auto-discovered skills (no `marketplace` field in their
215
- lockfile entry) — there's nothing to toggle for them; agents pick them up
216
- directly from their `localSkillsDir`/`globalSkillsDir` on the filesystem.
217
-
218
- JSON output (`--installed --json`) emits one object per skill with
219
- `{name, version, source, enabledUser, enabledProject, autoDiscovered}` —
220
- suitable for piping into `jq`.
221
-
222
- ### Multi-agent surface awareness
223
-
224
- When you have Claude Code AND Cursor AND Codex CLI installed, both
225
- `install` and `enable` print a per-agent line so you know exactly which
226
- surface received the registration:
227
-
228
- ```
229
- $ vskill enable foo
230
-
231
- Enabled foo (foo@m) in user scope.
232
- > Claude Code (user) — enabled via claude CLI
233
- > Cursor — auto-discovers from .cursor/skills (no plugin enable needed)
234
- > Codex CLI — auto-discovers from .codex/skills (no plugin enable needed)
235
- ```
236
-
237
- For non-Claude-Code agents that auto-discover from disk, there is nothing
238
- to toggle — the skill is live the moment its files exist in the agent's
239
- `localSkillsDir`/`globalSkillsDir`. To stop loading, run
240
- `vskill remove <name>`.
241
-
242
- ### `vskill cleanup --dry-run`
243
-
244
- Preview which stale `enabledPlugins` entries would be removed before
245
- running the real cleanup:
246
-
247
- ```bash
248
- vskill cleanup --dry-run
249
- # Dry-run — preview of stale plugin uninstalls:
250
- # > claude plugin uninstall --scope user -- old-foo@m
251
- # > claude plugin uninstall --scope project -- old-bar@m
252
- #
253
- # 2 stale entries removed from user scope, 0 from project scope, 5 in-sync skills left untouched.
254
62
  ```
255
-
256
- ## Compare skill versions
257
-
258
- `vskill diff <skill> <from> <to>` fetches a multi-file diff from
259
- verified-skill.com and renders it to stdout. The platform-side endpoint
260
- reuses GitHub's `/compare/A...B` for GitHub-hosted skills, so the full
261
- bundle (not just `SKILL.md`) is diffed.
262
-
263
- ```bash
264
- # Full color diff (respects TTY + NO_COLOR / FORCE_COLOR)
265
- vskill diff anton-abyzov/vskill/scout 4f2285d 71a9132
266
-
267
- # Summary only: `filename +N -M` per file + a totals line
268
- vskill diff anton-abyzov/vskill/scout 4f2285d 71a9132 --stat
269
-
270
- # Machine-readable raw compare response (pretty JSON, no colors)
271
- vskill diff anton-abyzov/vskill/scout 4f2285d 71a9132 --json | jq '.files[].filename'
272
-
273
- # Glob-filter the file list (minimatch)
274
- vskill diff anton-abyzov/vskill/scout 4f2285d 71a9132 --files "**/SKILL.md"
63
+ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
64
+ │ Source │────>│ Scan │────>│ Verify │────>│ Install │
65
+ │ │ │ │ │ │ │ │
66
+ GitHub │ │ 52 rules │ │ LLM │ │ Pin SHA │
67
+ Registry │ │ Blocklist│ │ intent │ │ Lock ver
68
+ Local │ │ Patterns │ │ analysis │ │ Symlink │
69
+ └──────────┘ └──────────┘ └──────────┘ └──────────┘
275
70
  ```
276
71
 
277
- Flags:
278
-
279
- | Flag | Description |
280
- |:-----|:------------|
281
- | `--stat` | Summary only — one line per file (`filename +N -M`) plus a totals line |
282
- | `--json` | Pretty-printed raw compare JSON (platform response, filtered by `--files`). No colors — safe to pipe into `jq`. |
283
- | `--files <pattern>` | Filter the file list via a `minimatch` glob (e.g. `**/*.md`) |
284
-
285
- **Windows compatibility.** `vskill diff` is pure `fetch()` + `process.stdout.write`
286
- — zero shell-outs to `git`, `diff`, or `less`. Colors use raw ANSI codes
287
- (`\x1b[32m` / `\x1b[31m` / `\x1b[90m` / `\x1b[0m`) which Windows Terminal,
288
- PowerShell 7+, and conhost-enabled cmd.exe (Windows 10 1511+) render
289
- natively. The windows-latest CI install-smoke job (T-008, 0706) exercises
290
- `diff --help` on every build, so PowerShell and cmd.exe stay first-class.
291
-
292
- Golden test case: the `scout` skill between SHAs
293
- `4f2285d...71a9132` returns 4 files with +590 insertions / -8 deletions.
294
- See [https://github.com/anton-abyzov/vskill/compare/4f2285d...71a9132](https://github.com/anton-abyzov/vskill/compare/4f2285d...71a9132).
295
-
296
- <details>
297
- <summary><strong>Install flags</strong></summary>
298
-
299
- | Flag | Description |
300
- |:-----|:------------|
301
- | `--yes` `-y` | Accept defaults, no prompts |
302
- | `--global` `-g` | Install to global scope |
303
- | `--copy` | Copy files instead of symlinking |
304
- | `--skill <name>` | Pick a specific skill from a multi-skill repo |
305
- | `--plugin <name>` | Pick a plugin by name (checks marketplace, then plugins/ folder) |
306
- | `--plugin-dir <path>` | Local directory as plugin source |
307
- | `--repo <owner/repo>` | Remote GitHub repo as plugin source |
308
- | `--agent <id>` | Target a specific agent (e.g., `cursor`) |
309
- | `--force` | Install even if blocklisted |
310
- | `--cwd <path>` | Override project root |
311
- | `--all` | Install all skills from a repo |
312
- | `--no-enable` | Install files + lockfile entry, but skip `claude plugin install` |
313
- | `--scope <scope>` | Plugin enable scope: `user` or `project` |
314
- | `--dry-run` | Preview install / enable invocations without executing |
315
-
316
- </details>
72
+ Every install runs the full pipeline. SARIF v2.1.0 output is available for CI (`vskill audit --ci`).
317
73
 
318
74
  <br/>
319
75
 
320
- ## Skill Authoring
321
-
322
- Create and manage universal cross-tool skills with the `vskill skill` command family.
323
- The bundled `skill-builder` meta-skill drives the flow from inside any supported
324
- agent host (Claude Code, Cursor, Codex, Gemini CLI, etc.) with an automatic
325
- path A/B/C fallback chain.
76
+ ## Quick Start
326
77
 
327
78
  ```bash
328
- vskill skill new --prompt "lint markdown" --targets=claude-code,codex
329
- vskill skill import ./existing-skill/SKILL.md
330
- vskill skill list
331
- vskill skill info skill-builder
332
- vskill skill publish skill-builder
333
- ```
334
-
335
- Every emitted skill carries an `x-sw-schema-version: 1` marker on its frontmatter,
336
- and ships with a `<name>-divergence.md` report that documents any frontmatter
337
- fields dropped or translated per target (e.g. `allowed-tools` → OpenCode
338
- `permission.bash: ask`).
339
-
340
- <br/>
341
-
342
- ## Security Audit
79
+ # Install one skill
80
+ npx vskill install remotion-dev/skills/remotion-best-practices
343
81
 
344
- Scan entire projects for security issues — not just skills:
82
+ # Browse a repo, pick interactively
83
+ npx vskill install remotion-dev/skills
345
84
 
346
- ```bash
347
- vskill audit # scan current directory
348
- vskill audit --ci --report sarif # CI-friendly SARIF output
349
- vskill audit --severity high,critical # filter by severity
85
+ # Install a Claude Code plugin (full domain bundle)
86
+ npx vskill install --repo anton-abyzov/vskill --plugin frontend
350
87
  ```
351
88
 
352
- <br/>
353
-
354
- ## Skills vs Plugins
355
-
356
- **Skills** are single `SKILL.md` files that work with any of the 49 supported agents. They follow the [Agent Skills Standard](https://agentskills.io) — drop a `SKILL.md` into the agent's commands directory.
89
+ Install globally for repeat use: `npm i -g vskill`
357
90
 
358
- **Plugins** are multi-component containers for Claude Code. They bundle skills, hooks, commands, and agents under a single namespace with enable/disable support and marketplace integration.
91
+ <sub>Behind a private npm registry? See <a href="https://verified-skill.com/docs/getting-started">Getting Started</a> for the E401 workaround.</sub>
359
92
 
360
93
  <br/>
361
94
 
362
- ## Why Deduplication Matters
363
-
364
- Even Anthropic ships the same skill in two places:
365
-
366
- - [`anthropics/skills/frontend-design`](https://github.com/anthropics/skills/blob/main/skills/frontend-design/SKILL.md) (standalone)
367
- - [`anthropics/claude-code/.../frontend-design`](https://github.com/anthropics/claude-code/blob/main/plugins/frontend-design/skills/frontend-design/SKILL.md) (plugin)
368
-
369
- Install both? Duplicates. They diverge? Inconsistencies. vskill gives you one install path with version pinning and dedup, regardless of source.
370
-
371
- <br/>
372
-
373
- ## Skill Evals
374
-
375
- Every skill can include evaluations — standardized test cases that verify the skill actually improves LLM output. Skills with evals get quality scores on [verified-skill.com](https://verified-skill.com) and regression tracking across versions.
376
-
377
- ### How it works
378
-
379
- **The eval system tests the skill's plan, not its execution.** It doesn't post to social media, generate images, or call external APIs. Instead, it measures whether your SKILL.md successfully teaches an LLM the correct behavior.
95
+ ## What ships today
380
96
 
381
- The algorithm:
97
+ | Surface | Count | Notes |
98
+ |---|---|---|
99
+ | **Agent platforms** | **53** | Claude Code, Cursor, Copilot, Windsurf, Codex, Gemini CLI, Zed, Ollama, LM Studio, … |
100
+ | **Plugins** | **8** | Multi-skill bundles for Claude Code |
101
+ | **Skills** | **14** | Individual SKILL.md files inside plugins |
102
+ | **Top-level CLI commands** | **22** | `install`, `studio`, `eval`, `find`, `scan`, `audit`, `submit`, `skill`, `keys`, … |
103
+ | **Tests** | **307 test files** | More tests than source files |
382
104
 
383
- 1. Your **SKILL.md** is loaded as a system prompt
384
- 2. The **eval prompt** (a realistic user request) is sent to the LLM
385
- 3. The LLM generates a **text response** describing what it would do
386
- 4. An **LLM judge** grades each assertion against that response
105
+ ### Plugins (Claude Code)
387
106
 
388
- For example, a social media posting skill's eval might check: does the LLM mention checking for duplicate posts? Does it use the correct aspect ratios per platform? Does it wait for user approval? If the skill description is clear about these behaviors, the LLM will demonstrate them in its response. If it's vague, assertions fail — telling you exactly what to improve.
107
+ | Plugin | Skills |
108
+ |---|---|
109
+ | **frontend** | figma-connect, frontend-design, task-skill-announcer |
110
+ | **personal** | obsidian-brain, greet-anton, tax-filing |
111
+ | **marketing** | slack-messaging, social-media-posting |
112
+ | **skills** | skill-builder, scout |
113
+ | **mobile** | appstore |
114
+ | **google-workspace** | gws |
115
+ | **easychamp** | tournament-manager |
116
+ | **productivity** | survey-passing |
389
117
 
390
- Think of it like testing a recipe book: you don't cook the food, you check whether someone reading your recipe would know the right steps, quantities, and order.
118
+ Install all eight: `npx vskill install --repo anton-abyzov/vskill --all`
391
119
 
392
- ### Three evaluation modes
393
-
394
- | Mode | What it does | When to use |
395
- |------|-------------|-------------|
396
- | **Benchmark** | Runs prompts WITH skill, grades assertions | Measure pass rate after edits |
397
- | **A/B Comparison** | Runs each prompt WITH and WITHOUT skill, blind-judges both | Prove the skill adds value |
398
- | **Activation Test** | Tests whether the skill correctly triggers on relevant prompts | Reduce false positives/negatives |
399
-
400
- The **A/B comparison** randomly shuffles outputs as "Response A" and "Response B" before scoring, so the judge can't tell which used the skill. Each response is scored on content (1-5) and structure (1-5). The delta between skill and baseline averages produces a verdict: EFFECTIVE, MARGINAL, INEFFECTIVE, or DEGRADING.
401
-
402
- ### Unit testing vs integration testing
403
-
404
- Skill evals are **unit tests** — they verify the skill's teaching quality in isolation, without calling external tools or APIs. This is a deliberate design choice:
405
-
406
- | | Unit Tests (current) | Integration Tests |
407
- |:---|:---|:---|
408
- | **What** | Does the SKILL.md teach the right workflow? | Does the end-to-end tool execution work? |
409
- | **Speed** | ~30s per case | ~3min per case |
410
- | **Infrastructure** | None — any LLM provider | Real MCP servers, auth tokens, test data |
411
- | **CI/CD** | Runs anywhere | Needs secrets, test workspaces |
412
- | **Flakiness** | Low (deterministic text) | High (external APIs, rate limits) |
413
- | **Coverage** | Workflow, tool selection, formatting, parameters | API compatibility, auth, error recovery |
414
-
415
- **Why unit tests are sufficient for most skills:** The eval doesn't test whether Slack's API works — it tests whether your SKILL.md correctly teaches an LLM to use `slack_search_channels` before `slack_read_channel`, to use `thread_ts` for replies, and to format messages with `*bold*` instead of `**bold**`. If the teaching is correct, the execution follows.
416
-
417
- #### MCP-dependent skills (Slack, GitHub, Linear, etc.)
418
-
419
- Skills that reference MCP tools automatically get **simulation mode** during evals. The eval system detects MCP tool references in your SKILL.md and instructs the LLM to demonstrate the complete workflow with simulated tool responses. This means your assertions can test tool selection, parameter correctness, and workflow order — even without a real MCP connection.
420
-
421
- ```
422
- Standard skill eval: MCP skill eval (automatic):
423
- ┌──────────┐ ┌──────────┐
424
- │ SKILL.md │ → system prompt │ SKILL.md │ → system prompt
425
- └──────────┘ └──────────┘ + simulation instructions
426
- ↓ ↓
427
- ┌──────────┐ ┌──────────┐
428
- │ LLM │ → text response │ LLM │ → simulated workflow
429
- └──────────┘ └──────────┘ (tool calls + mock responses)
430
- ↓ ↓
431
- ┌──────────┐ ┌──────────┐
432
- │ Judge │ → pass/fail │ Judge │ → pass/fail
433
- └──────────┘ └──────────┘
434
- ```
435
-
436
- No configuration needed — if your SKILL.md mentions `slack_*`, `github_*`, `linear_*`, or `gws_*` tools, simulation mode activates automatically.
437
-
438
- #### Activation testing
439
-
440
- Skills can also include trigger accuracy tests in `evals/activation-prompts.json`:
441
-
442
- ```json
443
- {
444
- "prompts": [
445
- { "prompt": "check what's new in #engineering", "expected": "should_activate" },
446
- { "prompt": "send an email to the team", "expected": "should_not_activate" }
447
- ]
448
- }
449
- ```
450
-
451
- This tests whether your skill's `description` field in SKILL.md causes the skill to trigger on the right prompts (precision) and not miss relevant ones (recall). Results show TP/TN/FP/FN classification with precision, recall, and reliability metrics.
452
-
453
- #### Cross-model testing
454
-
455
- The eval system supports Claude (CLI or API), Anthropic API, and Ollama. Testing across models reveals:
456
- - Whether your skill helps **weaker models** (Llama, Qwen) follow complex workflows
457
- - Whether base model improvements have made a skill **unnecessary**
458
- - Whether your simulation instructions are **clear enough** for smaller models
459
-
460
- ```bash
461
- # Test with Opus (high-end)
462
- VSKILL_EVAL_MODEL=opus npx vskill eval run my-skill
463
-
464
- # Test with Ollama (open-source)
465
- VSKILL_EVAL_PROVIDER=ollama VSKILL_EVAL_MODEL=llama3.1:8b npx vskill eval run my-skill
466
- ```
467
-
468
- ### Directory structure
469
-
470
- ```
471
- your-skill/
472
- ├── SKILL.md # The skill definition
473
- └── evals/
474
- ├── evals.json # Test cases + assertions
475
- ├── activation-prompts.json # Trigger accuracy tests (optional)
476
- └── benchmark.json # Latest benchmark results (auto-generated)
477
- ```
478
-
479
- ### evals.json format
480
-
481
- ```json
482
- {
483
- "skill_name": "your-skill",
484
- "evals": [
485
- {
486
- "id": 1,
487
- "name": "Descriptive test name",
488
- "prompt": "Realistic user prompt that tests the skill",
489
- "expected_output": "Reference output (not graded, for human context)",
490
- "files": [],
491
- "assertions": [
492
- { "id": "a1", "text": "Output includes specific technique X", "type": "boolean" },
493
- { "id": "a2", "text": "Code example compiles without errors", "type": "boolean" }
494
- ]
495
- }
496
- ]
497
- }
498
- ```
499
-
500
- ### Writing good evals
501
-
502
- - **Prompts** should be realistic user requests, not synthetic test inputs
503
- - **Assertions** must be objectively verifiable — avoid subjective criteria like "well-written"
504
- - Each eval case should test a distinct capability of the skill
505
- - 3-5 eval cases with 2-4 assertions each is a good starting point
506
-
507
- ### CLI commands
508
-
509
- ```bash
510
- npx vskill eval serve # Open visual eval UI (benchmark, compare, history)
511
- npx vskill eval init <skill-dir> # Scaffold evals.json from SKILL.md via LLM
512
- npx vskill eval run <skill-dir> # Run evals and grade assertions (CLI output)
513
- npx vskill eval coverage # Show eval status for all skills
514
- npx vskill eval generate-all # Batch-generate for all skills
515
- ```
516
-
517
- ### Visual eval UI
518
-
519
- `vskill eval serve` launches a local web UI where you can:
520
- - **Run benchmarks** — all cases or individually, with real-time streaming results
521
- - **Compare A/B** — side-by-side with/without skill scoring and grouped bar charts
522
- - **View history** — previous benchmark results load automatically
523
- - **Edit evals** — add/remove assertions, create new eval cases
524
- - **Switch models** — dropdown to change provider (Claude CLI, Anthropic API, Ollama) and model
525
-
526
- Previous benchmark results are displayed on the skill detail page without re-running. Per-case pass/fail status, time, and token usage are shown inline.
527
-
528
- ## API Key Storage
529
-
530
- `vskill` stores LLM provider API keys (Anthropic, OpenAI, OpenRouter) at `~/.vskill/keys.env` in dotenv format. One file. Same code path on macOS, Linux, and Windows.
531
-
532
- ### Storage location
533
-
534
- | Platform | Default path | Permissions |
535
- |:---|:---|:---|
536
- | macOS | `~/.vskill/keys.env` | `0600` (owner read/write only) |
537
- | Linux | `~/.vskill/keys.env` | `0600` (owner read/write only) |
538
- | Windows | `%USERPROFILE%\.vskill\keys.env` | NTFS ACL (user-scoped) |
539
-
540
- Override the default with `VSKILL_CONFIG_DIR` — useful for CI, hermetic tests, or multi-profile workflows. Example: `VSKILL_CONFIG_DIR=/tmp/test vskill keys set anthropic`.
541
-
542
- Get the absolute path at any time:
543
- ```bash
544
- vskill keys path
545
- # /Users/you/.vskill/keys.env
546
- ```
547
-
548
- ### Precedence: real env vars ALWAYS win
549
-
550
- If `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, or `OPENROUTER_API_KEY` is already set in your shell (from `direnv`, `1password-cli`, a CI secret, dotfiles, etc.), the stored key in `keys.env` is IGNORED for that provider. Real env vars are never overwritten by vskill's boot-time merge. This is the power-user escape hatch — vskill gets out of your way.
551
-
552
- You can verify the resolved source via `vskill keys list`:
553
- ```
554
- provider source key
555
- anthropic env var ****ABCD
556
- openai file ****EFGH
557
- openrouter not set
558
- ```
559
-
560
- ### `vskill keys` subcommands
561
-
562
- ```bash
563
- # Interactive masked paste (characters not echoed)
564
- vskill keys set anthropic
565
-
566
- # Piped stdin (dotfiles, provisioning scripts)
567
- echo "$ANTHROPIC_KEY" | vskill keys set anthropic
568
-
569
- # Table with stored/env/not-set status and redacted last-4
570
- vskill keys list
571
-
572
- # Idempotent remove (no error if not present)
573
- vskill keys remove anthropic
574
-
575
- # Print absolute path (same as the Settings modal footer)
576
- vskill keys path
577
- ```
578
-
579
- All four subcommands work identically on macOS, Linux, and Windows (enforced by a 3-OS CI matrix).
580
-
581
- ### Security model
582
-
583
- - Plaintext file, `0600` on POSIX — matches the precedent of `aws`, `kubectl`, and `supabase` credential files. The threat model is "solo developer, local tool, user-home ACLs", NOT "stolen unlocked laptop".
584
- - Keys are NEVER logged, printed to stdout, or embedded in error messages. Only redacted `****<last-4>` is ever emitted, verified by a log-capture unit test with an injected canary substring.
585
- - The paste flow in Settings modal clears the input synchronously after POST — the raw key is never held across a React render boundary.
586
- - If you want encryption at rest, set the provider env vars from your secrets manager (`direnv`, `1password-cli`, `pass`, etc.). The env var precedence rule means vskill will use them transparently and never read `keys.env` for those providers.
587
-
588
- ### Migration from legacy macOS Keychain tier
589
-
590
- Users who stored keys via the previous `vskill-<provider>` Keychain entries get a one-click import banner on first boot of vskill >=0.5.70. Old Keychain entries are retained for 30 days post-import as a rollback safety net; after that you can remove them manually with `security delete-generic-password -s vskill-anthropic -a vskill-user`. Non-Darwin platforms: no-op.
591
-
592
- ### `.gitignore` suggestion
593
-
594
- If you keep dotfiles in a Git repo, add this to `.gitignore`:
595
- ```
596
- ~/.vskill/keys.env
597
- ```
598
-
599
- ### First-run onboarding
600
-
601
- When `vskill studio` starts with no stored key AND no env var set, the terminal prompts you to paste a key BEFORE opening the browser. Paste (masked) + Enter → saved + browser opens. Or decline and get a `vskill keys set <provider>` hint to run later. If ANY provider env var is already set, the prompt is skipped silently — no nagging power users.
120
+ Browse the full catalog → [verified-skill.com/docs/plugins](https://verified-skill.com/docs/plugins)
602
121
 
603
122
  <br/>
604
123
 
605
- ## Claude Max/Pro subscription compliance
606
-
607
- vSkill Studio does not consume your Max/Pro subscription quota directly. It delegates to the official [Claude Code CLI](https://docs.claude.com/en/docs/claude-code), the sanctioned consumer per Anthropic's April 2026 Terms of Service update. The Claude adapter never reads `~/.claude/credentials*`, `~/.claude/auth*`, or `~/.claude/token*` — a bundled unit test (`src/eval/__tests__/claude-cli-compliance.test.ts`) plus a dist-bundle grep gate (`scripts/check-bundle-compliance.sh`) enforce this on every build.
608
-
609
- Issue API keys for direct access at [platform.claude.com/settings/keys](https://platform.claude.com/settings/keys), [platform.openai.com/api-keys](https://platform.openai.com/api-keys), or [openrouter.ai/settings/keys](https://openrouter.ai/settings/keys). Keys entered in Studio's Settings modal (or via `vskill keys set`) are stored locally at `~/.vskill/keys.env` with `0600` permissions on POSIX — never synced, never committed to git, never transmitted off-device except to the provider's own API. See [API Key Storage](#api-key-storage) for the full storage model.
610
-
611
- ### Model configuration
612
-
613
- The eval system supports multiple LLM providers. Switch between them in the eval UI dropdown or via environment variables.
614
-
615
- | Provider | Models | Requirements |
616
- |:---------|:-------|:-------------|
617
- | **Claude Code (CLI)** | Sonnet, Opus, Haiku | `@anthropic-ai/claude-code` installed on PATH — Studio delegates to your existing Claude Code session. |
618
- | **Anthropic API** | Claude Sonnet 4.6, Opus 4.6, Haiku 4.5 | `ANTHROPIC_API_KEY` env var, or `vskill keys set anthropic` |
619
- | **OpenAI API** | GPT-4o, GPT-4o-mini, o1-mini | `OPENAI_API_KEY` env var, or `vskill keys set openai` |
620
- | **OpenRouter** | Any OpenRouter-served model | `OPENROUTER_API_KEY` env var, or `vskill keys set openrouter` |
621
- | **Ollama** | Any locally installed model | Ollama running at `localhost:11434` |
622
- | **LM Studio** | Any model loaded in LM Studio | LM Studio running at `localhost:1234` (no API key needed) |
124
+ ## Commands you'll actually use
623
125
 
624
126
  ```bash
625
- # Use Anthropic API with Opus
626
- VSKILL_EVAL_PROVIDER=anthropic VSKILL_EVAL_MODEL=claude-opus-4-6 npx vskill eval run my-skill
627
-
628
- # Use Ollama with a local model
629
- VSKILL_EVAL_PROVIDER=ollama VSKILL_EVAL_MODEL=qwen2.5:32b npx vskill eval run my-skill
630
-
631
- # Custom Ollama server OLLAMA_HOST is the primary env var (matches Ollama's own docs).
632
- # OLLAMA_BASE_URL is preserved for backcompat but deprecated; Studio logs a one-shot
633
- # warning if both are set.
634
- OLLAMA_HOST=http://gpu-server:11434 VSKILL_EVAL_PROVIDER=ollama npx vskill eval run my-skill
635
-
636
- # Use LM Studio with a locally loaded model (no API key required)
637
- VSKILL_EVAL_PROVIDER=lm-studio VSKILL_EVAL_MODEL=qwen2.5-coder-7b npx vskill eval run my-skill
638
-
639
- # Custom LM Studio endpoint
640
- LM_STUDIO_BASE_URL=http://lan-box:1234/v1 VSKILL_EVAL_PROVIDER=lm-studio npx vskill eval run my-skill
127
+ vskill studio # open local IDE
128
+ vskill install <skill-or-plugin> # install with full security scan
129
+ vskill find <query> # search verified-skill.com registry
130
+ vskill list --installed # what's installed where
131
+ vskill diff <skill> v1 v2 # compare versions before upgrading
132
+ vskill skill new # create a new skill (AI-assisted)
133
+ vskill eval sweep <skill> # benchmark across models
134
+ vskill audit --ci # SARIF v2.1.0 for CI
135
+ vskill keys set anthropic # store API keys in ~/.vskill/keys.env
641
136
  ```
642
137
 
643
- **Which model for what?**
644
-
645
- - **Skill creation/improvement**: Claude (Sonnet or Opus) produces the best SKILL.md refinements. Other models like Gemini and Codex can create skills too — they understand the SKILL.md format — but output quality may vary. See Anthropic's [Skill Creator](https://github.com/anthropics/skills/tree/main/skills/skill-creator) for the reference methodology.
646
- - **Benchmarks & A/B comparisons**: Use any model. Cross-model testing reveals whether your skill helps weaker models, and whether base model improvements have made a capability uplift skill unnecessary.
647
- - **Ollama**: Free, local, no API key. Useful for rapid iteration and validating cross-model portability.
648
- - **LM Studio**: Free, local, OpenAI-compatible server. Defaults to `http://localhost:1234/v1`; override with `LM_STUDIO_BASE_URL`. LM Studio ignores the API key, so vskill sends a dummy `Bearer lm-studio` token automatically.
649
-
650
- ### Platform integration
651
-
652
- Skills with `evals/evals.json` get:
653
- - Quality evaluation results displayed at `/skills/[name]/evals`
654
- - Admin editing at `/admin/evals` (admin-only)
655
- - Regression tracking across eval runs
138
+ Full reference [verified-skill.com/docs/cli-reference](https://verified-skill.com/docs/cli-reference)
656
139
 
657
140
  <br/>
658
141
 
659
- ## Registry
142
+ ## Recent highlights (0.5.x)
660
143
 
661
- Browse and search verified skills at **[verified-skill.com](https://verified-skill.com)**.
144
+ - **0.5.129** Studio Publish: one-click `git push` + open verified-skill.com submit pre-filled
145
+ - **0.5.12x** — Studio Find palette (`⌘⇧K`): search the registry from inside Studio
146
+ - **0.5.11x** — Engine selector in Create flow: choose Anthropic skill-creator *or* vskill native
147
+ - **0.5.10x** — Multi-project tabs, deterministic per-project port (3077–3177), bookmarkable URLs
148
+ - **0.5.0x** — A/B comparison with blind LLM judge, cross-model sweep, MCP-skill simulation mode
662
149
 
663
- ```bash
664
- vskill find "react native" # search from CLI
665
- vskill info remotion-best-practices # skill details
666
- ```
150
+ Full changelog → [github.com/anton-abyzov/vskill/releases](https://github.com/anton-abyzov/vskill/releases)
667
151
 
668
152
  <br/>
669
153
 
670
- ## SKILL.md Spec Compliance
671
-
672
- vskill emits SKILL.md files that conform to the canonical specification at **[agentskills.io/specification](https://agentskills.io/specification)**.
673
-
674
- The spec requires `tags` and `target-agents` to live **under a `metadata:` block**, not at the top level of the frontmatter:
675
-
676
- ```yaml
677
- ---
678
- name: my-skill
679
- description: "..."
680
- version: 1.0.0
681
- metadata:
682
- tags:
683
- - devtools
684
- - cli
685
- target-agents:
686
- - claude-code
687
- - cursor
688
- ---
689
- ```
690
-
691
- ### Validation
692
-
693
- - **CI gate** — `npm run lint:skills-spec` walks the repo for every `SKILL.md` and blocks drift. Uses the external `skills-ref` CLI when available; otherwise falls back to a built-in check that enforces the `tags` / `target-agents` nesting rule.
694
- - **Post-creation (Studio)** — the `interpretValidatorResult` / `formatValidatorReport` helpers in `src/eval-server/skill-create-routes.ts` wrap `skills-ref validate`. Warn-only by default (spec drift prints a `Validation warnings` block, skill file stays on disk); `strict: true` flips the outcome to a blocking error with exit code 1. A missing `skills-ref` binary is non-blocking by design — CI is the enforcement line.
154
+ ## Learn more
695
155
 
696
- ### Migration note for downstream consumers
697
-
698
- If you previously read `frontmatter.tags` or `frontmatter['target-agents']` at the top level, read them under `frontmatter.metadata.tags` / `frontmatter.metadata['target-agents']` instead. All emitters migrated in lockstep; there is no period where vskill emits mixed shapes.
699
-
700
- <br/>
701
-
702
- ## Studio operations log (`studio-ops.jsonl`)
703
-
704
- Every file-changing action taken by vskill studio (skill promote, test-install, revert, skill create/edit/delete, model-config changes) is written as a single newline-terminated JSON line to:
705
-
706
- ```
707
- ~/.vskill/studio-ops.jsonl
708
- ```
709
-
710
- The log is append-only. Each line conforms to the `StudioOp` shape:
711
-
712
- ```json
713
- {"id":"<nanoid>","ts":1735123200000,"op":"promote","skillId":"<plugin>/<skill>","fromScope":"installed","toScope":"own","paths":{"source":"<abs>","dest":"<abs>"},"actor":"studio-ui"}
714
- ```
715
-
716
- Open the drawer from the StatusBar ops-count chip (or press the chip from the keyboard) to browse the log live — new ops are pushed via SSE and prepended to the virtualized list.
717
-
718
- **Tombstones (soft-delete).** Dismissing an op from the drawer appends a tombstone line `{"id":"<id>","tombstone":true}`. The UI hides tombstoned entries on read; the raw log still shows both the original op and the tombstone, preserving the audit trail.
719
-
720
- **Manual rotation.** The log has no automatic rotation or compaction yet — if it grows large, rotate by hand:
721
-
722
- ```bash
723
- mv ~/.vskill/studio-ops.jsonl ~/.vskill/studio-ops.jsonl.bak
724
- ```
725
-
726
- The studio will re-create the file on the next write. A dedicated rotation / retention policy may land in a later increment once we have usage data.
156
+ | Topic | Where |
157
+ |---|---|
158
+ | Quick start & first install | [verified-skill.com/docs/getting-started](https://verified-skill.com/docs/getting-started) |
159
+ | Full CLI reference | [verified-skill.com/docs/cli-reference](https://verified-skill.com/docs/cli-reference) |
160
+ | Security model & 3-tier verification | [verified-skill.com/docs/security-guidelines](https://verified-skill.com/docs/security-guidelines) |
161
+ | Plugin marketplace | [verified-skill.com/docs/plugins](https://verified-skill.com/docs/plugins) |
162
+ | Submit a skill for verification | [verified-skill.com/docs/submitting](https://verified-skill.com/docs/submitting) |
163
+ | FAQ | [verified-skill.com/docs/faq](https://verified-skill.com/docs/faq) |
164
+ | Browse the registry | [verified-skill.com](https://verified-skill.com) |
727
165
 
728
166
  <br/>
729
167
 
730
168
  ## Contributing
731
169
 
732
- Submit your skill for verification:
733
-
734
- ```bash
735
- vskill submit your-org/your-repo/your-skill
736
- ```
737
-
738
- <br/>
170
+ Issues and PRs welcome at [github.com/anton-abyzov/vskill](https://github.com/anton-abyzov/vskill). To submit a skill to the registry, see [verified-skill.com/docs/submitting](https://verified-skill.com/docs/submitting).
739
171
 
740
172
  ## License
741
173
 
742
- [MIT](LICENSE)
174
+ MIT
package/agents.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "generatedAt": "2026-04-26T14:25:56.241Z",
3
+ "generatedAt": "2026-04-26T15:08:23.985Z",
4
4
  "agentPrefixes": [
5
5
  ".adal",
6
6
  ".agent",
@@ -153,6 +153,22 @@ export async function resolveSkillApiName(skill, root) {
153
153
  const cached = resolverCache.get(skill);
154
154
  if (cached !== undefined)
155
155
  return cached;
156
+ // 0761: source-tree skills (`<root>/skills/<skill>`) are the canonical
157
+ // author copy of a vskill-source skill. The repo's own git remote is the
158
+ // correct upstream regardless of any lockfile entry — lockfile entries
159
+ // point at downstream installs (e.g. `.claude/skills/<skill>` populated
160
+ // from a same-named standalone repo). Without this short-circuit, a vskill
161
+ // user with a `github:anton-abyzov/greet-anton` lockfile install (a
162
+ // separate repo) would see the Versions tab proxy to the WRONG upstream
163
+ // and could overwrite the source skill with content from a foreign repo.
164
+ const sourceDir = await findAuthoredSourceTreeSkillDir(root, skill);
165
+ if (sourceDir) {
166
+ const sourceRemote = await readGitOriginOwnerRepo(sourceDir);
167
+ if (sourceRemote) {
168
+ return rememberAndReturn(skill, `${sourceRemote.owner}/${sourceRemote.repo}/${skill}`);
169
+ }
170
+ return rememberAndReturn(skill, skill);
171
+ }
156
172
  const lock = readLockfile();
157
173
  const entry = lock?.skills?.[skill];
158
174
  if (entry?.source) {
@@ -166,17 +182,6 @@ export async function resolveSkillApiName(skill, root) {
166
182
  }
167
183
  return rememberAndReturn(skill, skill);
168
184
  }
169
- // 0761: source-tree skills (`<root>/skills/<skill>`) win over the plugins
170
- // walk because they are the canonical vskill author-side layout and their
171
- // git remote is the enclosing repo's remote (the correct upstream).
172
- const sourceDir = await findAuthoredSourceTreeSkillDir(root, skill);
173
- if (sourceDir) {
174
- const sourceRemote = await readGitOriginOwnerRepo(sourceDir);
175
- if (sourceRemote) {
176
- return rememberAndReturn(skill, `${sourceRemote.owner}/${sourceRemote.repo}/${skill}`);
177
- }
178
- return rememberAndReturn(skill, skill);
179
- }
180
185
  const skillDir = await findAuthoredSkillDir(root, skill);
181
186
  if (!skillDir)
182
187
  return rememberAndReturn(skill, skill);
@@ -1 +1 @@
1
- {"version":3,"file":"skill-name-resolver.js","sourceRoot":"","sources":["../../src/eval-server/skill-name-resolver.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,EAAE;AACF,iFAAiF;AACjF,6EAA6E;AAC7E,0EAA0E;AAC1E,+EAA+E;AAC/E,4DAA4D;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,MAAM,cAAc,GAAG,KAAK,CAAC;AAE7B,MAAM,mBAAmB,GAAa;IACpC,uDAAuD;IACvD,4CAA4C;IAC5C,qDAAqD;CACtD,CAAC;AAEF,gFAAgF;AAChF,8EAA8E;AAC9E,4DAA4D;AAC5D,EAAE;AACF,iFAAiF;AACjF,gFAAgF;AAChF,gFAAgF;AAChF,kCAAkC;AAClC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEhD,oEAAoE;AACpE,MAAM,UAAU,kBAAkB;IAChC,aAAa,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,eAAe,CAAC,CAAS;IAChC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa,EAAE,KAAa;IACrD,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAChC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAE3B,KAAK,MAAM,EAAE,IAAI,mBAAmB,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QACnC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QAC1C,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,IAAY,EACZ,KAAa;IAEb,IAAI,eAAe,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,gBAAgB,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC;IAClF,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC5C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC;QAAE,OAAO,IAAI,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;QACzC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAY,EAAE,KAAa;IACpE,IAAI,eAAe,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5C,MAAM,iBAAiB,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC;IAEnF,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,eAAe,CAAC,MAAM,CAAC;YAAE,SAAS;QACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAAE,SAAS;QAEtD,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;gBAAE,SAAS;YAChC,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;YACzC,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;QAC5C,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,OAAO,IAAI,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QAC/B,QAAQ,CACN,KAAK,EACL,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,CAAC,EACnD,EAAE,OAAO,EAAE,cAAc,EAAE,EAC3B,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE;YACtB,IAAI,GAAG;gBAAE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;YAChC,oEAAoE;YACpE,MAAM,MAAM,GACV,OAAO,cAAc,KAAK,QAAQ;gBAChC,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAE,cAA4C,EAAE,MAAM,IAAI,EAAE,CAAC;YAClE,SAAS,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAa,EAAE,IAAY;IACnE,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzC,IACE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;YACvB,MAAM,CAAC,IAAI,KAAK,eAAe;YAC/B,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC;YAChC,MAAM,CAAC,KAAK;YACZ,MAAM,CAAC,IAAI,EACX,CAAC;YACD,OAAO,iBAAiB,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,0EAA0E;IAC1E,0EAA0E;IAC1E,oEAAoE;IACpE,MAAM,SAAS,GAAG,MAAM,8BAA8B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpE,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,iBAAiB,CAAC,KAAK,EAAE,GAAG,YAAY,CAAC,KAAK,IAAI,YAAY,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzD,IAAI,CAAC,QAAQ;QAAE,OAAO,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM;QAAE,OAAO,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAEpD,OAAO,iBAAiB,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;AAC7E,CAAC"}
1
+ {"version":3,"file":"skill-name-resolver.js","sourceRoot":"","sources":["../../src/eval-server/skill-name-resolver.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  // ---------------------------------------------------------------------------
2
2
  // Tier 1 Security Scan Patterns
3
- // 38 regex-based patterns for static analysis of skill content.
3
+ // 52 regex-based patterns for static analysis of skill content.
4
4
  // ---------------------------------------------------------------------------
5
5
  // ---- Patterns (52 total) --------------------------------------------------
6
6
  export const SCAN_PATTERNS = [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vskill",
3
- "version": "0.5.129",
3
+ "version": "0.5.130",
4
4
  "type": "module",
5
5
  "description": "Secure multi-platform AI skill installer — scan before you install",
6
6
  "bin": {