plugins/handoff/skills/end/SKILL.md
End session, save progress, create handoff. Triggers: wrap up, done for today, end session, save my work, save progress, close out. Runs health checks and captures resume point.
npx skillsauth add ramonclaudio/skills endInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
ultrathink
<role> Senior engineer closing a shift. Precise state capture: exact errors, specific file:line references, honest severity. Never vague, never ask the user. </role>!cat .handoff/state.json 2>/dev/null || echo "{}"
!git status -s 2>/dev/null
!git log -5 --format='%h %s' 2>/dev/null
.handoff/ if missing. Write .handoff/.gitignore with state.json and sessions/ if missing.bun.lock -> bun, package-lock.json -> npm, pnpm-lock.yaml -> pnpm, yarn.lock -> yarn, Cargo.lock -> cargo, go.sum -> go). Run build, test, lint. Record pass/fail/null for each.[{"description": "string", "ref": "hash"}]file:line action, files to read first, context.tmp.$$ then mv):
{
"severity": "READY|IN_PROGRESS|CRITICAL",
"health": {"build": "pass|fail|null", "tests": "pass|fail|null", "lint": "pass|fail|null"},
"resume": {"next": "file:line action", "files": ["string"], "context": "string"},
"done": [{"description": "string", "ref": "string"}],
"blockers": ["string"],
"watch_out_for": ["string"],
"hostname": "string",
"session_id": "string",
"timestamp": "ISO"
}
blocker: true, handoff: true) + resume task blocked by blockers (metadata: resume: true, handoff: true).HANDOFF COMPLETE
Severity: [emoji SEVERITY]
Health: build=[status] tests=[status] lint=[status]
Resume: [next action]
Safe to end session.
| Level | Condition | |-------|-----------| | CRITICAL | Build failing, prod down, security issue | | IN_PROGRESS | Tests failing, uncommitted work, mid-feature | | READY | All green, clean state |
DON'T: Skip health checks. Write vague resume ("keep working on X"). Leave READY with failing tests. DO: Exact error messages. Specific file:line in resume. Honest severity.
mv .tmp.$$ state.json) fails silently if .handoff/ doesn't exist yet. Always bootstrap the directory before writing.jq is an allowed tool but not guaranteed installed. If jq is missing, fall back to writing JSON directly from the shell or use Write.--watch, Vitest default). Always pass --watchAll=false or --run flags.session_id field is only useful for --resume on the same machine. If the user switches devices, the resume hint is misleading.tools
Search indexed reference codebases (Convex, Expo, Next.js, Better Auth, Remotion, etc) via the qmd MCP query tool. Use when looking up framework APIs, finding code examples in third-party repos, or answering questions about external libraries that aren't in the current working directory.
development
Adds a reference collection to qmd. Accepts a GitHub URL, owner/repo shorthand, or a local directory path. Auto-detects file types, sets ignore globs, indexes with AST chunking, embeds, and verifies. Use when adding a new reference codebase or local notes folder for search.
tools
--- name: techdebt description: Lightweight end-of-session tech debt sweep. Finds duplicated code, dead exports, unused deps, stale TODOs, and bloated files. Use when user asks for "tech debt", "cleanup", "dead code", "unused exports", "code sweep", or end-of-session hygiene. Do NOT use for full codebase audits (use /audit instead). argument-hint: [--dry-run] [path/to/scope] context: fork agent: general-purpose allowed-tools: - Read - Edit - Glob - Grep - Bash(git *) - Bash(wc *) -
development
Use this skill when the user asks to orchestrate a team, use multiple agents, or parallelize work across Claude Code sessions. Decomposes tasks, spawns teammates, and coordinates execution.