Task
Task-lifecycle operations on orchestrator runs — handoff, pickup, resume context, progress, orchestrator status, complete task, merge task, task cleanup, archive task, clean artifacts. Dispatches subcommands: `handoff` serializes conversation context to .prove/handoff.md; `pickup` resumes from it; `progress` reports read-only status across active runs; `complete <slug>` merges a task branch to main and cleans up; `cleanup <slug>` archives artifacts without merging. Use when hitting context limits, transitioning sessions, checking run status, or closing out tasks.From its SKILL.md
npx -y skills add mjmorales/claude-prove --skill taskAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
10.6 KB, as published. Nobody here has run it
Task Lifecycle: $ARGUMENTS
Dispatch on the first token of $ARGUMENTS. Remaining tokens are the slug/note
for that subcommand.
Routing Table
| Subcommand | Purpose | Extra args |
|---|---|---|
handoff | Write .prove/handoff.md from current context | optional note |
pickup | Resume work from .prove/handoff.md | none |
progress | Read-only status across active orchestrator runs | none |
complete | Merge orchestrator/<slug> to main + archive + cleanup | <slug> (optional) |
cleanup | Archive artifacts + remove working files (no merge) | <slug> (optional) |
| (none) | Print this routing table and exit | — |
If $ARGUMENTS is empty or the first token is not one of the five subcommands,
print the routing table above and stop — do not guess a subcommand from free-form
text.
All paths below are relative to the project root. Orchestrator run artifacts
live at .prove/runs/<branch>/<slug>/; state.json is the single source of
truth, rendered on demand by scripts/prove-run show.
handoff — Serialize Session Context
Create .prove/handoff.md so a fresh session picks up where this one left off.
Rules
- Reference files by path, do not inline content. Target ~100-200 lines total.
- Each handoff is a fresh snapshot. Do not append to or reference prior handoffs.
- Do not ask the user questions. Use the extra args and conversation context.
- Cap: max 50 files in "Files Modified", max 7 in "Files to Read First".
Phase 1: Gather Context
claude-prove handoff gather --project-root "$PROJECT_ROOT" --plugin-dir "$PLUGIN_DIR"
Capture the full output — this becomes the body of the handoff file. If an extra
note was passed after handoff, treat it as additional context for Phase 2.
Phase 2: Pickup Note
Generate a 3-5 sentence pickup note — the only LLM-generated part. Answer:
- Next action — immediate work for the new agent
- Blockers/gotchas — non-obvious issues that would trip up a fresh agent
- Key decisions — choices made during the handed-off work that are not captured in artifacts
Conditional additions:
- Active run (
state.json+plan.jsonunder.prove/runs/<branch>/<slug>/): reference the specific step id fromscripts/prove-run show state .prove/decisions/has entries: mention the most recent decision- No prove artifacts: summarize from git state
- Extra note provided: incorporate it
Be concrete: "Fix the failing test in auth/middleware.test.ts caused by the new token format" over "Continue working on auth."
Phase 3: Agent Recommendation
If agents/ exists, read .md files and parse frontmatter description. Match
against the pickup note's work domain:
- Match found:
claude --agent agents/<name>.md --prompt-file .prove/handoff.md - No match, specialized work: suggest
/prove:create --type agentfirst - No agents dir or general work:
claude --prompt-file .prove/handoff.md
Phase 4: Write & Output
Write .prove/handoff.md:
# Handoff Context
<!-- Auto-generated by /prove:task handoff. Safe to delete after use. -->
## Pickup Note
<from Phase 2>
<gathered context from Phase 1 — State, Files Modified, Prove Artifacts, Discovery>
## Files to Read First
<3-7 files, priority-ordered with one-line rationale.
Priority: task plan > modified files > decision records > config>
## Instructions
1. Read the files listed in "Files to Read First" before starting
2. <specific resume point from the pickup note>
3. Run validation before committing: <validator commands from .claude/.prove.json>
4. When done, delete: `rm .prove/handoff.md`
Output to the user: confirm file written, show the recommended command, explain agent match if applicable.
pickup — Resume From Handoff
Step 1: Locate
Read .prove/handoff.md. If missing, tell the user to run /prove:task handoff
first, then stop.
Step 2: Load Context
- Read the handoff file completely
- Read each file listed in "Files to Read First" in order
- Read referenced prove artifacts:
scripts/prove-run show state/show plan/show prdfor the active run, plus decision records
Step 3: Confirm and Clean Up
Tell the user: what you picked up, what you will work on, which branch you are on.
Delete the handoff file:
rm .prove/handoff.md
Step 4: Begin Work
Follow the "Instructions" section from the handoff file. Start immediately — do not ask the user to repeat the task.
Rules
- Load all referenced files before making changes
- Delete the handoff file after loading — it is ephemeral
- The handoff file tells you what to do — do not ask the user to repeat it
- If the handoff recommends a specific agent, inform the user:
"This handoff targets the
<agent>agent. Consider:claude --agent agents/<name>.md --prompt-file .prove/handoff.md"
progress — Orchestrator Status (Read-Only)
Read-only status check across active orchestrator runs. Never modify files.
Steps
-
List active runs:
scripts/prove-run lsIf empty: "No active orchestrator run. Start one with
/prove:orchestratoror/prove:orchestrator --full." -
For each run, render the full state view (joined with the plan for titles):
cd <worktree for slug> # or rely on PROVE_RUN_SLUG / marker scripts/prove-run show statestate.jsonis the source of truth. Markdown is rendered JIT — never persisted. -
If multiple runs, precede with a summary table:
Branch/Slug Status Current Step Tasks done/total -
For completed runs, follow the rendered state with:
- Total duration (
started_at→ended_atfromstate.json) - Review verdicts summary
- Merge readiness (clean vs halted)
- Total duration (
Rules
- Read-only — never invoke step/task/validator mutators
state.jsonis the single source of truth;scripts/prove-run showrenders views on demand- Agents must not parse JSON directly — use
scripts/prove-run summaryfor one-line andshowfor full - State ambiguity explicitly rather than guessing
- Keep output concise
complete — Merge Task Branch + Cleanup
Merge a completed task branch to main and clean up artifacts.
Phase 1: Identify Task
-
Resolve the task slug:
- Use the extra arg if provided
- Otherwise detect from current branch (
orchestrator/<slug>) - Otherwise scan:
git branch --list 'orchestrator/*'— if multiple,AskUserQuestionto pick
-
Verify the branch exists:
git branch --list 'orchestrator/<task-slug>'- No branch? Check for prior merge:
git log --oneline main --grep="merge: " - Already merged → skip to Phase 3
- No branch and no merge → halt with error
- No branch? Check for prior merge:
-
Show current state:
- Commits ahead of main:
git log main..orchestrator/<task-slug> --oneline - Artifacts found:
PROJECT_ROOT="." bash "$PLUGIN_DIR/scripts/cleanup.sh" --dry-run <task-slug>
- Commits ahead of main:
-
Confirm via
AskUserQuestion(header: "Complete:<task-slug>"):- "Merge & Clean" — merge, archive artifacts, delete branch
- "Merge Only" — merge, keep artifacts
- "Clean Only" — skip merge, archive and remove artifacts
- "Cancel"
Phase 2: Merge to Main
If user chose "Merge & Clean" or "Merge Only":
-
Halt if working tree is dirty (
git status --porcelain) -
Merge:
git checkout main git pull --ff-only git merge --no-ff orchestrator/<task-slug> -m "merge: <task-name>" -
On merge conflicts, halt immediately. Never force-merge or auto-resolve.
-
Record merge commit SHA.
Phase 3: Cleanup
If user chose "Merge & Clean" or "Clean Only":
- Run:
PROJECT_ROOT="." bash "$PLUGIN_DIR/scripts/cleanup.sh" --auto <task-slug> - Generate
SUMMARY.md(see "SUMMARY.md Generation" below) - Delete merged branch:
git branch -d orchestrator/<task-slug>— if-dfails (not merged), warn but do not force-delete
Phase 4: Commit & Report
- If cleanup produced changes, delegate to the
commitskill (e.g.,chore(cleanup): complete and archive <task-slug>) - Report: merge SHA (or "skipped"/"already merged"), archived location, deleted items, skipped items
cleanup — Archive + Remove (No Merge)
Manual counterpart to the orchestrator's Phase 4 cleanup. Use when the merge happened elsewhere (manual merge, "Skip" at the orchestrator merge gate, or abandoning a run).
Phase 1: Dry Run
If the extra arg is provided, pass it as task-slug; otherwise use --all:
bash "$PLUGIN_DIR/scripts/cleanup.sh" --dry-run [task-slug]
bash "$PLUGIN_DIR/scripts/cleanup.sh" --dry-run --all
Present the dry-run output. AskUserQuestion, header "Cleanup", options:
"Proceed" / "Cancel".
Phase 2: Execute
Run without --dry-run:
bash "$PLUGIN_DIR/scripts/cleanup.sh" [task-slug]
bash "$PLUGIN_DIR/scripts/cleanup.sh" --all
Report what was archived, removed, and skipped.
Phase 3: Generate SUMMARY.md
See "SUMMARY.md Generation" below.
Phase 4: Commit
Delegate to the commit skill.
Example: chore(cleanup): archive and remove api-refactor artifacts.
SUMMARY.md Generation (shared by complete and cleanup)
The cleanup.sh script is ACB-aware — it archives prd.json, plan.json,
state.json, and reports into .prove/archive/<YYYY-MM-DD>_<task-slug>/
before removing the working copies.
Read the archived JSON artifacts (not the md — the JSON is structured and
canonical) and write SUMMARY.md in the same archive directory:
# Task Summary: <prd.json.title>
**Completed**: <YYYY-MM-DD>
**Branch**: orchestrator/<task-slug>
**Final Status**: <state.json.run_status>
## What Was Done
<from archived prd.json: context, goals>
## Tasks Completed
<from archived state.json: list tasks with review verdicts>
## Files Changed
<from archived files-changed.txt, if present>
Never regenerate SUMMARY.md from live artifacts — always from the archive.