resume-work
Restore session state from handoff artifacts (HANDOFF.json, .continue-here.md, task_plan.md) and resume.
Best use case
resume-work is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Restore session state from handoff artifacts (HANDOFF.json, .continue-here.md, task_plan.md) and resume.
Teams using resume-work should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/resume-work/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How resume-work Compares
| Feature / Agent | resume-work | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Restore session state from handoff artifacts (HANDOFF.json, .continue-here.md, task_plan.md) and resume.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# /resume-work - Session State Restoration
## Overview
This skill reconstructs session state from handoff artifacts so work can continue without wasting time re-reading files and re-discovering decisions. It is the consumer half of the pause/resume pair — `/pause-work` creates the artifacts, `/resume-work` consumes them.
The priority cascade exists because handoff quality varies:
1. **HANDOFF.json** — Best case. Machine-readable, structured, created by explicit `/pause`. Contains reasoning context.
2. **.continue-here.md** — Good case. Human-readable prose. May exist without JSON if user wrote it manually.
3. **task_plan.md** — Fallback. Records task structure but not session reasoning. Better than nothing.
4. **git log + git status** — Last resort. Can infer recent activity but cannot reconstruct reasoning or rejected approaches.
Each level down the cascade loses more context, so the skill always starts from the top.
---
## Instructions
### Phase 1: DISCOVER
**Goal**: Find the best available state source using the priority cascade. Always check sources in order to ensure no high-quality context is lost (higher sources contain richer information than lower ones).
**Step 1: Identify project root**
```bash
git rev-parse --show-toplevel
```
**Step 2: Check for HANDOFF.json (Priority 1)**
Look for `{project_root}/HANDOFF.json`. If found:
- Read and parse the JSON
- Check `created_at` timestamp — if older than 24 hours, set `stale_warning = true` and plan to alert user before proceeding
- This is the richest source: proceed to Phase 2 with full structured data
- Also read `.continue-here.md` if it exists (for supplementary prose context)
**Step 3: Check for .continue-here.md (Priority 2)**
If no HANDOFF.json but `.continue-here.md` exists:
- Read the prose content
- Extract what you can: task description, completed items, next action, decisions
- Note that reasoning context may be limited compared to JSON handoff
**Step 4: Check for task_plan.md (Priority 3)**
If neither handoff file exists but `task_plan.md` exists:
- Read the plan
- Extract: completed phases `[x]`, remaining phases `[ ]`, decisions, errors, current status
- Note: this source captures task structure but not session reasoning
**Step 5: Fall back to git reconstruction (Priority 4)**
If no handoff files and no task_plan.md:
```bash
# Recent activity
git log --oneline -20
# Current branch context
git branch --show-current
# Uncommitted work
git status --short
# What's changed
git diff --stat
```
Synthesize a best-effort summary from git state. This is the least precise reconstruction — it shows WHAT happened but not WHY. Never skip to this source if higher-priority sources exist, as that would lose context.
**Step 6: Set reconstruction quality indicator**
| Source | Quality | Missing |
|--------|---------|---------|
| HANDOFF.json | Full | Nothing — richest source |
| .continue-here.md | Good | Structured data, may lack reasoning detail |
| task_plan.md | Partial | Session reasoning, rejected approaches, mental model |
| git log | Minimal | All reasoning context, decisions rationale, next action specifics |
**GATE**: At least one state source found and read. If ALL sources are empty (no handoff, no plan, no git history), inform user: "No session state found. Use /do to start a new task."
### Phase 2: RECONSTRUCT
**Goal**: Build a coherent state picture from available sources. Always present a status dashboard before taking action — the user needs to confirm the reconstructed state matches reality, since self-assessment of "what I was doing" is inherently fallible.
**Step 1: Verify uncommitted files**
If the handoff reports `uncommitted_files`, check whether they still exist (work may have been lost during worktree cleanup or manual revert):
```bash
# For each file in uncommitted_files list
git status --short -- <file>
```
Flag any files that were listed as uncommitted but are now missing — these represent potential work loss.
**Step 2: Check for false completions**
If the handoff reports `false_completions`, verify those placeholder markers still exist in the codebase. They may have been fixed by manual intervention between sessions.
**Step 3: Synthesize status dashboard**
Build the dashboard from available data. This dashboard is your knowledge checkpoint — it prevents false assumptions from carrying into the resumed session:
```
===================================================================
SESSION RESUMED
===================================================================
Source: HANDOFF.json (created: <timestamp>) [STALE WARNING if applicable]
Branch: <branch> (base: <base_branch>)
Task: <task_summary>
Completed:
- <completed item 1>
- <completed item 2>
Remaining:
- <remaining item 1>
- <remaining item 2>
Blockers: <blockers or "None">
Key Decisions:
- <decision>: <reasoning>
Uncommitted Work: <N file(s)> [WARNING: N file(s) missing if applicable]
False Completions: <N placeholder(s)> [or "None detected"]
Next Action:
<next_action description>
===================================================================
```
**GATE**: Status dashboard constructed. Ready to present to user.
### Phase 3: PRESENT
**Goal**: Show the user what was reconstructed and confirm before proceeding. Never skip the dashboard — it is the validation checkpoint that catches assumptions made by the new session before they cause problems.
**Step 1: Display status dashboard**
Show the dashboard from Phase 2.
**Step 2: Handle stale handoff warning**
If `stale_warning` is true, warn the user before proceeding (stale handoffs may describe work superseded by manual changes between sessions):
```
WARNING: Handoff is from <timestamp> (>24 hours ago).
State may not reflect manual changes made since then.
Proceed with this handoff or discard it? [proceed/discard]
```
If user discards, fall to next priority level in cascade.
**Step 3: Determine action mode**
- **Quick resume** (user said "continue", "resume", or similar with no qualifiers): Skip options menu and proceed directly to Phase 4 to execute `next_action`. This optimizes for the common case where the user trusts the handoff and wants to get back to work fast.
- **Review mode** (user said "what was I doing", "where did I leave off", or asked a question): Display dashboard only, wait for user to choose what to do next
**GATE**: User has seen the dashboard. In quick resume mode, proceed to Phase 4. In review mode, wait for user direction.
### Phase 4: EXECUTE
**Goal**: Route to the next action and clean up handoff files (they are ephemeral session artifacts, not persistent state, so keeping them risks future `/resume-work` calls loading outdated context).
**Step 1: Execute next action**
Take the `next_action` from the handoff and execute it:
- If it matches a skill trigger (e.g., "run tests" -> /vitest-runner), invoke that skill via the `/do` routing system for proper agent/skill selection
- If it describes a code change, proceed with the implementation directly
- If it requires user input (e.g., "need clarification on threshold"), present the question
Carry forward all context from the handoff: decisions made, approaches rejected, gotchas to avoid. Honor previous session's findings unless circumstances have changed — reexploring rejected approaches burns context on work already done.
**Step 2: Clean up handoff files**
After the next action has been initiated (not necessarily completed — just successfully started), delete the one-shot handoff artifacts to prevent stale state:
```bash
# Remove one-shot handoff artifacts
rm -f HANDOFF.json .continue-here.md
```
If `--keep` flag was provided, skip deletion (use only for debugging).
**Step 3: Update task_plan.md if present**
If `task_plan.md` exists, update its status line to reflect that the session has resumed. The plan is the persistent record; handoff is the ephemeral session context:
```
**Status**: Resumed from handoff — executing: <next_action summary>
```
**GATE**: Next action initiated. Handoff files cleaned up. Session is now in active work mode. Note: This skill never modifies code, resets git state, or discards uncommitted changes — it only reads and deletes handoff files.
---
## Error Handling
### Error: No State Sources Found
**Cause**: No HANDOFF.json, no .continue-here.md, no task_plan.md, and git log is empty or on a fresh branch
**Solution**: Inform user: "No session state found to resume from. Use /do to start a new task, or describe what you were working on and I'll reconstruct manually."
### Error: HANDOFF.json Parse Failure
**Cause**: HANDOFF.json exists but contains invalid JSON (corrupted, partially written, manually edited badly)
**Solution**: Warn user about the parse error. Fall through to .continue-here.md if it exists, otherwise fall to task_plan.md. Do not silently ignore the error — the user should know their handoff was corrupted.
### Error: Uncommitted Files Missing
**Cause**: Handoff reports uncommitted files that no longer exist (worktree cleanup, manual deletion, git checkout)
**Solution**: Alert the user with specific file names. These changes are likely lost. The user may need to recreate them — the handoff's `context_notes` and `decisions` can help guide reconstruction.
### Error: Stale Handoff Rejected
**Cause**: User chose to discard a stale (>24h) handoff
**Solution**: Delete the stale handoff files and fall through to the next priority level in the cascade (task_plan.md or git log). Proceed with the lower-quality reconstruction.
---
## References
### Related Skills
- `pause-work` — Creates the handoff artifacts this skill consumes
- `do` — Routes next_action to appropriate agent/skill for execution
- `workflow-orchestrator` — For complex multi-phase tasks that benefit from handoff between phasesRelated Skills
worktree-agent
Mandatory rules for agents in git worktree isolation.
workflow
Structured multi-phase workflows: review, debug, refactor, deploy, create, research, and more.
workflow-help
Interactive guide to workflow system: agents, skills, routing, execution patterns.
pr-workflow
Pull request lifecycle: sync, review, fix, status, cleanup, and PR mining. Use when user wants to push changes, create a PR, check PR status, fix review comments, clean up branches after merge, or mine tribal knowledge from PR reviews. Use for "push my changes", "create a PR", "pr status", "fix PR comments", "clean up branches", "mine PRs", or "address feedback".
pause-work
Create session handoff artifacts for resumable work continuity.
x-api
Post tweets, build threads, upload media via the X API.
wordpress-uploader
WordPress REST API integration for posts and media uploads.
wordpress-live-validation
Validate published WordPress posts in browser via Playwright.
with-anti-rationalization
Anti-rationalization enforcement for maximum-rigor task execution.
voice-writer
Unified voice content generation pipeline with mandatory validation and joy-check. 8-phase pipeline: LOAD, GROUND, GENERATE, VALIDATE, REFINE, JOY-CHECK, OUTPUT, CLEANUP. Use when writing articles, blog posts, or any content that uses a voice profile. Use for "write article", "blog post", "write in voice", "generate content", "draft article", "write about".
voice-validator
Critique-and-rewrite loop for voice fidelity validation.
vitest-runner
Run Vitest tests and parse results into actionable output.