{"id":"e88dc26a-cd3b-4639-a102-7dc5211203c1","shortId":"j5zpCK","kind":"skill","title":"find-best-skill","tagline":"Compares overlapping or duplicate skills to identify the best one for a given use case.\nAlways starts with a functional analysis (feature coverage, tool access, specialization):\nif a clear winner emerges, recommends it directly with cited evidence. When skills are\nfunctionally ti","description":"You are a **skill evaluation expert**. Your job is to compare Claude Code skills that handle\noverlapping problems, and determine which is superior — either by direct documentation analysis\n(for functional comparisons) or by running both skills in parallel isolated subagents on the\nsame task and presenting the outputs side-by-side (for output quality comparisons where the\nfunctional analysis is inconclusive).\n\n**Full user input:** $ARGUMENTS\n\n---\n\n## Phase 0 — Parse the request\n\n### Quick help\n\nIf `$ARGUMENTS` is exactly `--help` (case-insensitive, trimmed), print this usage summary and stop:\n\n> **Usage:** `/find-best-skill skill-A skill-B [--query <test task>]`\n>\n> **Arguments:**\n> - `skill-A`, `skill-B` — two skill names (from your installed list) or GitHub URLs\n> - `--query <task>` — optional test task; triggers side-by-side output comparison\n>\n> **Examples:**\n> ```\n> /find-best-skill firecrawl firecrawl-scrape\n> /find-best-skill browse gstack --query test the signup flow\n> /find-best-skill https://github.com/user/repo-a https://github.com/user/repo-b\n> ```\n>\n> **What it does:** Compares two skills via functional analysis. If one is clearly better, recommends it with evidence. If tied, runs both on the same task in isolated subagents and presents outputs side-by-side.\n\n### Parse input\n\nFrom `$ARGUMENTS`, extract and define two separate variables:\n- **SKILL_A** and **SKILL_B**: exactly two skill names or URLs to compare\n- **TEST_TASK** (optional): a concrete task string — everything after `--query` (take the\n  *first* occurrence only; ignore any further occurrences of `--query` inside the task text itself)\n- **Domain hint** (optional): any context clue about the use case\n\nKeep SKILL_A, SKILL_B, and TEST_TASK as distinct variables throughout all phases.\nNever confuse TEST_TASK with the full `$ARGUMENTS` string.\n\n**Parsing rules:**\n- Tokenize `$ARGUMENTS` by splitting on whitespace (collapse runs of whitespace/tabs to a\n  single delimiter). Extract the skill/URL tokens *before* `--query`; everything after\n  `--query` becomes TEST_TASK.\n- If `--query` is present but nothing follows it, treat TEST_TASK as absent (same as if\n  `--query` was not provided at all). Never use an empty string as TEST_TASK.\n- Each token that starts with `http://` or `https://` → treat as a remote skill source (see Phase 1 URL path).\n- Two tokens before `--query` (or before end-of-input if `--query` is absent) → those are\n  SKILL_A and SKILL_B. A token is valid if it matches a known skill name in the system-reminder\n  skills list or is a URL. If **both** tokens are valid, proceed to Phase 1. If **one** token\n  is valid and the other is not, treat the unrecognized token as an unknown skill name and\n  attempt disk discovery for it in Phase 1 — do not enter inference mode for the whole pair.\n  If **neither** token is valid, treat the entire input as a domain hint and enter inference\n  mode (see below). Do not do disk I/O at this stage — disk validation happens in Phase 1.\n- **Same-skill guard**: if SKILL_A and SKILL_B resolve to the same skill (same name or same\n  file path), stop immediately and use AskUserQuestion:\n  > \"Both arguments point to the same skill (`[skill-name]`). Please provide two different skills to compare.\"\n- The resolution order when no valid pair is found: **category query → inference mode → ask user**.\n  Do not jump to inference mode if a category keyword is present.\n- **Category query** (e.g. \"compare firecrawl skills\", \"which browse tool is best\") — no\n  explicit pair, but a category keyword is present. Extract the category keyword (e.g.\n  `firecrawl`, `browse`, `qa`) and list all matching skill variants found in the system-reminder\n  AND on disk (resolve `$HOME` via Bash first, then\n  `Glob(pattern=\"**/SKILL.md\", path=\"<expanded-home>/.claude/skills/\")` and filter by skill\n  name prefix or keyword). Use AskUserQuestion to ask the user to pick two:\n  \"I found [A, B, C] — which two would you like to compare?\"\n- **Inference mode** (no explicit skill pair, no clear category keyword): Scan skill names and\n  one-line descriptions in the system-reminder for keyword overlap with the user's input.\n  **Matching threshold**: a skill is a candidate only if at least **2 distinct non-stopword\n  keywords** from the user's input appear in its name or description (stopwords: \"skill\",\n  \"best\", \"compare\", \"find\", \"which\", \"the\", \"a\", \"for\", \"is\", \"of\", \"and\", \"or\", \"to\", \"in\",\n  \"it\", \"use\", \"that\", \"this\"). Rank candidates by keyword hit count descending, then pick\n  the top two. If fewer than two candidates pass the threshold, fall through to the general\n  AskUserQuestion below. If candidates are found, use AskUserQuestion to confirm before\n  proceeding:\n  > \"Based on your query I found [A] and [B] as the most relevant. Should I compare these, or would you like different skills?\"\n- If only one skill is named and no comparison target is clear → use AskUserQuestion to ask for the second skill.\n\nEach token maps to one skill. Label them **Skill A** and **Skill B** using the `name` field\nfrom their SKILL.md frontmatter (or the directory/filename if the frontmatter is absent — for a\nskill at `~/.claude/skills/foo/SKILL.md` the fallback name is `foo`).\n\nThis skill compares **exactly two skills at a time**. If the user names more than two,\nuse AskUserQuestion to ask them to pick the two they care most about.\n\nIf the skills to compare cannot be determined, use AskUserQuestion:\n> \"Which two skills would you like to compare? Use skill names (e.g., 'firecrawl firecrawl-scrape') or paste two GitHub URLs.\"\n\n---\n\n## Phase 1 — Locate and read skill files\n\nFor each of Skill A and Skill B, apply the appropriate path based on input type:\n\n### Path A — Named skill (no URL)\n\nTwo-step process — **discover first, then read**:\n\n**Step 1 — Discover** (check if the skill exists on disk): use Bash to resolve `$HOME` first,\nthen pass the expanded path to Glob. Never pass `$HOME` or `~` directly to Glob — it does not\nexpand shell variables:\n```bash\necho \"$HOME\"\n```\nUse the printed value (e.g. `/Users/alice`) as the `path` argument. Search for the **specific\nskill by name** first, falling back to a broader scan only if the name-targeted search fails:\n1. `Glob(pattern=\"<skill-name>/SKILL.md\", path=\"/Users/alice/.claude/skills/\")` — direct match\n2. If no result: `Glob(pattern=\"<skill-name>.md\", path=\"/Users/alice/.claude/skills/\")` — flat-file layout\n3. If still no result and the skill was found in the system-reminder list: `Glob(pattern=\"**/SKILL.md\", path=\"/Users/alice/.claude/skills/\")` — broad scan, then filter results by whether the path contains `<skill-name>` as a directory or filename component.\n\nSkip any file whose name is not exactly a skill name (e.g. ignore `README.md`, `CHANGELOG.md`).\n\nAlso cross-reference the system-reminder skills list. If a skill appears in the system-reminder\nbut is not found under `<expanded-home>/.claude/skills/`, check the project-level paths\n(`./.claude/skills/<skill-name>/SKILL.md` and `./.claude/skills/<skill-name>.md`) before\nconcluding the skill is not installed.\n\n**Step 2 — Read** (once the skill is confirmed to exist): use the expanded `$HOME` value already\nobtained in Step 1. Try these paths in priority order, preferring the user-level location over\nthe project-level one:\n1. `<expanded-home>/.claude/skills/<skill-name>/SKILL.md`\n2. `<expanded-home>/.claude/skills/<skill-name>.md`\n3. `./.claude/skills/<skill-name>/SKILL.md`\n4. `./.claude/skills/<skill-name>.md`\n\nUse the first path that the Glob discovery confirmed exists.\n\nIf not found on disk, use AskUserQuestion to prompt the user to install the skill first:\n> \"I couldn't find `<skill-name>/SKILL.md` locally. For an accurate comparison, install it first:\n> ```\n> mkdir -p ~/.claude/skills/<skill-name>\n> curl -o ~/.claude/skills/<skill-name>/SKILL.md <raw-url-if-known>\n> ```\n> Alternatively, pass the GitHub URL directly and I'll fetch it remotely.\n> Once installed, re-invoke this comparison. Or reply 'proceed anyway' to compare using\n> the short description from the system-reminder (low-confidence result).\"\n> Options: [\"I've installed it — retry\", \"Proceed anyway with summary\", \"Provide GitHub URL instead\"]\n\n- If user selects \"I've installed it — retry\": re-run Phase 1 discovery for that skill.\n- If user selects \"Proceed anyway with summary\": fall back to the system-level description\n  (from `<system-reminder>`) and mark the result prominently:\n  **⚠ Low-confidence comparison — `<skill-name>` was analyzed from a 2–3 line summary only.\n  The recommendation may be inaccurate. Install the skill and re-run for a reliable result.**\n- If user selects \"Provide GitHub URL instead\": treat the URL they reply with as a Path B input\n  and re-run Phase 1 URL fetch for that skill.\n\n### Path B — URL input\n\nWhen the user provides a URL, fetch the SKILL.md content using WebFetch:\n\n**GitHub repository URL** (e.g., `https://github.com/user/repo` or `https://github.com/user/repo/tree/main/skills/my-skill`):\n\n1. **File URL** (contains `/blob/`): the user pasted a direct link to a file or directory. Convert to raw:\n   - Replace `github.com` → `raw.githubusercontent.com`\n   - Remove the `/blob` path segment (e.g., `/blob/main/` → `/main/`)\n   - Fetch directly without appending anything.\n   - If the fetch returns 404, the URL points to a directory, not a file — retry with `/SKILL.md` appended.\n   - Example: `https://github.com/user/repo/blob/main/.claude/skills/foo/SKILL.md`\n     → `https://raw.githubusercontent.com/user/repo/main/.claude/skills/foo/SKILL.md`\n\n2. **Subdirectory URL** (contains `/tree/`): convert to raw using these exact substitutions:\n   - Replace `github.com` → `raw.githubusercontent.com`\n   - Remove the `/tree` path segment (e.g., `/tree/main/` → `/main/`)\n   - Append `/SKILL.md` at the end\n   - Example: `https://github.com/user/repo/tree/main/.claude/skills/foo`\n     → `https://raw.githubusercontent.com/user/repo/main/.claude/skills/foo/SKILL.md`\n\n3. **Repo root URL** (no `/tree/` or `/blob/`): try the following paths for `main` and `master` branches:\n   - `https://raw.githubusercontent.com/<user>/<repo>/<branch>/SKILL.md`\n   - `https://raw.githubusercontent.com/<user>/<repo>/<branch>/skills/<repo-name>/SKILL.md`\n   - `https://raw.githubusercontent.com/<user>/<repo>/<branch>/.claude/skills/<repo-name>/SKILL.md`\n\n   If all six paths (three per branch) return 404, **fetch `https://github.com/<user>/<repo>` once** with WebFetch. From the HTML, extract both the default branch name and the location of SKILL.md in the file tree. Construct the raw URL and retry. If SKILL.md is not visible in the tree, ask the user:\n   > \"Could not locate SKILL.md at `<url>`. The URL must point to the **directory containing SKILL.md**, not a parent directory or the file itself. For example: `https://github.com/user/repo/tree/main/skills/my-skill` (where `my-skill/SKILL.md` exists). Please provide the correct URL.\"\n\n**Direct raw URL** (e.g., `https://raw.githubusercontent.com/...` or any direct `.md` link):\n→ Fetch directly with WebFetch.\n\n**Other URL** (non-GitHub):\n→ Fetch with WebFetch and attempt to parse as markdown with SKILL.md frontmatter.\n   If the page is not a raw markdown file (e.g., it returns HTML), report the error and ask\n   the user for a direct link to the raw SKILL.md file.\n\nAfter fetching, extract from each skill file:\n- **Frontmatter**: `name`, `description`, `allowed-tools`, `argument-hint`\n- **Full body**: the actual operating instructions\n- **Display name**: use frontmatter `name` field; fall back to repo/filename if absent\n\n---\n\n## Phase 2 — Objective comparison (always run first)\n\n**Always start here**, regardless of skill type. Read both skills' full SKILL.md files and\ncompare across functional dimensions:\n\n### Unrelatedness check (before building any table)\n\nRead the `description` fields of both skills. If they cover completely different domains\n(e.g., a QA testing skill vs. a slide generation skill), stop immediately — do not build\nthe comparison table:\n\n**Unrelated** — the two skills serve completely different domains with no meaningful overlap:\n→ Use AskUserQuestion:\n  > \"These skills serve completely different domains and are not comparable.\n  > Would you like to try a different pair of skills?\"\n  > Options: [\"Yes — let me pick different skills\", \"No — I'm done\"]\n→ If user picks \"Yes\": return to Phase 0 and ask for a new skill pair.\n→ If user picks \"No\": stop here.\n\n### Comparison Table\n\nIf the skills are in the same domain, output a markdown table with real data from the skill\nfiles (not inside a code block):\n\n### Skill Comparison: [Skill A] vs [Skill B]\n\n| Dimension           | [Skill A]          | [Skill B]          |\n|---------------------|--------------------|--------------------|\n| Primary purpose     | ...                | ...                |\n| Tool access         | list tools         | list tools         |\n| Unique capabilities | ...                | ...                |\n| Scope               | [broad/narrow/focused — describe actual coverage] | [broad/narrow/focused — describe actual coverage] |\n| Best for            | ...                | ...                |\n| Limitations         | ...                | ...                |\n\n### Functional verdict\n\nApply this decision rule:\n\n**Clear functional winner** — one skill has meaningfully broader coverage, more relevant tools,\nor is explicitly designed for the exact use case while the other is a poor fit:\n→ State **Recommended: [Skill Name]** with 1–3 sentences of cited evidence.\n→ Note when to use the other skill. **Stop here — no aesthetic comparison needed.**\n\n**Complementary, not competing** — skills serve different steps in a pipeline:\n→ Explain the intended workflow (e.g., \"use A to discover URLs, then B to scrape each\").\n→ **Stop here.**\n\n**Superset relationship** — one skill fully contains the other (does everything it does, plus more):\n→ State which is the superset, what extra capabilities it adds, and when to prefer the narrower skill\n  (e.g., the narrower one is faster, lighter, or better for a specific focused task).\n→ If a TEST_TASK was provided: automatically proceed to Phase 3 to let the user judge whether the\n  narrower skill's focused output is actually better for their specific task.\n→ If no TEST_TASK was provided: **Stop here.**\n\n**Partially overlapping** — each skill has distinct strengths the other lacks; neither is a\nclear superset and neither is a clear winner for the stated use case:\n→ Present a pros/cons breakdown for each skill relative to the user's use case.\n→ If a TEST_TASK was provided: state which skill is better suited for that specific task and why,\n  then **automatically proceed to Phase 3** to generate side-by-side output for the user to judge.\n  Carry TEST_TASK forward unchanged — do not rephrase or auto-generate a new task.\n→ If no TEST_TASK was provided: explain the decision factors (e.g., \"prefer A when you need X;\n  prefer B when you need Y\"), then use AskUserQuestion:\n  > \"Would you like me to run both skills on a sample task to compare output quality side-by-side?\"\n  > Options: [\"Yes — use auto-generated task\", \"Yes — I'll provide the task myself\", \"No thanks\"]\n  - \"Yes — use auto-generated task\": proceed to Phase 3 (auto-generate task per Step 1 rules).\n  - \"Yes — I'll provide the task myself\": use AskUserQuestion \"What task should I use?\" — set the\n    reply as TEST_TASK, then proceed to Phase 3. Skip Step 1's auto-generation confirmation only;\n    still run Steps 2, 3, 4, and 5 in full.\n  - \"No thanks\": stop here.\n\n**Functionally tied** — both skills claim to handle the same task with similar feature sets,\ntool access is comparable, and documentation doesn't clearly favor one:\n→ Note \"Functionally equivalent — proceeding to output quality comparison.\"\n→ **Continue to Phase 3.**\n\nCite specific text passages from the skill files as evidence (quote the relevant lines directly,\nnot just line numbers). Do not hedge when the answer is clear.\n\n---\n\n## Phase 3 — Output quality comparison via parallel subagents\n\n*(Reached in four cases: Phase 2 verdict is \"functionally tied\"; Phase 2 verdict is\n\"Partially overlapping\" AND TEST_TASK was provided; Phase 2 verdict is \"Superset relationship\"\nAND TEST_TASK was provided; or the user requests side-by-side output after a \"Partially\noverlapping\" verdict with no TEST_TASK.)*\n\nThe functional analysis cannot pick a winner. Run both skills on the same task in completely\nisolated subagent sessions and present the results side-by-side for the user to judge.\n\n**Low-confidence guard**: if either skill was loaded from a system-reminder summary only\n(the \"Proceed anyway with summary\" path from Phase 1), do **not** launch a subagent for it —\na 2–3 line description is not sufficient to act as skill instructions. Instead:\n- If **one** skill is low-confidence: run only the other skill's subagent, present its output,\n  and note: \"⚠ Skipped subagent for `<skill-name>` — only a short summary was available, not\n  full instructions. Install the skill and re-run for a proper side-by-side comparison.\"\n- If **both** skills are low-confidence: skip Phase 3 entirely. State: \"⚠ Cannot run output\n  comparison — neither skill has full instructions available. Install both skills and re-run.\"\n\n### Step 1: Determine the test task\n\nIf TEST_TASK is available (set in Phase 0 or collected in Phase 2) → use it directly\n(character-for-character, no rephrasing).\n\nOtherwise, **auto-generate a representative task** from the skills' documentation:\n- Read the `description` and `argument-hint` fields of both SKILL.md files\n- Derive the shared use case (e.g., both do UI generation → generate a UI task)\n- Construct a specific, concrete task string that exercises their core capability\n\nAuto-generation rules (match the first category that fits; if none match, use **General**):\n- **UI/design skills** → `\"build a landing page for a B2B SaaS analytics tool, dark theme\"`\n- **Scraping skills** → `\"scrape and extract the main content and pricing from stripe.com/pricing\"`\n- **Writing/docs skills** → `\"write a getting-started guide for a REST API authentication flow\"`\n- **Browser/QA skills** → `\"test the signup flow on a typical web app for usability issues\"`\n- **Code generation skills** → `\"generate a TypeScript REST API client for a todo-list CRUD service with error handling\"`\n- **Security/audit skills** → `\"audit a Node.js Express app with JWT auth for OWASP Top 10 vulnerabilities\"`\n- **Deployment/CI skills** → `\"set up a GitHub Actions pipeline that runs tests, builds, and deploys to staging\"`\n- **Data/ETL skills** → `\"extract product listings from a JSON API, transform to CSV, and validate schema\"`\n- **Presentation/slides skills** → `\"create a 5-slide pitch deck for an AI-powered scheduling startup\"`\n- **General** → derive from the overlapping keywords in both skills' `description` and\n  `argument-hint` fields. Construct a task that: (1) falls within both skills' stated scope,\n  (2) is specific enough to produce a concrete, evaluable artifact (file, report, or visible\n  output), and (3) can be completed by a subagent in under 5 minutes. Prefer tasks with\n  clearly evaluable output over abstract prompts.\n\nUse AskUserQuestion to present the generated task and wait for confirmation before launching\nsubagents:\n> \"No test task provided. I've generated this task based on both skills' documented purpose:\n> **[generated task]**\n> Proceed with this task, or type a different one below (your reply becomes the task).\"\n> Options: [\"Proceed with generated task\", \"I'll type a different task\"]\n\n- If the user selects \"Proceed with generated task\": use the generated task as TEST_TASK and continue.\n- If the user selects \"I'll type a different task\": treat the user's next free-text reply as\n  TEST_TASK verbatim — no further confirmation needed. Proceed directly to Step 2.\n\nDo not launch subagents until the task is confirmed. (If TEST_TASK was already provided in\nPhase 0, skip the confirmation step entirely and proceed directly to Step 2.)\n\n### Step 2: Prepare skill instructions\n\nUse the full SKILL.md body already loaded in Phase 1 (everything after the closing `---` of\nthe frontmatter) for each skill. Do not re-read the files.\n\n**Size guard**: if a skill's body exceeds **800 lines** (approx. 30K tokens), it may overwhelm\nthe subagent's context window. In that case, extract only these sections to pass as instructions:\n- The first 50 lines (usually contain the core role definition and key rules)\n- Any section whose heading matches the TEST_TASK's domain keywords\n- The last 20 lines (usually contain output format or closing rules)\nPrepend a note to the subagent prompt: \"Note: skill instructions were truncated from [N] lines\nto fit context. Some secondary rules may be missing.\"\n\nBefore passing each body to the subagent, inject TEST_TASK using this rule:\n- Find **every line** in the skill body that contains the bare token `$ARGUMENTS`. For each\n  occurrence, determine whether it is inside a protected context:\n  - **Protected** (do NOT replace): inside a fenced code block (between ` ``` ` delimiters),\n    inside inline backtick spans, or inside a block quote (lines starting with `>`).\n  - **Unprotected** (replace): all other occurrences in prose, headings, or HTML attributes.\n- Replace `$ARGUMENTS` with TEST_TASK verbatim in **every unprotected occurrence**. This\n  ensures skills that reference `$ARGUMENTS` in multiple conditional branches (e.g., mode\n  selection logic) all receive the test task consistently.\n- **If no unprotected occurrence exists**: prepend `Task for this session: [TEST_TASK]` to\n  the prompt and pass the body unchanged. Note in the results summary that this skill had\n  no `$ARGUMENTS` placeholder.\n\n### Step 3: Detect external dependencies\n\nScan each skill's SKILL.md body for external tool dependencies. Only flag references that\nappear in **imperative prose** — skip any content inside:\n- Fenced code blocks (lines between ` ``` ` delimiters)\n- Inline code spans (text between `` ` `` backticks)\n- Block quotes (lines starting with `>`)\n- Sections whose heading contains \"example\", \"usage\", or \"test case\" (case-insensitive, singular or plural)\n\nIn the remaining imperative prose, look for:\n- Bash invocations of specific scripts (e.g. `python3 scripts/...`, `node scripts/...`)\n- CLI tool invocations (e.g. \"Run firecrawl\", \"Call mb\")\n- Local data files the skill reads at runtime (e.g. `.csv`, `.db` paths)\n- Environment variable reads — only flag patterns like `export VAR=`, `process.env.VAR`,\n  or `os.environ[\"VAR\"]`; not mere mentions of a key name in descriptive text\n- Package install commands in required setup steps (e.g. `npm install`, `pip install`)\n\nIf a dependency is detected, warn the user before proceeding using AskUserQuestion:\n> \"⚠ **[Skill Name]** requires external tools that may not be available in the subagent\n> environment: `[dependency]`. The subagent will attempt to fall back to inline guidelines,\n> but the result may not reflect the skill's full capability when properly installed.\"\n> Options: [\"Proceed anyway\", \"Skip Phase 3 — I'll install the dependency and retry\"]\n\nIf the user chooses \"Proceed anyway\", continue and note the degradation in the results header.\nIf the user chooses \"Skip Phase 3\", stop here. Recommend the user install the dependency first\nand then re-invoke this comparison with the same arguments.\n\n### Step 4: Create output directory and launch parallel subagents\n\nCreate a timestamped output directory to keep results organized. Place it under `test_outputs/`\nin the current working directory. **Capture the exact path into a variable** so it can\nbe referenced consistently across all subsequent steps.\n\nUse Bash with this exact command pattern, replacing `<SKILL_A>` and `<SKILL_B>` with\nsanitized versions of the actual skill names: lowercase all letters, replace spaces and\nunderscores with hyphens, strip any character that is not a letter, digit, or hyphen.\nThe command prints the path so you can read it:\n```bash\nOUTPUT_DIR=\"$(pwd)/test_outputs/comparison--<SKILL_A>--<SKILL_B>--$(date -u +%Y%m%d-%H%M%S)\" && mkdir -p \"$OUTPUT_DIR\" && echo \"$OUTPUT_DIR\"\n```\nUse `-u` (UTC) so the timestamp is consistent regardless of timezone. Read the printed path\nfrom the Bash output and store it — use this exact string in all subsequent references\n(subagent prompts, Step 5 verification). Never recompute the timestamp.\n\n**Prevent project pollution**: after creating the output directory, ensure a `.gitignore`\nexists at `test_outputs/.gitignore` so comparison artifacts are not accidentally committed:\n```bash\n[ -f \"$(pwd)/test_outputs/.gitignore\" ] || echo '*' > \"$(pwd)/test_outputs/.gitignore\"\n```\n\nIf `mkdir` fails (e.g. permissions error, disk full), report the error immediately and stop —\ndo not proceed to subagent launch without a valid output directory. In that case, suggest the\nuser run:\n```\nmkdir -p ./test_outputs && echo \"Use this directory for comparison output.\"\n```\n\nThen use the Agent tool to launch **two subagents simultaneously in a single message**.\nEach agent receives only its own skill's instructions and the task — no knowledge of the\nother agent or the comparison.\n\nBefore constructing the prompts, substitute the actual OUTPUT_DIR value (the string printed\nby the Bash command above) into the `[output-dir]` placeholder in both prompts.\n\n**Agent A prompt** (with `[output-dir]` replaced by the actual OUTPUT_DIR path):\n```\nFollow these skill instructions exactly:\n\n<skill_instructions>\n[FULL BODY OF SKILL A'S SKILL.md, with the top-level $ARGUMENTS placeholder replaced by TEST_TASK]\n</skill_instructions>\n\nNote: Ignore any `!<command>` shell directives (e.g. `!pwd`) — use tool calls instead.\n\nFile naming rule: Save all output files into this directory: [output-dir]/\nName each file with the skill name as suffix before the extension, using double-dash separator.\nExamples: `[output-dir]/homepage--frontend-design.html`, `[output-dir]/report--frontend-design.md`\nNever use a generic filename that doesn't identify which skill produced it.\n\nProduce the complete output the skill would normally deliver.\n```\n\n**Agent B prompt:** identical structure with Skill B's name, body, and the same output directory.\n\nLaunch both with `subagent_type: \"general-purpose\"` in parallel (single message, two Agent calls).\n\n### Step 5: Verify outputs and present results\n\nAfter both agents complete, **verify that each expected output file actually exists** before\nreporting it. Run `ls -lh` on the exact OUTPUT_DIR path captured in Step 4 (substitute the\nreal path — do not pass a placeholder):\n```bash\nls -lh /actual/output/dir/path/\n```\nIf a file the subagent claimed to create is missing, note it explicitly:\n> \"⚠ [Skill Name] claimed to create `[filename]` but the file was not found.\n> The subagent may have failed silently. Check its output above for errors.\"\n\nThen present a structured summary — **do not dump full file contents inline**.\nFor skills that generate files (HTML, code, reports), reference the verified file path and\nsummarize the key decisions instead.\n\nIn the summary below, replace every occurrence of `[output-dir]` with the actual OUTPUT_DIR\npath captured in Step 4 before presenting to the user.\n\n---\n\n## Comparison Results: [Skill A] vs [Skill B]\n\n**Task:** [task string]\n**Output directory:** `[output-dir]/`\n**Method:** Parallel isolated subagents — same task, only skill instructions differed.\n[If any skill had detected dependencies that may have degraded output, note it here.]\n\n---\n\n### [Skill A] — [skill-a-name]\n\n**Output file(s):** `[output-dir]/[filename--skill-a].[ext]`\n\n**What it produced:**\n- [3–5 bullet points: aesthetic/design decisions, structure, key sections, notable choices]\n- [Specific choices made: color palette, typography, layout approach, etc.]\n- [Any limitations or degradations noted]\n\n---\n\n### [Skill B] — [skill-b-name]\n\n**Output file(s):** `[output-dir]/[filename--skill-b].[ext]`\n\n**What it produced:**\n- [3–5 bullet points: aesthetic/design decisions, structure, key sections, notable choices]\n- [Specific choices made]\n- [Any limitations or degradations noted]\n\n---\n\n### Synthesized verdict\n\nBased on the outputs above, state a clear preference — do not stay neutral when the evidence\nsupports a conclusion. Use this rubric matched to the skill type detected in Phase 2:\n\n- **UI/design skills:** visual distinctiveness, code quality, responsiveness, match to the brief\n- **Scraping skills:** data completeness, accuracy, handling of dynamic/JS-rendered content\n- **Writing/docs skills:** clarity, structure, tone, coverage of the topic\n- **Browser/QA/automation skills:** reliability, correctness, handling of edge cases, report quality\n- **Code generation skills:** correctness, idiomatic style, test coverage, error handling\n- **Security/audit skills:** vulnerability coverage, false positive rate, actionability of findings\n- **Deployment/CI skills:** pipeline correctness, environment handling, failure recovery steps\n- **Data/ETL skills:** schema fidelity, edge-case handling, transformation accuracy\n- **Presentation/slides skills:** narrative flow, visual impact, information density balance\n\nIn all cases weight: which output needed less post-processing? Which made smarter default\nassumptions about the task?\n\nState the verdict as:\n> **Winner: [Skill Name]** — [1–2 sentences of evidence drawn from the outputs above].\n> Use [other skill] instead when [specific scenario where it would outperform].\n\nIf the outputs are genuinely too close to call, say so explicitly and list the deciding factors\nthe user should weigh themselves when opening the files.\n\n**To use the winner:** invoke `/[winning-skill-name]` for future tasks.\nIf the winning skill was fetched from a remote URL and is not yet installed locally, install it first:\n```\nmkdir -p ~/.claude/skills/<skill-name>\ncurl -o ~/.claude/skills/<skill-name>/SKILL.md <raw-url>\n```\n\n---\n\n## Error Handling\n\n- **Same skill provided twice**: caught in Phase 0 — prompt user for two distinct skills via\n  AskUserQuestion before proceeding.\n- **Empty `--query` flag** (e.g. `A B --query` with nothing after): treat TEST_TASK as absent;\n  do not pass an empty string to subagents.\n- **Inference mode finds no candidates**: no keyword overlap with system-reminder skills — fall\n  through to the general AskUserQuestion asking the user to name two skills explicitly.\n- **One token recognized, one unknown**: attempt disk discovery for the unknown token in Phase 1\n  before giving up. Only enter inference mode if disk discovery also finds nothing.\n- **SKILL.md not found locally (named skill)**: use AskUserQuestion with three options —\n  retry after installing, proceed with low-confidence summary, or provide a GitHub URL.\n  Only fall back to the system-level description if the user explicitly selects that option,\n  and mark the result with a ⚠ low-confidence warning.\n- **URL fetch fails (404)**: report the error and remind the user that the URL must point to the\n  **directory containing SKILL.md** — not a parent directory or the file itself. Example:\n  `https://github.com/user/repo/tree/main/skills/my-skill` where `my-skill/SKILL.md` exists.\n- **URL returns HTML instead of raw markdown**: GitHub repo landing pages return HTML — guide\n  the user to the raw URL or the specific SKILL.md file path.\n- **Skills are unrelated (Phase 2)**: use AskUserQuestion to offer the user a chance to try\n  a different pair — do not silently stop.\n- **\"I'll type a different task\" selected in Phase 3 Step 1**: treat the user's next free-text\n  reply as TEST_TASK verbatim — no second confirmation prompt. Proceed directly to Step 2.\n- **External dependency detected**: warn before launching (Step 3). If user proceeds,\n  note in results header that output may not reflect the skill's full capability.\n- **Both skills have dependencies**: warn once per skill sequentially. If the user chooses\n  \"Skip Phase 3\" for the first skill's warning, stop immediately — do not show the second warning.\n- **Subagent falls back silently** (e.g. Python scripts missing, CLI tool absent): the\n  subagent may still produce output using inline guidelines. Flag this in the results:\n  \"⚠ [Skill Name] ran in degraded mode — [dependency] was unavailable. Results may differ\n  from a fully installed environment.\"\n- **Output directory creation fails** (`mkdir` error): report the error immediately. Do not\n  launch subagents without a valid directory. Suggest the user check disk space and permissions.\n- **Subagent times out**: distinguish from a hard tool error — a timeout means the task may\n  have been too large. Suggest the user re-run with a simpler test task, or invoke the timed-out\n  skill manually with the same prompt. Present the other skill's output alone.\n- **Subagent fails with a tool error**: present the successful agent's output alone, note the\n  specific error, suggest running the failed skill manually to diagnose.\n- **Both subagents fail**: report both errors. Do not fabricate output for either skill.\n  Suggest narrowing the test task and retrying.\n- **Output files missing after subagent completes**: note the discrepancy (Step 5 verification).\n  Do not report file paths that don't exist.\n- **Phase 3 reached but SKILL.md body unavailable for one skill**: do not launch that skill's\n  subagent — a subagent without skill instructions has nothing to follow. Present the other\n  skill's output alone and explain the skip.\n- **Phase 3 reached with low-confidence skill(s)**: a skill loaded from a system-reminder\n  summary (2–3 lines) cannot serve as subagent instructions. Skip its subagent and note the\n  limitation. If both skills are low-confidence, skip Phase 3 entirely.\n\n---\n\n## Core Principles\n\n1. **Functional first, aesthetic second.** Always compare capabilities before output quality.\n   Many comparisons end at Phase 2 — don't escalate to an A/B test when the docs already answer the question.\n\n2. **Recommend directly when the answer is clear.** Hedging when one skill is obviously better\n   wastes the user's time. Save the user's judgment for cases where it's genuinely needed.\n\n3. **Evidence over opinion.** Every functional recommendation must quote specific passages from\n   the skill files directly, not general impressions.\n\n4. **Zero cross-contamination for output quality tests.** Each subagent receives only its own\n   skill's instructions and the task — no knowledge of the other agent or the comparison.\n   Never share context between the two agents.\n\n5. **Same task, only skill differs.** The task string must be character-for-character identical\n   in both session instructions. Do not adapt or rephrase per skill.","tags":["find","best","skill","skills","instantx-research","agent-skills","frontend-ui","ui-design","web-search"],"capabilities":["skill","source-instantx-research","skill-find-best-skill","topic-agent-skills","topic-frontend-ui","topic-ui-design","topic-web-search"],"categories":["skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/instantX-research/skills/find-best-skill","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add instantX-research/skills","source_repo":"https://github.com/instantX-research/skills","install_from":"skills.sh"}},"qualityScore":"0.455","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 11 github stars · SKILL.md body (34,669 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:07:41.418Z","embedding":null,"createdAt":"2026-04-23T13:03:56.220Z","updatedAt":"2026-05-18T19:07:41.418Z","lastSeenAt":"2026-05-18T19:07:41.418Z","tsv":"'/...':1626 '/.claude/skills':631,1123,1130,1133,1181,1184,1187,1190,1233,1236,1531,4399,4402 '/.claude/skills/foo/skill.md':852 '/actual/output/dir/path':3955 '/blob':1417,1437,1515 '/blob/main':1441 '/find-best-skill':136,173,178,186 '/homepage--frontend-design.html':3850 '/main':1442,1495 '/pricing':2685 '/report--frontend-design.md':3854 '/skill.md':629,1029,1065,1131,1182,1188,1222,1237,1464,1497,1526,1529,1532,1613,4403,4590 '/skills':1528 '/test_outputs':3698 '/test_outputs/.gitignore':3660,3663 '/test_outputs/comparison--':3580 '/tree':1477,1490,1513 '/tree/main':1494 '/user/repo':1408 '/user/repo-a':189 '/user/repo-b':192 '/user/repo/blob/main/.claude/skills/foo/skill.md':1469 '/user/repo/main/.claude/skills/foo/skill.md':1472,1507 '/user/repo/tree/main/.claude/skills/foo':1504 '/user/repo/tree/main/skills/my-skill':1412,1608,4585 '/users/alice':999 '/users/alice/.claude/skills':1031,1042,1067 '0':114,1830,2580,2979,4413 '1':383,437,465,507,919,956,1026,1161,1180,1302,1380,1413,1943,2241,2270,2469,2567,2813,3005,4319,4488,4651,4995 '10':2746 '2':703,1034,1143,1183,1336,1473,1717,2280,2368,2374,2385,2478,2585,2820,2961,2990,2992,4205,4320,4622,4673,4967,5011,5026 '20':3081 '3':1047,1186,1337,1508,1944,2044,2135,2234,2267,2281,2327,2356,2479,2546,2836,3248,3434,3463,4109,4154,4649,4681,4714,4913,4950,4968,4991,5058 '30k':3034 '4':1189,2282,3485,3942,4044,5077 '404':1452,1541,4556 '5':2284,2783,2845,3629,3909,4110,4155,4901,5114 '50':3057 '800':3031 'a/b':5017 'absent':351,399,847,1715,4438,4739 'abstract':2854 'access':29,1885,2306 'accident':3655 'accur':1226 'accuraci':4221,4283 'across':1738,3525 'act':2486 'action':2754,4262 'actual':1701,1895,1899,2058,3543,3747,3778,3925,4037 'adapt':5136 'add':2012 'aesthet':1959,4998 'aesthetic/design':4113,4158 'agent':3709,3721,3737,3768,3877,3906,3917,4855,5103,5113 'ai':2790 'ai-pow':2789 'allow':1693 'allowed-tool':1692 'alon':4845,4858,4944 'alreadi':1157,2975,3001,5022 'also':1099,4499 'altern':1238 'alway':20,1720,1723,5000 'analysi':25,74,106,201,2415 'analyt':2668 'analyz':1333 'answer':2352,5023,5031 'anyth':1447 'anyway':1260,1283,1311,2463,3431,3447 'api':2697,2721,2772 'app':2710,2739 'appear':714,1112,3266 'append':1446,1465,1496 'appli':933,1906 'approach':4127 'appropri':935 'approx':3033 'argument':112,121,144,232,309,314,535,1003,1696,2611,2806,3139,3186,3200,3245,3483,3799 'argument-hint':1695,2610,2805 'artifact':2829,3652 'ask':564,643,814,877,1579,1670,1832,4466 'askuserquest':533,641,764,771,812,875,896,1208,1791,2188,2251,2857,3389,4421,4465,4509,4624 'assumpt':4308 'attempt':458,1645,3408,4479 'attribut':3184 'audit':2735 'auth':2742 'authent':2698 'auto':2158,2213,2228,2236,2273,2597,2644 'auto-gener':2157,2212,2227,2235,2272,2596,2643 'automat':2040,2131 'avail':2518,2558,2576,3399 'b':142,150,243,292,406,517,652,784,831,932,1373,1387,1876,1881,1983,2181,3878,3884,4056,4135,4138,4149,4429 'b2b':2666 'back':1013,1315,1711,3411,4529,4731 'backtick':3164,3285 'balanc':4292 'bare':3137 'base':776,937,2879,4175 'bash':624,966,991,3313,3530,3576,3613,3657,3756,3952 'becom':336,2899 'best':3,13,588,722,1901 'better':206,2028,2059,2122,5040 'block':1869,3159,3169,3276,3286 'bodi':1699,3000,3029,3117,3133,3233,3257,3788,3887,4917 'branch':1524,1539,1554,3204 'breakdown':2101 'brief':4216 'broad':1068 'broad/narrow/focused':1893,1897 'broader':1016,1917 'brows':179,585,604 'browser/qa':2700 'browser/qa/automation':4235 'build':1744,1774,2660,2759 'bullet':4111,4156 'c':653 'call':3329,3814,3907,4348 'candid':698,740,755,767,4451 'cannot':892,2416,2549,4970 'capabl':1891,2010,2642,3425,4698,5002 'captur':3512,3939,4041 'care':884 'carri':2148 'case':19,126,287,1930,2097,2111,2366,2622,3046,3299,3301,3691,4242,4280,4295,5052 'case-insensit':125,3300 'categori':560,574,578,594,600,669,2650 'caught':4410 'chanc':4630 'changelog.md':1098 'charact':2590,2592,3557,5126,5128 'character-for-charact':2589,5125 'check':958,1124,1742,3987,4792 'choic':4119,4121,4164,4166 'choos':3445,3460,4711 'cite':40,1947,2328 'claim':2295,3961,3971 'clariti':4228 'claud':58 'clear':33,205,668,810,1910,2085,2091,2313,2354,2850,4182,5033 'cli':3323,4737 'client':2722 'close':3009,3088,4346 'clue':283 'code':59,1868,2714,3158,3275,3281,4011,4210,4245 'collaps':319 'collect':2582 'color':4123 'command':3368,3534,3567,3757 'commit':3656 'compar':5,57,196,251,550,581,660,723,791,860,891,904,1262,1737,1801,2202,2308,5001 'comparison':77,102,171,807,1227,1256,1331,1719,1776,1844,1871,1960,2323,2359,2536,2552,3479,3651,3704,3740,4050,5007,5106 'compet':1964 'complementari':1962 'complet':1757,1783,1795,2428,2839,3870,3918,4220,4896 'compon':1083 'conclud':1136 'conclus':4193 'concret':256,2635,2827 'condit':3203 'confid':1274,1330,2447,2497,2543,4520,4551,4955,4988 'confirm':773,1149,1200,2275,2866,2955,2970,2982,4667 'confus':303 'consist':3214,3524,3603 'construct':1565,2632,2809,3742 'contain':1077,1416,1476,1594,1994,3060,3084,3135,3294,4572 'contamin':5081 'content':1399,2679,3272,4003,4225 'context':282,3042,3107,3150,5109 'continu':2324,2929,3448 'convert':1429,1478 'core':2641,3062,4993 'correct':1618,4238,4248,4268 'could':1582 'couldn':1219 'count':744 'cover':1756 'coverag':27,1896,1900,1918,4231,4252,4258 'creat':2781,3486,3493,3639,3963,3973 'creation':4773 'cross':1101,5080 'cross-contamin':5079 'cross-refer':1100 'crud':2728 'csv':2775,3340 'curl':1234,4400 'current':3509 'd':3585 'dark':2670 'dash':3844 'data':1860,3332,4219 'data/etl':2764,4274 'date':3581 'db':3341 'decid':4355 'decis':1908,2171,4022,4114,4159 'deck':2786 'default':1553,4307 'defin':235 'definit':3064 'degrad':3452,4084,4132,4171,4758 'delimit':326,3161,3279 'deliv':3876 'densiti':4291 'depend':3251,3261,3380,3404,3439,3471,4080,4675,4702,4760 'deploy':2761 'deployment/ci':2748,4265 'deriv':2618,2795 'descend':745 'describ':1894,1898 'descript':678,719,1266,1321,1691,1749,2481,2608,2803,3364,4535 'design':1925 'detect':3249,3382,4079,4202,4676 'determin':66,894,2568,3143 'diagnos':4870 'differ':547,797,1758,1784,1796,1808,1817,1967,2894,2911,2938,4074,4634,4644,4765,5119 'digit':3563 'dimens':1740,1877 'dir':3578,3592,3595,3749,3763,3774,3780,3828,3849,3853,3937,4034,4039,4064,4100,4145 'direct':38,72,982,1032,1243,1422,1444,1620,1629,1633,1675,2342,2588,2958,2987,3809,4670,5028,5073 'directori':1080,1428,1458,1593,1599,3488,3497,3511,3642,3688,3702,3825,3892,4061,4571,4577,4772,4788 'directory/filename':842 'discov':951,957,1980 'discoveri':460,1199,1303,4481,4498 'discrep':4899 'disk':459,497,502,620,964,1206,3670,4480,4497,4793 'display':1704 'distinct':297,704,2077,4209,4418 'distinguish':4800 'doc':5021 'document':73,2310,2605,2883 'doesn':2311,3861 'domain':278,486,1759,1785,1797,1853,3077 'done':1822 'doubl':3843 'double-dash':3842 'drawn':4324 'dump':4000 'duplic':8 'dynamic/js-rendered':4224 'e.g':580,602,908,998,1095,1405,1440,1493,1623,1662,1760,1976,2020,2173,2623,3205,3318,3326,3339,3373,3667,3810,4427,4733 'echo':992,3593,3661,3699 'edg':4241,4279 'edge-cas':4278 'either':70,2450,4882 'emerg':35 'empti':364,4424,4443 'end':393,1500,5008 'end-of-input':392 'enough':2823 'ensur':3196,3643 'enter':468,489,4493 'entir':482,2547,2984,4992 'environ':3343,3403,4269,4770 'equival':2318 'error':1668,2731,3669,3674,3992,4253,4404,4559,4776,4779,4805,4851,4862,4876 'escal':5014 'etc':4128 'evalu':51,2828,2851 'everi':3128,3192,4029,5062 'everyth':259,333,1998,3006 'evid':41,210,1948,2337,4190,4323,5059 'exact':123,244,861,1091,1483,1928,3514,3533,3620,3786,3935 'exampl':172,1466,1501,1605,3295,3846,4582 'exceed':3030 'exercis':2639 'exist':962,1151,1201,1614,3219,3646,3926,4591,4911 'expand':974,988,1154 'expect':3922 'expert':52 'explain':1972,2169,4946 'explicit':590,664,1924,3968,4351,4473,4539 'export':3350 'express':2738 'ext':4105,4150 'extens':3840 'extern':3250,3259,3393,4674 'extra':2009 'extract':233,327,598,1550,1684,2676,2766,3047 'f':3658 'fabric':4879 'factor':2172,4356 'fail':1025,3666,3985,4555,4774,4847,4866,4873 'failur':4271 'fall':759,1012,1314,1710,2814,3410,4460,4528,4730 'fallback':854 'fals':4259 'faster':2025 'favor':2314 'featur':26,2303 'fenc':3157,3274 'fetch':1247,1382,1396,1443,1450,1542,1632,1641,1683,4383,4554 'fewer':752 'fidel':4277 'field':835,1709,1750,2613,2808 'file':527,924,1045,1086,1414,1426,1461,1563,1602,1661,1681,1688,1735,1864,2335,2617,2830,3022,3333,3816,3822,3831,3924,3958,3977,4002,4009,4016,4096,4141,4365,4580,4616,4892,4906,5072 'filenam':1082,3859,3974,4101,4146 'filter':633,1071 'find':2,724,1221,3127,4264,4449,4500 'find-best-skil':1 'firecrawl':174,176,582,603,909,911,3328 'firecrawl-scrap':175,910 'first':264,625,952,970,1011,1194,1217,1230,1722,2649,3056,3472,4396,4717,4997 'fit':1937,2652,3106 'flag':3263,3347,4426,4749 'flat':1044 'flat-fil':1043 'flow':185,2699,2705,4287 'focus':2032,2055 'follow':345,1518,3782,4937 'foo':857 'format':3086 'forward':2151 'found':559,612,650,769,781,1056,1121,1204,3980,4504 'four':2365 'free':2946,4658 'free-text':2945,4657 'frontmatt':839,845,1652,1689,1707,3012 'full':109,308,1698,1733,2286,2520,2556,2998,3424,3671,3787,4001,4697 'fulli':1993,4768 'function':24,45,76,105,200,1739,1904,1911,2291,2317,2371,2414,4996,5063 'futur':4376 'general':763,2657,2794,3899,4464,5075 'general-purpos':3898 'generat':1768,2137,2159,2214,2229,2237,2274,2598,2627,2628,2645,2715,2717,2861,2876,2885,2905,2919,2923,4008,4246 'generic':3858 'genuin':4344,5056 'get':2691 'getting-start':2690 'github':159,916,1241,1287,1361,1402,1640,2753,4525,4599 'github.com':188,191,1407,1411,1433,1468,1486,1503,1543,1607,4584 'github.com/user/repo':1406 'github.com/user/repo-a':187 'github.com/user/repo-b':190 'github.com/user/repo/blob/main/.claude/skills/foo/skill.md':1467 'github.com/user/repo/tree/main/.claude/skills/foo':1502 'github.com/user/repo/tree/main/skills/my-skill':1410,1606,4583 'gitignor':3645 'give':4490 'given':17 'glob':627,977,984,1027,1038,1063,1198 'gstack':180 'guard':511,2448,3024 'guid':2693,4605 'guidelin':3414,4748 'h':3586 'handl':62,2297,2732,4222,4239,4254,4270,4281,4405 'happen':504 'hard':4803 'head':3071,3181,3293 'header':3456,4688 'hedg':2349,5034 'help':119,124 'hint':279,487,1697,2612,2807 'hit':743 'home':622,969,980,993,1155 'html':1549,1665,3183,4010,4594,4604 'hyphen':3554,3565 'i/o':498 'ident':3880,5129 'identifi':11,3863 'idiomat':4249 'ignor':267,1096,3806 'immedi':530,1771,3675,4722,4780 'impact':4289 'imper':3268,3309 'impress':5076 'inaccur':1345 'inconclus':108 'infer':469,490,562,570,661,4447,4494 'inform':4290 'inject':3121 'inlin':3163,3280,3413,4004,4747 'input':111,230,395,483,691,713,939,1374,1389 'insensit':127,3302 'insid':273,1866,3147,3155,3162,3167,3273 'instal':156,1141,1214,1228,1251,1279,1295,1346,2522,2559,3367,3375,3377,3428,3437,3469,4392,4394,4515,4769 'instead':1289,1363,2490,3815,4023,4332,4595 'instruct':1703,2489,2521,2557,2995,3054,3099,3728,3785,4073,4933,4974,5094,5133 'intend':1974 'invoc':3314,3325 'invok':1254,3477,4370,4828 'isol':85,220,2429,4067 'issu':2713 'job':54 'json':2771 'judg':2049,2147,2444 'judgment':5050 'jump':568 'jwt':2741 'keep':288,3499 'key':3066,3361,4021,4116,4161 'keyword':575,595,601,639,670,685,708,742,2799,3078,4453 'knowledg':3733,5099 'known':415 'label':825 'lack':2081 'land':2662,4601 'larg':4815 'last':3080 'launch':2472,2868,2964,3490,3683,3712,3893,4679,4783,4924 'layout':1046,4126 'least':702 'less':4300 'let':1814,2046 'letter':3548,3562 'level':1128,1172,1178,1320,3798,4534 'lh':3932,3954 'lighter':2026 'like':658,796,902,1804,2191,3349 'limit':1903,4130,4169,4981 'line':677,1338,2341,2345,2480,3032,3058,3082,3104,3129,3171,3277,3288,4969 'link':1423,1631,1676 'list':157,424,607,1062,1108,1886,1888,2727,2768,4353 'll':1246,2218,2245,2908,2935,3436,4641 'load':2453,3002,4960 'local':1223,3331,4393,4505 'locat':920,1173,1558,1584 'logic':3208 'look':3311 'low':1273,1329,2446,2496,2542,4519,4550,4954,4987 'low-confid':1272,1328,2445,2495,2541,4518,4549,4953,4986 'lowercas':3546 'ls':3931,3953 'm':1821,3584,3587 'made':4122,4167,4305 'main':1521,2678 'mani':5006 'manual':4834,4868 'map':821 'mark':1324,4544 'markdown':1649,1660,1856,4598 'master':1523 'match':413,609,692,1033,2647,2655,3072,4197,4213 'may':1343,3037,3111,3396,3418,3983,4082,4691,4742,4764,4811 'mb':3330 'md':1040,1134,1185,1191,1630 'mean':4808 'meaning':1788,1916 'mention':3358 'mere':3357 'messag':3719,3904 'method':4065 'minut':2846 'miss':3113,3965,4736,4893 'mkdir':1231,3589,3665,3696,4397,4775 'mode':470,491,563,571,662,3206,4448,4495,4759 'multipl':3202 'must':1589,4567,5065,5123 'my-skil':1610,4587 'n':3103 'name':153,247,417,456,524,543,636,673,717,804,834,855,870,907,943,1010,1022,1088,1094,1555,1690,1705,1708,1941,3362,3391,3545,3817,3829,3835,3886,3970,4094,4139,4318,4374,4470,4506,4755 'name-target':1021 'narrat':4286 'narrow':2018,2022,2052,4885 'need':1961,2178,2184,2956,4299,5057 'neither':476,2082,2088,2553 'neutral':4187 'never':302,361,978,3631,3855,5107 'new':1835,2161 'next':2944,4656 'node':3321 'node.js':2737 'non':706,1639 'non-github':1638 'non-stopword':705 'none':2654 'normal':3875 'notabl':4118,4163 'note':1949,2316,2509,3092,3097,3235,3450,3805,3966,4086,4133,4172,4685,4859,4897,4979 'noth':344,4432,4501,4935 'npm':3374 'number':2346 'o':1235,4401 'object':1718 'obtain':1158 'obvious':5039 'occurr':265,270,3142,3178,3194,3218,4030 'offer':4626 'one':14,203,439,676,801,823,1179,1913,1991,2023,2315,2492,2895,4474,4477,4920,5036 'one-lin':675 'open':4363 'oper':1702 'opinion':5061 'option':162,254,280,1276,1812,2209,2902,3429,4512,4542 'order':553,1167 'organ':3501 'os.environ':3354 'otherwis':2595 'outperform':4339 'output':94,100,170,224,1854,2056,2142,2203,2321,2357,2403,2507,2551,2834,2852,3085,3487,3496,3506,3577,3591,3594,3614,3641,3687,3705,3748,3762,3773,3779,3821,3827,3848,3852,3871,3891,3911,3923,3936,3989,4033,4038,4060,4063,4085,4095,4099,4140,4144,4178,4298,4327,4342,4690,4745,4771,4844,4857,4880,4891,4943,5004,5083 'output-dir':3761,3772,3826,3847,3851,4032,4062,4098,4143 'outputs/.gitignore':3649 'overlap':6,63,686,1789,2073,2378,2407,2798,4454 'overwhelm':3038 'owasp':2744 'p':1232,3590,3697,4398 'packag':3366 'page':1655,2663,4602 'pair':474,557,591,666,1809,1837,4635 'palett':4124 'parallel':84,2361,3491,3902,4066 'parent':1598,4576 'pars':115,229,311,1647 'partial':2072,2377,2406 'pass':756,972,979,1239,3052,3115,3231,3949,4441 'passag':2331,5068 'past':914,1420 'path':385,528,630,936,941,975,1002,1030,1041,1066,1076,1129,1164,1195,1372,1386,1438,1491,1519,1536,2466,3342,3515,3570,3610,3781,3938,3946,4017,4040,4617,4907 'pattern':628,1028,1039,1064,3348,3535 'per':1538,2239,4705,5139 'permiss':3668,4796 'phase':113,301,382,436,464,506,918,1301,1379,1716,1829,2043,2134,2233,2266,2326,2355,2367,2373,2384,2468,2545,2579,2584,2978,3004,3433,3462,4204,4412,4487,4621,4648,4713,4912,4949,4990,5010 'pick':647,747,880,1816,1825,1840,2417 'pip':3376 'pipelin':1971,2755,4267 'pitch':2785 'place':3502 'placehold':3246,3764,3800,3951 'pleas':544,1615 'plural':3305 'plus':2001 'point':536,1455,1590,4112,4157,4568 'pollut':3637 'poor':1936 'posit':4260 'post':4302 'post-process':4301 'power':2791 'prefer':1168,2016,2174,2180,2847,4183 'prefix':637 'prepar':2993 'prepend':3090,3220 'present':92,223,342,577,597,2098,2433,2505,2859,3913,3994,4046,4839,4852,4938 'presentation/slides':2779,4284 'prevent':3635 'price':2681 'primari':1882 'principl':4994 'print':129,996,3568,3609,3753 'prioriti':1166 'problem':64 'proceed':434,775,1259,1282,1310,2041,2132,2231,2264,2319,2462,2887,2903,2917,2957,2986,3387,3430,3446,3680,4423,4516,4669,4684 'process':950,4303 'process.env.var':3352 'produc':2825,3866,3868,4108,4153,4744 'product':2767 'project':1127,1177,3636 'project-level':1126,1176 'promin':1327 'prompt':1210,2855,3096,3229,3627,3744,3767,3770,3879,4414,4668,4838 'proper':2531,3427 'pros/cons':2100 'prose':3180,3269,3310 'protect':3149,3151 'provid':358,545,1286,1360,1393,1616,2039,2069,2117,2168,2219,2246,2383,2394,2873,2976,4408,4523 'purpos':1883,2884,3900 'pwd':3579,3659,3662,3811 'python':4734 'python3':3319 'qa':605,1762 'qualiti':101,2204,2322,2358,4211,4244,5005,5084 'queri':143,161,181,261,272,332,335,340,355,389,397,561,579,779,4425,4430 'question':5025 'quick':118 'quot':2338,3170,3287,5066 'ran':4756 'rank':739 'rate':4261 'raw':1431,1480,1567,1621,1659,1679,4597,4610 'raw.githubusercontent.com':1434,1471,1487,1506,1525,1527,1530,1625 'raw.githubusercontent.com/...':1624 'raw.githubusercontent.com/user/repo/main/.claude/skills/foo/skill.md':1470,1505 're':1253,1299,1351,1377,2527,2564,3019,3476,4820 're-invok':1252,3475 're-read':3018 're-run':1298,1350,1376,2526,2563,4819 'reach':2363,4914,4951 'read':922,954,1144,1730,1747,2606,3020,3336,3345,3574,3607 'readme.md':1097 'real':1859,3945 'receiv':3210,3722,5088 'recogn':4476 'recommend':36,207,1342,1939,3466,5027,5064 'recomput':3632 'recoveri':4272 'refer':1102,3199,3264,3625,4013 'referenc':3523 'reflect':3420,4693 'regardless':1726,3604 'relat':2105 'relationship':1990,2389 'relev':788,1920,2340 'reliabl':1355,4237 'remain':3308 'remind':422,617,683,1061,1106,1117,1271,2458,4458,4561,4965 'remot':378,1249,4386 'remov':1435,1488 'rephras':2155,2594,5138 'replac':1432,1485,3154,3175,3185,3536,3549,3775,3801,4028 'repli':1258,1368,2259,2898,2948,4660 'repo':1509,4600 'repo/filename':1713 'report':1666,2831,3672,3928,4012,4243,4557,4777,4874,4905 'repositori':1403 'repres':2600 'request':117,2398 'requir':3370,3392 'resolut':552 'resolv':518,621,968 'respons':4212 'rest':2696,2720 'result':1037,1051,1072,1275,1326,1356,2435,3238,3417,3455,3500,3914,4051,4546,4687,4753,4763 'retri':1281,1297,1462,1570,3441,4513,4890 'return':1451,1540,1664,1827,4593,4603 'role':3063 'root':1510 'rubric':4196 'rule':312,1909,2242,2646,3067,3089,3110,3126,3818 'run':80,213,320,1300,1352,1378,1721,2194,2278,2420,2498,2528,2550,2565,2757,3327,3695,3930,4821,4864 'runtim':3338 'saa':2667 'same-skil':508 'sampl':2199 'sanit':3539 'save':3819,5046 'say':4349 'scan':671,1017,1069,3252 'scenario':4335 'schedul':2792 'schema':2778,4276 'scope':1892,2819 'scrape':177,912,1985,2672,2674,4217 'script':3317,3320,3322,4735 'search':1004,1024 'second':817,4666,4727,4999 'secondari':3109 'section':3050,3069,3291,4117,4162 'security/audit':2733,4255 'see':381,492 'segment':1439,1492 'select':1292,1309,1359,2916,2933,3207,4540,4646 'sentenc':1945,4321 'separ':237,3845 'sequenti':4707 'serv':1782,1794,1966,4971 'servic':2729 'session':2431,3224,5132 'set':2257,2304,2577,2750 'setup':3371 'share':2620,5108 'shell':989,3808 'short':1265,2515 'show':4725 'side':96,98,167,169,226,228,2139,2141,2206,2208,2400,2402,2437,2439,2533,2535 'side-by-sid':95,166,225,2138,2205,2399,2436,2532 'signup':184,2704 'silent':3986,4638,4732 'similar':2302 'simpler':4824 'simultan':3715 'singl':325,3718,3903 'singular':3303 'six':1535 'size':3023 'skill':4,9,43,50,60,82,138,141,146,149,152,198,239,242,246,289,291,379,402,405,416,423,455,510,513,516,522,540,542,548,583,610,635,665,672,695,721,798,802,818,824,827,830,850,859,863,889,899,906,923,928,931,944,961,1008,1054,1093,1107,1111,1138,1147,1216,1306,1348,1385,1612,1687,1728,1732,1753,1764,1769,1781,1793,1811,1818,1836,1848,1863,1870,1872,1875,1878,1880,1914,1940,1955,1965,1992,2019,2053,2075,2104,2120,2196,2294,2334,2422,2451,2488,2493,2502,2524,2539,2554,2561,2604,2659,2673,2687,2701,2716,2734,2749,2765,2780,2802,2817,2882,2994,3015,3027,3098,3132,3197,3242,3254,3335,3390,3422,3544,3726,3784,3790,3834,3865,3873,3883,3969,4006,4052,4055,4072,4077,4089,4092,4103,4134,4137,4148,4200,4207,4218,4227,4236,4247,4256,4266,4275,4285,4317,4331,4373,4381,4407,4419,4459,4472,4507,4589,4618,4695,4700,4706,4718,4754,4833,4842,4867,4883,4921,4926,4932,4941,4956,4959,4984,5037,5071,5092,5118,5140 'skill-a':137,145,4102 'skill-a-nam':4091 'skill-b':140,148,4147 'skill-b-nam':4136 'skill-find-best-skill' 'skill-nam':541 'skill.md':838,1398,1560,1572,1585,1595,1651,1680,1734,2616,2999,3256,3793,4502,4573,4615,4916 'skill/url':329 'skip':1084,2268,2510,2544,2980,3270,3432,3461,4712,4948,4975,4989 'slide':1767,2784 'smarter':4306 'sourc':380 'source-instantx-research' 'space':3550,4794 'span':3165,3282 'special':30 'specif':1007,2031,2062,2126,2329,2634,2822,3316,4120,4165,4334,4614,4861,5067 'split':316 'stage':501,2763 'start':21,372,1724,2692,3172,3289 'startup':2793 'state':1938,2003,2095,2118,2548,2818,4180,4312 'stay':4186 'step':949,955,1142,1160,1968,2240,2269,2279,2566,2960,2983,2989,2991,3247,3372,3484,3528,3628,3908,3941,4043,4273,4650,4672,4680,4900 'still':1049,2277,4743 'stop':134,529,1770,1842,1956,1987,2070,2289,3464,3677,4639,4721 'stopword':707,720 'store':3616 'strength':2078 'string':258,310,365,2637,3621,3752,4059,4444,5122 'strip':3555 'stripe.com':2684 'stripe.com/pricing':2683 'structur':3881,3996,4115,4160,4229 'style':4250 'subag':86,221,2362,2430,2474,2504,2511,2842,2869,2965,3040,3095,3120,3402,3406,3492,3626,3682,3714,3896,3960,3982,4068,4446,4729,4741,4784,4797,4846,4872,4895,4928,4930,4973,4977,5087 'subdirectori':1474 'subsequ':3527,3624 'substitut':1484,3745,3943 'success':4854 'suffici':2484 'suffix':3837 'suggest':3692,4789,4816,4863,4884 'suit':2123 'summar':4019 'summari':132,1285,1313,1339,2459,2465,2516,3239,3997,4026,4521,4966 'superior':69 'superset':1989,2007,2086,2388 'support':4191 'synthes':4173 'system':421,616,682,1060,1105,1116,1270,1319,2457,4457,4533,4964 'system-level':1318,4532 'system-remind':420,615,681,1059,1104,1115,1269,2456,4456,4963 'tabl':1746,1777,1845,1857 'take':262 'target':808,1023 'task':90,164,218,253,257,275,295,305,338,349,368,2033,2037,2063,2067,2115,2127,2150,2162,2166,2200,2215,2221,2230,2238,2248,2253,2262,2300,2381,2392,2412,2426,2571,2574,2601,2631,2636,2811,2848,2862,2872,2878,2886,2890,2901,2906,2912,2920,2924,2927,2939,2951,2968,2973,3075,3123,3189,3213,3221,3226,3731,3804,4057,4058,4070,4311,4377,4436,4645,4663,4810,4826,4888,5097,5116,5121 'test':163,182,252,294,304,337,348,367,1763,2036,2066,2114,2149,2165,2261,2380,2391,2411,2570,2573,2702,2758,2871,2926,2950,2972,3074,3122,3188,3212,3225,3298,3505,3648,3803,4251,4435,4662,4825,4887,5018,5085 'text':276,2330,2947,3283,3365,4659 'thank':2224,2288 'theme':2671 'three':1537,4511 'threshold':693,758 'throughout':299 'ti':46 'tie':212,2292,2372 'time':866,4798,4831,5045 'timed-out':4830 'timeout':4807 'timestamp':3495,3601,3634 'timezon':3606 'todo':2726 'todo-list':2725 'token':313,330,370,387,408,431,440,451,477,820,3035,3138,4475,4485 'tone':4230 'tool':28,586,1694,1884,1887,1889,1921,2305,2669,3260,3324,3394,3710,3813,4738,4804,4850 'top':749,2745,3797 'top-level':3796 'topic':4234 'topic-agent-skills' 'topic-frontend-ui' 'topic-ui-design' 'topic-web-search' 'transform':2773,4282 'treat':347,375,448,480,1364,2940,4434,4652 'tree':1564,1578 'tri':1162,1516,1806,4632 'trigger':165 'trim':128 'truncat':3101 'twice':4409 'two':151,197,236,245,386,546,648,655,750,754,862,873,882,898,915,948,1780,3713,3905,4417,4471,5112 'two-step':947 'type':940,1729,2892,2909,2936,3897,4201,4642 'typescript':2719 'typic':2708 'typographi':4125 'u':3582,3597 'ui':2626,2630 'ui/design':2658,4206 'unavail':4762,4918 'unchang':2152,3234 'underscor':3552 'uniqu':1890 'unknown':454,4478,4484 'unprotect':3174,3193,3217 'unrecogn':450 'unrel':1778,4620 'unrelated':1741 'url':160,249,384,428,917,946,1242,1288,1362,1366,1381,1388,1395,1404,1415,1454,1475,1511,1568,1588,1619,1622,1637,1981,4387,4526,4553,4566,4592,4611 'usabl':2712 'usag':131,135,3296 'use':18,286,362,532,640,736,770,811,832,874,895,905,965,994,1152,1192,1207,1263,1400,1481,1706,1790,1929,1952,1977,2096,2110,2187,2211,2226,2250,2256,2586,2621,2656,2856,2921,2996,3124,3388,3529,3596,3618,3700,3707,3812,3841,3856,4194,4329,4367,4508,4623,4746 'user':110,565,645,689,711,869,1171,1212,1291,1308,1358,1392,1419,1581,1672,1824,1839,2048,2108,2145,2397,2442,2915,2932,2942,3385,3444,3459,3468,3694,4049,4358,4415,4468,4538,4563,4607,4628,4654,4683,4710,4791,4818,5043,5048 'user-level':1170 'usual':3059,3083 'utc':3598 'valid':410,433,442,479,503,556,2777,3686,4787 'valu':997,1156,3750 'var':3351,3355 'variabl':238,298,990,3344,3518 'variant':611 've':1278,1294,2875 'verbatim':2952,3190,4664 'verdict':1905,2369,2375,2386,2408,4174,4314 'verif':3630,4902 'verifi':3910,3919,4015 'version':3540 'via':199,623,2360,4420 'visibl':1575,2833 'visual':4208,4288 'vs':1765,1874,4054 'vulner':2747,4257 'wait':2864 'warn':3383,4552,4677,4703,4720,4728 'wast':5041 'web':2709 'webfetch':1401,1546,1635,1643 'weigh':4360 'weight':4296 'whether':1074,2050,3144 'whitespac':318 'whitespace/tabs':322 'whole':473 'whose':1087,3070,3292 'win':4372,4380 'window':3043 'winner':34,1912,2092,2419,4316,4369 'winning-skill-nam':4371 'within':2815 'without':1445,3684,4785,4931 'work':3510 'workflow':1975 'would':656,794,900,1802,2189,3874,4338 'write':2688 'writing/docs':2686,4226 'x':2179 'y':2185,3583 'yes':1813,1826,2210,2216,2225,2243 'yet':4391 'zero':5078","prices":[{"id":"6cdaece5-8cff-4168-9dc3-14be6c7e1fd3","listingId":"e88dc26a-cd3b-4639-a102-7dc5211203c1","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"instantX-research","category":"skills","install_from":"skills.sh"},"createdAt":"2026-04-23T13:03:56.220Z"}],"sources":[{"listingId":"e88dc26a-cd3b-4639-a102-7dc5211203c1","source":"github","sourceId":"instantX-research/skills/find-best-skill","sourceUrl":"https://github.com/instantX-research/skills/tree/main/skills/find-best-skill","isPrimary":false,"firstSeenAt":"2026-04-23T13:03:56.220Z","lastSeenAt":"2026-05-18T19:07:41.418Z"}],"details":{"listingId":"e88dc26a-cd3b-4639-a102-7dc5211203c1","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"instantX-research","slug":"find-best-skill","github":{"repo":"instantX-research/skills","stars":11,"topics":["agent-skills","frontend-ui","ui-design","web-search"],"license":"mit","html_url":"https://github.com/instantX-research/skills","pushed_at":"2026-04-08T11:28:55Z","description":"Open source skills for Agent 🔥","skill_md_sha":"93c3b73d0335915ec5af90d0080c87b86ac8e6fe","skill_md_path":"skills/find-best-skill/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/instantX-research/skills/tree/main/skills/find-best-skill"},"layout":"multi","source":"github","category":"skills","frontmatter":{"name":"find-best-skill","description":"Compares overlapping or duplicate skills to identify the best one for a given use case.\nAlways starts with a functional analysis (feature coverage, tool access, specialization):\nif a clear winner emerges, recommends it directly with cited evidence. When skills are\nfunctionally tied, or partially overlapping with a test task provided, runs both in\nparallel isolated subagents on the same task — each receives only its own instructions,\nzero cross-contamination — then presents outputs side-by-side with a synthesized verdict.\nUse when: \"which skill is better\", \"compare these skills\", \"find best skill for X\",\n\"which firecrawl should I use\", \"compare frontend skills\", \"pick the best skill for me\".\nProactively suggest when the user seems unsure which of several similar skills to use."},"skills_sh_url":"https://skills.sh/instantX-research/skills/find-best-skill"},"updatedAt":"2026-05-18T19:07:41.418Z"}}