Skip to content

Package agent skills as a Claude Code plugin#232

Merged
nicosuave merged 2 commits into
mainfrom
claude/affectionate-hawking-a16143
Jun 20, 2026
Merged

Package agent skills as a Claude Code plugin#232
nicosuave merged 2 commits into
mainfrom
claude/affectionate-hawking-a16143

Conversation

@nicosuave

Copy link
Copy Markdown
Member

What

Migrates the two standalone SKILL.md skills under skills/ into a single distributable Claude Code plugin named sidemantic, with a marketplace manifest so it can be installed via /plugin.

Layout

.claude-plugin/marketplace.json          marketplace "sidequery"
plugins/sidemantic/
  .claude-plugin/plugin.json             plugin "sidemantic" v1.0.0
  skills/
    modeler/         (was skills/sidemantic-modeler)
    webapp-builder/  (was skills/sidemantic-webapp-builder)

Skills are now namespaced: /sidemantic:modeler and /sidemantic:webapp-builder.

Changes

  • git mv both skill folders into the plugin (history preserved).
  • Add plugin.json + marketplace.json.
  • Rename skill frontmatter name: to modeler / webapp-builder (the plugin namespace supplies the sidemantic: prefix).
  • Rewrite webapp-builder script invocations to ${CLAUDE_PLUGIN_ROOT}/skills/webapp-builder/scripts/... so they resolve both under --plugin-dir testing and a real install.
  • Remove skills/install.sh and the curl/npx install one-liners; README now documents /plugin marketplace add sidequery/sidemantic + /plugin install sidemantic@sidequery, plus the local --plugin-dir path.
  • Repoint tests/test_sidemantic_webapp_builder_scripts.py, the wasm-demo README, and the pyproject.toml sdist exclude (/skills -> /plugins).

agents/openai.yaml is intentionally kept as a skill resource for a later Codex pass.

Install / try

/plugin marketplace add sidequery/sidemantic
/plugin install sidemantic@sidequery
# or, from a clone:
claude --plugin-dir ./plugins/sidemantic

Verification

  • claude plugin validate ./plugins/sidemantic passes
  • Full suite: 4936 passed, 42 skipped, 0 failures
  • ruff check and ruff format --check clean

Migrate the two standalone SKILL.md skills into a single distributable
Claude Code plugin "sidemantic" with a marketplace manifest.

- Move skills/sidemantic-modeler -> plugins/sidemantic/skills/modeler
- Move skills/sidemantic-webapp-builder -> plugins/sidemantic/skills/webapp-builder
- Add plugins/sidemantic/.claude-plugin/plugin.json and
  .claude-plugin/marketplace.json (marketplace "sidequery")
- Rename skill frontmatter to modeler / webapp-builder so invocations are
  /sidemantic:modeler and /sidemantic:webapp-builder
- Rewrite webapp-builder script paths to ${CLAUDE_PLUGIN_ROOT}/skills/...
  so they resolve for both --plugin-dir and installed use
- Drop skills/install.sh and the curl/npx install instructions; README now
  documents /plugin marketplace add + install
- Repoint test paths, the wasm-demo README, and the pyproject sdist exclude
  to the new plugins/ layout

agents/openai.yaml is preserved as a skill resource for the Codex pass.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 07edc974a1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

function usage() {
return `Usage:
bunx --bun -p playwright node skills/sidemantic-webapp-builder/scripts/verify_static_interactions.mjs --url http://127.0.0.1:4519/
bunx --bun -p playwright node ${CLAUDE_PLUGIN_ROOT}/skills/webapp-builder/scripts/verify_static_interactions.mjs --url http://127.0.0.1:4519/

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Escape the plugin-root placeholder in usage text

When --help is passed or --url is omitted, usage() evaluates this JavaScript template literal and treats ${CLAUDE_PLUGIN_ROOT} as a JS identifier, so Node throws ReferenceError: CLAUDE_PLUGIN_ROOT is not defined instead of printing help or the missing-URL message. Escape the placeholder or build the string without template interpolation so the usage path remains literal.

Useful? React with 👍 / 👎.

The path rewrite landed inside usage()'s template literal, so
${CLAUDE_PLUGIN_ROOT} was interpreted as JS interpolation and threw
ReferenceError on the --help and missing-url paths. Escape the $ so the
placeholder prints literally.
@nicosuave nicosuave merged commit f845241 into main Jun 20, 2026
20 checks passed
@nicosuave nicosuave deleted the claude/affectionate-hawking-a16143 branch June 20, 2026 18:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant