| name | cf-plan-resume |
| description | Resume an existing implementation plan created by /cf-plan, continuing from where execution last stopped. Use when the user wants to continue, resume, pick up, or finish a previously saved plan — e.g. "resume the plan", "continue the plan", "pick up where we left off", "finish the plan", "continue implementing the plan", "resume <slug>". Requires an existing plan file under docs/plans/. Does NOT create new plans — use /cf-plan for that.
|
| created | 2026-07-04T00:00:00.000Z |
| updated | 2026-07-24T00:00:00.000Z |
/cf-plan-resume
CLI Requirement: NONE — Works without coding-friend-cli. Reads the plan file and its context file directly and dispatches cf-implementer; no CLI features are required. See CLI requirements for the full matrix.
Resume the implementation plan at: $ARGUMENTS (a plan folder path, an entry file path, or a bare <slug>).
Workflow
Step 0: Custom Guide
Custom guide — auto-loaded below (if the raw command shows instead of its output, run it yourself):
bash "${CLAUDE_PLUGIN_ROOT}/lib/load-custom-guide.sh" cf-plan-resume
If output is not empty, integrate returned sections: ## Before → before first step, ## Rules → apply throughout, ## After → after final step.
Resume Protocol
- Resolve the plan entry file:
- Full path to a folder → use
<folder>/README.md. Full path to a file → use it directly. Validate the target is within the current working directory or {docsDir}; report error and stop if outside.
- Name only (
<slug>) → first, reject the argument outright if it contains /, \, or .. (report: "Invalid plan name — slugs cannot contain path separators or ..." and stop). This must happen BEFORE constructing any candidate path, since the candidates below are built by directly interpolating <slug> — a slug containing ../ would otherwise escape {docsDir}/plans/. Once the slug passes this check, resolve in this order, using the first that exists: {docsDir}/plans/<slug>/README.md (current layout) → {docsDir}/plans/<slug>.md (legacy single-file) → {docsDir}/plans/<slug> (append .md if it is a bare file).
- If none found → report error and stop.
- Read the plan entry file at the resolved path.
- Derive the task-id from the containing folder name (current layout: entry is
<slug>/README.md → task-id = <slug>) or the filename stem (legacy single-file <slug>.md), or from a task-id: frontmatter field if present. The stem/folder name IS the task-id (e.g. 2026-05-03-my-plan → task-id = 2026-05-03-my-plan). Look up the context file at {docsDir}/context/<task-id>.json. If not found, strip the leading YYYY-MM-DD- prefix from the stem (the first 11 characters if the stem starts with a date pattern) to get the bare name, then glob {docsDir}/context/*<bare-name>*.json for backward compat with the old unix-timestamp format (e.g. 1717500000-my-plan.json). Load the context file now, before dispatching any tasks.
- Scan the Progress table. Classify each task:
✅ DONE → skip.
🔄 IN PROGRESS → Edit the file containing this task's row (README.md for small plans; the relevant phase file phase-N-<name>.md for big plans): reset to ⬜ TODO, treat as pending. (Session ended mid-task; completion status is unreliable.)