plugins/dev/skills/create-handoff/SKILL.md
Create handoff document for passing work to another session. **ALWAYS use when** the user says 'create a handoff', 'hand this off', 'save progress for later', 'I need to stop here', or when context usage is high (>60%) during implementation and work needs to continue in a fresh session.
npx skillsauth add coalesce-labs/catalyst create-handoffInstall 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.
# Check project setup (thoughts, CLAUDE.md snippet, config)
if [[ -f "${CLAUDE_PLUGIN_ROOT}/scripts/check-project-setup.sh" ]]; then
"${CLAUDE_PLUGIN_ROOT}/scripts/check-project-setup.sh" || exit 1
fi
This command uses ticket references like PROJ-123. Replace PROJ with your Linear team's ticket
prefix:
.catalyst/config.json if availableTICKET-XXXENG-123, FEAT-456, BUG-789You are tasked with writing a handoff document to hand off your work to another agent in a new session. You will create a handoff document that is thorough, but also concise. The goal is to compact and summarize your context without losing any of the key details of what you're working on.
IMPORTANT: Document Storage Rules
thoughts/shared/ (appropriate subdirectory)thoughts/searchable/ — this is a read-only search indexCreate your file under thoughts/shared/handoffs/PROJ-XXX/YYYY-MM-DD_HH-MM-SS_description.md:
YYYY-MM-DD — today's dateHH-MM-SS — current time in 24-hour format (e.g., 13-55-22)PROJ-XXX — ticket number directory (use general if no ticket)description — brief kebab-case descriptionGet current git information for metadata (branch, commit, repository name) using git commands.
Examples:
thoughts/shared/handoffs/PROJ-123/2025-01-08_13-55-22_PROJ-123_auth-feature.mdthoughts/shared/handoffs/general/2025-01-08_13-55-22_refactor-api.mdusing the above conventions, write your document. use the defined filepath, and the following YAML frontmatter pattern. Use the metadata gathered in step 1, Structure the document with YAML frontmatter followed by content:
Use the following template structure:
---
date: [Current date and time with timezone in ISO format]
researcher: [Researcher name from thoughts status]
git_commit: [Current commit hash]
branch: [Current branch name]
repository: [Repository name]
topic: "[Feature/Task Name] Implementation Strategy"
tags: [implementation, strategy, relevant-component-names]
status: complete
last_updated: [Current date in YYYY-MM-DD format]
last_updated_by: [Researcher name]
type: handoff
source_ticket: [TICKET-ID or null]
source_plan: "[[plan-filename]]" # or null
source_research: "[[research-filename]]" # or null
---
# Handoff: {TICKET or General} - {very concise description}
## Task(s)
{description of the task(s) that you were working on, along with the status of each (completed, work
in progress, planned/discussed). If you are working on an implementation plan, make sure to call out
which phase you are on. Reference the plan and/or research documents using wiki-links (e.g.,
[[plan-filename]], [[research-filename]]), if applicable.}
## Critical References
{List any critical specification documents, architectural decisions, or design docs that must be
followed using wiki-links (e.g., [[doc-filename]]). Include only 2-3 most important references.
Leave blank if none.}
## Recent changes
{describe recent changes made to the codebase that you made in line:file syntax}
## Learnings
{describe important things that you learned - e.g. patterns, root causes of bugs, or other important
pieces of information someone that is picking up your work after you should know. consider listing
explicit file paths.}
## Artifacts
{ an exhaustive list of artifacts you produced or updated as filepaths and/or file:line references -
e.g. paths to feature documents, implementation plans, etc that should be read in order to resume
your work.}
## Action Items & Next Steps
{ a list of action items and next steps for the next agent to accomplish based on your tasks and
their statuses}
## Other Notes
{ other notes, references, or useful information - e.g. where relevant sections of the codebase are,
where relevant documents are, or other important things you learned that you want to pass on but
that don't fall into the above categories}
Run humanlayer thoughts sync to save the document. Then respond to the user with the template between
<template_response></template_response> XML tags. do NOT include the tags in your response.
<template_response> Handoff created and synced! You can resume from this handoff in a new session with the following command:
/catalyst-dev:resume-handoff path/to/handoff.md
</template_response>
for example (between <example_response></example_response> XML tags - do NOT include these tags in your actual response to the user)
<example_response> Handoff created and synced! You can resume from this handoff in a new session with the following command:
/catalyst-dev:resume-handoff thoughts/shared/handoffs/PROJ-123/2025-01-08_13-44-55_PROJ-123_create-context-compaction.md
</example_response>
/path/to/file.ext:line references that an agent can follow later when it's ready, e.g.
packages/dashboard/src/app/dashboard/page.tsx:12-24development
Migrate a single-harness repo to the dual-harness layout so both Claude Code and Codex load the same instructions and skills — AGENTS.md as the portable canonical doc, a thin CLAUDE.md `@AGENTS.md` bridge, and a `.agents/skills` dir with a `.claude/skills` symlink onto it. Use when asked to migrate to dual-harness, make this repo work in both Claude and Codex, or for agent metadata cleanup.
tools
Goal-driven senior-engineer pipeline-unstick sweep (CTL-1176 rung 3). Given the stuck/failed/needs-human set (or ONE ticket handed by the recovery router), its GOAL is to get the pipeline MOVING again — not to fix one ticket's review findings (that is phase-remediate). It runs AFTER the eyes (diagnostician evidence) and the hands (deterministic unstuck-sweep seams) have already tried, and it CONSUMES their output from a recovery-pass.json brief rather than re-diagnosing or redoing their narrow work. It acts like a senior engineer with full tool access — it resolves merge conflicts, rebases, force-pushes, merges green PRs, and re-dispatches stalled phases AUTONOMOUSLY — and escalates to the operator ONLY for a genuine value judgment / something that degrades other functionality / a real cost-benefit trade-off / a serious architecture change / an ADR conflict. On escalation it AUTHORS the operator inbox row + the push notification (executive-voiced). Dispatched as a `claude --bg` job by phase-agent-dispatch via slash command, AND invocable bare by the operator as a sweep — hence `user-invocable: true`. Ships behind CATALYST_RECOVERY_PASS (off by default — no live behavior change until shadow/enforce).
tools
Diagnose and fix Catalyst setup issues. Validates tools, database, config, OTel, direnv, and thoughts. Automatically fixes what it can — creates directories, initializes the database, sets WAL mode, runs migrations. Use for new installs, upgrades, or when something isn't working.
tools
--- name: phase-triage description: Phase agent that triages a Linear ticket — expands acronyms, classifies (feature/bug/docs/refactor/chore), identifies genuine blockers (a semantic second-pass over the backlog — NOT a prose scrape; CTL-838), estimates scope, writes triage.json, and posts a triage analysis comment to Linear. Triage completion is signaled by that comment plus the local triage.json — there is no `triaged` label. Emits phase.triage.complete.<TICKET> on success and phase.triage.fai