feat: support claude cowork#2369
Conversation
🤖 Augment PR SummarySummary: Adds first-class Claude Cowork support by distributing skills via the Claude Code plugin marketplace and enforcing manifest/source sync in CI. Changes:
Technical Notes: The validator normalizes paths for Windows, supports human/JSON output, and has a strict mode intended for CI. 🤖 Was this summary useful? React with 👍 or 👎 |
| - **AI-powered IDE** — Claude Code, Cursor, or similar | ||
| - **A project idea** — Even a simple one works for learning | ||
| ::: | ||
| ::: |
There was a problem hiding this comment.
The closing ::: for this admonition is indented ( :::), which may be parsed as part of the preceding list item instead of closing the container, potentially breaking the rest of the page rendering.
Other locations where this applies: docs/tutorials/getting-started.md:288.
Severity: medium
Other Locations
docs/tutorials/getting-started.md:288
🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.
| const JSON_OUTPUT = args.has('--json'); | ||
|
|
||
| function findSkillPaths(dir, acc = []) { | ||
| for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { |
There was a problem hiding this comment.
If dir (or src/) is missing/unreadable, fs.readdirSync will throw and the script will exit with an unhandled stack trace rather than a controlled fatal result; consider handling that so CI output stays consistent. (Guideline: script_error_handling)
Severity: medium
🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.
📝 WalkthroughWalkthroughAdds marketplace skill validation tooling that detects synchronization drift between plugin skill declarations and on-disk SKILL.md files, integrates validation into CI, registers three new skills in the marketplace configuration, and provides comprehensive documentation for Claude Cowork marketplace-based installation. ChangesMarketplace Skill Validation and Cowork Installation
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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 |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
tools/validate-marketplace.js (1)
78-98: ⚡ Quick winAdd error handling for
SRC_DIRto match the pattern used forMARKETPLACE_PATH.
MARKETPLACE_PATHabsence is caught and returned as a structured{ ok: false, fatal: '...' }result, butfindSkillPaths(SRC_DIR)on line 98 is unguarded — a missing or unreadablesrc/directory throws an unhandled exception instead of producing the same clean output.As per coding guidelines,
tools/**scripts require proper error handling.♻️ Proposed fix — wrap the scan call in a try/catch
- const onDisk = new Set(findSkillPaths(SRC_DIR)); + let onDisk; + try { + onDisk = new Set(findSkillPaths(SRC_DIR)); + } catch (error) { + return { ok: false, fatal: `Failed to scan src/ directory: ${error.message}` }; + }🤖 Prompt for 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. In `@tools/validate-marketplace.js` around lines 78 - 98, findSkillPaths(SRC_DIR) is called without error handling so a missing/unreadable SRC_DIR will throw instead of returning the same structured error as MARKETPLACE_PATH; wrap the call to findSkillPaths(SRC_DIR) in a try/catch, catch any error and return { ok: false, fatal: `src directory error: ${error.message}` } (or similar) so onDisk (the Set created from findSkillPaths) is only initialized on success and failures mirror the MARKETPLACE_PATH pattern; reference the SRC_DIR constant, the findSkillPaths function, and the onDisk variable when applying the change.
🤖 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.
Nitpick comments:
In `@tools/validate-marketplace.js`:
- Around line 78-98: findSkillPaths(SRC_DIR) is called without error handling so
a missing/unreadable SRC_DIR will throw instead of returning the same structured
error as MARKETPLACE_PATH; wrap the call to findSkillPaths(SRC_DIR) in a
try/catch, catch any error and return { ok: false, fatal: `src directory error:
${error.message}` } (or similar) so onDisk (the Set created from findSkillPaths)
is only initialized on success and failures mirror the MARKETPLACE_PATH pattern;
reference the SRC_DIR constant, the findSkillPaths function, and the onDisk
variable when applying the change.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: f22f6d1e-0746-4d00-9b8b-fff3bb299f64
📒 Files selected for processing (7)
.claude-plugin/marketplace.json.github/workflows/quality.yamlREADME.mddocs/how-to/install-claude-cowork.mddocs/tutorials/getting-started.mdpackage.jsontools/validate-marketplace.js
What
Adds Claude Cowork support via the Claude Code plugin marketplace and a CI guardrail that keeps the marketplace manifest in sync with the canonical skill sources.
Why
The regular npx bmad-method install flow writes to the project's .claude/skills/, which Cowork's sandboxed VM mounts read-only — making skills invisible to Cowork sessions. The plugin marketplace is Cowork's first-class injection
point, and this repo already ships .claude-plugin/marketplace.json. This PR wires up the missing pieces: a validator to prevent silent drift, CI enforcement, and documentation.
(BMAD-METHOD only: also adds 3 skills that existed in src/ but were missing from marketplace.json: bmad-customize, bmad-prfaq, bmad-checkpoint-preview.)
How
suggestions, --strict exit-code mode for CI.
Testing
Validator passes locally (42 declared / 42 on disk for BMAD, 10/10 for TEA) and negative-tested: dropping a declared skill exits 1 with a plugin suggestion; a brand-new module produces no misleading suggestion. Full docs build
succeeds (npm run docs:build). Cowork live test pending before merge — verify slash commands appear and persist across session restarts.