From dotclaude-bootstrap
Search GitHub (and optionally npm) for external Claude Code components suitable for dotclaude vendoring. ONLY for discovering components to add to dotclaude's claudekit/ directory — do NOT invoke for general GitHub searches, npm lookups, dependency audits, or non-dotclaude research. Invoke only when called from /preset-wizard or when the user explicitly asks to find external Claude Code plugins/skills for dotclaude.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dotclaude-bootstrap:plugin-discoveryThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Find external Claude Code components (agents, skills, commands, hooks) that can be
Find external Claude Code components (agents, skills, commands, hooks) that can be
vendored into claudekit/ to fill gaps in a preset. Follow phases in order.
Rules:
/dotclaude-setup before this skill is called).This skill is called with context from /preset-wizard or manually. Collect:
If called manually without context, ask the user for the gap and stack before searching.
Use mgrep --web to search GitHub. Run multiple targeted queries to maximise recall:
mgrep --web "claude code <stack-keyword> skill site:github.com"
mgrep --web "claude-code <use-case-keyword> agent site:github.com"
mgrep --web "everything-claude-code <stack-keyword> site:github.com"
mgrep --web "claude code plugin <gap-keyword> site:github.com"
Also search by GitHub topic tags:
mgrep --web "topic:claude-code site:github.com"
mgrep --web "topic:claude-code-plugin site:github.com"
Collect repo candidates: URL, name, description, star count (if visible), last updated.
After presenting GitHub results, ask:
"Would you also like me to search npm for Claude Code packages? (This may surface less-vetted packages.)"
If yes, search:
mgrep --web "npm claude-code-plugin site:npmjs.com"
mgrep --web "npm @claudekit site:npmjs.com"
For each candidate repo, assess:
| Criterion | Threshold | Weight |
|---|---|---|
| Star count | ≥ 50 required; ≥ 500 preferred | High |
| Last commit | Within 12 months | High |
| License | MIT or Apache-2.0 | Required |
| Has Claude Code component structure | agents/, skills/, commands/, hooks/, or rules/ folders | Required |
| Matches user's stack / use case | Relevant keywords in README or component names | Medium |
Claudekit overlap check — run for each candidate:
Before scoring, check if a similar component already exists in claudekit/.
The layout is source-grouped, so scan across every source folder:
# `*` expands to claudekit/everything-claude-code, claudekit/anthropic-skills, claudekit/dotclaude/<sub>, claudekit/private
ls -d claudekit/*/skills/* claudekit/*/agents/*.md claudekit/*/commands/*.md claudekit/*/hooks/*.* 2>/dev/null | grep -i "<keyword>"
If a similar component is found:
SOURCE.yaml for folder components, <name>.source.yaml for file components)categories.coverage and sidecar notes — does the existing component already cover the gap? Or is it language-specific (and the candidate is a cross-language upgrade)?"Note: similar component already vendored at claudekit/<source>/<type>/<name>. Sidecar says: <coverage + notes summary>. Consider this before adding a new upstream source.""Note: claudekit already has <name> (js-only) under <source>. This candidate would be a cross-language upgrade — worth vendoring alongside or as a replacement."Disqualify any repo that:
Quality warning — trigger when:
Warning text to display:
⚠ No well-maintained external alternatives were found for "[gap]". Options:
- Build a custom component (use
/preset-wizardto scaffold it)- Proceed without coverage for this requirement
- Try a broader search manually on github.com/topics/claude-code
Present qualifying candidates ranked by stars (descending):
## External Plugin Candidates for: <gap>
| Rank | Repo | Stars | Last Updated | Relevant components |
|------|------|-------|--------------|---------------------|
| 1 | github.com/... | ⭐ 1.2k | 2026-03 | skills/typescript-tdd, agents/code-reviewer |
| 2 | github.com/... | ⭐ 340 | 2025-11 | commands/test-runner |
For each candidate, note:
Ask the user:
"Which repo(s) would you like to add as an upstream source? Reply with rank numbers, or 'none'."
If the user selects none, or all candidates were disqualified, end here and report the gap as unresolved.
For each repo the user selects, execute the following. Confirm each step with the user before running.
Propose an alias for upstream/<alias>/ and dependencies.yaml:
github.com/foo/claude-skills → alias foo-claude-skillsAsk: "Use alias <alias>? Or specify a different name."
git submodule add <repo-url> upstream/<alias>
git -C upstream/<alias> rev-parse HEAD
Record the HEAD commit SHA for Step 4c.
Add a new entry under sources::
<alias>:
name: <alias>
description: <one-line description from README>
repo: <repo-url>
local_path: upstream/<alias>
pinned_commit: <HEAD-SHA from Step 4b>
ref: main
role: sync_source
license: <MIT|Apache-2.0>
Invoke the dotclaude-component-picker skill to pick the specific components needed.
Pass the alias as the upstream source and the component names identified in Phase 3.
The component-picker handles the full 8-step pipeline: browse → evaluate → cross-reference scan → vendor → sidecar → preset → install → verify.
After vendoring is complete:
claudekit/ (type + name)/preset-wizard context if this was called from there:
"Discovery complete. The following components are now available for your preset: [list]"
If the gap remains unresolved (no suitable external source found, or user declined all candidates):
"No external components were added. The gap '[gap]' will need a custom component or can be left uncovered in this preset."
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub phantien133/dotclaude --plugin dotclaude-bootstrap