Skip to content

Comments

feat(plugin): add Claude Code plugin (skills, commands, marketplace)#88

Open
aryeko wants to merge 12 commits intomainfrom
feat/claude-plugin
Open

feat(plugin): add Claude Code plugin (skills, commands, marketplace)#88
aryeko wants to merge 12 commits intomainfrom
feat/claude-plugin

Conversation

@aryeko
Copy link
Owner

@aryeko aryeko commented Feb 19, 2026

Summary

  • Add .claude-plugin/plugin.json and .claude-plugin/marketplace.json so the repo serves as its own self-hosted Claude Code plugin marketplace
  • Add three commands (/planpilot:prd, /planpilot:spec, /planpilot:sync) that delegate to the bundled skills
  • Rename skills/roadmap-to-github-projectskills/plan-sync for a cleaner name
  • Update all cross-references (skill files, README, docs, examples)

Test Plan

  • poe check passes (509 tests, lint, typecheck)
  • poe docs-links passes (no broken internal links)
  • Code review passed (no issues found)
  • Install plugin: claude plugin marketplace add https://github.com/aryeko/planpilot
  • Verify commands available: /planpilot:prd, /planpilot:spec, /planpilot:sync

Summary by CodeRabbit

  • New Features

    • Added Claude Code Plugin support for planpilot with marketplace configuration.
    • Added three new slash commands: /planpilot:prd, /planpilot:spec, and /planpilot:sync.
  • Documentation

    • Added Claude Code Plugin installation and usage instructions.
    • Added command documentation and workflow references.
    • Updated existing guides to reflect skill name changes.
  • Chores

    • Updated project configuration for plugin distribution packaging.

@codecov
Copy link

codecov bot commented Feb 19, 2026

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>
@coderabbitai
Copy link

coderabbitai bot commented Feb 21, 2026

Warning

Rate limit exceeded

@aryeko has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 15 minutes and 57 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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.

📝 Walkthrough

Walkthrough

This 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

Cohort / File(s) Summary
Claude Plugin Configuration
.claude-plugin/marketplace.json, .claude-plugin/plugin.json
Adds plugin manifest files defining planpilot plugin metadata, owner information, and marketplace entry with pip package source.
Plugin Commands
commands/prd.md, commands/spec.md, commands/sync.md
Creates three new command definition files that invoke corresponding planpilot skills (create-prd, create-tech-spec, plan-sync) with YAML frontmatter specifying descriptions and allowed tools.
Skill Rename & Documentation
skills/plan-sync/SKILL.md, skills/create-prd/SKILL.md, skills/create-tech-spec/SKILL.md
Updates skill metadata and cross-references to use "plan-sync" instead of "roadmap-to-github-project" and changes command invocations to use planpilot namespace (e.g., /planpilot:sync).
Installation Guides
skills/INSTALL.md, skills/INSTALL.agent.md
Renames all references to roadmap-to-github-project skill with plan-sync across installation instructions, directory paths, verification steps, and uninstall sections.
Project Documentation
README.md, examples/README.md, examples/full-workflow/README.md
Updates workflow references from roadmap-to-github-project to plan-sync, adds Claude Code Plugin installation and usage section with planpilot invocation examples, and updates flowchart labels.
Design & Planning Docs
docs/plans/2026-02-19-claude-plugin-design.md, docs/plans/2026-02-19-claude-plugin.md
Adds comprehensive design documentation detailing plugin architecture, manifest specifications, renamed skill directory, new slash commands, distribution model, and implementation steps.
Project Configuration
pyproject.toml, .gitignore
Updates packaging configuration to explicitly include skills, commands, and .claude-plugin directories in distributions; adds .worktrees/ to gitignore.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Poem

🐰 A plugin emerges from the warren, plan-sync hops in grace,
Commands unfold with /planpilot's embrace,
Manifest whispers guide the way,
From roadmap dreams to plans that play! ✨

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely summarizes the main change: adding a Claude Code plugin with skills, commands, and marketplace configuration.
Description check ✅ Passed The PR description addresses most required sections with clear summaries and a test plan, though the verification checklist uses a non-standard format and some checks are marked incomplete.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/claude-plugin

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 | 🟡 Minor

Stale document heading — wasn't updated during rename

The frontmatter name (Line 2) was correctly changed to plan-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 $schema field

The 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" phrasing

The 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 markdownlint MD040 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 artifact

The JSON snippets in Tasks 1 reflect the initial design but were updated during implementation: "version" was bumped from 1.0.02.3.0 and the "source" field in marketplace.json was 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 add of renamed-away path is redundant after git mv

git mv (line 132) already stages both the deletion of skills/roadmap-to-github-project and the creation of skills/plan-sync/. The subsequent git 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.

Comment on lines +3 to +6
"owner": {
"name": "Arye Kogan",
"email": "aryekogan@gmail.com"
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

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.

Comment on lines 34 to 35
"version": "1.0.0",
"description": "Sync roadmap plans (epics/stories/tasks) to GitHub Issues and Projects v2",
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

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.

Comment on lines 181 to 214
```
# 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`
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

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@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
    -```
    +````

</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 -->

Comment on lines 403 to 414
```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
```
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

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 -->

Comment on lines +130 to +142
### 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
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 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/null

Repository: 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 -10

Repository: 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.md

Repository: 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 planpilot or pip install planpilot before 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).

aryeko and others added 2 commits February 21, 2026 20:37
- 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant