feat: add discovery plugin (explore + research skills) - #61
Conversation
Four skills migrated from the medley repo and generalized to be repo-agnostic: explore, explore-deep (forked variant), research, research-deep (dispatcher). Project-specific behavior routes through the consumer's CLAUDE.md/rules; artifact location is a single notes_dir userConfig option (default .claude/notes). Co-Authored-By: Claude <noreply@anthropic.com>
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_0ba00958-a95e-45eb-a27c-ee9019755bc2) |
There was a problem hiding this comment.
Stale comment
Risk: medium. Not approving because Cursor Bugbot skipped (usage limit reached) and did not provide a clean automated review signal. Human review is needed; no reviewers were assigned because no suitable non-author maintainers were identified in this repository.
Sent by Cursor Approval Agent: Pull Request Router and Approver
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 461197bb28
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
# Conflicts: # .claude-plugin/marketplace.json # README.md
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_f56594e2-5087-4f05-b451-72957b163baf) |
|
Claude finished @kyle-sexton's task in 8m 41s —— View job PR #61 Review — discovery pluginTasks
Plugin structure — PASS
FindingsHIGH —
|
There was a problem hiding this comment.
Stale comment
Risk: medium. Not approving because Cursor Bugbot skipped (usage limit reached) and did not provide a clean automated review signal. Human review is needed; no reviewers were assigned because no suitable non-author maintainers were identified in this repository.
Sent by Cursor Approval Agent: Pull Request Router and Approver
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 421b6da88b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
# Conflicts: # .claude-plugin/marketplace.json # README.md
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_1b432a54-3fed-4656-a339-33697e46dd9e) |
|
Claude finished @kyle-sexton's task in 4m 1s —— View job PR #61 Review — discovery pluginTasks
Status: prior HIGH/MEDIUM findings unresolvedThe most recent commit (347e648) is a merge from origin/main that pulls in unrelated plugins (thariq-skills, boris, docs-hygiene, fable-5-playbook). None of the discovery plugin files changed. All four findings from the previous review remain open at current HEAD. HIGH — Incorrect
|
| File | Line | Bare reference | Correct form |
|---|---|---|---|
explore/SKILL.md |
L21 | /explore-deep |
/discovery:explore-deep |
explore/SKILL.md |
L29 | /research |
/discovery:research |
explore/SKILL.md |
L171 | /research |
/discovery:research |
research/SKILL.md |
L17 | /explore, /research-deep |
/discovery:explore, /discovery:research-deep |
research-deep/SKILL.md |
L85 | /research |
/discovery:research |
The correct form already exists in the codebase — research-deep/SKILL.md line 54's Tier 2 dispatch template correctly uses /discovery:research. The other occurrences should match.
MEDIUM — explore-deep fork has no path to ecosystem-discovery.md
explore-deep/SKILL.md L33 tells the fork to:
"Follow the sibling
/exploreskill exactly"
Two problems: the fork has no access to the sibling skill's content (it receives only this file as its prompt), and the phrasing implies an implicit follow-through to ecosystem-discovery.md that won't happen. That reference file carries per-ecosystem test globs, build-config file lists, dependency grep tokens, and runtime-version commands for Dimensions 3–6. Without an explicit instruction to Read it, the fork falls back to generic file-scanning.
Suggested fix: add at the start of Step 2, before the bullet list:
Before starting, Read `${CLAUDE_PLUGIN_ROOT}/skills/explore/reference/ecosystem-discovery.md` for
per-ecosystem test globs, build-config file lists, dependency grep tokens, and runtime-version
commands used by Dimensions 3–6.
Also update the wording to reference ecosystem-discovery.md directly rather than deferring to "the sibling skill," since that content isn't available to the fork.
LOW — CLAUDE_CODE_FORK_SUBAGENT undocumented in README configuration section
README.md L10 surfaces CLAUDE_CODE_FORK_SUBAGENT=1 as a requirement for explore-deep in the skill table. The Configuration section (L40–44) only documents notes_dir. Consumers have no way to discover what this env var is, whether it's a harness gate or a consumer convention, or how to set it. At minimum the README should explain it is a consumer convention (not a Claude Code built-in) that enables the /explore routing to /discovery:explore-deep, and note how to set it in the project environment.
LOW — TypeScript test globs missing co-located JSX/TSX patterns
ecosystem-discovery.md L37–39 covers only *.test.ts, *.spec.ts, and __tests__/**. React/Vitest/Jest repositories commonly co-locate tests as *.test.tsx or *.spec.tsx; pure-JS projects as *.test.js/*.spec.js. Missing these patterns causes the test-discovery dimension to silently miss co-located component tests in any TypeScript React repo, producing a false coverage gap in EXPLORE.md.
Suggested addition to the typescript.test-globs list:
- "**/*.test.tsx"
- "**/*.spec.tsx"
- "**/*.test.js"
- "**/*.spec.js"What looks correct
- Plugin manifest:
name,version: 0.1.0,author,license,$schema, validuserConfig.notes_dir(type, title, description, non-sensitive, has default). Marketplace entry hascategory: development, matching tags. - Security posture: no hooks, no MCP servers, no bundled scripts.
notes_diris a non-sensitive path string. Data egress uses only whatever web/MCP tools the consumer session provides — no outbound calls added by the plugin itself. ${CLAUDE_PLUGIN_ROOT}isolation: all internal file references correctly use this variable; no../reach-outs; no hardcoded paths.- Binary outcome gates: both
explore(L145–152) andresearch(L132–149) implement concrete artifact self-checks with FAIL-returns-to-named-phase, not summary recaps. - Namespace consistency in Tier 2 dispatch:
research-deep/SKILL.mdL54 already correctly uses/discovery:researchinside the agent prompt template — the correct pattern exists and the other references should align. research/discipline.md: source-tier table, recency gates, falsification recipes, confidence calibration, graceful degradation, and observed failure patterns are thorough, actionable, and repo-agnostic.explore-deepfork conventions correctly stated where present: L27 correctly notes that path-scoped rules do NOT auto-load in subagent contexts. The Step 1 self-discovery instruction to explicitly Read relevant rule files is a good pattern.
Summary
Two HIGH issues should be fixed before merge: the incorrect fork capability claim ("inherits the conversation") and the bare /explore-deep routing directive that will misfire in an installed plugin context. The MEDIUM issue (missing explicit ecosystem-discovery.md Read in the fork) degrades Dimensions 3–6 ecosystem targeting in explore-deep. The two LOW issues (undocumented env var, missing TSX test globs) are documentation/completeness gaps. The plugin's security posture, manifest, and research discipline are solid.
There was a problem hiding this comment.
Stale comment
Risk: medium. Not approving because Cursor Bugbot skipped (usage limit reached) and did not provide a clean automated review signal. Human review is needed; no reviewers were assigned because no suitable non-author maintainers were identified in this repository.
Sent by Cursor Approval Agent: Pull Request Router and Approver
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 347e648c99
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
# Conflicts: # .claude-plugin/marketplace.json # README.md
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_afbad5bf-1cb5-4d39-9130-bb5283c2b22a) |
|
Claude finished @kyle-sexton's task in 4m 48s —— View job PR #61 Review — discovery plugin (c26bde0)Tasks
Status: all prior findings unresolved
Fresh docs fetch confirms: HIGH — Fork incorrectly described as inheriting conversation history
Per current docs,
No such context is available in a fork — the only scope cues are the three pre-computed Suggested fixes:
HIGH — Bare sibling skill names in actionable routing directivesWhen this plugin is installed from the marketplace, the correct invocable name includes the
The pattern already exists correctly at MEDIUM —
|
There was a problem hiding this comment.
Stale comment
Risk: medium. Not approving because Cursor Bugbot skipped (usage limit reached) and did not provide a clean automated review signal. Human review is needed; no reviewers were assigned because no suitable non-author maintainers were identified in this repository.
Sent by Cursor Approval Agent: Pull Request Router and Approver
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c26bde00bd
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
# Conflicts: # .claude-plugin/marketplace.json # README.md
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_bac8e1c0-33f7-4b37-b240-e97eeea12221) |
|
Claude finished @kyle-sexton's task in 3m 56s —— View job PR #61 Review — discovery plugin (d4800f9)Tasks
Status: all prior findings remain open; one clarification + two new LOWs
Fresh file reads below confirm the current state. HIGH — Fork described as inheriting conversation historyPer the Claude Code skills docs: "The skill content becomes the prompt driving the subagent. It won't have access to your conversation history." 1.
No such context reaches the fork. The only scope cues are the three pre-computed git substitutions in the frontmatter (branch, status, project root). The instruction should name them explicitly. Suggested fixes:
HIGH — Bare sibling skill names in actionable routing directivesPlugin skills installed from the marketplace are namespaced as The correct form already exists at
Clarification vs prior reviews: L71 ( MEDIUM —
|
There was a problem hiding this comment.
Stale comment
Risk: medium. Not approving because Cursor Bugbot skipped (usage limit reached) and did not provide a clean automated review signal. Human review is needed; no reviewers were assigned because no suitable non-author maintainers were identified in this repository.
Sent by Cursor Approval Agent: Pull Request Router and Approver
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d4800f94b4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Forked explore-deep requires explicit scope (a fork does not see the parent conversation); blindspot runs skip the explore outcome gate; TSX/JSX test globs; Go/Rust discovery entries are valid regexes with the in-source-test pattern split into test-content-grep; recency gate clarified for stable projects (fetch latest changelog this turn, window bounds doc staleness); outcome gate requires HIGH confidence on every accepted claim. Co-Authored-By: Claude <noreply@anthropic.com>
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_a9bf9c09-2020-4b7d-8ac7-190a587349c0) |
There was a problem hiding this comment.
Stale comment
Risk: medium. Not approving because Cursor Bugbot skipped (usage limit reached) and did not provide a clean automated review signal. Human review is needed; no reviewers were assigned because no suitable non-author maintainers were identified in this repository.
Sent by Cursor Approval Agent: Pull Request Router and Approver
# Conflicts: # .claude-plugin/marketplace.json # README.md
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_2114c9dc-91f7-43be-9b33-8c059a9a8df5) |
|
Claude finished @kyle-sexton's task in 4m 36s —— View job PR #61 Review — discovery plugin (3617330)Tasks
Status of prior findings at current HEAD (3617330)
FIXED since initial filingThe following findings from prior reviews were addressed:
Both HIGH findings from prior reviews are now fixed. The plugin's correctness posture has meaningfully improved. Remaining concernsHIGH (design decision, not a mistake) — Bare sibling skill names in actionable routing directivesThe PR author resolved this as "Intentional per the migration issue's locked decisions: sibling-skill refs inside this plugin stay bare." That design choice is documented; this finding is not a blocker if the team accepts the risk. But the risk is real and I'm flagging it here for explicit acknowledgment before merge. When this plugin is installed from the marketplace, the model's invocation namespace is
The informational cross-references ( The correct form already exists in the codebase: If the bare-ref convention is kept intentionally, at minimum document it explicitly in the plugin README or a comment in each skill so future maintainers understand why the asymmetry exists. MEDIUM —
|
There was a problem hiding this comment.
Risk: medium. Not approving because Cursor Bugbot skipped (usage limit reached) and did not provide a clean automated review signal. Human review is needed; no reviewers were assigned because no suitable non-author maintainers were identified in this repository.
Sent by Cursor Approval Agent: Pull Request Router and Approver
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3617330844
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| Understand how the pieces fit together before moving any of them. | ||
|
|
||
| - **Directory layout** — if the project documents its repository structure, verify the doc matches reality; otherwise map the tree yourself | ||
| - **Project references / imports** — map the dependency graph by grepping the ecosystem's import/reference token across its build-config files (per-ecosystem tokens: `${CLAUDE_PLUGIN_ROOT}/skills/explore/reference/ecosystem-discovery.md`) |
There was a problem hiding this comment.
Search source files for import edges
When /discovery:explore deps follows this instruction in TypeScript/Python/Go/Rust/Java repos, it restricts the dependency grep to build-config files even though the configured dependency-grep patterns are source import/use syntax. That omits the actual source files where module edges live, so the dependency graph can falsely report no internal imports; the reference header already describes this grep as spanning source/project files, so this line should not narrow it to build configs.
Useful? React with 👍 / 👎.
| - "**/test_*.py" | ||
| - "**/tests/*.py" |
There was a problem hiding this comment.
* Include pytest _test.py files
This Python test list only finds test_*.py plus direct children of a tests/ directory; when a pytest project uses pytest's other default filename form, *_test.py (for example src/foo_test.py or tests/unit/foo_test.py), /discovery:explore tests misses those files and can report false coverage gaps. Add a recursive **/*_test.py pattern or have the skill read the project's pytest discovery config before concluding tests are absent.
Useful? React with 👍 / 👎.


Publishes the
discoveryplugin per melodic-software/medley#1279 (EPIC melodic-software/medley#1273) anddocs/MIGRATION-PLAYBOOK.md.Contents
Four skills migrated from the medley repo and generalized to be repo-agnostic:
/discovery:explore— six-dimension local codebase exploration (+ blindspot mode), persistsEXPLORE.md/discovery:explore-deep— the same workflow in acontext: forkgeneral-purpose subagent (requiresCLAUDE_CODE_FORK_SUBAGENT=1; documented fallbacks)/discovery:research— 3-phase multi-source external research (broad → targeted+falsification → preferred sources) with source tiers, recency gate, and a binary outcome gate; persistsRESEARCH.md/discovery:research-deep— dispatcher routing deep research to workflow engine / forked subagent / inline, with a multi-topic fan-out checkDe-coupling notes (locked decisions applied)
.claude/rules/*cites replaced by an in-plugin canonical source-tier table (skills/research/context/discipline.md);.work/<slug>/artifact convention replaced by oneuserConfigknobnotes_dir(string, default.claude/notes) with consumer working-notes conventions taking precedence; medley's.NET-primary ecosystem tables replaced by a generic multi-ecosystem discovery reference + self-discovery guidance (llms.txt / sitemap probing); medley workflow-engine and agent-loop dependencies replaced by capability detection + graceful degradation./explore,/research); no refs to other plugins.disable-model-invocationstaysfalse.version: 0.1.0inplugin.jsononly; marketplace entrycategory: development, tagsdiscovery+ per-component.Gate evidence
claude plugin validate --strict ./plugins/discovery— PASS;claude plugin validate --strict .(catalog manifest) — PASS.claude plugin details— always-on ~500 tokens (explore ~110, explore-deep ~140, research ~130, research-deep ~120); on-invoke ~5.1k / ~1.2k / ~6.2k / ~2.1k.--plugin-dirsmoke test in a clean non-source scratch repo (headlessclaude -p): skill invoked asdiscovery:explore, body loaded (six dimensions + artifact name reported correctly), no permission prompts.git diff --checkclean. No shell scripts, hooks, or workflows added.Security review (playbook plugin-acceptance)
notes_dir, a project-relative path); no credentials, correctly NOTsensitive.${CLAUDE_PLUGIN_ROOT}; no../reach-outs; state written only inside the consumer's project at the configured notes dir.DONE criteria mapping (melodic-software/medley#1279)
Merge ⇒ marketplace entry present + README catalog row added; medley originals remain until the cutover issue.
Worker: melo-desk-001-6837229512
Note
Low Risk
Markdown-only plugin (no hooks, scripts, or MCP servers); research skills direct the agent to use the consumer's existing web tools and write notes under a configurable project path.
Overview
Adds the
discoveryplugin to the marketplace and root README catalog, shipping four repo-agnostic skills for pre-change discovery.Local exploration:
/discovery:exploreruns a six-dimension codebase workflow (code, git, structure, tests, config, environment), optional blindspot mode, routing to built-in Explore subagents vs inline vs/discovery:explore-deep(context: fork). Artifacts land asEXPLORE.mdunder configurablenotes_dir(default.claude/notes), with sidecar files when needed.ecosystem-discovery.mdreplaces repo-specific tables with multi-ecosystem globs/greps.External research:
/discovery:researchenforces a chained 3-phase discipline (broad → targeted + mandatory falsification → preferred sources), source tiers, recency, and a binary outcome gate;discipline.mdis the in-plugin SSOT.RESEARCH.mdis the handoff artifact./discovery:research-deepdispatches to workflow engine, forked subagent, or inline, with a multi-topic fan-out before single-blob deep runs.Medley-specific paths and rules are removed in favor of
${CLAUDE_PLUGIN_ROOT}references, consumerCLAUDE.md/rules, and capability detection with documented graceful degradation.Reviewed by Cursor Bugbot for commit 3617330. Bugbot is set up for automated code reviews on this repo. Configure here.