planpilot 2.4.0__tar.gz → 2.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {planpilot-2.4.0 → planpilot-2.5.0}/PKG-INFO +1 -1
- {planpilot-2.4.0 → planpilot-2.5.0}/pyproject.toml +1 -1
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/.claude-plugin/plugin.json +3 -3
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/__init__.py +1 -1
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/skills/INSTALL.agent.md +62 -19
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/skills/INSTALL.md +43 -25
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/skills/plan-sync/SKILL.md +15 -57
- {planpilot-2.4.0 → planpilot-2.5.0}/LICENSE +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/README.md +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/.claude-plugin/marketplace.json +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/AGENTS.md +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/__main__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/cli/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/cli/__main__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/cli/app.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/cli/commands/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/cli/commands/clean.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/cli/commands/init.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/cli/commands/map_sync.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/cli/commands/sync.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/cli/common.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/cli/init/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/cli/init/validation.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/cli/parser.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/cli/persistence/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/cli/persistence/remote_plan.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/cli/persistence/sync_map.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/cli/progress/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/cli/progress/rich.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/cli/scaffold/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/cli/scaffold/config_builder.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/commands/prd.md +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/commands/spec.md +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/commands/sync.md +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/auth/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/auth/base.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/auth/factory.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/auth/preflight.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/auth/resolvers/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/auth/resolvers/env.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/auth/resolvers/gh_cli.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/auth/resolvers/static.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/clean/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/clean/deletion_planner.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/config/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/config/loader.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/config/scaffold.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/contracts/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/contracts/config.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/contracts/exceptions.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/contracts/init.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/contracts/item.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/contracts/plan.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/contracts/provider.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/contracts/renderer.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/contracts/sync.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/engine/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/engine/engine.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/engine/progress.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/engine/utils.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/init/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/init/validation.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/map_sync/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/map_sync/parser.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/map_sync/persistence.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/map_sync/reconciler.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/metadata.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/plan/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/plan/hasher.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/plan/loader.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/plan/validator.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/AGENTS.md +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/base.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/dry_run.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/factory.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/AGENTS.md +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/_retrying_transport.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/add_blocked_by.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/add_labels.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/add_project_item.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/add_sub_issue.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/async_base_client.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/base_model.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/client.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/close_issue.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/create_issue.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/create_label.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/delete_issue.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/enums.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/exceptions.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/fetch_org_project.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/fetch_project_fields.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/fetch_project_items.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/fetch_relations.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/fetch_repo.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/fetch_user_project.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/find_labels.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/fragments.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/get_issue.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/input_types.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/operations.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/remove_blocked_by.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/remove_labels.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/remove_sub_issue.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/search_issues.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/update_issue.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/update_project_field.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/item.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/mapper.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/models.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/add_blocked_by.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/add_labels.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/add_project_item.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/add_sub_issue.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/close_issue.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/create_issue.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/create_label.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/delete_issue.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/fetch_org_project.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/fetch_project_fields.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/fetch_project_items.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/fetch_relations.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/fetch_repo.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/fetch_user_project.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/find_labels.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/fragments.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/get_issue.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/remove_blocked_by.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/remove_labels.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/remove_sub_issue.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/search_issues.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/update_issue.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/update_project_field.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/ops/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/ops/convert.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/ops/crud.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/ops/labels.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/ops/project.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/ops/relations.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/provider.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/schema.graphql +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/renderers/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/renderers/factory.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/renderers/markdown.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/targets/__init__.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/targets/github_project.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/py.typed +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/sdk.py +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/skills/create-prd/SKILL.md +0 -0
- {planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/skills/create-tech-spec/SKILL.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "planpilot",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
4
4
|
"description": "Claude Code skills and commands for planning workflows: create PRDs, tech specs, and sync plans to GitHub Issues + Projects v2",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Arye Kogan",
|
|
@@ -13,6 +13,6 @@
|
|
|
13
13
|
"keywords": ["planning", "github", "roadmap", "issues", "projects", "prd", "spec"],
|
|
14
14
|
"category": "workflow",
|
|
15
15
|
"tags": ["planning", "github-projects", "roadmap", "prd", "tech-spec", "skills", "commands"],
|
|
16
|
-
"skills": ["
|
|
17
|
-
"commands": ["
|
|
16
|
+
"skills": ["../skills/"],
|
|
17
|
+
"commands": ["../commands/"]
|
|
18
18
|
}
|
|
@@ -14,13 +14,45 @@ python3 --version
|
|
|
14
14
|
|
|
15
15
|
If `python3` is not found, try `python --version`. You need Python 3.11+.
|
|
16
16
|
|
|
17
|
-
If Python is not installed, STOP and tell the user:
|
|
17
|
+
If Python is not installed or below 3.11, STOP and tell the user:
|
|
18
18
|
|
|
19
19
|
> Python 3.11+ is required. Please install it from https://python.org and try again.
|
|
20
20
|
|
|
21
|
-
## Step 2:
|
|
21
|
+
## Step 2: Install planpilot
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
All options below put `planpilot` on PATH so it can be invoked directly.
|
|
24
|
+
|
|
25
|
+
**Option A — via `uv` (recommended):**
|
|
26
|
+
|
|
27
|
+
Check if `uv` is available:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
uv --version
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
If not found, install it:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
> **Note:** Piping to `sh` without checksum verification is the officially recommended method but carries inherent supply-chain risk. For a verified install, see [uv GitHub releases](https://github.com/astral-sh/uv/releases) for SHA-256 hashes.
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
source "$HOME/.local/bin/env" 2>/dev/null || export PATH="$HOME/.local/bin:$PATH"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Then install planpilot:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
uv tool install planpilot
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
If this succeeds, skip to Step 3.
|
|
52
|
+
|
|
53
|
+
**Option B — via `pipx`:**
|
|
54
|
+
|
|
55
|
+
Check if `pipx` is available:
|
|
24
56
|
|
|
25
57
|
```bash
|
|
26
58
|
pipx --version
|
|
@@ -44,35 +76,31 @@ If `pipx` is **not found**, install it:
|
|
|
44
76
|
python3 -m pipx ensurepath
|
|
45
77
|
```
|
|
46
78
|
|
|
47
|
-
After installing pipx, you may need to open a new shell or `source ~/.bashrc` / `source ~/.zshrc` for
|
|
48
|
-
|
|
49
|
-
## Step 3: Install planpilot
|
|
79
|
+
After installing pipx, you may need to open a new shell or `source ~/.bashrc` / `source ~/.zshrc` for PATH to update.
|
|
50
80
|
|
|
51
81
|
```bash
|
|
52
82
|
pipx install planpilot
|
|
53
83
|
```
|
|
54
84
|
|
|
55
|
-
If this
|
|
56
|
-
|
|
57
|
-
## Step 4: Verify planpilot
|
|
85
|
+
If this succeeds, skip to Step 3.
|
|
58
86
|
|
|
59
|
-
|
|
87
|
+
**Option C — via `pip3` (last resort):**
|
|
60
88
|
|
|
61
89
|
```bash
|
|
62
|
-
planpilot
|
|
90
|
+
pip3 install planpilot
|
|
63
91
|
```
|
|
64
92
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
93
|
+
If this fails, STOP and tell the user the error output.
|
|
94
|
+
|
|
95
|
+
## Step 3: Verify planpilot
|
|
68
96
|
|
|
69
97
|
```bash
|
|
70
|
-
|
|
98
|
+
planpilot --version
|
|
71
99
|
```
|
|
72
100
|
|
|
73
|
-
If
|
|
101
|
+
If this fails, STOP and report the failure to the user.
|
|
74
102
|
|
|
75
|
-
## Step
|
|
103
|
+
## Step 4: Install the skills
|
|
76
104
|
|
|
77
105
|
Install `plan-sync`:
|
|
78
106
|
|
|
@@ -109,7 +137,7 @@ curl -fsSL "https://raw.githubusercontent.com/aryeko/planpilot/main/src/planpilo
|
|
|
109
137
|
|
|
110
138
|
If `curl` is not available, try `wget` for any of the above (replace `curl -fsSL ... -o` with `wget -qO`).
|
|
111
139
|
|
|
112
|
-
## Step
|
|
140
|
+
## Step 5: Verify skill install
|
|
113
141
|
|
|
114
142
|
Verify all three skills were installed:
|
|
115
143
|
|
|
@@ -131,7 +159,22 @@ head -5 ~/.agents/skills/create-tech-spec/SKILL.md
|
|
|
131
159
|
|
|
132
160
|
Should contain `name: create-tech-spec`.
|
|
133
161
|
|
|
134
|
-
If any are missing or incorrect, retry Step
|
|
162
|
+
If any are missing or incorrect, retry Step 4.
|
|
163
|
+
|
|
164
|
+
## Step 6: Update planpilot (if requested)
|
|
165
|
+
|
|
166
|
+
If the user asks to update planpilot:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
# If installed via uv
|
|
170
|
+
uv tool upgrade planpilot
|
|
171
|
+
|
|
172
|
+
# If installed via pipx
|
|
173
|
+
pipx upgrade planpilot
|
|
174
|
+
|
|
175
|
+
# If installed via pip3
|
|
176
|
+
pip3 install --upgrade planpilot
|
|
177
|
+
```
|
|
135
178
|
|
|
136
179
|
## Step 7: Report to user
|
|
137
180
|
|
|
@@ -26,36 +26,41 @@ The agent will install `planpilot` and all three skills automatically.
|
|
|
26
26
|
|
|
27
27
|
### 1) Prerequisites
|
|
28
28
|
|
|
29
|
-
Check Python 3 is available:
|
|
29
|
+
Check Python 3.11+ is available:
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
32
|
python3 --version
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
If Python is not installed or below 3.11, install it from https://python.org.
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
PY
|
|
43
|
-
```
|
|
37
|
+
### 2) Install `planpilot`
|
|
38
|
+
|
|
39
|
+
All options below put `planpilot` on your PATH so it can be invoked directly.
|
|
40
|
+
|
|
41
|
+
**Option A — via `uv` (recommended):**
|
|
44
42
|
|
|
45
|
-
|
|
43
|
+
[`uv`](https://docs.astral.sh/uv/) installs tools in isolated environments with no PEP 668 issues.
|
|
44
|
+
|
|
45
|
+
If `uv` is not installed:
|
|
46
46
|
|
|
47
47
|
```bash
|
|
48
|
-
|
|
48
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
> **Note:** Piping to `sh` without checksum verification is the officially recommended method but carries inherent supply-chain risk. For a verified install, download the binary directly from [uv GitHub releases](https://github.com/astral-sh/uv/releases) and verify the SHA-256 hash before running.
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
Then install planpilot:
|
|
54
54
|
|
|
55
55
|
```bash
|
|
56
|
-
|
|
56
|
+
uv tool install planpilot
|
|
57
|
+
planpilot --version
|
|
57
58
|
```
|
|
58
59
|
|
|
60
|
+
**Option B — via `pipx`:**
|
|
61
|
+
|
|
62
|
+
[`pipx`](https://pipx.pypa.io/) installs CLI tools in isolated environments — avoids PEP 668 errors on macOS Homebrew and system Python.
|
|
63
|
+
|
|
59
64
|
If `pipx` is not found:
|
|
60
65
|
|
|
61
66
|
```bash
|
|
@@ -70,19 +75,19 @@ pipx ensurepath
|
|
|
70
75
|
|
|
71
76
|
You may need to restart your shell after `ensurepath`.
|
|
72
77
|
|
|
73
|
-
### 3) Install `planpilot`
|
|
74
|
-
|
|
75
78
|
```bash
|
|
76
79
|
pipx install planpilot
|
|
80
|
+
planpilot --version
|
|
77
81
|
```
|
|
78
82
|
|
|
79
|
-
|
|
83
|
+
**Option C — via `pip3` (last resort):**
|
|
80
84
|
|
|
81
85
|
```bash
|
|
86
|
+
pip3 install planpilot
|
|
82
87
|
planpilot --version
|
|
83
88
|
```
|
|
84
89
|
|
|
85
|
-
###
|
|
90
|
+
### 3) Install the skills into open skill path
|
|
86
91
|
|
|
87
92
|
Create destination directories:
|
|
88
93
|
|
|
@@ -92,7 +97,7 @@ mkdir -p ~/.agents/skills/create-tech-spec
|
|
|
92
97
|
mkdir -p ~/.agents/skills/plan-sync
|
|
93
98
|
```
|
|
94
99
|
|
|
95
|
-
####
|
|
100
|
+
#### Local: Copy from local repo checkout
|
|
96
101
|
|
|
97
102
|
```bash
|
|
98
103
|
cp src/planpilot/skills/create-prd/SKILL.md \
|
|
@@ -105,7 +110,7 @@ cp src/planpilot/skills/plan-sync/SKILL.md \
|
|
|
105
110
|
~/.agents/skills/plan-sync/SKILL.md
|
|
106
111
|
```
|
|
107
112
|
|
|
108
|
-
####
|
|
113
|
+
#### Remote: Fetch from GitHub raw URL
|
|
109
114
|
|
|
110
115
|
```bash
|
|
111
116
|
curl -fsSL "https://raw.githubusercontent.com/aryeko/planpilot/main/src/planpilot/skills/create-prd/SKILL.md" \
|
|
@@ -118,9 +123,9 @@ curl -fsSL "https://raw.githubusercontent.com/aryeko/planpilot/main/src/planpilo
|
|
|
118
123
|
-o ~/.agents/skills/plan-sync/SKILL.md
|
|
119
124
|
```
|
|
120
125
|
|
|
121
|
-
For reproducible installs, pin to a release tag (e.g., `v2.4.
|
|
126
|
+
For reproducible installs, pin to a release tag (e.g., `v2.4.1`) instead of `main` once a new release is available.
|
|
122
127
|
|
|
123
|
-
###
|
|
128
|
+
### 4) Verify skill install
|
|
124
129
|
|
|
125
130
|
```bash
|
|
126
131
|
ls -la ~/.agents/skills/create-prd
|
|
@@ -139,13 +144,26 @@ Expected frontmatter should include:
|
|
|
139
144
|
- `name: create-tech-spec`
|
|
140
145
|
- `name: plan-sync`
|
|
141
146
|
|
|
142
|
-
###
|
|
147
|
+
### 5) Restart your agent
|
|
143
148
|
|
|
144
149
|
**Restart your agent** (start a new session) so it discovers the newly installed skill. The skill won't be available until the agent re-scans `~/.agents/skills/`.
|
|
145
150
|
|
|
146
|
-
###
|
|
151
|
+
### 6) Update / uninstall
|
|
152
|
+
|
|
153
|
+
**Update `planpilot`:**
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
# If installed via uv
|
|
157
|
+
uv tool upgrade planpilot
|
|
158
|
+
|
|
159
|
+
# If installed via pipx
|
|
160
|
+
pipx upgrade planpilot
|
|
161
|
+
|
|
162
|
+
# If installed via pip3
|
|
163
|
+
pip3 install --upgrade planpilot
|
|
164
|
+
```
|
|
147
165
|
|
|
148
|
-
Update (re-copy or re-fetch `SKILL.md` for each skill):
|
|
166
|
+
**Update skills** (re-copy or re-fetch `SKILL.md` for each skill):
|
|
149
167
|
|
|
150
168
|
```bash
|
|
151
169
|
curl -fsSL "https://raw.githubusercontent.com/aryeko/planpilot/main/src/planpilot/skills/create-prd/SKILL.md" \
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: plan-sync
|
|
3
|
-
description: Use when a user has PRD/spec/roadmap files and wants .plans artifacts generated and synced to GitHub Issues + a Projects v2 board in one guided flow. Standalone — planpilot
|
|
3
|
+
description: Use when a user has PRD/spec/roadmap files and wants .plans artifacts generated and synced to GitHub Issues + a Projects v2 board in one guided flow. Standalone — planpilot available via plugin wrapper or manual install (uv/pipx/pip3), no source tree required.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Plan Sync
|
|
@@ -17,8 +17,7 @@ Before any action, list available skills and invoke all that apply. If installed
|
|
|
17
17
|
|
|
18
18
|
## Prerequisites
|
|
19
19
|
|
|
20
|
-
-
|
|
21
|
-
- `planpilot` installed: `pipx install planpilot`
|
|
20
|
+
- `planpilot` CLI accessible — via `uvx planpilot` (zero-install), a global install, or the Claude plugin wrapper (see [INSTALL.md](https://github.com/aryeko/planpilot/blob/main/src/planpilot/skills/INSTALL.md))
|
|
22
21
|
- `gh` CLI installed and authenticated (scopes: `repo`, `project`)
|
|
23
22
|
|
|
24
23
|
## When to Use
|
|
@@ -458,56 +457,15 @@ Run preflight **before** config check — you need a working `planpilot` to run
|
|
|
458
457
|
|
|
459
458
|
#### 5a) Verify planpilot is available
|
|
460
459
|
|
|
461
|
-
Try
|
|
460
|
+
Try each invocation in order until one succeeds:
|
|
462
461
|
|
|
463
|
-
|
|
464
|
-
planpilot --version
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
If that fails (command not found):
|
|
468
|
-
|
|
469
|
-
```bash
|
|
470
|
-
python3 -m planpilot --version
|
|
471
|
-
```
|
|
472
|
-
|
|
473
|
-
If that also fails:
|
|
474
|
-
|
|
475
|
-
```bash
|
|
476
|
-
python -m planpilot --version
|
|
477
|
-
```
|
|
478
|
-
|
|
479
|
-
**If none of the above succeed**, run diagnostics:
|
|
480
|
-
|
|
481
|
-
```bash
|
|
482
|
-
which python3 python pipx
|
|
483
|
-
python3 --version
|
|
484
|
-
pipx list 2>/dev/null | grep -i planpilot
|
|
485
|
-
```
|
|
462
|
+
1. `uvx planpilot --version` → set `PLANPILOT_CMD="uvx planpilot"`
|
|
463
|
+
2. `planpilot --version` → set `PLANPILOT_CMD="planpilot"`
|
|
464
|
+
3. `python3 -m planpilot --version` → set `PLANPILOT_CMD="python3 -m planpilot"`
|
|
486
465
|
|
|
487
|
-
|
|
466
|
+
If all three fail, STOP and direct the user to install planpilot — see https://github.com/aryeko/planpilot/blob/main/src/planpilot/skills/INSTALL.md.
|
|
488
467
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
If the user agrees:
|
|
492
|
-
|
|
493
|
-
1. **Ensure `pipx` is available** — check `pipx --version`. If not found, install it:
|
|
494
|
-
|
|
495
|
-
```bash
|
|
496
|
-
brew install pipx && pipx ensurepath # macOS
|
|
497
|
-
# or: sudo apt install -y pipx && pipx ensurepath # Debian/Ubuntu
|
|
498
|
-
```
|
|
499
|
-
|
|
500
|
-
The user may need to restart their shell after `ensurepath`.
|
|
501
|
-
|
|
502
|
-
2. **Install planpilot**:
|
|
503
|
-
|
|
504
|
-
```bash
|
|
505
|
-
pipx install planpilot
|
|
506
|
-
```
|
|
507
|
-
|
|
508
|
-
3. **Re-verify** with `planpilot --version`. If still failing, check that `~/.local/bin` is on `PATH`.
|
|
509
|
-
|
|
510
|
-
**Remember which invocation worked** (`planpilot`, `python3 -m planpilot`, or `python -m planpilot`) and use that form for all subsequent commands in this session.
|
|
468
|
+
Record which command succeeded as `PLANPILOT_CMD` — use it for all subsequent planpilot invocations in this session.
|
|
511
469
|
|
|
512
470
|
#### 5b) Verify GitHub auth
|
|
513
471
|
|
|
@@ -531,9 +489,11 @@ If the user agrees, run the interactive init wizard. **You MUST run this from th
|
|
|
531
489
|
- `detect_plan_paths()` scans `.plans/` and `plans/` for existing plan files to pre-fill paths.
|
|
532
490
|
- Outside a git repo, both detections are disabled and every value must be entered manually.
|
|
533
491
|
|
|
492
|
+
Use the invocation form that succeeded in preflight (step 5a). Examples use `planpilot` — substitute `uvx planpilot`, `python3 -m planpilot`, etc. if that's what worked.
|
|
493
|
+
|
|
534
494
|
```bash
|
|
535
495
|
cd <repo-root>
|
|
536
|
-
|
|
496
|
+
$PLANPILOT_CMD init
|
|
537
497
|
```
|
|
538
498
|
|
|
539
499
|
The wizard asks these questions in order. Forward each to the user with the hints below:
|
|
@@ -557,25 +517,23 @@ After the wizard completes, inform the user:
|
|
|
557
517
|
If the user prefers non-interactive setup with auto-detected defaults:
|
|
558
518
|
|
|
559
519
|
```bash
|
|
560
|
-
|
|
520
|
+
$PLANPILOT_CMD init --defaults
|
|
561
521
|
```
|
|
562
522
|
|
|
563
523
|
This generates a config with placeholder `board_url` that must be edited manually.
|
|
564
524
|
|
|
565
525
|
### 7) Sync Execution (sync / full)
|
|
566
526
|
|
|
567
|
-
Use whichever invocation form succeeded in preflight (step 5a). Examples below use `planpilot` — substitute `python3 -m planpilot` or `python -m planpilot` if that's what worked.
|
|
568
|
-
|
|
569
527
|
Always dry-run first:
|
|
570
528
|
|
|
571
529
|
```bash
|
|
572
|
-
|
|
530
|
+
$PLANPILOT_CMD sync --config ./planpilot.json --dry-run
|
|
573
531
|
```
|
|
574
532
|
|
|
575
533
|
Review dry-run output. If everything looks correct:
|
|
576
534
|
|
|
577
535
|
```bash
|
|
578
|
-
|
|
536
|
+
$PLANPILOT_CMD sync --config ./planpilot.json --apply
|
|
579
537
|
```
|
|
580
538
|
|
|
581
539
|
### 8) Post-Sync Verification (sync / full)
|
|
@@ -606,7 +564,7 @@ Report to user:
|
|
|
606
564
|
- Creating stories that are too large (not PR-sized) or tasks that span multiple days
|
|
607
565
|
- Omitting `goal`, `requirements`, or `acceptance_criteria` (required by validator)
|
|
608
566
|
- Forgetting to set `parent_id` on stories and tasks
|
|
609
|
-
- Assuming `planpilot`
|
|
567
|
+
- Assuming `planpilot` is available without checking — always run preflight (step 5a) first
|
|
610
568
|
- Running `planpilot init` outside the git repo root — auto-detection of target and plan paths will fail
|
|
611
569
|
- Not committing `planpilot.json` to git — config must be tracked for reproducible syncs
|
|
612
570
|
- Writing `planpilot.json` by hand with invalid field combinations (e.g. both `unified` and `epics` in `plan_paths`)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/_retrying_transport.py
RENAMED
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/__init__.py
RENAMED
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/add_blocked_by.py
RENAMED
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/add_labels.py
RENAMED
|
File without changes
|
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/add_sub_issue.py
RENAMED
|
File without changes
|
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/base_model.py
RENAMED
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/client.py
RENAMED
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/close_issue.py
RENAMED
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/create_issue.py
RENAMED
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/create_label.py
RENAMED
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/delete_issue.py
RENAMED
|
File without changes
|
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/fetch_repo.py
RENAMED
|
File without changes
|
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/find_labels.py
RENAMED
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/fragments.py
RENAMED
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/get_issue.py
RENAMED
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/input_types.py
RENAMED
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/operations.py
RENAMED
|
File without changes
|
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/remove_labels.py
RENAMED
|
File without changes
|
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/search_issues.py
RENAMED
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/github_gql/update_issue.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/fragments.graphql
RENAMED
|
File without changes
|
{planpilot-2.4.0 → planpilot-2.5.0}/src/planpilot/core/providers/github/operations/get_issue.graphql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|