productivity / Work & communicate
wrap-resume
Reads resume-state from plan files written by /wrap and presents a picker for continuing prior sessions.
Put it to work.
Ask your agent to use wrap-resume, or let it load the skill when your task matches the description.
Use the wrap-resume skillInvocation syntax varies by agent. Use the skill name in your prompt, or your agent’s supported slash command.
About this skill
Picker for unfinished sessions. Reads plan files written by /wrap, surfaces each one's # 🔴 RESUME HERE block, and lets you pick which thread to continue.
Invocation
/wrap-resumeNo arguments. Lists every plan in $WRAP_PLANS_DIR that still has a live # 🔴 RESUME HERE block, sorted most-recent first.
What it does
- Resolves
PLANS_DIR($WRAP_PLANS_DIR→$WRAP_STATE_DIR/plans→$HOME/.wrap/plans). - Filters to plans containing a
# 🔴 RESUME HEREmarker. - Extracts
Status:,Mode:,Current task:, andImmediate next action:from each block. - Renders a numbered picker showing last-wrap timestamp, current task, and next action — with an
⚠flag on rows whereMode: EMERGENCY(context was limited when the wrap was written). - On selection, opens the chosen plan and proposes the next concrete step as an actionable question.
Pairs with
/wrap— writes the RESUME HERE blocks that/wrap-resumereads.
The two skills share a single output contract: the # 🔴 RESUME HERE block format and the plan-directory convention. Any reader that honors the same format (a personal /work skill, a team dashboard, etc.) can stand in for /wrap-resume.
When it asks before acting
- If the chosen plan's
Context source: unknown due compaction, the picker warns that origin context was lost — offer to start fresh or proceed with partial context. - If multiple plans share the same timestamp window and describe the same task, the picker asks which one you meant instead of guessing.
Error handling
- Missing plans dir — tells you
/wraphasn't been run yet in this setup. - Unreadable plan — skips that file, continues with the rest; one corrupt plan does not kill the picker.
Install
npx skills@latest add smeltery/skillsOr copy just this skill:
mkdir -p ~/.claude/skills/wrap-resume
curl -fsSL https://raw.githubusercontent.com/smeltery/skills/main/skills/productivity/wrap-resume/SKILL.md \
-o ~/.claude/skills/wrap-resume/SKILL.mdFiles
SKILL.md— canonical skill definition.
Read the full SKILL.md
/wrap-resume — Pick Up Prior Sessions
Thin companion to /wrap (name mirrors the wrap/wrap-resume pair). Reads plan files with # 🔴 RESUME HERE markers from the wrap plans directory and presents a picker so the user can continue unfinished work.
History: This skill was previously
/resume. Renamed because/resume <uuid>is a Claude Code built-in for switching conversation branches by session ID — the user-skill shadowed it. Renaming to/wrap-resumerestores the built-in and makes the wrap↔wrap-resume relationship explicit.
Plans dir resolution (shell):
STATE_DIR="${WRAP_STATE_DIR:-$HOME/.wrap}"
PLANS_DIR="${WRAP_PLANS_DIR:-$STATE_DIR/plans}"$HOME is used instead of ~ inside the parameter defaults because ~ does not reliably expand inside ${VAR:-~/...} — it expands only at the start of an unquoted word.
This skill is ONE reader of /wrap's output contract. If you have a personal or team task picker that consumes the same # 🔴 RESUME HERE format, you can use it in place of /wrap-resume — both honor the same plan files.
Steps
Locate plan files. Resolve
PLANS_DIRas above, thenls -t "$PLANS_DIR"/*.md 2>/dev/null— sorted most-recent first.Filter to resumable. For each file path (call the variable
$file):shgrep -l -- '# 🔴 RESUME HERE' "$file"Keep only files where grep found the marker.
Extract the picker fields. From each resumable plan, pull the RESUME HERE block from the
# 🔴 RESUME HEREheading down to the next top-level markdown heading (regex^#\s) OR EOF, whichever comes first. Do NOT stop at blank lines — the canonical RESUME HERE block has no blank lines, but any agent-written block may contain them and stopping on blank lines will truncate the block and miss fields. Parse:Status:lineMode:line (NORMAL or EMERGENCY; field introduced in wrap v1.0.0)Current task:lineImmediate next action:line- Last-modified timestamp of the file
Show the picker.
markdown# What should we pick up? | # | Last wrap | Current task | Next action | | --- | --- | --- | --- | | 1 | 2h ago | one-sentence task | copy from plan | | 2 | yesterday | ... | ... |If
Mode: EMERGENCYis set on a plan, flag the row (e.g., prefix the row with a⚠marker) so the user knows context was limited when that wrap was written. For older plans that predate theMode:field (wrap <1.0.0), fall back to checking forEMERGENCYin the RESUME HERE heading itself. Plan filename is available on selection — omitted from the picker to save width.On selection (user says a number):
- Read the full plan file
- Lead with "Last time: [Current task]. Next step: [Immediate next action]."
- If the plan has a
Session thread:block, surfaceOriginal intentandPending detours - Propose the specific next step as an actionable question: "Ready to [immediate next action]?"
If no resumable plans: say so —
No RESUME HERE blocks found in the plans directory. Nothing to resume.Do not invent items.
When to stop and ask
- If the chosen plan's
Context source: unknown due compaction, warn the user that the prior session couldn't capture full origin context. Offer to start fresh or proceed with partial context. - If multiple plans share the same timestamp window and describe the same task, ask which one the user means rather than guessing.
Error handling
- Missing plans dir:
${WRAP_PLANS_DIR}/ default not created yet → tell the user/wraphasn't been run yet in this setup. - Unreadable plan: skip the file, log the error, continue with the rest. One corrupt plan doesn't kill the picker.
Relationship to /wrap
/wrap writes the RESUME HERE block. /wrap-resume reads it. The two skills share the state-dir convention (WRAP_STATE_DIR) and the block format. If you fork one, fork the other, or keep the contract intact.