feat(plugin): add Claude Code plugin (skills, commands, marketplace)#88
feat(plugin): add Claude Code plugin (skills, commands, marketplace)#88
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
- plugin.json: add commands key, version 1.0.0→2.3.0, add email, category, tags, prd/spec keywords, use detailed description - marketplace.json: source "./"→pip, add email, strip redundant meta - pyproject.toml: include skills/commands/.claude-plugin in wheel - skills/create-prd: fix /create-tech-spec → /planpilot:spec - README: note pip auto-install in plugin install instructions Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Warning Rate limit exceeded
⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 📝 WalkthroughWalkthroughThis PR introduces Claude plugin scaffolding for planpilot, renames the skill from "roadmap-to-github-project" to "plan-sync" throughout the codebase, adds plugin manifest and command definition files, updates project documentation and installation guides, and modifies packaging configuration to include plugin and command artifacts. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 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.
Actionable comments posted: 6
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
skills/plan-sync/SKILL.md (1)
6-6:⚠️ Potential issue | 🟡 MinorStale document heading — wasn't updated during rename
The frontmatter
name(Line 2) was correctly changed toplan-sync, but the H1 heading on Line 6 still reads# Roadmap to GitHub Project. Agents and users reading this skill will see the old name.✏️ Proposed fix
-# Roadmap to GitHub Project +# Plan Sync🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@skills/plan-sync/SKILL.md` at line 6, The H1 heading "# Roadmap to GitHub Project" was not updated when the frontmatter name was changed to "plan-sync"; update the H1 in SKILL.md to match the frontmatter (e.g., change "# Roadmap to GitHub Project" to "# plan-sync" or a human-friendly "Plan Sync") so the document title and frontmatter name are consistent.
🧹 Nitpick comments (5)
.claude-plugin/marketplace.json (1)
1-2: Missing$schemafieldThe official Anthropic marketplace examples include
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json"as the first field. Adding it enables schema validation tooling and follows the upstream convention.✏️ Suggested addition
{ + "$schema": "https://anthropic.com/claude-code/marketplace.schema.json", "name": "planpilot",🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.claude-plugin/marketplace.json around lines 1 - 2, Add the missing top-level "$schema" field to the JSON manifest so it matches the Anthropic marketplace convention; update the object in .claude-plugin/marketplace.json to include "$schema": "https://anthropic.com/claude-code/marketplace.schema.json" as the first property before "name" to enable schema validation tooling and follow upstream examples.skills/create-tech-spec/SKILL.md (1)
27-27: Minor style: repetitive "user wants" phrasingThe sentence at Line 27 uses "the user wants" twice in close succession. Consider consolidating:
✏️ Suggested rewrite
-Do **not** use when: the user doesn't have a PRD yet (use `create-prd` first), the user wants to generate `.plans` JSON (use `plan-sync` instead), or the user is ready to implement (the spec is a design document, not implementation guide). +Do **not** use when: the user doesn't have a PRD yet (use `create-prd` first), the user needs to generate `.plans` JSON (use `plan-sync` instead), or the user is ready to implement (the spec is a design document, not an implementation guide).🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@skills/create-tech-spec/SKILL.md` at line 27, The "Do **not** use when:" sentence repeats the phrase "the user wants" twice; edit the SKILL.md sentence (the "Do **not** use when:" bullet) to consolidate phrasing — e.g., "Do not use when: the user doesn't have a PRD yet (use `create-prd` first), wants to generate `.plans` JSON (use `plan-sync`), or is ready to implement (the spec is a design document, not an implementation guide)." Replace the original line with the consolidated version to remove the repetitive "the user wants" wording.docs/plans/2026-02-19-claude-plugin-design.md (1)
13-25: Add a language specifier to the fenced code block.The file-structure code block is missing a language tag, triggering a
markdownlintMD040 warning.📝 Proposed fix
-``` +```text planpilot/ ├── .claude-plugin/🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/plans/2026-02-19-claude-plugin-design.md` around lines 13 - 25, The fenced file-structure block in docs/plans/2026-02-19-claude-plugin-design.md is missing a language tag and triggers markdownlint MD040; update the opening fence for the block that begins with "planpilot/" to include a language specifier (e.g., change ``` to ```text) and ensure the closing fence remains ``` so the block is properly fenced and lint-free.docs/plans/2026-02-19-claude-plugin.md (2)
49-103: Plan templates diverge from the implemented artifactThe JSON snippets in Tasks 1 reflect the initial design but were updated during implementation:
"version"was bumped from1.0.0→2.3.0and the"source"field inmarketplace.jsonwas changed from"./"to the pip-style source. Someone executing this plan verbatim would produce stale artifacts. Consider adding a note directing the reader to the final.claude-plugin/files as the authoritative source.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/plans/2026-02-19-claude-plugin.md` around lines 49 - 103, Update the docs to avoid stale JSON by noting the canonical files and the implemented changes: mention that .claude-plugin/plugin.json uses "version": "2.3.0" (not "1.0.0") and that .claude-plugin/marketplace.json uses a pip-style "source" value (not "./"); add a short sentence in the Steps (near Step 2 or Step 3) directing readers to treat the files under .claude-plugin/ in the repository as the authoritative source and to verify those exact fields before running the validation commands.
163-167:git addof renamed-away path is redundant aftergit mv
git mv(line 132) already stages both the deletion ofskills/roadmap-to-github-projectand the creation ofskills/plan-sync/. The subsequentgit add skills/roadmap-to-github-project(line 165) references a path that no longer exists on disk, producing a "pathspec did not match any files" warning if executed literally.🔧 Proposed fix
-git add skills/plan-sync/ skills/roadmap-to-github-project +git add skills/plan-sync/🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/plans/2026-02-19-claude-plugin.md` around lines 163 - 167, The git sequence includes a redundant git add of the old path after using git mv: locate the commands around git mv (the rename of skills/roadmap-to-github-project to skills/plan-sync) and remove or correct the subsequent git add line that references skills/roadmap-to-github-project; either drop that git add entirely (git mv already stages the rename) or change it to add the new path (git add skills/plan-sync) or use a single staged commit (git commit -m "feat(plugin): rename roadmap-to-github-project skill to plan-sync") so the script won’t try to add a non-existent path and will avoid the pathspec warning.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.claude-plugin/marketplace.json:
- Around line 3-6: The file's owner.email currently contains a personal address
("aryekogan@gmail.com") which will be published; update the owner object to
remove or replace the personal email by either omitting the "email" field or
substituting a project/role address (e.g., "support@..." or "opensource@...") to
avoid publishing a personal contact; edit the "owner" JSON object (the "name"
and "email" properties) so only a non-personal email or no email remains and
ensure the resulting JSON stays valid.
In @.claude-plugin/plugin.json:
- Line 3: The plugin.json "version" field is hardcoded and will drift after
semantic releases; update the release configuration to include plugin.json so
the "version" key is auto-bumped. Specifically, add an entry for plugin.json
(targeting the "version" JSON key) to the semantic-release "version_variables"
in pyproject.toml so that pyproject.toml:tool.poetry.version,
src/planpilot/__init__.__version__, and .claude-plugin/plugin.json:version are
all updated by releases.
In `@docs/plans/2026-02-19-claude-plugin-design.md`:
- Around line 34-35: Sample plugin manifest in the design doc shows "version":
"1.0.0" which is out of sync with the actual .claude-plugin/plugin.json bumped
to 2.3.0; update the sample "version" value to "2.3.0" (the shipped value) or,
if you want to preserve the original design example, add a short clarifying note
next to the plugin.json snippet stating it reflects the initial design and not
the shipped version, referencing the sample "version" field so reviewers can
find it easily.
In `@docs/plans/2026-02-19-claude-plugin.md`:
- Around line 181-214: Add explicit language identifiers for the unlanguaged
fenced code blocks referenced in Task 3/Step 1 and Step 2 (mark the before/after
diff snippets as diff), Task 4/Step 1 raw URLs as text, and Task 7/Step 3
expected terminal output as text; also fix the nested code-block in the "###
Claude Code Plugin" section by replacing the outer ```markdown fence with four
backticks (````) so the inner ```bash block doesn’t prematurely close it. Locate
the unlanguaged fences in the document sections named "Task 3", "Task 4", and
"Task 7" and update the fences to include the language tokens (diff/text) and
change the outer fence surrounding the Claude Code Plugin example to a quadruple
backtick fence.
- Around line 403-414: The expected output list for the command `find
.claude-plugin commands skills/plan-sync -type f | sort` is missing
`.claude-plugin/marketplace.json`; update the expected output block so it
includes `.claude-plugin/marketplace.json` and place it before
`.claude-plugin/plugin.json` (since "m" sorts before "p"), preserving the
remaining entries `commands/prd.md`, `commands/spec.md`, `commands/sync.md`, and
`skills/plan-sync/SKILL.md`.
In `@README.md`:
- Around line 130-142: The README's Claude Code Plugin section incorrectly
states the planpilot CLI is "installed automatically from PyPI"; update that
text to remove the misleading phrase and add a prerequisite instruction: either
link to INSTALL.md/INSTALL.agent.md or add a short sentence like "ensure
planpilot is installed via `pipx install planpilot` or `pip install planpilot`
before using these commands" so users know to install the CLI manually prior to
running the Claude plugin commands (/planpilot:prd, /planpilot:spec,
/planpilot:sync).
---
Outside diff comments:
In `@skills/plan-sync/SKILL.md`:
- Line 6: The H1 heading "# Roadmap to GitHub Project" was not updated when the
frontmatter name was changed to "plan-sync"; update the H1 in SKILL.md to match
the frontmatter (e.g., change "# Roadmap to GitHub Project" to "# plan-sync" or
a human-friendly "Plan Sync") so the document title and frontmatter name are
consistent.
---
Duplicate comments:
In @.claude-plugin/plugin.json:
- Line 7: The file contains a hard-coded personal email ("email":
"aryekogan@gmail.com") which embeds PII into the distributed artifact; replace
that value with a non-personal contact (e.g., a generic support or placeholder
like "support@your-org.example" or "REDACTED") and update the same entry in
marketplace.json to match, or refactor to pull a contact value from an
environment variable or build-time config so no personal email is committed into
the packaged files; ensure both plugin.json and marketplace.json no longer
contain "aryekogan@gmail.com".
---
Nitpick comments:
In @.claude-plugin/marketplace.json:
- Around line 1-2: Add the missing top-level "$schema" field to the JSON
manifest so it matches the Anthropic marketplace convention; update the object
in .claude-plugin/marketplace.json to include "$schema":
"https://anthropic.com/claude-code/marketplace.schema.json" as the first
property before "name" to enable schema validation tooling and follow upstream
examples.
In `@docs/plans/2026-02-19-claude-plugin-design.md`:
- Around line 13-25: The fenced file-structure block in
docs/plans/2026-02-19-claude-plugin-design.md is missing a language tag and
triggers markdownlint MD040; update the opening fence for the block that begins
with "planpilot/" to include a language specifier (e.g., change ``` to ```text)
and ensure the closing fence remains ``` so the block is properly fenced and
lint-free.
In `@docs/plans/2026-02-19-claude-plugin.md`:
- Around line 49-103: Update the docs to avoid stale JSON by noting the
canonical files and the implemented changes: mention that
.claude-plugin/plugin.json uses "version": "2.3.0" (not "1.0.0") and that
.claude-plugin/marketplace.json uses a pip-style "source" value (not "./"); add
a short sentence in the Steps (near Step 2 or Step 3) directing readers to treat
the files under .claude-plugin/ in the repository as the authoritative source
and to verify those exact fields before running the validation commands.
- Around line 163-167: The git sequence includes a redundant git add of the old
path after using git mv: locate the commands around git mv (the rename of
skills/roadmap-to-github-project to skills/plan-sync) and remove or correct the
subsequent git add line that references skills/roadmap-to-github-project; either
drop that git add entirely (git mv already stages the rename) or change it to
add the new path (git add skills/plan-sync) or use a single staged commit (git
commit -m "feat(plugin): rename roadmap-to-github-project skill to plan-sync")
so the script won’t try to add a non-existent path and will avoid the pathspec
warning.
In `@skills/create-tech-spec/SKILL.md`:
- Line 27: The "Do **not** use when:" sentence repeats the phrase "the user
wants" twice; edit the SKILL.md sentence (the "Do **not** use when:" bullet) to
consolidate phrasing — e.g., "Do not use when: the user doesn't have a PRD yet
(use `create-prd` first), wants to generate `.plans` JSON (use `plan-sync`), or
is ready to implement (the spec is a design document, not an implementation
guide)." Replace the original line with the consolidated version to remove the
repetitive "the user wants" wording.
| "owner": { | ||
| "name": "Arye Kogan", | ||
| "email": "aryekogan@gmail.com" | ||
| }, |
There was a problem hiding this comment.
Personal email baked into a public, distributed artifact
aryekogan@gmail.com at Line 5 will be (a) permanently indexed by GitHub and (b) bundled into every PyPI wheel (per the pyproject.toml include). Consider using a role/project address or omitting the email field if it isn't required by the schema.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.claude-plugin/marketplace.json around lines 3 - 6, The file's owner.email
currently contains a personal address ("aryekogan@gmail.com") which will be
published; update the owner object to remove or replace the personal email by
either omitting the "email" field or substituting a project/role address (e.g.,
"support@..." or "opensource@...") to avoid publishing a personal contact; edit
the "owner" JSON object (the "name" and "email" properties) so only a
non-personal email or no email remains and ensure the resulting JSON stays
valid.
| "version": "1.0.0", | ||
| "description": "Sync roadmap plans (epics/stories/tasks) to GitHub Issues and Projects v2", |
There was a problem hiding this comment.
Stale version in the design doc sample manifest.
The sample plugin.json here shows "version": "1.0.0", but the actual .claude-plugin/plugin.json was bumped to 2.3.0 during this PR. A reader comparing this doc to the live file will see a mismatch. Consider updating the sample or adding a note that it reflects the initial design rather than the shipped version.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/plans/2026-02-19-claude-plugin-design.md` around lines 34 - 35, Sample
plugin manifest in the design doc shows "version": "1.0.0" which is out of sync
with the actual .claude-plugin/plugin.json bumped to 2.3.0; update the sample
"version" value to "2.3.0" (the shipped value) or, if you want to preserve the
original design example, add a short clarifying note next to the plugin.json
snippet stating it reflects the initial design and not the shipped version,
referencing the sample "version" field so reviewers can find it easily.
| ``` | ||
| # Before (line ~28) | ||
| use `roadmap-to-github-project` | ||
|
|
||
| # After | ||
| use `plan-sync` | ||
| ``` | ||
|
|
||
| ``` | ||
| # Before (line ~180) | ||
| run `/roadmap-to-github-project` | ||
|
|
||
| # After | ||
| run `/planpilot:sync` | ||
| ``` | ||
|
|
||
| **Step 2: Update `skills/create-tech-spec/SKILL.md`** | ||
|
|
||
| Two occurrences to change: | ||
|
|
||
| ``` | ||
| # Before (line ~27) | ||
| use `roadmap-to-github-project` instead | ||
|
|
||
| # After | ||
| use `plan-sync` instead | ||
| ``` | ||
|
|
||
| ``` | ||
| # Before (line ~260) | ||
| Run `roadmap-to-github-project` | ||
|
|
||
| # After | ||
| Run `/planpilot:sync` |
There was a problem hiding this comment.
Add language identifiers to unlanguaged fenced code blocks (MD040)
8 fenced code blocks flagged by markdownlint are missing language specifiers. Suggested fixes per location:
| Lines | Content type | Suggested language |
|---|---|---|
| 181–187, 189–194 | Before/after diff snippets (Task 3, Step 1) | diff |
| 201–207, 209–215 | Before/after diff snippets (Task 3, Step 2) | diff |
| 246–248, 250–252 | Raw URLs (Task 4, Step 1) | text |
| 408–414 | Expected terminal output (Task 7, Step 3) | text |
Additionally, lines 300–314 have a nested code-block problem: the inner ```bash (line 305) prematurely terminates the outer ```markdown fence (line 300), leaving line 314 as an unlabeled opener. Fix the outer fence with four backticks:
🔧 Proposed fix for the nested code block (lines 300–314)
-```markdown
+````markdown
### Claude Code Plugin
Install the planpilot plugin directly in Claude Code:
```bash
claude plugin marketplace add https://github.com/aryeko/planpilot
claude plugin install planpilot@planpilotThen use:
/planpilot:prd— create a PRD from a feature idea/planpilot:spec— create a tech spec from a PRD/planpilot:sync— generate.plansJSON and sync to GitHub
-```
+````
</details>
Also applies to: 246-252, 300-314, 408-414
<details>
<summary>🧰 Tools</summary>
<details>
<summary>🪛 markdownlint-cli2 (0.21.0)</summary>
[warning] 181-181: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
---
[warning] 189-189: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
---
[warning] 201-201: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
---
[warning] 209-209: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
</details>
</details>
<details>
<summary>🤖 Prompt for AI Agents</summary>
Verify each finding against the current code and only fix it if needed.
In @docs/plans/2026-02-19-claude-plugin.md around lines 181 - 214, Add explicit
language identifiers for the unlanguaged fenced code blocks referenced in Task
3/Step 1 and Step 2 (mark the before/after diff snippets as diff), Task 4/Step 1
raw URLs as text, and Task 7/Step 3 expected terminal output as text; also fix
the nested code-block in the "### Claude Code Plugin" section by replacing the
outer markdown fence with four backticks (````) so the inner bash block
doesn’t prematurely close it. Locate the unlanguaged fences in the document
sections named "Task 3", "Task 4", and "Task 7" and update the fences to include
the language tokens (diff/text) and change the outer fence surrounding the
Claude Code Plugin example to a quadruple backtick fence.
</details>
<!-- fingerprinting:phantom:triton:churro -->
<!-- This is an auto-generated comment by CodeRabbit -->
| ```bash | ||
| find .claude-plugin commands skills/plan-sync -type f | sort | ||
| ``` | ||
|
|
||
| Expected output: | ||
| ``` | ||
| .claude-plugin/plugin.json | ||
| commands/prd.md | ||
| commands/spec.md | ||
| commands/sync.md | ||
| skills/plan-sync/SKILL.md | ||
| ``` |
There was a problem hiding this comment.
Expected output is missing .claude-plugin/marketplace.json
The find .claude-plugin commands skills/plan-sync -type f | sort command (line 404) would also return .claude-plugin/marketplace.json (created in Task 1, Step 3). Since m sorts before p, it would appear before plugin.json in the output.
🔧 Proposed fix
Expected output:
-```
+```text
+.claude-plugin/marketplace.json
.claude-plugin/plugin.json
commands/prd.md
commands/spec.md
commands/sync.md
skills/plan-sync/SKILL.md
</details>
<details>
<summary>🧰 Tools</summary>
<details>
<summary>🪛 markdownlint-cli2 (0.21.0)</summary>
[warning] 408-408: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
</details>
</details>
<details>
<summary>🤖 Prompt for AI Agents</summary>
Verify each finding against the current code and only fix it if needed.
In @docs/plans/2026-02-19-claude-plugin.md around lines 403 - 414, The expected
output list for the command find .claude-plugin commands skills/plan-sync -type f | sort is missing .claude-plugin/marketplace.json; update the expected
output block so it includes .claude-plugin/marketplace.json and place it
before .claude-plugin/plugin.json (since "m" sorts before "p"), preserving the
remaining entries commands/prd.md, commands/spec.md, commands/sync.md, and
skills/plan-sync/SKILL.md.
</details>
<!-- fingerprinting:phantom:triton:churro -->
<!-- This is an auto-generated comment by CodeRabbit -->
| ### Claude Code Plugin | ||
|
|
||
| Install the planpilot plugin directly in Claude Code (the planpilot CLI is installed automatically from PyPI): | ||
|
|
||
| ```bash | ||
| claude plugin marketplace add https://github.com/aryeko/planpilot | ||
| claude plugin install planpilot@planpilot | ||
| ``` | ||
|
|
||
| Then use: | ||
| - `/planpilot:prd` — create a PRD from a feature idea | ||
| - `/planpilot:spec` — create a tech spec from a PRD | ||
| - `/planpilot:sync` — generate `.plans` JSON and sync to GitHub |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# First, find and examine the marketplace.json file
echo "=== Looking for marketplace.json ==="
fd -type f -name "marketplace.json" 2>/dev/null | head -20
echo ""
echo "=== Directory structure around plugin config ==="
fd -type d -name ".claude-plugin" 2>/dev/null
echo ""
echo "=== Finding all json files in .claude-plugin ==="
find .claude-plugin -type f -name "*.json" 2>/dev/null | xargs -I{} sh -c 'echo "File: {}"; cat {}; echo ""' 2>/dev/nullRepository: aryeko/planpilot
Length of output: 1234
🏁 Script executed:
#!/bin/bash
# Search for any initialization or setup scripts in the plugin
echo "=== Looking for init/setup/install scripts ==="
find . -type f \( -name "*init*" -o -name "*setup*" -o -name "*install*" \) ! -path "./.*" ! -path "*/node_modules/*" ! -path "*/.git/*" 2>/dev/null | grep -v ".pyc" | head -20
echo ""
echo "=== Checking plugin.json structure and commands ==="
cat .claude-plugin/plugin.json | jq -r '.commands[]' 2>/dev/null
echo ""
echo "=== Looking for any command files ==="
find ./commands -type f 2>/dev/null | head -10
echo ""
echo "=== Looking for skills directory ==="
find ./skills -type f 2>/dev/null | head -10Repository: aryeko/planpilot
Length of output: 1208
🏁 Script executed:
#!/bin/bash
# Check the INSTALL files
echo "=== INSTALL.agent.md ==="
cat ./skills/INSTALL.agent.md
echo ""
echo "=== INSTALL.md ==="
cat ./skills/INSTALL.md
echo ""
echo "=== Check README around line 130-142 ==="
sed -n '125,150p' README.mdRepository: aryeko/planpilot
Length of output: 8734
Clarify Claude Code plugin installation: planpilot CLI requires manual pip/pipx install first.
The README claims the CLI is "installed automatically from PyPI," but the INSTALL.md and INSTALL.agent.md files show this is incorrect. Users must manually run pipx install planpilot (or equivalent pip command) before the plugin commands will work. The marketplace.json structure ("source": "pip") does not trigger automatic installation at plugin-install time.
Update line 132 to remove the misleading "automatically from PyPI" claim and either:
- Link to INSTALL.md with prerequisite instructions, or
- Explicitly state: "ensure planpilot is installed via
pipx install planpilotorpip install planpilotbefore using these commands"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@README.md` around lines 130 - 142, The README's Claude Code Plugin section
incorrectly states the planpilot CLI is "installed automatically from PyPI";
update that text to remove the misleading phrase and add a prerequisite
instruction: either link to INSTALL.md/INSTALL.agent.md or add a short sentence
like "ensure planpilot is installed via `pipx install planpilot` or `pip install
planpilot` before using these commands" so users know to install the CLI
manually prior to running the Claude plugin commands (/planpilot:prd,
/planpilot:spec, /planpilot:sync).
- Add docs/guides/plugin-skills-guide.md (skill chain walkthrough) - Add docs/reference/plugin-reference.md (command/install quick ref) - docs/how-it-works.md: add clean + map sync flow sections with diagrams - docs/modules/cli.md: add clean execution flow diagram - docs/design/architecture.md: add map_sync + clean to Core table - docs/design/codemap.md: add Map Sync + Clean to domain map - docs/reference/docs-inventory.md: add plugin/skills section - docs/README.md: link plugin guide, remove plans archive section - CLAUDE.md: add plugin/skills row to docs update policy - skills/plan-sync/SKILL.md: rename title to Plan Sync - Delete docs/plans/ historical execution artifacts Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- marketplace.json: add $schema field per Anthropic convention - pyproject.toml: add plugin.json to version_variables for auto-bump - skills/create-tech-spec: fix repetitive phrasing in "do not use" line Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Summary
.claude-plugin/plugin.jsonand.claude-plugin/marketplace.jsonso the repo serves as its own self-hosted Claude Code plugin marketplace/planpilot:prd,/planpilot:spec,/planpilot:sync) that delegate to the bundled skillsskills/roadmap-to-github-project→skills/plan-syncfor a cleaner nameTest Plan
poe checkpasses (509 tests, lint, typecheck)poe docs-linkspasses (no broken internal links)claude plugin marketplace add https://github.com/aryeko/planpilot/planpilot:prd,/planpilot:spec,/planpilot:syncSummary by CodeRabbit
New Features
/planpilot:prd,/planpilot:spec, and/planpilot:sync.Documentation
Chores