Use when the user asks to plan or break down work into steps/goals, track progress, manage plans, or mentions Planpilot/planpilot/plan pilot/计划/任务拆解/步骤/目标/进度.
Creates hierarchical plans with steps and goals to track project progress and manage tasks.
/plugin marketplace add canxin121/canxin-claude-plugins/plugin install planpilot@canxin-claude-plugins<plan|step|goal> [...args]planpilot
<project>/.claude/.planpilot/planpilot.db
planpilot: command not found), ask the user whether to install it, and offer /planpilot-install if they agree.--comment or comment commands), and before starting a step or goal, think through what you are about to do next and capture that context in comments so the plan stays actionable.add-tree to define all steps/goals upfront and add everything in one pass.ai; only assign human for truly critical/high-risk items or when passwords, sudo access, irreversible git history rewrites, or remote git changes are required. If human steps are necessary, batch them, make the step content explicit about what the human must do, and only ask the user for input when the next step is assigned to human (do not ask for preferences/reviews/approvals on basic items).step done/plan done).todo, done.goal done); steps/plans auto-refresh from child status, and use step done/plan done only when they have no children (step done --all-goals marks all goals done and then marks the step done). Auto status changes print as Auto status updates: with reasons.todo on incomplete child work and to done when all children are done. If a plan has 0 steps or a step has 0 goals, no auto-flip happens; use plan done / step done as needed.human step, verify/mark each goal and clearly list what remains.done and there is another pending step, the CLI will print the next-step instruction: for ai, end the turn so Planpilot can surface it; for human, show the step detail and tell the user to complete the goals, then end the turn. When a plan becomes done (automatic or manual), the CLI will prompt you to summarize completed results and end the turn.plan activate / plan deactivate to manage, and no active plan means the plan is paused until reactivated. Plans auto-deactivate on done (manual or automatic) or removal.plan activate --force to take over. Default to no --force, and if activation fails due to another session, ask the user whether to take over.plan show-active to know which plan is active and get its details.approve to let the turn finish, and block to re-prompt with the next AI step details.ai.ai, returning the step detail. The message always starts with Planpilot (auto): on the first line.plan show-active, plan show, step show, goal list) to fetch the missing context before proceeding.list/show.plan add <title> <content>: create a plan.
Created plan ID: <id>: <title>.plan add-tree <title> <content> --step <json> [--step <json> ...]: create a plan with steps/goals in one command.
Created plan ID: <id>: <title> (steps: <n>, goals: <n>).--step takes a JSON object: { "content": "...", "executor": "Ai|Human", "goals": ["..."] }.planpilot plan add-tree "Release v1.2" "Plan description" \
--step '{"content":"Cut release branch","executor":"Human","goals":["Create branch","Tag base"]}' \
--step '{"content":"Build artifacts","executor":"Ai","goals":["Build packages"]}'
plan list [--all] [--status todo|done] [--order id|title|created|updated] [--desc]: list plans (defaults to todo unless --all or --status is set).
ID STAT STEPS TITLE COMMENT (STEPS is done/total); use plan show for full details.No plans found.plan show <id>: prints plan details and nested steps/goals (includes ids for plan/step/goal).
Plan ID: <id>, Title, Status, Content, Created, Updated, and Comment when present.goals done/total) is shown only when the step has goals. Each goal line includes goal id.plan export <id> <path>: export plan details to a markdown file.
Exported plan ID: <id> to <path>.plan update <id> [--title <title>] [--content <content>] [--status todo|done] [--comment <comment>]: update fields; --status done is allowed only when all steps are done or the plan has no steps.
Updated plan ID: <id>: <title>.Error: Invalid input: with cannot mark plan done; next pending step: on the next line, followed by the same step detail output as step show.plan done <id>: mark plan done (same rule as plan update --status done).
Plan ID: <id> marked done.Active plan deactivated because plan is done.Error: Invalid input: with cannot mark plan done; next pending step: on the next line, followed by the same step detail output as step show.plan comment --entry <json> [--entry <json> ...]: add or replace comments for one or more plans.
--entry takes a JSON object: { "id": 123, "comment": "..." }.Updated plan comment for plan ID: <id>.Updated plan comments for <n> plans.plan remove <id>: remove plan (and its steps/goals).
Plan ID: <id> removed.plan activate <id> [--force]: set the active plan.
Active plan set to <id>: <title>.--force takes over a plan already active in another session.Error: Invalid input: cannot activate plan; plan is done.Error: Invalid input: plan id <id> is already active in session <session_id> (use --force to take over).plan show-active: prints the active plan details (same format as plan show).
plan show.No active plan.Active plan ID: <id> not found.plan deactivate: unset the active plan (does not delete any plan).
Active plan deactivated.step add <plan_id> <content1> [<content2> ...] [--at <pos>] [--executor ai|human]: add steps.
Created step ID: <id> for plan ID: <plan_id>.Created <n> steps for plan ID: <plan_id>.step add-tree <plan_id> <content> [--executor ai|human] [--goal <goal> ...]: create one step with goals in one command.
Created step ID: <id> for plan ID: <plan_id> (goals: <n>).planpilot step add-tree 1 "Draft summary" \
--executor ai --goal "Collect inputs" --goal "Write draft"
step list <plan_id> [--all] [--status todo|done] [--executor ai|human] [--limit N] [--offset N] [--count] [--order order|id|created] [--desc]: list steps (defaults to todo unless --all or --status is set).
ID STAT EXEC GOALS CONTENT COMMENT (GOALS is done/total); use step show for full details.Total: <n> when --count is set (no list output).No steps found for plan ID: <plan_id>.step show <id>: prints a single step with full details and its nested goals (includes ids for step/goal).
Step ID: <id>, Plan ID, Status, Executor, Content, Created, Updated, and Comment when present.[status] and goal id.step show-next: show the next pending step for the active plan (same format as step show).
No active plan. or No pending step..step update <id> [--content <content>] [--status todo|done] [--executor ai|human] [--comment <comment>]: update fields; --status done is allowed only when all goals are done or the step has no goals.
Updated step ID: <id>..Error: Invalid input: cannot mark step done; next pending goal: <content> (id <id>).step comment --entry <json> [--entry <json> ...]: add or replace comments for one or more steps.
--entry takes a JSON object: { "id": 456, "comment": "..." }.Updated step comments for plan ID: <plan_id>.Updated step comments for <n> plans.step done <id> [--all-goals]: mark step done (same rule as step update --status done). Use --all-goals to mark all goals in the step done first, then mark the step done.
Step ID: <id> marked done.Error: Invalid input: cannot mark step done; next pending goal: <content> (id <id>).step move <id> --to <pos>: reorder and print the same one-line list as step list.
Reordered steps for plan ID: <plan_id>: + list.step remove <id1> [<id2> ...]: remove step(s).
Step ID: <id> removed.Removed <n> steps.Error: Not found: step id(s) not found: <id1>[, <id2> ...].goal add <step_id> <content1> [<content2> ...]: add goals to a step.
Created goal ID: <id> for step ID: <step_id>.Created <n> goals for step ID: <step_id>.goal list <step_id> [--all] [--status todo|done] [--limit N] [--offset N] [--count]: list goals (defaults to todo unless --all or --status is set).
ID STAT CONTENT COMMENT.Total: <n> when --count is set (no list output).No goals found for step ID: <step_id>.goal update <id> [--content <content>] [--status todo|done] [--comment <comment>]: update fields.
Updated goal <id>.goal comment --entry <json> [--entry <json> ...]: add or replace comments for one or more goals.
--entry takes a JSON object: { "id": 789, "comment": "..." }.Updated goal comments for plan ID: <plan_id>.Updated goal comments for <n> plans.goal done <id1> [<id2> ...]: mark one or more goals done.
Goal ID: <id> marked done.Goals marked done: <n>.goal remove <id1> [<id2> ...]: remove goal(s).
Goal ID: <id> removed.Removed <n> goals.Error: Not found: goal id(s) not found: <id1>[, <id2> ...].