Skip to content
SkilledDragonEngineering Intelligence
MinilabKeylessOctober 13, 2026 · re-run October 14, 2026

We ship one plugin to Cursor and Claude Code. Both validators pass, bad repo fails 11/11.

We shipped one plugin to Cursor and Claude Code from a single marketplace repo. Both validators passed, and its sd-audit MCP server failed our bad fixture on 11 of 11 checks.

By David Discua

Measured in the lab

12/12
good fixture checks passed
11/11
bad fixture checks failed
14/14
lab repo checks passed
  • Cursor schemas and validate-plugins.mjs passed
  • claude plugin validate passed (plugin + marketplace)
  • sd-audit refused bad-repo (ok false)
  • bun test 7 pass, 0 fail
  • bun audit clean across 97 packages

From reports/sd-audit.json · run on October 14, 2026. cursor/plugins schemas fetched at 837067b7, never vendored; claude plugin validate via claude-code 2.1.299; sd-audit on good, bad and self

How it is wired

listslistsmcp.jsonCursor manifestschema validatedClaude manifestclaude plugin validatePlugin folder3 skills, 1 rulesd-audit MCPaudit_repo

01/03One plugin folder holds the skills, the rule and the MCP server.

cursor/plugins holds Cursor's plugin specification, its JSON schemas and its official plugins. We built one marketplace repo that ships the same plugin, sd-minilab-standard, to both Cursor and Claude Code, and checked it against Cursor's schemas and validator at a pinned commit and against claude plugin validate. Both passed. The plugin carries an MCP server, sd-audit, that failed our bad fixture on 11 of 11 checks and passed the good one on 12 of 12. The catch is that nothing in CI clicks Install inside either app.

The catch

CI proves the manifests, the schemas and the MCP server. Installing into the Cursor and Claude Code apps is still a manual step, written up in docs/manual-install.md, and we have no headless way to drive either UI in CI.

cursor/plugins has no root LICENSE file at our pin, even though its README says MIT. So we fetch the schemas and scripts/validate-plugins.mjs into a temp directory at run time and never copy upstream files into our repo. That script also assumes a marketplace-root layout, so the lab stages our plugin into a temp tree before it runs.

On the Claude side, claude plugin validate --strict can warn on fields the runtime strips. Our script falls back to the non-strict check and records why, so read its output before you assume strict mode passed. The MCP server starts with bun, so any machine that installs the plugin needs Bun.

What we ran (keyless)

bun install
bun run check:skills
bun run typecheck
bun test
bun run validate:cursor
bun run validate:claude
bun run node:smoke
bun audit --registry=https://registry.npmjs.org
bun run report

From reports/sd-audit.json, run on October 14, 2026:

TargetResultChecks
fixtures/good-repook12 of 12 passed
fixtures/bad-reporefused0 of 11 passed
this lab repook14 of 14 passed

The bad fixture fails on all six .gitignore patterns (.env, node_modules, .venv, target/, coverage, *.log), on a missing gitleaks hook and a missing gitleaks CI step, on a missing .env.example and SECURITY.md, and with a warning for having no SKILL.md at all.

From the README's local green run on October 14, 2026, bun test passed 7 and failed 0 with 15 expect calls in 42.97 s. validate:cursor printed "All plugins validated successfully." against pin 837067b7, validate:claude passed for plugin and marketplace with @anthropic-ai/claude-code@2.1.299, and bun audit found no vulnerabilities across 97 packages.

How it is wired

.cursor-plugin/marketplace.json and .claude-plugin/marketplace.json both list the same folder, plugins/sd-minilab-standard. That folder carries a Cursor plugin.json, a Claude plugin.json, an Agent Plugins 1.0.0 plugin.json, three skills, a Cursor rule and mcp.json. Once installed, your agent can call audit_repo on any repo and get a pass or fail per control before it trusts that repo's setup.

Minilab (open source)

Cursor's spec lives at cursor/plugins (11,385 stars, no LICENSE file, TypeScript, as of October 14, 2026), which we pin at 837067b7. Re-run bun install, bun test and bun run report, then try bun run sd-audit -- fixtures/good-repo or point it at your own repo.

Run it yourself

SkilledDragonCorp/minilab-dual-plugin-marketplace

Clone, install and run the report with no API keys. The numbers above are what that run writes.

bun install && bun test && bun run report

SkilledDragon is not affiliated with Cursor, Anthropic or cursor/plugins. Numbers are from our own keyless lab run; re-run the report before relying on them. Marks belong to their owners.

All labs