Handoff
Use this skill to preserve task state across manual context resets with a
structured handoff artifact. This is the preferred path for long-running
engineering work when exact status, decisions, risks, and next actions matter
more than keeping the current thread alive.
Deterministic Resolver
Before deciding which handoff file to read or write, run the local resolver
script first so path selection does not depend on model judgment.
Path resolution rule:
- Resolve
scripts/handoff.py relative to this installed SKILL.md, not
relative to the active repository root.
- Do not try
python scripts/handoff.py ... from the project root unless that
repository really contains its own copy of the script.
- Pass the active project path with
--project-root. If repo/progress/
exists only in a parent workspace directory, the resolver should use the
nearest ancestor that already contains it.
- Preferred invocation shape:
cd <installed-handoff-skill-dir> && python scripts/handoff.py ... --project-root <active-repo-root>
- or call the installed script by absolute path directly.
Preferred command:
cd <installed-handoff-skill-dir> && python scripts/handoff.py <write|read> <topic-or-existing-file> --project-root <active-repo-root>
Fallback when python is unavailable:
cd <installed-handoff-skill-dir> && python3 scripts/handoff.py <write|read> [target] --project-root <active-repo-root>
The script is the source of truth for:
- the handoff directory:
repo/progress/handoffs/
- whether the requested project path should stay in place or resolve upward to
a parent workspace that already owns
repo/progress/
- whether
write creates a new file or updates an existing one
- which file
read should load by default
- whether the provided project root accidentally points at the installed skill
directory instead of the active repository
scripts/git_changes.py is the source of truth for changed files, line
ranges, and diff/content snippets that should appear in the handoff body
scripts/session_changes.py is the fallback formatter when git evidence is
unavailable, clean, or does not cover important changes already completed in
the current session
If the script result conflicts with intuition, trust the script.
Critical path rule:
- The script path belongs to the installed
handoff skill.
--project-root must point to the active project path, not the skill
installation directory.
- If implementation work happens in a nested subproject but
repo/progress/
belongs to a parent workspace, passing the subproject path is valid; the
resolver should lift to the nearest matching ancestor automatically.
- Do not treat
~/.claude/skills/handoff or any similar install path as the
project root.
- Do not treat the active repository root as the location of
scripts/handoff.py unless the repository explicitly contains that file.
Core Position
Manual handoff is not a total replacement for automatic compact.
- Use handoff when the task is long-running, multi-file, multi-phase, or
the current thread has accumulated noise, dead branches, or partial analysis.
- Use compact only when continuity is lightweight and the thread itself is
still the best container for context.
The point of handoff is to reset into a cleaner context while keeping a
reviewable, explicit, file-backed artifact.
Language Adaptation
The handoff document should be written in the same language as the current
conversation/interaction:
| Conversation Language |
Handoff Document Language |
| 中文 |
中文 |
| English |
English |
| 日本語 |
日本語 |
| Other |
Match conversation language |
Implementation rule: Detect the language of the current conversation from
system context (user's input language, conversation history). Write all handoff
content in that language. Section headers, field names, and body text should all
be in the detected language.
Modes
Write Mode
Create or update a handoff document before reset.
Default output path:
{project}/repo/progress/handoffs/YYYY-MM-DD-HHMM-<topic>.md
File lifecycle:
- Default to creating a new handoff file for each real checkpoint, reset point,
or milestone pause. Treat each file as a timestamped snapshot.
- Update an existing handoff file only when the user explicitly names that file
and asks to continue or revise it.
- Otherwise, always create a new handoff file instead of inferring which older
file should be overwritten.
- Older handoff files are part of the project’s development trail and may be
used later for review, audit, or reconstructing why earlier decisions were
made.
Trigger when:
- approaching context limits
- preparing for a manual reset
- switching models, IDEs, or operator sessions
- ending a milestone with meaningful state to resume later
- the thread contains too much exploration noise for compact to be reliable
Execution steps:
- Run the installed resolver script first, from the installed skill directory
or by absolute script path.
- Example:
cd <installed-handoff-skill-dir> && python scripts/handoff.py write <topic-or-existing-file> --project-root <active-repo-root>
- Run the installed change-summary script before writing the handoff body:
cd <installed-handoff-skill-dir> && python scripts/git_changes.py --project-root <active-repo-root>
- Use the returned JSON
path from scripts/handoff.py as the only valid
handoff target.
- If
scripts/git_changes.py returns evidence_source=git with meaningful
file changes, use its returned JSON markdown to populate the
Changed Files section.
- If
scripts/git_changes.py reports git-unavailable, a clean tree, or
misses important changes that already happened in this session, build a
session file manifest from the current conversation and run:
cd <installed-handoff-skill-dir> && python scripts/session_changes.py
Pass JSON on stdin with files[].path, status, summary, optional
line_ranges, optional snippets, and confidence.
- In session-derived mode, clearly mark confidence and do not claim exact line
ranges unless they were directly verified.
- Inspect the current goal, active branch, working tree state, files touched,
commands run, test status, and remaining work.
- Separate facts from assumptions. If something was not verified, say so.
- Write a concise, structured handoff into the resolved file using
references/handoff-template.md.
- Record exact file paths, decisions, blockers, risks, failed commands,
partial work, and the next recommended action.
- Tell the user exactly which handoff file was written and should be read
after reset.
Mandatory rules:
- Prefer explicit state over conversational recap.
- Write what the next session needs to continue work immediately.
- Trust the resolver script for file targeting instead of inferring paths.
- Always provide a topic slug for write mode. The resolver script will return a
"topic_required" error if the topic is missing.
- Include branch and working tree state.
- The
Changed Files section MUST be populated from scripts/git_changes.py
output (or scripts/session_changes.py when git evidence is insufficient).
Never write file change entries from memory.
- If
scripts/git_changes.py reports a clean tree or unavailable git, switch
to session-derived evidence whenever the current session still touched files
that matter for resume.
- If neither git evidence nor session-derived evidence exists, say that
explicitly instead of omitting the section.
- Mark session-derived file entries with confidence and approximate ranges when
precision is not directly verified.
- Include verification status: passed, failed, or not run.
- Include a short “resume order” so the next session knows where to start.
Do not:
- dump the raw chat transcript
- hide uncertainty behind confident prose
- say tests passed if they were not rerun
- omit blockers, broken attempts, or risky assumptions
- present session-derived file edits as exact git-verified diff evidence
- write a handoff that lacks a concrete next action
Session End Checklist (MANDATORY)
Before finalizing the handoff, confirm:
Read Mode
Resume from a handoff document after reset.
Trigger when:
- a fresh session needs to continue prior work
- the user provides a handoff file path
- the task was previously paused with a saved handoff artifact
Execution steps:
- Run the installed resolver script first, from the installed skill directory
or by absolute script path.
- Example:
cd <installed-handoff-skill-dir> && python scripts/handoff.py read [handoff-file] --project-root <active-repo-root>
- If the script returns
no_handoff_found, specified_handoff_not_found, or
invalid_project_root,
report that exact state instead of guessing alternatives.
- Read the returned JSON
path and use that file as the primary continuity
artifact.
- Restate the current goal, verified status, open risks, and immediate next
actions in a few lines.
- Start from the files, commands, and checkpoints named in the handoff before
doing broad repo exploration.
- If the handoff conflicts with the current working tree or branch state, call
that out immediately.
- Continue implementation from the recorded next action instead of re-planning
the entire project.
Mandatory rules:
- Treat the handoff as the primary continuity artifact.
- Treat the resolver script output as the primary source of file selection.
- Verify critical assumptions against the current repo state before acting.
- Prefer reading the referenced files directly before widening search.
- Surface stale or contradictory handoffs instead of silently trusting them.
- Use older handoff files only when the user points to them or when the latest
handoff clearly depends on earlier checkpoints for historical context.
Do not:
- ignore the handoff and start broad exploration first
- assume the repo is unchanged since the handoff was written
- re-summarize everything if the handoff already provides a good resume path
Handoff Quality Bar
A good handoff should answer these questions quickly:
- What is the exact task and current phase?
- What has already been completed?
- Which files matter first?
- What commands or tests were run, and what happened?
- What is blocked, risky, or still unknown?
- What should the next session do first?
If the next session still needs to reconstruct basic status from scratch, the
handoff is not good enough.
Good vs Bad Examples
Good Handoff
# Handoff: User auth refactor
## Task
- Objective: Refactor auth module to support OAuth2
- Current phase: Core implementation 70% done
- Requested outcome: Complete auth flow by EOD
## Repository State
- Repo: d:/codes/myapp
- Branch: feat/oauth-refactor
- Working tree: 3 modified files staged
- Relevant commit: a3f2b1c "add auth base structure"
## Current Status
- Completed: Token generation, user lookup
- In progress: OAuth callback handler
- Not started: Integration tests, docs
## Key Files
- src/auth/token.ts: Token generation logic
- src/auth/oauth.ts: OAuth flow (work here next)
- src/db/user.ts: User model
## Decisions Already Made
- Decision: Use JWT for tokens, not sessions
Reason: Stateless, better for API auth
- Decision: Store OAuth tokens encrypted
Reason: Security requirement
## Verification
- Commands run:
- npm test -> passed
- npm run lint -> passed
- Tests: 12/15 passing for auth module
## Risks And Blockers
- Risk: OAuth callback URL may need ngrok for dev
Impact: Medium
Mitigation: Already have ngrok config ready
## Resume Order
1. Read src/auth/oauth.ts and confirm callback handler structure
2. Run npm test to verify current state
3. Implement callback handler in oauth.ts
## Next Action
- Implement OAuth callback handler in src/auth/oauth.ts
Bad Handoff (Don't Do This)
# Handoff: Auth work
## Task
Working on auth, it's mostly done but some stuff left.
## Current Status
Did some auth stuff, might need more tests.
## Next Action
Keep working on auth.
| Aspect |
Good |
Bad |
| Specificity |
Exact file paths |
Vague "auth stuff" |
| Verification |
Test results listed |
Not mentioned |
| Resume path |
Clear 1-2-3 steps |
"keep working" |
| State |
Branch, working tree |
Unknown |
| Blockers |
Explicit with mitigation |
Hidden |
Recommended Structure
Always follow the template in references/handoff-template.md.
The essential sections are:
- task and objective
- current status
- branch and working tree state
- changed files with line ranges and snippets from
scripts/git_changes.py
- session-derived change evidence when git is unavailable, clean, or incomplete
- key files and why they matter
- decisions already made
- verification summary
- blockers and risks
- next actions
Compact Vs Handoff
Read references/handoff-vs-compact.md when:
- the user asks whether handoff is better than compact
- you need to decide whether to write a handoff now
- you need language for explaining the tradeoff
Short version:
- Compact keeps continuity inside the thread.
- Handoff externalizes continuity into a file and expects a reset.
- For complex engineering work, handoff is often safer because it is explicit,
inspectable, and easier to validate before resuming.
References
Read only as needed:
scripts/handoff.py
scripts/git_changes.py
scripts/session_changes.py
references/handoff-template.md
references/handoff-vs-compact.md
Boundaries
- Focus on preserving state and resumability, not on implementing new feature work inside the handoff itself.
- Prefer explicit status capture over speculative future planning.
- Do not replace a normal compact or active implementation flow unless handoff is actually needed.
When NOT to Use
Skip handoff when:
- the task is short and can be completed in the current session without a context reset
- compact (automatic context compression) is sufficient to keep the thread usable
- there is no meaningful implementation state to preserve (e.g., purely conversational Q&A)
- the working tree is clean and no decisions, partial work, or blockers need to be recorded
- the next session operator is the same person continuing immediately with full recall
Escalation Rules
Pause and ask the owner before:
- overwriting an existing handoff artifact with materially different state
- choosing handoff instead of compact when thread continuity is still sufficient
- marking uncertain implementation details as confirmed facts
Final Output Contract (MANDATORY)
Every use of this skill should end with:
Skill Fit - why a handoff artifact is needed now
Primary Deliverable - handoff path and captured status summary
Execution Evidence - resolver result, changed-files summary, session
evidence fallback when used, files written, and state included
Risks / Open Questions - missing evidence, pending checks, or resume hazards
Next Action - the exact resume instruction or next operator step
1---2name: handoff3description: Create and resume structured manual session handoffs for long-running development work. Use when approaching context limits, before manual reset, before switching models or IDEs, after a milestone, or when automatic compact would lose important implementation state.4---56# Handoff78Use this skill to preserve task state across manual context resets with a9structured handoff artifact. This is the preferred path for long-running10engineering work when exact status, decisions, risks, and next actions matter11more than keeping the current thread alive.1213## Deterministic Resolver1415Before deciding which handoff file to read or write, run the local resolver16script first so path selection does not depend on model judgment.1718Path resolution rule:1920- Resolve `scripts/handoff.py` relative to this installed `SKILL.md`, not21 relative to the active repository root.22- Do not try `python scripts/handoff.py ...` from the project root unless that23 repository really contains its own copy of the script.24- Pass the active project path with `--project-root`. If `repo/progress/`25 exists only in a parent workspace directory, the resolver should use the26 nearest ancestor that already contains it.27- Preferred invocation shape:28 - `cd <installed-handoff-skill-dir> && python scripts/handoff.py ... --project-root <active-repo-root>`29 - or call the installed script by absolute path directly.3031Preferred command:3233```bash34cd <installed-handoff-skill-dir> && python scripts/handoff.py <write|read> <topic-or-existing-file> --project-root <active-repo-root>35```3637Fallback when `python` is unavailable:3839```bash40cd <installed-handoff-skill-dir> && python3 scripts/handoff.py <write|read> [target] --project-root <active-repo-root>41```4243The script is the source of truth for:4445- the handoff directory: `repo/progress/handoffs/`46- whether the requested project path should stay in place or resolve upward to47 a parent workspace that already owns `repo/progress/`48- whether `write` creates a new file or updates an existing one49- which file `read` should load by default50- whether the provided project root accidentally points at the installed skill51 directory instead of the active repository52- `scripts/git_changes.py` is the source of truth for changed files, line53 ranges, and diff/content snippets that should appear in the handoff body54- `scripts/session_changes.py` is the fallback formatter when git evidence is55 unavailable, clean, or does not cover important changes already completed in56 the current session5758If the script result conflicts with intuition, trust the script.5960Critical path rule:6162- The script path belongs to the installed `handoff` skill.63- `--project-root` must point to the active project path, not the skill64 installation directory.65- If implementation work happens in a nested subproject but `repo/progress/`66 belongs to a parent workspace, passing the subproject path is valid; the67 resolver should lift to the nearest matching ancestor automatically.68- Do not treat `~/.claude/skills/handoff` or any similar install path as the69 project root.70- Do not treat the active repository root as the location of71 `scripts/handoff.py` unless the repository explicitly contains that file.7273## Core Position7475Manual handoff is not a total replacement for automatic compact.7677- Use **handoff** when the task is long-running, multi-file, multi-phase, or78 the current thread has accumulated noise, dead branches, or partial analysis.79- Use **compact** only when continuity is lightweight and the thread itself is80 still the best container for context.8182The point of handoff is to reset into a cleaner context while keeping a83reviewable, explicit, file-backed artifact.8485## Language Adaptation8687The handoff document should be written in the same language as the current88conversation/interaction:8990| Conversation Language | Handoff Document Language |91|-----------------------|-----------------------------|92| 中文 | 中文 |93| English | English |94| 日本語 | 日本語 |95| Other | Match conversation language |9697**Implementation rule**: Detect the language of the current conversation from98system context (user's input language, conversation history). Write all handoff99content in that language. Section headers, field names, and body text should all100be in the detected language.101102## Modes103104### Write Mode105106Create or update a handoff document before reset.107108Default output path:109110- `{project}/repo/progress/handoffs/YYYY-MM-DD-HHMM-<topic>.md`111112File lifecycle:113114- Default to creating a new handoff file for each real checkpoint, reset point,115 or milestone pause. Treat each file as a timestamped snapshot.116- Update an existing handoff file only when the user explicitly names that file117 and asks to continue or revise it.118- Otherwise, always create a new handoff file instead of inferring which older119 file should be overwritten.120- Older handoff files are part of the project’s development trail and may be121 used later for review, audit, or reconstructing why earlier decisions were122 made.123124Trigger when:125126- approaching context limits127- preparing for a manual reset128- switching models, IDEs, or operator sessions129- ending a milestone with meaningful state to resume later130- the thread contains too much exploration noise for compact to be reliable131132Execution steps:1331341. Run the installed resolver script first, from the installed skill directory135 or by absolute script path.1362. Example:137 `cd <installed-handoff-skill-dir> && python scripts/handoff.py write <topic-or-existing-file> --project-root <active-repo-root>`1383. Run the installed change-summary script before writing the handoff body:139 `cd <installed-handoff-skill-dir> && python scripts/git_changes.py --project-root <active-repo-root>`1404. Use the returned JSON `path` from `scripts/handoff.py` as the only valid141 handoff target.1425. If `scripts/git_changes.py` returns `evidence_source=git` with meaningful143 file changes, use its returned JSON `markdown` to populate the144 `Changed Files` section.1456. If `scripts/git_changes.py` reports `git-unavailable`, a clean tree, or146 misses important changes that already happened in this session, build a147 session file manifest from the current conversation and run:148 `cd <installed-handoff-skill-dir> && python scripts/session_changes.py`149 Pass JSON on stdin with `files[].path`, `status`, `summary`, optional150 `line_ranges`, optional `snippets`, and `confidence`.1517. In session-derived mode, clearly mark confidence and do not claim exact line152 ranges unless they were directly verified.1538. Inspect the current goal, active branch, working tree state, files touched,154 commands run, test status, and remaining work.1559. Separate facts from assumptions. If something was not verified, say so.15610. Write a concise, structured handoff into the resolved file using157 `references/handoff-template.md`.15811. Record exact file paths, decisions, blockers, risks, failed commands,159 partial work, and the next recommended action.16012. Tell the user exactly which handoff file was written and should be read161 after reset.162163Mandatory rules:164165- Prefer explicit state over conversational recap.166- Write what the next session needs to continue work immediately.167- Trust the resolver script for file targeting instead of inferring paths.168- Always provide a topic slug for write mode. The resolver script will return a169 `"topic_required"` error if the topic is missing.170- Include branch and working tree state.171- The `Changed Files` section MUST be populated from `scripts/git_changes.py`172 output (or `scripts/session_changes.py` when git evidence is insufficient).173 Never write file change entries from memory.174- If `scripts/git_changes.py` reports a clean tree or unavailable git, switch175 to session-derived evidence whenever the current session still touched files176 that matter for resume.177- If neither git evidence nor session-derived evidence exists, say that178 explicitly instead of omitting the section.179- Mark session-derived file entries with confidence and approximate ranges when180 precision is not directly verified.181- Include verification status: passed, failed, or not run.182- Include a short “resume order” so the next session knows where to start.183184Do not:185186- dump the raw chat transcript187- hide uncertainty behind confident prose188- say tests passed if they were not rerun189- omit blockers, broken attempts, or risky assumptions190- present session-derived file edits as exact git-verified diff evidence191- write a handoff that lacks a concrete next action192193### Session End Checklist (MANDATORY)194195Before finalizing the handoff, confirm:196197- [ ] **Environment clean**: No uncommitted changes that break the build198- [ ] **Changed files captured**: File paths, line ranges, and snippets are in199 the handoff when changes exist200- [ ] **Committed files captured**: If commits were made during this session,201 they appear in the Changed Files section with status committed-today202- [ ] **Fallback used when needed**: If git was unavailable or clean, the203 handoff still records session-derived touched files when relevant204- [ ] **Tests run**: At least basic sanity tests executed, results recorded205- [ ] **Errors documented**: Any known failures or TODOs are in the handoff206- [ ] **Next action clear**: The next session knows exactly what to do first207- [ ] **Git status**: Working tree state captured (staged/unstaged/commit)208209### Read Mode210211Resume from a handoff document after reset.212213Trigger when:214215- a fresh session needs to continue prior work216- the user provides a handoff file path217- the task was previously paused with a saved handoff artifact218219Execution steps:2202211. Run the installed resolver script first, from the installed skill directory222 or by absolute script path.2232. Example:224 `cd <installed-handoff-skill-dir> && python scripts/handoff.py read [handoff-file] --project-root <active-repo-root>`2253. If the script returns `no_handoff_found`, `specified_handoff_not_found`, or226 `invalid_project_root`,227 report that exact state instead of guessing alternatives.2284. Read the returned JSON `path` and use that file as the primary continuity229 artifact.2305. Restate the current goal, verified status, open risks, and immediate next231 actions in a few lines.2326. Start from the files, commands, and checkpoints named in the handoff before233 doing broad repo exploration.2347. If the handoff conflicts with the current working tree or branch state, call235 that out immediately.2368. Continue implementation from the recorded next action instead of re-planning237 the entire project.238239Mandatory rules:240241- Treat the handoff as the primary continuity artifact.242- Treat the resolver script output as the primary source of file selection.243- Verify critical assumptions against the current repo state before acting.244- Prefer reading the referenced files directly before widening search.245- Surface stale or contradictory handoffs instead of silently trusting them.246- Use older handoff files only when the user points to them or when the latest247 handoff clearly depends on earlier checkpoints for historical context.248249Do not:250251- ignore the handoff and start broad exploration first252- assume the repo is unchanged since the handoff was written253- re-summarize everything if the handoff already provides a good resume path254255## Handoff Quality Bar256257A good handoff should answer these questions quickly:258259- What is the exact task and current phase?260- What has already been completed?261- Which files matter first?262- What commands or tests were run, and what happened?263- What is blocked, risky, or still unknown?264- What should the next session do first?265266If the next session still needs to reconstruct basic status from scratch, the267handoff is not good enough.268269## Good vs Bad Examples270271### Good Handoff272273```md274# Handoff: User auth refactor275276## Task277- Objective: Refactor auth module to support OAuth2278- Current phase: Core implementation 70% done279- Requested outcome: Complete auth flow by EOD280281## Repository State282- Repo: d:/codes/myapp283- Branch: feat/oauth-refactor284- Working tree: 3 modified files staged285- Relevant commit: a3f2b1c "add auth base structure"286287## Current Status288- Completed: Token generation, user lookup289- In progress: OAuth callback handler290- Not started: Integration tests, docs291292## Key Files293- src/auth/token.ts: Token generation logic294- src/auth/oauth.ts: OAuth flow (work here next)295- src/db/user.ts: User model296297## Decisions Already Made298- Decision: Use JWT for tokens, not sessions299 Reason: Stateless, better for API auth300- Decision: Store OAuth tokens encrypted301 Reason: Security requirement302303## Verification304- Commands run:305 - npm test -> passed306 - npm run lint -> passed307- Tests: 12/15 passing for auth module308309## Risks And Blockers310- Risk: OAuth callback URL may need ngrok for dev311 Impact: Medium312 Mitigation: Already have ngrok config ready313314## Resume Order3151. Read src/auth/oauth.ts and confirm callback handler structure3162. Run npm test to verify current state3173. Implement callback handler in oauth.ts318319## Next Action320- Implement OAuth callback handler in src/auth/oauth.ts321```322323### Bad Handoff (Don't Do This)324325```md326# Handoff: Auth work327328## Task329Working on auth, it's mostly done but some stuff left.330331## Current Status332Did some auth stuff, might need more tests.333334## Next Action335Keep working on auth.336```337338| Aspect | Good | Bad |339|--------------|--------------------------|--------------------|340| Specificity | Exact file paths | Vague "auth stuff" |341| Verification | Test results listed | Not mentioned |342| Resume path | Clear 1-2-3 steps | "keep working" |343| State | Branch, working tree | Unknown |344| Blockers | Explicit with mitigation | Hidden |345346## Recommended Structure347348Always follow the template in `references/handoff-template.md`.349350The essential sections are:351352- task and objective353- current status354- branch and working tree state355- changed files with line ranges and snippets from `scripts/git_changes.py`356- session-derived change evidence when git is unavailable, clean, or incomplete357- key files and why they matter358- decisions already made359- verification summary360- blockers and risks361- next actions362363## Compact Vs Handoff364365Read `references/handoff-vs-compact.md` when:366367- the user asks whether handoff is better than compact368- you need to decide whether to write a handoff now369- you need language for explaining the tradeoff370371Short version:372373- **Compact** keeps continuity inside the thread.374- **Handoff** externalizes continuity into a file and expects a reset.375- For complex engineering work, handoff is often safer because it is explicit,376 inspectable, and easier to validate before resuming.377378## References379380Read only as needed:381382- `scripts/handoff.py`383- `scripts/git_changes.py`384- `scripts/session_changes.py`385- `references/handoff-template.md`386- `references/handoff-vs-compact.md`387388## Boundaries389390- Focus on preserving state and resumability, not on implementing new feature work inside the handoff itself.391- Prefer explicit status capture over speculative future planning.392- Do not replace a normal compact or active implementation flow unless handoff is actually needed.393394## When NOT to Use395396Skip handoff when:397398- the task is short and can be completed in the current session without a context reset399- compact (automatic context compression) is sufficient to keep the thread usable400- there is no meaningful implementation state to preserve (e.g., purely conversational Q&A)401- the working tree is clean and no decisions, partial work, or blockers need to be recorded402- the next session operator is the same person continuing immediately with full recall403404## Escalation Rules405406Pause and ask the owner before:407408- overwriting an existing handoff artifact with materially different state409- choosing handoff instead of compact when thread continuity is still sufficient410- marking uncertain implementation details as confirmed facts411412## Final Output Contract (MANDATORY)413414Every use of this skill should end with:4154161. `Skill Fit` - why a handoff artifact is needed now4172. `Primary Deliverable` - handoff path and captured status summary4183. `Execution Evidence` - resolver result, changed-files summary, session419 evidence fallback when used, files written, and state included4204. `Risks / Open Questions` - missing evidence, pending checks, or resume hazards4215. `Next Action` - the exact resume instruction or next operator step