feat: add bug-report plugin#43
Conversation
Migrate medley's bug-report skill into a repo-agnostic plugin. Emits a
structured five-field bug report (title, repro, expected vs actual,
severity, fix location) from an informal description; read-only by
default.
Strip all medley coupling: replace .work/<slug> slice persistence with
${CLAUDE_PLUGIN_DATA} (overridable via an output_dir userConfig), rewrite
/issues and /prd handoffs as graceful degradation to a work-item tracker
(gh CLI or MCP), and drop .claude/rules citations. Port the six evals and
the pagination fixture.
Add the marketplace.json entry (category: workflow) and catalog README row.
The identifier-typo eval used `deseralize`, which the repo's required typos CI check (config: _typos.toml) flags. Swap it to `paginaton` — an obviously-misspelled token that typos does not flag (dictionary miss), verified empirically. Symptom prose adjusted to fit the pagination domain; the eval's assertion semantics (skill must not auto-correct a misspelled identifier) are unchanged.
…caution Drop the `--body` inline-string fallback from the filing hand-off so `--body-file <report>` is the sole body shape, and add a caution that untrusted-derived strings (the title included) are passed as literal argv values, never embedded into a shell command string where backticks or $( ) in the reporter's text could expand.
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_b6047774-94ab-4192-b339-d7d8220fc239) |
|
Claude finished @kyle-sexton's task in 3m 56s —— View job PR Review: feat: add bug-report plugin
Overall AssessmentWell-structured plugin migration. Capability is clearly scoped, security posture is clean, and the eval suite covers the important edge cases. A few issues worth addressing before merge, plus some nits. FindingsMedium —
|
| Surface | Status |
|---|---|
| Code execution (hooks/scripts) | ✅ None — skill-only plugin, no shell hooks |
| Remote MCP servers | ✅ None |
userConfig sensitive fields |
✅ output_dir is a directory path, non-sensitive, correctly unmarked |
| Cache isolation / no reach-outs | ✅ Uses ${CLAUDE_PLUGIN_DATA} and ${CLAUDE_PLUGIN_ROOT}; no ../ references |
| Data egress | ✅ None — gh issue create is a suggestion the user runs manually |
| Provenance | ✅ Author matches marketplace owner; no third-party dependencies |
Strengths
- Clear scope: bug intake only, read-only contract enforced in three places (SKILL.md, README, plugin description)
- Good skip-condition coverage: feature requests, ongoing fixes, generic chores all route away before a report is produced
- Six evals covering the important behavioral contract: happy path, feature-request routing, unbacked repro, no-bug-confirmed, critical-severity read-only enforcement, typo-identifier caution
--body-file(not--body) forgh issue create— correct security approach for untrusted report contentuserConfig.output_dircorrectly documented and typed asdirectory; sane default viaCLAUDE_PLUGIN_DATA- Marketplace entry uses
"source": "./plugins/bug-report"(the./-prefixed form required byvalidate --strict)
There was a problem hiding this comment.
Stale comment
Risk: medium. Cursor Bugbot did not complete (check skipped; usage limit reached), so automated review signal is missing. Human review is needed before merge; no reviewers were assigned because the only repo contributor is the PR author.
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: b7bd5256bb
ℹ️ 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".
Resolve marketplace.json and README conflicts by keeping main plugins plus bug-report. Replace Bash echo workaround with ${CLAUDE_PLUGIN_DATA} substitution for report output paths.
Co-authored-by: Cursor <cursoragent@cursor.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_7da9d37e-9a69-448a-a561-3a51cdf5bdee) |
|
Claude finished @kyle-sexton's task in 3m 12s —— View job PR Review: feat: add bug-report plugin
SummaryWell-structured plugin with a clean read-only contract, good eval coverage, and a correct security posture. The merge commit (5cfa774) addressed the Codex P2 finding about What Was Fixed (5cfa774)The merge commit replaced the Bash Remaining FindingsMedium —
|
| Surface | Status |
|---|---|
| Code execution (hooks/scripts) | ✅ None — skill-only plugin |
| Remote MCP servers | ✅ None |
userConfig sensitive fields |
✅ output_dir is a non-sensitive directory path |
| Cache isolation | ✅ Uses ${CLAUDE_PLUGIN_DATA} and ${CLAUDE_PLUGIN_ROOT}; no ../ reach-outs |
| Data egress | ✅ None — gh issue create is a manual hand-off |
| Provenance | ✅ No third-party dependencies |
Strengths
- Read-only contract enforced in three distinct places (SKILL.md, README, plugin description)
- Six evals with good edge-case coverage: happy path, feature-request routing, unbacked repro, no-bug-confirmed, critical-severity read-only, identifier-typo caution
--body-file(not--body) for theghhand-off — correct approach for untrusted content- Marketplace entry uses
"source": "./plugins/bug-report"(the./-prefixed form required byvalidate --strict) ${CLAUDE_PLUGIN_DATA}substitution fixed correctly in the merge commit
There was a problem hiding this comment.
Stale comment
Risk: medium. Cursor Bugbot did not complete (check skipped; usage limit reached), so automated review signal is missing. Human review is needed before merge; no reviewers were assigned because the only repo contributor is the PR author.
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: 5cfa77434d
ℹ️ 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".
Include powershell-format in marketplace.json and README. Stop recommending shell-expanded --title in gh issue create examples; prompt interactively or pass title as a separate argv value. Co-authored-by: Cursor <cursoragent@cursor.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_bcb15881-6d34-4567-a70b-9b39ed4cdc6d) |
|
Claude finished @kyle-sexton's task in 2m 18s —— View job Claude finished @kyle-sexton's task —— PR Review: feat: add bug-report plugin (edca6ae)
What Was Fixed (edca6ae)The latest merge commit addressed the shell-injection nit from previous reviews:
The shell injection concern is fully resolved. Good fix. Remaining FindingsMedium —
|
| Surface | Status |
|---|---|
| Code execution (hooks/scripts) | ✅ None — skill-only plugin |
| Remote MCP servers | ✅ None |
userConfig sensitive fields |
✅ output_dir is a non-sensitive directory path |
| Cache isolation | ✅ Uses ${CLAUDE_PLUGIN_DATA} and ${CLAUDE_PLUGIN_ROOT}; no ../ reach-outs |
| Data egress | ✅ None — gh issue create is a manual hand-off |
| Shell injection in hand-off examples | ✅ Fixed in this commit — both template footers now use interactive mode |
| Provenance | ✅ No third-party dependencies |
Strengths
- Shell injection concern fully resolved: template footers now prompt
ghfor the title interactively; SKILL.md Step 5 correctly documents the argv-literal pattern for non-interactive use - Read-only contract enforced in three distinct places (SKILL.md, README, plugin description)
- Six evals with strong edge-case coverage: happy path, feature-request routing, unbacked repro, no-bug-confirmed, critical-severity read-only, identifier-typo caution
--body-file(not--body) forghhand-off — correct approach for untrusted report content${CLAUDE_PLUGIN_DATA}substitution correct and direct in option 2 of Step 4- Marketplace entry uses
"source": "./plugins/bug-report"(the./-prefixed form required byvalidate --strict)
Two findings remain before merge: the Medium path-resolution issue on lines 89/139 of SKILL.md (template.md unreachable from cache), and the Minor ${CLAUDE_PROJECT_DIR} substitution concern on line 95.
There was a problem hiding this comment.
Stale comment
Risk: medium. Cursor Bugbot did not complete (check skipped; usage limit reached), so the automated review signal is missing. Human review is needed before merge; no reviewers were assigned because the only human repo contributor is the PR author.
Sent by Cursor Approval Agent: Pull Request Router and Approver
Resolve marketplace.json and README to include actionlint alongside powershell-format and bug-report. Co-authored-by: Cursor <cursoragent@cursor.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_ef0811f3-2296-49e5-a2a8-8438a0bd416b) |
|
Claude finished @kyle-sexton's task in 2m 35s —— View job PR Review: feat: add bug-report plugin (7073733)
What Changed Since Last ReviewThe latest commit (7073733) merges Resolved Since Prior Reviews✅
|
| Surface | Status |
|---|---|
| Code execution (hooks/scripts) | ✅ None — skill-only plugin |
| Remote MCP servers | ✅ None |
userConfig sensitive fields |
✅ output_dir is a non-sensitive directory path |
| Cache isolation | ✅ Uses ${CLAUDE_PLUGIN_DATA} and ${CLAUDE_PLUGIN_ROOT}; no ../ reach-outs |
| Data egress | ✅ None — gh issue create is a manual hand-off |
| Shell injection | ✅ Fixed in edca6ae — template footers use interactive title prompt |
${CLAUDE_PROJECT_DIR} usage |
✅ Confirmed valid skill-content substitution per fresh docs |
| Provenance | ✅ No third-party dependencies |
Strengths
- Read-only contract enforced in three distinct places (SKILL.md, README, plugin description)
- Six evals with solid edge-case coverage: happy path, feature-request routing, unbacked repro, no-bug-confirmed, critical-severity read-only, identifier-typo caution
--body-file(not--body) for theghhand-off — correct approach for untrusted report content${CLAUDE_PLUGIN_DATA}and${CLAUDE_PROJECT_DIR}substitutions both confirmed correct per fresh docs- Marketplace entry uses
"source": "./plugins/bug-report"(the./-prefixed form required byvalidate --strict) - Shell injection concern fully resolved in prior commits
One finding remains before merge: the Medium path-resolution issue on SKILL.md lines 89, 135, and 139 — context/template.md is unreachable from the plugin cache, and the "No bug confirmed" format is delegated exclusively to that file. This is the third consecutive review cycle the finding has been flagged.
There was a problem hiding this comment.
Stale comment
Risk: medium. Cursor Bugbot did not complete (check skipped; usage limit reached), so the automated review signal is missing. Human review is needed before merge; no reviewers were assigned because the only human repo contributor is the PR author.
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: 7073733de3
ℹ️ 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".
The template example now stops with the required no-bug summary when verified math matches expectations, instead of pivoting to a false low-severity bug report. Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.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_814ce4a6-0fa9-4816-b0e1-14167aaaea91) |
|
Claude finished @kyle-sexton's task in 1m 47s —— View job PR Review: feat: add bug-report plugin (d219cc9)
What Was Fixed (d219cc9)Codex P2 — Worked example now ends at "No bug confirmed" ✅ The worked example in Remaining FindingMedium —
|
| Surface | Status |
|---|---|
| Code execution (hooks/scripts) | ✅ None — skill-only plugin |
| Remote MCP servers | ✅ None |
userConfig sensitive fields |
✅ output_dir is a non-sensitive directory path |
| Cache isolation | ✅ Uses ${CLAUDE_PLUGIN_DATA} and ${CLAUDE_PLUGIN_ROOT}; no ../ reach-outs |
| Data egress | ✅ None — gh issue create is a manual hand-off |
| Shell injection | ✅ Fixed in edca6ae — template footers use interactive title prompt |
${CLAUDE_PROJECT_DIR} usage |
✅ Confirmed valid skill-content substitution per plugins-reference docs |
| Worked example teaches false reports | ✅ Fixed in this commit — example now ends at "No bug confirmed" |
| Provenance | ✅ No third-party dependencies |
Strengths
- Read-only contract enforced in three distinct places (SKILL.md, README, plugin description)
- Six evals with solid edge-case coverage: happy path, feature-request routing, unbacked repro, no-bug-confirmed, critical-severity read-only, identifier-typo caution
--body-file(not--body) for theghhand-off — correct approach for untrusted report content${CLAUDE_PLUGIN_DATA}and${CLAUDE_PROJECT_DIR}substitutions both confirmed correct per fresh docs- Marketplace entry uses
"source": "./plugins/bug-report"(the./-prefixed form required byvalidate --strict) - Worked example now correctly demonstrates "No bug confirmed" termination when math checks out
One finding remains before merge: the Medium path-resolution issue on SKILL.md lines 89, 135, and 139 — context/template.md is unreachable from the plugin cache, and the authoritative "No bug confirmed" format and five-field template are defined only in that file.
There was a problem hiding this comment.
Stale comment
Risk: medium. Cursor Bugbot did not complete (check skipped; usage limit reached), so the automated review signal is missing. Human review is needed before merge; no reviewers were assigned because the only human repo contributor is the PR author.
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: d219cc94b4
ℹ️ 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".
Co-authored-by: Cursor <cursoragent@cursor.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_8f7e3990-ffd4-491d-bcfb-72c66820ca04) |
|
Claude finished @kyle-sexton's task in 2m 9s —— View job PR Review: feat: add bug-report plugin (20438a9)
What Was Fixed (20438a9)Codex P2 — The previous stdout template footer unconditionally told users to
The Codex P2 finding is closed. The fix is correctly scoped. Remaining FindingMedium —
|
| Surface | Status |
|---|---|
| Code execution (hooks/scripts) | ✅ None — skill-only plugin |
| Remote MCP servers | ✅ None |
userConfig sensitive fields |
✅ output_dir is a non-sensitive directory path |
| Cache isolation | ✅ Uses ${CLAUDE_PLUGIN_DATA} and ${CLAUDE_PLUGIN_ROOT}; no ../ reach-outs |
| Data egress | ✅ None — gh issue create is a manual hand-off |
| Shell injection in hand-off examples | ✅ Resolved — template footers use interactive title prompt; SKILL.md Step 5 documents the argv-literal pattern |
${CLAUDE_PROJECT_DIR} usage |
✅ Confirmed valid skill-content substitution per fresh docs |
--body-file gating |
✅ Fixed in this commit — stdout footer no longer implies a file exists |
| Worked example | ✅ Ends at "No bug confirmed" (fixed in d219cc9) |
| Provenance | ✅ No third-party dependencies |
Strengths
- Read-only contract enforced in three distinct places (SKILL.md, README, plugin description)
- Six evals with solid edge-case coverage: happy path, feature-request routing, unbacked repro, no-bug-confirmed, critical-severity read-only, identifier-typo caution
--body-file(not--body) for theghhand-off — correct approach for untrusted report content, now also correctly gated on--filemode${CLAUDE_PLUGIN_DATA}and${CLAUDE_PROJECT_DIR}substitutions confirmed correct per fresh docs- Marketplace entry uses
"source": "./plugins/bug-report"(the./-prefixed form required byvalidate --strict)
One finding remains before merge: the Medium path-resolution issue on SKILL.md lines 89, 135, and 139 — context/template.md is unreachable from the plugin cache, and the authoritative "No bug confirmed" format and 5-field template are defined only in that file. This has been flagged in every review cycle. ${CLAUDE_PLUGIN_ROOT} is confirmed valid in skill content per current docs — Option A is a straightforward three-line change.
There was a problem hiding this comment.
Stale comment
Risk: medium. Cursor Bugbot did not complete (check skipped; usage limit reached), so the automated review signal is missing. Human review is needed before merge; no reviewers were assigned because the only human repo contributor is the PR author.
Sent by Cursor Approval Agent: Pull Request Router and Approver
|
Claude finished @kyle-sexton's task in 3m 15s —— View job PR Review: feat: add bug-report plugin (dca4370)
What Was Fixed (dca4370)Minor — Plugin-namespaced command in generated report footers ✅ Both footers in Remaining FindingsMedium —
|
| Finding | Status |
|---|---|
${CLAUDE_PLUGIN_DATA} Bash roundtrip |
✅ Fixed (5cfa774) — direct skill substitution |
| Shell injection in title embedding | ✅ Fixed (edca6ae) — template footers use interactive gh title prompt |
| Worked example teaches false reports | ✅ Fixed (d219cc9) — ends at "No bug confirmed" |
--body-file gated on --file mode |
✅ Fixed (20438a9) — stdout footer no longer implies a file exists |
${CLAUDE_PROJECT_DIR} in skill content |
✅ Confirmed valid (per plugins-reference, fetched in prior + current cycle) |
| Plugin-namespaced command in footers | ✅ Fixed (dca4370) — both footers now use /bug-report:bug-report |
Security Review
| Surface | Status |
|---|---|
| Code execution (hooks/scripts) | ✅ None — skill-only plugin |
| Remote MCP servers | ✅ None |
userConfig sensitive fields |
✅ output_dir is a non-sensitive directory path |
| Cache isolation | ✅ Uses ${CLAUDE_PLUGIN_DATA} and ${CLAUDE_PLUGIN_ROOT}; no ../ reach-outs |
| Data egress | ✅ None — gh issue create is a manual hand-off |
| Shell injection in hand-off examples | ✅ Resolved — template footers use interactive title prompt |
${CLAUDE_PROJECT_DIR} usage |
✅ Confirmed valid skill-content substitution per fresh docs |
--body-file gating |
✅ Correctly gated on --file mode |
| Worked example | ✅ Ends at "No bug confirmed" (d219cc9) |
| Provenance | ✅ No third-party dependencies |
Strengths
- Read-only contract enforced in three distinct places (SKILL.md, README, plugin description)
- Six evals with solid edge-case coverage: happy path, feature-request routing, unbacked repro, no-bug-confirmed, critical-severity read-only, identifier-typo caution
--body-filefor theghhand-off — correct approach for untrusted report content, correctly gated on--filemode${CLAUDE_PLUGIN_DATA}and${CLAUDE_PROJECT_DIR}substitutions confirmed correct per fresh docs- Marketplace entry uses
"source": "./plugins/bug-report"(the./-prefixed form required byvalidate --strict)
Two findings remain before merge: the Medium path-resolution issue on SKILL.md lines 89/135/139 (context/template.md unreachable without ${CLAUDE_PLUGIN_ROOT} — flagged in every review cycle), and the Minor --no-survey condition inconsistency on line 61.
There was a problem hiding this comment.
Stale comment
Risk: medium. Cursor Bugbot did not complete (check skipped), so the automated review signal is missing. Human review is needed before merge; no reviewers were assigned because the only human repo contributor is the PR author.
Sent by Cursor Approval Agent: Pull Request Router and Approver
The flag promises to trust the description; gating it on a single unambiguous symbol re-ran the survey it suppresses. --quick keeps the unambiguous-symbol gate.
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_2eb6e0c9-3710-4253-a742-ab39ec69d7b1) |
|
Claude finished @kyle-sexton's task in 2m 50s —— View job PR Review: feat: add bug-report plugin (1625767)
What Was Fixed (1625767)Minor —
This correctly separates the two flags: Remaining FindingMedium —
|
| Finding | Status |
|---|---|
${CLAUDE_PLUGIN_DATA} Bash roundtrip |
✅ Fixed (5cfa774) — direct skill substitution |
| Shell injection in title embedding | ✅ Fixed (edca6ae) — interactive gh title prompt |
| Worked example teaches false reports | ✅ Fixed (d219cc9) — ends at "No bug confirmed" |
--body-file gated on --file mode |
✅ Fixed (20438a9) — stdout footer no longer implies a file |
${CLAUDE_PROJECT_DIR} in skill content |
✅ Confirmed valid per plugins-reference docs |
| Plugin-namespaced command in footers | ✅ Fixed (dca4370) — both footers use /bug-report:bug-report |
--no-survey unconditional bypass |
✅ Fixed (1625767) — split from --quick; no symbol requirement |
Security Review
| Surface | Status |
|---|---|
| Code execution (hooks/scripts) | ✅ None — skill-only plugin |
| Remote MCP servers | ✅ None |
userConfig sensitive fields |
✅ output_dir is a non-sensitive directory path |
| Cache isolation | ✅ Uses ${CLAUDE_PLUGIN_DATA} and ${CLAUDE_PLUGIN_ROOT}; no ../ reach-outs |
| Data egress | ✅ None — gh issue create is a manual hand-off |
| Shell injection | ✅ Resolved — template footers use interactive title prompt |
${CLAUDE_PROJECT_DIR} usage |
✅ Confirmed valid skill-content substitution per fresh docs |
| Provenance | ✅ No third-party dependencies |
One finding remains before merge: the Medium path-resolution issue on SKILL.md lines 89, 135, and 139. The exact diff is above — it's a three-line change. ${CLAUDE_PLUGIN_ROOT} is confirmed valid in skill content and is the correct fix.
| Branch
There was a problem hiding this comment.
Stale comment
Risk: medium. Cursor Bugbot did not complete (check skipped), so the automated review signal is missing. Human review is needed before merge; no reviewers were assigned because the only human repo contributor is the PR author.
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: 1625767751
ℹ️ 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".
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_9429a8ea-e362-4f28-8421-50d59a9a4444) |
|
Claude finished @kyle-sexton's task in 2m 14s —— View job PR Review: feat: add bug-report plugin (79cf769)
What ChangedCommit Remaining FindingMedium —
|
| Finding | Status |
|---|---|
${CLAUDE_PLUGIN_DATA} Bash roundtrip |
✅ Fixed (5cfa774) |
| Shell injection in title embedding | ✅ Fixed (edca6ae) |
| Worked example teaches false reports | ✅ Fixed (d219cc9) |
--body-file gated on --file mode |
✅ Fixed (20438a9) |
${CLAUDE_PROJECT_DIR} in skill content |
✅ Confirmed valid per plugins-reference docs |
| Plugin-namespaced command in footers | ✅ Fixed (dca4370) |
--no-survey unconditional bypass |
✅ Fixed (1625767) |
context/template.md path resolution |
❌ Still open — 9th cycle |
Security Review
| Surface | Status |
|---|---|
| Code execution (hooks/scripts) | ✅ None |
| Remote MCP servers | ✅ None |
userConfig sensitive fields |
✅ output_dir is non-sensitive |
| Cache isolation | ✅ ${CLAUDE_PLUGIN_DATA} / ${CLAUDE_PLUGIN_ROOT}; no ../ |
| Data egress | ✅ None — gh issue create is a manual hand-off |
| Shell injection | ✅ Resolved |
| Provenance | ✅ No third-party dependencies |
One finding remains before merge. The exact three-line diff is above — it is a copy-paste change. Everything else is resolved.
| Branch
There was a problem hiding this comment.
Stale comment
Risk: low. Cursor Bugbot did not complete (check skipped), so the automated review signal is missing. Human review is needed before merge; no reviewers were assigned because the only human repo contributor is the PR author.
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: 79cf769173
ℹ️ 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".
…iling path The CC Bash tool has no argument array; the argv advice was unfollowable. Non-interactive filing now writes the reporter title to a file and passes it via a quoted command substitution, whose result is never re-parsed by the shell.
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_727b0c81-386d-4f1e-bf0d-d26f916afbb6) |
|
Claude finished @kyle-sexton's task in 3m 57s —— View job PR Review: feat: add bug-report plugin (0e96054)
What Was Fixed (0e96054)argv-array guidance replaced with a concrete shell-safe path ✅
Remaining FindingsMedium —
|
| Finding | Status |
|---|---|
${CLAUDE_PLUGIN_DATA} Bash roundtrip |
✅ Fixed (5cfa774) |
| Shell injection in title embedding | ✅ Fixed (edca6ae) |
| Worked example teaches false reports | ✅ Fixed (d219cc9) |
--body-file gated in template.md footers |
✅ Fixed (20438a9) |
${CLAUDE_PROJECT_DIR} in skill content |
✅ Confirmed valid per plugins-reference docs |
| Plugin-namespaced command in report footers | ✅ Fixed (dca4370) |
--no-survey unconditional bypass |
✅ Fixed (1625767) |
| argv-array guidance (unfollowable in CC Bash) | ✅ Fixed (0e96054) — $(cat <title-file>) approach is correct |
context/template.md path resolution |
❌ Still open — 10th cycle |
Step 5 --body-file not gated on --file mode |
❌ Open (new, raised by Codex P2 in 79cf769 review) |
Security Review
| Surface | Status |
|---|---|
| Code execution (hooks/scripts) | ✅ None — skill-only plugin |
| Remote MCP servers | ✅ None |
userConfig sensitive fields |
✅ output_dir is a non-sensitive directory path |
| Cache isolation | ✅ Uses ${CLAUDE_PLUGIN_DATA} and ${CLAUDE_PLUGIN_ROOT}; no ../ reach-outs |
| Data egress | ✅ None — gh issue create is a manual hand-off |
| Shell injection in title handling | ✅ Fixed — $(cat <title-file>) correctly treats reporter text as literal bytes |
${CLAUDE_PROJECT_DIR} in skill content |
✅ Confirmed valid skill-content substitution per plugins-reference docs |
| Provenance | ✅ No third-party dependencies |
Two findings remain before merge: the Medium path-resolution issue on SKILL.md lines 89/135/139 (every review cycle, three-line diff provided above), and the Minor Step 5 --body-file gating concern first raised in the most recent Codex review cycle.
| Branch
There was a problem hiding this comment.
Stale comment
Risk: low. Cursor Bugbot did not complete (check skipped), so the automated review signal is missing. Human review is needed before merge; no reviewers were assigned because the only human repo contributor is the PR author.
Sent by Cursor Approval Agent: Pull Request Router and Approver
…ting Default stdout mode has no file on disk; save the report first (re-run in --file mode or write a temp file) before recommending gh issue create --body-file.
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_91348044-0bab-478b-a568-ded9e7d4e977) |
|
Claude finished @kyle-sexton's task in 2m 49s —— View job PR Review: feat: add bug-report plugin (bd1447e)
What Was Fixed (bd1447e)Minor — Step 5
Both paths are covered: Remaining FindingMedium —
|
| Finding | Status |
|---|---|
${CLAUDE_PLUGIN_DATA} Bash roundtrip |
✅ Fixed (5cfa774) |
| Shell injection in title embedding | ✅ Fixed (edca6ae) |
| Worked example teaches false reports | ✅ Fixed (d219cc9) |
--body-file gated in template.md footers |
✅ Fixed (20438a9) |
${CLAUDE_PROJECT_DIR} in skill content |
✅ Confirmed valid per fresh plugins-reference docs |
| Plugin-namespaced command in report footers | ✅ Fixed (dca4370) |
--no-survey unconditional bypass |
✅ Fixed (1625767) |
| argv-array guidance (unfollowable in CC Bash) | ✅ Fixed (0e96054) — $(cat <title-file>) approach |
Step 5 --body-file gating |
✅ Fixed (bd1447e) — both modes covered |
context/template.md path resolution |
❌ Still open — 11th cycle |
Security Review
| Surface | Status |
|---|---|
| Code execution (hooks/scripts) | ✅ None — skill-only plugin |
| Remote MCP servers | ✅ None |
userConfig sensitive fields |
✅ output_dir is a non-sensitive directory path |
| Cache isolation | ✅ Uses ${CLAUDE_PLUGIN_DATA} and ${CLAUDE_PLUGIN_ROOT}; no ../ reach-outs |
| Data egress | ✅ None — gh issue create is a manual hand-off |
| Shell injection in title handling | ✅ $(cat <title-file>) correctly treats reporter text as literal bytes |
${CLAUDE_PROJECT_DIR} usage |
✅ Confirmed valid skill-content substitution per fresh docs |
--body-file gating |
✅ Correctly scoped to file mode; stdout mode given a save-first path |
| Provenance | ✅ No third-party dependencies |
Strengths
- Read-only contract enforced in three distinct places (SKILL.md, README, plugin description)
- Six evals with solid edge-case coverage: happy path, feature-request routing, unbacked repro, no-bug-confirmed, critical-severity read-only, identifier-typo caution
--body-fileforghhand-off is now correctly gated — stdout mode offers to save first${CLAUDE_PLUGIN_DATA}and${CLAUDE_PROJECT_DIR}substitutions confirmed correct per fresh docs- Marketplace entry uses
"source": "./plugins/bug-report"(the./-prefixed form required byvalidate --strict)
One finding remains before merge: the Medium path-resolution issue on SKILL.md lines 89, 135, and 139. The exact three-line diff is above — ${CLAUDE_PLUGIN_ROOT} is confirmed valid in skill content per this session's fresh doc fetch.
| Branch
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0e9605482c
ℹ️ 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.
Stale comment
Risk: low. Cursor Bugbot did not complete (check skipped), so the automated review signal is missing. Human review is needed before merge; no reviewers were assigned because the only human repo contributor is the PR author.
Sent by Cursor Approval Agent: Pull Request Router and Approver
CLAUDE_PLUGIN_DATA is per-plugin, not per-project; a shared bug-reports/ dir let Step 2's duplicate scan match another repo's report on the same symbol. Default path now nests under the kebab-cased project-root basename.
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_8f1fae74-ca96-49a0-aafa-feb526243ca4) |
|
Claude finished @kyle-sexton's task in 1m 54s —— View job PR Review: feat: add bug-report plugin (3e6736b)
What Was Fixed (3e6736b)Codex P2 — Default report storage partitioned by project slug ✅
The fix is correct and self-documenting. The inline rationale ("without the slug, Step 2's duplicate scan would match another repository's report on the same symbol") makes the requirement clear to future editors. The slug derivation is unambiguous ( Remaining FindingMedium —
|
| Finding | Status |
|---|---|
${CLAUDE_PLUGIN_DATA} Bash roundtrip |
✅ Fixed (5cfa774) |
| Shell injection in title embedding | ✅ Fixed (edca6ae) |
| Worked example teaches false reports | ✅ Fixed (d219cc9) |
--body-file gated in template.md footers |
✅ Fixed (20438a9) |
${CLAUDE_PROJECT_DIR} in skill content |
✅ Confirmed valid per plugins-reference docs |
| Plugin-namespaced command in report footers | ✅ Fixed (dca4370) |
--no-survey unconditional bypass |
✅ Fixed (1625767) |
| argv-array guidance (unfollowable in CC Bash) | ✅ Fixed (0e96054) — $(cat <title-file>) approach |
Step 5 --body-file gating on file mode |
✅ Fixed (bd1447e) |
| Default report storage partitioned by slug | ✅ Fixed (3e6736b) |
context/template.md path resolution |
❌ Still open — 12th cycle |
Security Review
| Surface | Status |
|---|---|
| Code execution (hooks/scripts) | ✅ None — skill-only plugin |
| Remote MCP servers | ✅ None |
userConfig sensitive fields |
✅ output_dir is a non-sensitive directory path |
| Cache isolation | ✅ Uses ${CLAUDE_PLUGIN_DATA} and ${CLAUDE_PLUGIN_ROOT}; no ../ reach-outs |
| Data egress | ✅ None — gh issue create is a manual hand-off |
| Shell injection in title handling | ✅ $(cat <title-file>) treats reporter text as literal bytes |
${CLAUDE_PROJECT_DIR} in skill content |
✅ Confirmed valid skill-content substitution |
--body-file gating |
✅ Correctly scoped; stdout mode offers save-first path |
| Cross-project report collision | ✅ Fixed — default path now partitioned by kebab-cased project slug |
| Provenance | ✅ No third-party dependencies |
Strengths
- Read-only contract enforced in three distinct places (SKILL.md, README, plugin description)
- Six evals with solid edge-case coverage: happy path, feature-request routing, unbacked repro, no-bug-confirmed, critical-severity read-only, identifier-typo caution
--body-filefor theghhand-off — correctly gated on file mode; stdout mode offers a save-first path- Project slug partitioning fix is self-documenting — the inline rationale makes the invariant clear to future editors
- Marketplace entry uses
"source": "./plugins/bug-report"(the./-prefixed form required byvalidate --strict)
One finding remains before merge: the Medium path-resolution issue on SKILL.md lines 89, 135, and 139. The exact three-line diff is above — it is a copy-paste change and has been provided in every review cycle.
| Branch
There was a problem hiding this comment.
Risk: low. Cursor Bugbot did not complete (check skipped; usage limit reached), so the automated review signal is missing. Human review is needed before merge; no reviewers were assigned because the only human repo contributor is the PR author.
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: 3e6736b121
ℹ️ 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".
| `--file` mode: write the report to a file with frontmatter `type: bug-report`. Resolve the output directory in this precedence, and always tell the user the final path: | ||
|
|
||
| 1. If the consumer configured `output_dir`, write to `${user_config.output_dir}`. | ||
| 2. Otherwise, write to `${CLAUDE_PLUGIN_DATA}/bug-reports/<project-slug>/`, where `<project-slug>` is the kebab-cased basename of the project root (`${CLAUDE_PROJECT_DIR}`, or the git toplevel when unset). The plugin data directory is per-plugin, not per-project — without the slug, Step 2's duplicate scan would match another repository's report on the same symbol. |
There was a problem hiding this comment.
Use collision-resistant project slugs
Fresh evidence after the storage-partition fix: the current default still derives <project-slug> only from the project-root basename, so two unrelated checkouts with the same leaf directory (for example ~/work/api and ~/forks/api) are written under the same ${CLAUDE_PLUGIN_DATA}/bug-reports/api/ directory. Because Step 2 scans that directory for prior reports to avoid duplicates, a report from one repo can suppress or confuse a later report in the other; include a stable path/remote hash in the slug or record and filter by project metadata before duplicate suppression.
Useful? React with 👍 / 👎.


Migrates the bug-report skill into a repo-agnostic plugin. Structured six-field report with severity rubric; persistence via CLAUDE_PLUGIN_DATA + optional output_dir userConfig; cross-skill/tracker refs degrade to prose (gh issue create --body-file, or an MCP tracker). Security: file-based issue body only. 6 evals. Clean-tier wave Phase 2.
Note
Low Risk
Documentation- and skill-definition-only changes with no runtime hooks or application code; filing guidance emphasizes safer
ghusage rather than executing user-supplied strings.Overview
Adds a new
bug-reportworkflow skill plugin to the marketplace and root catalog. It turns informal defect descriptions into a structured five-field report (title, repro, expected vs actual, severity with justification, fix location) and stays read-only by default—no code edits, PRs, or automatic issue filing.The skill workflow covers skip routing (feature requests, investigations), optional survey/Q&A flags (
--quick,--full,--no-survey), Markdown stdout vs--filepersistence with optionaloutput_diruserConfig (fallback toCLAUDE_PLUGIN_DATAwith a project slug), and explicit hand-off guidance forgh issue create --body-file/ tracker MCP without interpolating reporter text into shell commands. Supporting docs includecontext/template.md(including “No bug confirmed”), plus six eval scenarios and a pagination fixture.Reviewed by Cursor Bugbot for commit 3e6736b. Bugbot is set up for automated code reviews on this repo. Configure here.