Skip to content

feat(skill-management): add plugin for skill curation and triage - #536

Merged
wkoutre merged 3 commits into
nextfrom
feat/skill-management-plugin
Jun 25, 2026
Merged

feat(skill-management): add plugin for skill curation and triage#536
wkoutre merged 3 commits into
nextfrom
feat/skill-management-plugin

Conversation

@dylanschmittle-uniswap

@dylanschmittle-uniswap dylanschmittle-uniswap commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

What

Adds a new skill-management plugin that ports the local skill-doctor family into the toolkit so anyone can install it. It's the curation/triage layer over a user's whole Claude Code customization surface.

Components

Type Name Purpose
Skill skill-doctor Inventories every skill/agent/command (own dirs + installed marketplaces), flags overlaps / gaps / weak triggering descriptions, and mines the session for workflows worth codifying. Bundles references/analysis-rubric.md + scripts/inventory.py (stdlib-only).
Command /skill-map skill-doctor map mode — pure audit.
Command /skill-mine skill-doctor session mode — mine THIS conversation.
Command /skill-new skill-doctor create mode — codify current work, hand to skill-creator.
Hook pr-skill-doctor-prompt.cjs PostToolUse (Bash|create_pull_request): once-per-session nudge to run /skill-mine when a PR is opened. Never blocks the PR.

Adapted for the marketplace

The local copies bake in personal paths; this port generalizes them:

  • Personal paths stripped (no ~/Github/claude-marketplace, ~/Github/backend/.claude, or a user-specific memory path).
  • Bundled-script references repointed to ${CLAUDE_PLUGIN_ROOT}; inventory output written to the OS temp dir (never into the plugin install location).
  • Hook rewritten from tsx to dependency-free Node .cjs (node ${CLAUDE_PLUGIN_ROOT}/...) so it needs no tsx/bun/jq, and its session sentinel lives under os.tmpdir().
  • inventory.py WRITABLE_ROOTS reduced to ~/.claude/{skills,agents,commands} (+ project .claude/); git-repo edits are delivered as draft PRs resolved at PR time.

Wire-up

  • .claude-plugin/marketplace.json — new plugin entry.
  • Root CLAUDE.md, structure tree, and version table (skill-management | 1.0.0).
  • bun.lock — new @uniswap/skill-management workspace registration.

Validation

  • node scripts/validate-plugin.cjs packages/plugins/skill-managementPASSED.
  • nx format:check --uncommitted clean; markdownlint-cli20 errors.
  • Pre-commit suite (format, lint, lint-markdown, test, typecheck) green.
  • inventory.py smoke-tested (141 entries, writes to tmp workspace).
  • Hook smoke-tested across 4 cases: fires on gh pr create + MCP create_pull_request, silent on repeat (sentinel) and on non-PR Bash.

Follow-up

  • Notion "Uniswap Claude Code Plugin Marketplace" doc should be updated to add this plugin + bump component counts (per repo docs policy). Happy to do this on request.
  • Component names (skill-doctor/skill-mine/skill-map/skill-new) intentionally keep their established meta names rather than the repo's verb-noun skill convention, since they're a recognizable family.
AI-Generated Description

What

Adds a new skill-management plugin (the 8th in the marketplace) that ports the local skill-doctor family into the toolkit so anyone can install it. It's the curation/triage layer over a user's whole Claude Code customization surface — inventory, overlap/gap detection, session mining, and codifying new skills.

Components

Type Name Purpose
Skill skill-doctor Inventories every skill/agent/command (own dirs + installed marketplaces), flags overlaps / gaps / weak triggering descriptions, and mines the session for workflows worth codifying. Bundles references/analysis-rubric.md + scripts/inventory.py (stdlib-only).
Command /skill-map skill-doctor map mode — pure audit.
Command /skill-mine skill-doctor session mode — mine THIS conversation.
Command /skill-new skill-doctor create mode — codify current work, hand to skill-creator.
Hook pr-skill-doctor-prompt.cjs PostToolUse (Bash / create_pull_request): once-per-session nudge to run /skill-mine when a PR is opened. Never blocks the PR.

Why

The local copies of these tools bake in personal paths and assume a specific dev environment, so they can't be installed by anyone else. This port generalizes them and ships them through the marketplace:

  • Personal paths stripped (no ~/Github/claude-marketplace, ~/Github/backend/.claude, or a user-specific memory path).
  • Bundled-script references repointed to ${CLAUDE_PLUGIN_ROOT}; inventory output written to the OS temp dir (never into the plugin install location).
  • Hook rewritten from tsx to dependency-free Node .cjs (node ${CLAUDE_PLUGIN_ROOT}/...) so it needs no tsx / bun / jq, and its session sentinel lives under os.tmpdir().
  • inventory.py WRITABLE_ROOTS reduced to ~/.claude/{skills,agents,commands} (+ project .claude/); git-repo edits are delivered as draft PRs resolved at PR time.

