Repository navigation
feat(feature-discovery): add multi-agent roadmap discovery plugin - #236
Conversation
Port the open-source feature-discovery skill as a standalone plugin. It runs a
deterministic Workflow pipeline that maps the current product from its repo,
researches competitors, ideates across seven value lenses, dedups and
shortlists, then specs and adversarially validates a ranked roadmap.
The Workflow engine is kept verbatim except for a defensive args normalization:
it accepts the args payload whether it arrives already-parsed or as a JSON
string, so scope/depth are honored instead of silently falling back to the
expensive exhaustive default. Packaging, frontmatter, and the
${CLAUDE_SKILL_DIR} script path are adapted to this marketplace.
Register the plugin in marketplace.json and every README install path (four
install/update loops, the individual-install list, and the structure tree),
add plugin tables to README and CLAUDE, and document the CLAUDE_SKILL_DIR vs
CLAUDE_PLUGIN_ROOT skill-body substitution pitfall in docs/learnings.md.
Credit: ported from github.com/fabianhug/feature-discovery-skill (MIT).
|
Caution The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased. |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds the ChangesFeature discovery plugin
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant User
participant FeatureDiscoverySkill
participant FeatureDiscoveryWorkflow
participant GroundAgents
participant IdeationAgents
participant ShortlistCurator
participant SpecValidateAgents
participant Synthesizer
User->>FeatureDiscoverySkill: Invoke /feature-discovery
FeatureDiscoverySkill->>FeatureDiscoveryWorkflow: Pass product, scope, and depth
FeatureDiscoveryWorkflow->>GroundAgents: Map product repository and plan competitors
GroundAgents-->>FeatureDiscoveryWorkflow: Return inventory and segment plan
FeatureDiscoveryWorkflow->>IdeationAgents: Generate ideas across selected lenses
IdeationAgents-->>FeatureDiscoveryWorkflow: Return aggregated candidate ideas
FeatureDiscoveryWorkflow->>ShortlistCurator: Deduplicate and rank by value-to-effort
ShortlistCurator-->>FeatureDiscoveryWorkflow: Return shortlisted features
FeatureDiscoveryWorkflow->>SpecValidateAgents: Specify and adversarially validate each feature
SpecValidateAgents-->>FeatureDiscoveryWorkflow: Return validated features with refinements
FeatureDiscoveryWorkflow->>Synthesizer: Synthesize polished roadmap with gaps and splits
Synthesizer-->>FeatureDiscoveryWorkflow: Return Markdown roadmap with analysis
FeatureDiscoveryWorkflow-->>FeatureDiscoverySkill: Return roadmap, metadata, and feature counts
FeatureDiscoverySkill-->>User: Present roadmap summary and full report
Possibly related PRs
Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
✨ Simplify code
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
PR Summary by QodoAdd feature-discovery Workflow plugin for multi-agent roadmap discovery
AI Description
Diagram
High-Level Assessment
Files changed (8)
|
There was a problem hiding this comment.
Pull request overview
Adds a new standalone feature-discovery plugin to the cc-skills marketplace, enabling a multi-agent Workflow-driven pipeline that generates a researched, ranked roadmap (repo grounding → competitor research → ideation lenses → curation → spec + adversarial validation → report synthesis).
Changes:
- Added the
feature-discoveryplugin with SKILL instructions and a bundled Workflow engine script. - Registered the new plugin across marketplace/docs surfaces (marketplace.json, root README, CLAUDE.md) and documented a packaging learning in
docs/learnings.md.
Reviewed changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| README.md | Bumps plugin count and documents installing/seeing the new plugin. |
| plugins/feature-discovery/skills/feature-discovery/SKILL.md | Defines the new skill’s invocation guidance and how to run the Workflow script. |
| plugins/feature-discovery/skills/feature-discovery/scripts/feature-discovery.workflow.js | Implements the deterministic multi-phase Workflow pipeline and args normalization. |
| plugins/feature-discovery/README.md | Adds end-user documentation for installing and using the new plugin. |
| plugins/feature-discovery/LICENSE | Adds MIT license for the ported upstream work. |
| docs/learnings.md | Captures a key packaging lesson about ${CLAUDE_SKILL_DIR} usage in SKILL bodies. |
| CLAUDE.md | Registers the new plugin trigger in the repo’s Claude Code context index. |
| .claude-plugin/marketplace.json | Adds the new plugin entry to the marketplace registry. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 06be2aba4b
ℹ️ 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".
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@plugins/feature-discovery/README.md`:
- Line 4: Update the Claude Code badge markdown in the README to remove the
empty link target: either link the badge to the appropriate Claude Code
documentation or remove the surrounding link wrapper while preserving the badge.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 4bd51f9a-794a-44d0-839a-2db617318edc
📒 Files selected for processing (8)
.claude-plugin/marketplace.jsonCLAUDE.mdREADME.mddocs/learnings.mdplugins/feature-discovery/LICENSEplugins/feature-discovery/README.mdplugins/feature-discovery/skills/feature-discovery/SKILL.mdplugins/feature-discovery/skills/feature-discovery/scripts/feature-discovery.workflow.js
Code Review by Qodo
1.
|
PR Comment Status
Fixed
Answered (verified false positives)
Needs your input (Pending-Human)These require a human call and were intentionally left unresolved and unreplied — an attended
Follow-upAuthor will address the Pending-Human items above manually, or re-run Separately (not blocking, not part of this PR's diff): the empty Claude Code badge link fixed here is a repo-wide copy-paste pattern — 7 of 8 plugin READMEs share the same dead |
Address reviewer feedback on the feature-discovery workflow engine and plugin README: validate/normalize scope and depth args against an allowlist, bound the validator confidence schema to 1-10, guard against an empty synthesis report and against zero validated features surviving spec review, and fix the dead Claude Code badge link.
The status update is consistent with the review disposition described:
The external MCP/CLI read-only concern is separate from the indexed Qodo findings. Since no dismissal was requested, the findings may still appear active in the review index despite being answered or fixed in the PR discussion. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f0a6085b33
ℹ️ 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".
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@plugins/feature-discovery/skills/feature-discovery/scripts/feature-discovery.workflow.js`:
- Around line 31-45: Update the rawScope and rawDepth argument handling to
default only when the arguments are genuinely missing, not for explicit falsey
values; require supplied values to be strings before trimming and lowercasing,
then validate them against VALID_SCOPES and VALID_DEPTHS so invalid types and
values return the existing invalid-args result.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 42c270ed-748b-4906-9ad8-1c0cc6a8d3ff
📒 Files selected for processing (2)
plugins/feature-discovery/README.mdplugins/feature-discovery/skills/feature-discovery/scripts/feature-discovery.workflow.js
🚧 Files skipped from review as they are similar to previous changes (1)
- plugins/feature-discovery/README.md
Guard the args normalization against an undeclared args binding, stop silently defaulting explicit falsy scope/depth values instead of rejecting them, add an empty-ideation guard before curating a shortlist, fix the validator pipeline to actually drop failed validations instead of wrapping them as truthy, and generalize the SKILL.md error contract so it covers every current and future error code instead of an enumerated list.
PR Comment Status (this cycle's delta)Bots posted 5 new substantive comments on the previous fix commit (
Fixed this cycle
Still pending your inputUnchanged from the last cycle — |
|
Tip For best results, initiate chat on the files or code changes.
The two Pending-Human items remain separate design decisions. They need maintainer triage before this PR changes the upstream workflow behavior. If you found this review helpful, would you consider giving us a shout-out on X? Thank you for using CodeRabbit! You are interacting with an AI system. |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.
Suppressed comments (1)
plugins/feature-discovery/skills/feature-discovery/SKILL.md:25
metadata.versionis formatted as "1.0", but other SKILL.md files in this repo consistently use SemVer with a patch component (e.g. "1.0.0" inplugins/temporal/skills/temporal/SKILL.mdandplugins/doppler/skills/doppler/SKILL.md). Aligning the format avoids inconsistent version parsing/expectations across skills.
version: "1.0"
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9d28d9813d
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 117e59bb31
ℹ️ 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".
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.
Suppressed comments (1)
plugins/feature-discovery/skills/feature-discovery/SKILL.md:21
scope: competitor/mixedruns require WebSearch/WebFetch (as stated incompatibility:and used by the Workflow script), but those tools are not listed underallowed-tools. If the skill invocation is what pre-approves tools for the session, Workflow sub-agents may fail because they cannot prompt for tool approval.
allowed-tools:
- Workflow
- Artifact
- Write
- Read
|
Duplicate of the same finding raised repeatedly across this PR, already answered: |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.
Suppressed comments (1)
plugins/feature-discovery/skills/feature-discovery/SKILL.md:20
allowed-toolsdoes not includeWebSearch/WebFetch, but the skill’s own compatibility note and the bundled workflow script rely on WebSearch/WebFetch forscope: competitorandscope: mixedruns. Since Workflow sub-agents can’t prompt for tool approval, leaving these tools out makes competitor research likely to fail even when the environment supports them.
Add WebSearch and WebFetch to allowed-tools so they can be pre-approved for the skill invocation.
compatibility: "Requires the Workflow tool (multi-agent orchestration). Invoking this skill opts into a heavyweight fan-out of up to ~40 sub-agents at exhaustive depth. For scope: competitor or mixed runs, the session also needs WebSearch and WebFetch pre-approved - Workflow sub-agents run in the background and can't prompt for tool approval."
allowed-tools:
- Workflow
- Artifact
- Write
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b7375e598f
ℹ️ 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".
|
Duplicate of the same finding raised repeatedly across this PR, already answered: |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: aa8fec1977
ℹ️ 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".
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.
Suppressed comments (1)
plugins/feature-discovery/skills/feature-discovery/SKILL.md:21
feature-discovery.workflow.jsinstructs competitor agents to use WebSearch/WebFetch, and the frontmattercompatibilitynotes those tools must be pre-approved because Workflow sub-agents can’t prompt. However, WebSearch/WebFetch aren’t included inallowed-tools, so a competitor/mixed run can still fail due to missing tool approval.
Add WebSearch and WebFetch to allowed-tools so sessions that invoke the skill pre-approve the tools the Workflow run depends on.
allowed-tools:
- Workflow
- Artifact
- Write
- Read
|
Duplicate of the same finding raised repeatedly across this PR, already answered: |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.
Suppressed comments (1)
plugins/feature-discovery/skills/feature-discovery/SKILL.md:22
compatibilitywarns that competitor/mixed runs need WebSearch/WebFetch pre-approved because Workflow sub-agents can’t prompt for tool approval, butallowed-toolsdoesn’t include WebSearch/WebFetch (or basic repo-mapping tools like Grep/Glob/Bash). This makes it much more likely that a real invocation will fail or degrade depending on the environment’s default approvals, even though the skill description expects those tools to be available to sub-agents.
compatibility: "Requires the Workflow tool (multi-agent orchestration). Invoking this skill opts into a heavyweight fan-out of up to ~40 sub-agents at exhaustive depth. For scope: competitor or mixed runs, the session also needs WebSearch and WebFetch pre-approved - Workflow sub-agents run in the background and can't prompt for tool approval."
allowed-tools:
- Workflow
- Artifact
- Write
- Read
- AskUserQuestion
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1cfbb109d5
ℹ️ 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".
|
Duplicate of the same finding raised repeatedly across this PR, already answered: |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.
Suppressed comments (1)
plugins/feature-discovery/skills/feature-discovery/SKILL.md:22
compatibilitysays competitor/mixed runs need WebSearch/WebFetch pre-approved, but the skill’sallowed-toolslist doesn’t include them. Since Workflow sub-agents can’t prompt for tool approval, this makes competitor research likely to fail in environments where tools must be pre-approved viaallowed-tools. Add WebSearch and WebFetch here so they’re requested up-front.
- Workflow
- Artifact
- Write
- Read
- AskUserQuestion
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9684fd344e
ℹ️ 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".
| ideas: { type: 'array', maxItems: MAX_IDEAS_PER_LENS, items: { type: 'object', properties: { | ||
| title: { type: 'string', maxLength: 100 }, description: { type: 'string', maxLength: 400 }, lens: { type: 'string', maxLength: 50 }, | ||
| valueHypothesis: { type: 'string', maxLength: 400 }, evidence: { type: 'string', maxLength: 400 }, effort: { type: 'string', enum: ['S', 'M', 'L'] }, | ||
| }, required: ['title', 'description', 'lens', 'valueHypothesis', 'evidence', 'effort'] } }, |
There was a problem hiding this comment.
Reject unbounded extra fields from ideator output
The declared idea fields are length-bounded, but the item schema still permits additional properties. If an ideator emits a schema-valid extra field such as a large rationale or notes blob, it survives flatMap and is serialized into the curator prompt at line 393; across seven independent lenses this bypasses the intended context bound and can overflow or substantially inflate the curator call. Set additionalProperties: false on each idea item or normalize outputs to the known fields.
Useful? React with 👍 / 👎.
| features: { type: 'array', maxItems: SHORTLIST_MAX, items: { type: 'object', properties: { | ||
| title: { type: 'string', pattern: '\\S' }, description: { type: 'string', pattern: '\\S' }, value: { type: 'string', pattern: '\\S' }, | ||
| effort: { type: 'string', pattern: '\\S' }, evidence: { type: 'string', pattern: '\\S' }, | ||
| }, required: ['title', 'description', 'value', 'effort', 'evidence'] } }, |
There was a problem hiding this comment.
Bound shortlisted feature text before fan-out
When the curator returns unusually verbose but schema-valid feature descriptions, values, or evidence, none of these five strings has a maxLength. Each feature is then copied into its spec prompt, validator prompt, and the final clean payload, so up to twelve verbose entries can multiply prompt cost or exhaust downstream context despite the bounds added to ideas and specs. Add per-field limits and reject or strip additional properties here as well.
Useful? React with 👍 / 👎.
| objections: { type: 'array', minItems: 1, items: { type: 'string', pattern: '\\S' } }, | ||
| refinements: { type: 'array', items: { type: 'string' } }, |
There was a problem hiding this comment.
Bound validator output before synthesis
At exhaustive depth, twelve independent validators can each return schema-valid objections and refinements with arbitrarily many arbitrarily long strings. Line 452 concatenates all verdicts via JSON.stringify(clean), so verbose validator responses can overflow the synthesizer context after every prior phase has completed and turn the run into synthesis-failed; add suitable maxItems and item maxLength constraints.
Useful? React with 👍 / 👎.
|
Duplicate of the same finding raised repeatedly across this PR, already answered: |
What
Adds a new standalone plugin, feature-discovery, that turns "what should we build next?" into a researched, ranked roadmap. It runs a deterministic multi-agent
Workflowpipeline over five phases:Ground (map the repo + research competitors) → Ideate (7 value lenses in parallel) → Shortlist (dedup + rank) → Spec & Validate (spec writer + adversarial skeptic per feature) → Synthesize (ranked-roadmap Markdown report).
Ported from the open-source feature-discovery-skill by Fabian Hug (MIT).
Why standalone (not a
pmsub-skill)It's a distinct capability from
pm:brainstorm: brainstorm goes deep on one feature (interactive Q&A, one spec); this goes wide across the whole product (competitor research + ranked roadmap of many candidates). It's also the first plugin here to depend on theWorkflowtool, so it declares that as acompatibility:prerequisite (mirroring howcdtdeclares its Agent-Teams flag).Key decisions
${CLAUDE_SKILL_DIR}script path — the source's hardcoded.claude/skills/...path (and my first draft's${CLAUDE_PLUGIN_ROOT}) don't resolve from a skill body;${CLAUDE_SKILL_DIR}is the documented skill-body variable. Documented as a learning indocs/learnings.md.Verification
bun scripts/validate-plugins.mjs— all 4 checks pass (11 plugins, no orphans, valid frontmatter)node --checkon the engine; unit-tested the args normalization across string/object/undefined inputsscope: internal, depth: quick): 19/19 agents, 0 errors, produced a full report (51→12→7 funnel earlier; 6 specced this run). The run also confirmed the args fix works in the real harness (meta.scope=internal,meta.depth=quick).Note (out of scope, pre-existing)
The live run surfaced pre-existing README drift unrelated to this change: cdt is described as "four modes" but ships five (adds
bugfix); the tree'sci-review # 10 review agentsannotation is stale. Left for a separate docs cleanup to keep this PR focused.Summary by CodeRabbit
New Features
feature-discoveryplugin and/feature-discoverycommand.Documentation