Changes

File Change
packages/plugins/skill-management/ New plugin scaffold (package.json, project.json, .claude-plugin/plugin.json, CLAUDE.md, README.md) at version 1.0.0
packages/plugins/skill-management/skills/skill-doctor/ SKILL.md (+168), references/analysis-rubric.md (+71), scripts/inventory.py (+381, stdlib-only)
packages/plugins/skill-management/commands/ skill-map.md, skill-mine.md, skill-new.md — thin wrappers that dispatch to skill-doctor modes
packages/plugins/skill-management/hooks/ hooks.json + pr-skill-doctor-prompt.cjs (PostToolUse PR-open nudge)
.claude-plugin/marketplace.json Register the new plugin (7 → 8 entries)
CLAUDE.md Structure tree + Current plugins table row (`skill-management
bun.lock Workspace registration for @uniswap/skill-management
Total diff: +980 / -5 across 16 files.

Why minor / new-plugin

A brand-new plugin with new user-invocable skills, commands, and a hook fits the minor / feature criteria in the root policy ("new skills, agents, commands, or MCP servers added; new features; backward-compatible enhancements"). Initial plugin version pinned at 1.0.0 per the policy ("All plugins MUST be versioned at 1.0.0 or higher for production releases").

Validation

  • node scripts/validate-plugin.cjs packages/plugins/skill-managementPASSED.
  • bunx nx format:check --uncommitted clean; bunx markdownlint-cli2 "**/*.md"0 errors.
  • Pre-commit suite (format, lint, lint-markdown, test, typecheck) green.
  • inventory.py smoke-tested (141 entries, writes to tmp workspace; no writes into the plugin install location).
  • Hook smoke-tested across 4 cases: fires on gh pr create + MCP create_pull_request, silent on repeat (sentinel) and on non-PR Bash.

Test plan

  • plugin.json skills / commands / hooks arrays match actual files on disk
  • Plugin CLAUDE.md reflects the new structure
  • Root CLAUDE.md Current plugins table row + structure tree updated
  • .claude-plugin/marketplace.json registers the new plugin
  • bun.lock registers @uniswap/skill-management workspace
  • inventory.py writes to os.tmpdir(), never into the plugin install path
  • Hook is dependency-free (node-only; no tsx / bun / jq)
  • CI green (plugin validation / lint / typecheck)
  • Manual: /skill-map, /skill-mine, /skill-new discoverable after install
  • Manual: PR-open hook fires once per session and stays silent on repeat

Follow-up

  • Notion Uniswap Claude Code Plugin Marketplace doc should be updated to add this plugin + bump component counts (per repo docs policy). Happy to do this on request.
  • Component names (skill-doctor / skill-map / skill-mine / skill-new) intentionally keep their established meta names rather than the repo's verb-noun skill convention, since they're a recognizable family.

@vercel

vercel Bot commented Jun 17, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
ai-toolkit-slack-oauth-backend Ready Ready Preview, Comment Jun 25, 2026 5:33pm

Request Review

@github-actions

github-actions Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

📚 Documentation Check ✅

Verdict: Passed

New plugin added with proper version (1.0.1 ≥ 1.0.0), complete documentation (plugin.json, CLAUDE.md, README.md), and root CLAUDE.md correctly updated. No blocking issues found.


PR #536 Documentation Review — skill-management plugin

This PR adds an entirely new skill-management plugin to the repository. All critical documentation requirements are met:

✅ Plugin Version Bump (CRITICAL)

  • .claude-plugin/plugin.json is a new file starting at 1.0.1, which satisfies the ≥ 1.0.0 production requirement.

✅ CLAUDE.md Files

  • Root CLAUDE.md is updated in three places:
    1. Directory tree — skill-management/ added under packages/plugins/
    2. Plugin count — updated from 7 → 8
    3. Version table — skill-management | 1.0.1 row added
  • Plugin-level CLAUDE.md (packages/plugins/skill-management/CLAUDE.md) is a new, well-structured file covering overview, components, design notes, and development guidelines. ✅

✅ README.md

  • packages/plugins/skill-management/README.md is a new, complete file with installation instructions, skills/commands/hooks tables, and an architecture explanation. ✅

⚠️ Minor / Informational

  • .claude/rules/plugin-docs.md (not changed in this PR) still says "The 5 Plugins" and lists only development-planning, development-pr-workflow, development-codebase-tools, development-productivity, and uniswap-integrations. It omits claude-setup, spec-workflow, and the new skill-management. This is stale but not blocking (the file is a Claude instruction guide, not user-facing docs).
  • No changelog file exists in the repository (not blocking per fail_on_missing_docs: false).

Missing Updates

Type File Severity Reason
📘 claude_md .claude/rules/plugin-docs.md ℹ️ info Lists only 5 of the now-8 plugins; omits claude-setup, spec-workflow, and the new skill-management plugin. Should be updated to reflect the current full plugin inventory.

Suggestions (1)

💡 Inline suggestions have been posted as review comments. Click "Commit suggestion" to apply each fix directly.

  • ℹ️ .claude/rules/plugin-docs.md: The plugin-docs rule file still references '5 plugins' and omits claude-setup, spec-workflow, and the newly added skill-management. While not blocking, this stale list could cause Claude to skip Notion updates for unlisted plugins.

🤖 Generated by Claude Documentation Validator | Mode: suggest

@dylanschmittle-uniswap
dylanschmittle-uniswap marked this pull request as ready for review June 17, 2026 13:21
@dylanschmittle-uniswap
dylanschmittle-uniswap requested a review from a team as a code owner June 17, 2026 13:21
@github-actions

github-actions Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

🤖 Claude Code Review

Review complete

Re-review: skill-management plugin (PR #536)

Re-reviewed against the current HEAD. Every previously-flagged issue is resolved in the code, and the new code is clean. No blocking bugs or security concerns.

Verification of prior threads

I confirmed each against the actual files (not just the bot trail):

  • skill-new.md $ARGUMENTS concatenationcommands/skill-new.md:7 now reads …in create mode. Additional guidance from the user (may be empty): $ARGUMENTS. The modean mangling is gone.
  • inventory.py skill-name fallbackmake_entry (line 141) falls back to path.parent.name for skills, so a malformed SKILL.md is tagged by its dir instead of collapsing into a spurious SKILL collision.
  • gt creategt submit/gt ss — the hook regex (/\bgt\s+(submit|ss)\b/), the file-header docstring, and README.md all now agree. Doc/code drift closed in all three spots.
  • Marketplace commands/*.md scan + dead-code cleanupscan() lines 189–200 contain exactly one pass per kind (SKILL.md, agents/*.md, commands/*.md) inside the bucket loop. No duplicate SKILL.md loop, no orphan add(p, "agent", bucket) in the commands loop. The phantom-collision risk is gone.

Minor non-blocking note (no change required)

In inventory.py, TRIGGER_HINTS includes the bare token "/", so any description containing a slash (e.g. "TypeScript/JavaScript", "and/or") is credited with trigger language and won't get the no_trigger_language flag. It's a heuristic linter so a few false-negatives are tolerable, but tightening to "/skill" or a slash-command pattern would make the flag sharper. Not worth blocking on.

Overall this is a well-structured, dependency-free plugin (stdlib Python, plain CommonJS hook) with sensible read-only/writable boundaries and a "propose, never auto-apply" posture. Safe to merge.

I'm leaving thread 3428583808 open (it has active human discussion) while acknowledging the fix; resolving the rest as confirmed-fixed.


💡 Want a fresh review? Add a comment containing @request-claude-review to trigger a new review at any time.

github-actions[bot]
github-actions Bot previously approved these changes Jun 17, 2026

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

📋 Review verdict: APPROVE

👆 The main review comment above is the source of truth for this PR review. It is automatically updated on each review cycle, so always refer to it for the most current feedback.

This formal review submission is for the verdict only. 1 inline comment(s) are attached below.

Comment thread packages/plugins/skill-management/commands/skill-new.md Outdated
@github-actions
github-actions Bot dismissed their stale review June 17, 2026 13:38

Superseded by new review after PR update

github-actions[bot]
github-actions Bot previously approved these changes Jun 17, 2026

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

📋 Review verdict: APPROVE

👆 The main review comment above is the source of truth for this PR review. It is automatically updated on each review cycle, so always refer to it for the most current feedback.

This formal review submission is for the verdict only. 3 inline comment(s) are attached below.

Comment thread packages/plugins/skill-management/skills/skill-doctor/scripts/inventory.py Outdated
Comment thread packages/plugins/skill-management/hooks/pr-skill-doctor-prompt.cjs Outdated
@github-actions

Copy link
Copy Markdown
Contributor

🤖 Claude Code Review

Status: ⚠️ Partial (script error)
Job: View workflow run


The review was completed but there was an error posting inline comments.

Raw Review Output
No review output available

Please check the workflow logs for details.

@github-actions
github-actions Bot dismissed their stale review June 17, 2026 14:31

Superseded by new review after PR update

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

📋 Review verdict: COMMENT

👆 The main review comment above is the source of truth for this PR review. It is automatically updated on each review cycle, so always refer to it for the most current feedback.

This formal review submission is for the verdict only. 2 inline comment(s) are attached below.

Comment thread packages/plugins/skill-management/hooks/pr-skill-doctor-prompt.cjs Outdated
@github-actions github-actions Bot changed the title feat(skill-management): add skill-management plugin feat(skill-management): add plugin for skill curation and triage Jun 17, 2026

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

📋 Review verdict: COMMENT

👆 The main review comment above is the source of truth for this PR review. It is automatically updated on each review cycle, so always refer to it for the most current feedback.

This formal review submission is for the verdict only. 2 inline comment(s) are attached below.

Comment thread packages/plugins/skill-management/README.md Outdated
@github-actions

Copy link
Copy Markdown
Contributor

🤖 Claude PR Metadata Generation

Status: ❌ Error
Job: View workflow run


⚠️ Generation Failed

The automated PR title and description generation encountered an error.

Next Steps:

  1. Check the workflow logs for details
  2. Verify the GitHub Actions configuration
  3. Ensure the Anthropic API key is valid

You can manually set the PR title and description, or re-trigger by pushing a new commit.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Claude Code Review

Status: ⚠️ Partial (script error)
Job: View workflow run


The review was completed but there was an error posting inline comments.

Raw Review Output
No review output available

Please check the workflow logs for details.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Claude Code Review

Status: ❌ Error
Job: View workflow run


⚠️ Review Failed

The automated code review encountered an error and could not complete.

Next Steps:

  1. Check the workflow logs for details
  2. Verify the GitHub Actions configuration
  3. Ensure the Anthropic API key is valid
  4. Check for any permission issues

If the problem persists, please contact your repository administrator.


You can manually re-trigger the review by pushing a new commit or re-running the workflow.

github-actions[bot]
github-actions Bot previously approved these changes Jun 17, 2026

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

📋 Review verdict: APPROVE

👆 The main review comment above is the source of truth for this PR review. It is automatically updated on each review cycle, so always refer to it for the most current feedback.

This formal review submission is for the verdict only.

New marketplace plugin (8th) porting the local skill-doctor family:

- skill-doctor skill (SKILL.md + references/analysis-rubric.md +
  scripts/inventory.py) — inventories/analyzes/mines/improves Claude
  Code skills, agents, and commands.
- /skill-map, /skill-mine, /skill-new commands — entry points into the
  skill's map/session/create run modes.
- pr-skill-doctor-prompt.cjs PostToolUse hook (+ hooks.json) — once-per-
  session nudge to run /skill-mine when a PR is opened.

Adapted for the marketplace: personal paths stripped, bundled-script
paths repointed to ${CLAUDE_PLUGIN_ROOT}, inventory output written to a
temp workspace, and the hook is dependency-free Node (no tsx/bun/jq).

Wire-up: marketplace.json entry, root CLAUDE.md (count 7->8, tree,
version table), bun.lock workspace registration.
@dylanschmittle-uniswap
dylanschmittle-uniswap force-pushed the feat/skill-management-plugin branch from 9c80b53 to a10b8f8 Compare June 17, 2026 17:44
@github-actions
github-actions Bot dismissed their stale review June 17, 2026 17:48

Superseded by new review after PR update

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

📋 Review verdict: REQUEST_CHANGES

👆 The main review comment above is the source of truth for this PR review. It is automatically updated on each review cycle, so always refer to it for the most current feedback.

This formal review submission is for the verdict only. 3 inline comment(s) are attached below.

Comment thread packages/plugins/skill-management/hooks/pr-skill-doctor-prompt.cjs Outdated
Comment thread packages/plugins/skill-management/hooks/pr-skill-doctor-prompt.cjs Outdated
Comment thread packages/plugins/skill-management/README.md Outdated
Addresses PR review: `gt create` only stages a local branch/commit and
does not open a PR, so the once-per-session /skill-mine nudge fired too
early. `gt submit` (and its `gt ss` = submit --stack alias) is the verb
that actually creates/updates PRs. Update the matcher regex plus the hook
docstring and README to match.

Other review items (skill-new $ARGUMENTS separator, inventory.py skill
name fallback to parent dir, marketplace commands/*.md scan) were already
folded into the squashed plugin commit.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

📋 Review verdict: APPROVE

👆 The main review comment above is the source of truth for this PR review. It is automatically updated on each review cycle, so always refer to it for the most current feedback.

This formal review submission is for the verdict only.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

📋 Review verdict: APPROVE

👆 The main review comment above is the source of truth for this PR review. It is automatically updated on each review cycle, so always refer to it for the most current feedback.

This formal review submission is for the verdict only.

@wkoutre
wkoutre merged commit b259724 into next Jun 25, 2026
19 of 20 checks passed
@wkoutre
wkoutre deleted the feat/skill-management-plugin branch June 25, 2026 17:53
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.

2 participants