---
name: graceful-handoff
description: Produser handoff-artefakt, commit+push, og copy-paste-prompt for neste sesjon. Bruk når du nærmer deg 60-70% kontekst og må fortsette arbeidet i en ny sesjon uten tap.
argument-hint: "[topic-slug] [--no-commit] [--dry-run]"
disable-model-invocation: true
model: claude-sonnet-4-6
allowed-tools: Bash(git:*) Bash(jq:*) Bash(node:*) Bash(find:*) Bash(pwd:*) Read Write Glob
---

# Graceful Handoff — sesjonsoverlevering v2.0

Orkestrerer JSON-pipeline-skriptet og fyller copy-paste-template-en for neste sesjon. Selve pipelinen (state-deteksjon, classification, fil-skriving, commit, push) er deterministisk og lever i `scripts/handoff-pipeline.mjs`. Denne skill-en er en tynn wrapper.

**Tidsbudsjett:** Hele kjøringen skal ligge under 60 sekunder reell tid. Bruker er typisk på 60-70% kontekst når de trigger dette — ingen Agent-delegering, ingen WebSearch.

## Hvordan kjøres

1. **Parse `$ARGUMENTS`** (kombinert streng). Støtt flag i vilkårlig rekkefølge.
   - `[topic-slug]` — kebab-case, styrer filnavnet
   - `--no-commit` — hopp over commit/push, bruker håndterer manuelt
   - `--dry-run` — print hva som ville skjedd, ingen filer/git
   - `--no-push` — commit OK men ikke push (Stop hook bruker dette i auto-eksekvering)
   - `--auto` — non-interactive, auto-Y på commit-bekreftelse (kun for hooks)
   - `--non-interactive` — uten `--auto`: feil; med `--auto`: kjør uten prompts

2. **Kjør pipeline-skriptet:**
   ```bash
   node ${CLAUDE_PLUGIN_ROOT}/scripts/handoff-pipeline.mjs <args>
   ```

3. **Parse JSON-output** fra stdout. Forventet schema:
   ```json
   {
     "handoff_type": "multi-sesjon | plugin-arbeid | enkelt-oppgave",
     "write_dir": "/abs/path",
     "artifact_path": "/abs/path/NEXT-SESSION-...",
     "next_steps": ["..."],
     "git_status": { "branch": "...", "dirty": true, "ahead": 2 },
     "commit_message": "...",
     "actions_taken": ["wrote artifact", "committed", "pushed"],
     "errors": []
   }
   ```

4. **Hvis `errors[]` non-empty:** rapporter feilene til bruker, ikke fortsett. Foreslå manuelle skritt fra `next_steps`.

5. **Hvis interaktiv (default):** Skriptet skriver commit-bekreftelses-prompten til stderr. Modellen leser stderr-output og presenterer Y/n-valget til bruker via AskUserQuestion. Send svaret tilbake til skriptet via stdin. (NB: I denne skill-konteksten kan modellen også vise commit-meldingen direkte og spørre — fleksibelt.)

6. **Når ferdig:** Print copy-paste-prompt fra `next_steps` JSON til bruker:

   ```
   ════════════════════════════════════════════════════════════
   NESTE SESJON — copy-paste til ny Claude:
   ════════════════════════════════════════════════════════════

   cd <absolute-WRITE_DIR>
   cat <NEXT-SESSION-filnavn>
   git log --oneline -5
   git status

   Fortsett fra <konkret neste handling — én setning>.

   ════════════════════════════════════════════════════════════
   Artefakt: <full sti til NEXT-SESSION-filen>
   Commit:   <siste SHA eller "ingen endringer">
   Push:     <"pushet til Forgejo" eller "skippet (flag / ingenting)">
   ════════════════════════════════════════════════════════════
   ```

## Når brukes den

- **Manuelt:** kjør `/graceful-handoff` selv ved 60-70% kontekst
- **Automatisk:** Stop hook kaller `handoff-pipeline.mjs --auto --no-push` ved estimert ≥70%. Skill-en invokeres IKKE i auto-modus — hook-en kaller skriptet direkte for å bevare `disable-model-invocation: true`.

## Hva blir skrevet

- `NEXT-SESSION-PROMPT.local.md` (eller `NEXT-SESSION-<slug>.local.md`) i riktig WRITE_DIR
- `REMEMBER.md` oppdatert hvis den finnes
- `TODO.md` oppdatert hvis den finnes
- Git commit + push (med mindre `--no-commit` eller `--no-push`)

## Push-policy

- Direkte push til `main` på Forgejo er pre-autorisert
- Aldri GitHub — kun Forgejo (`git.fromaitochitta.com`)
- Pre-commit hooks respekteres uten `--no-verify`

## Begrensninger (v2.0)

- Auto-eksekvering ved kontekst-terskel er approksimasjon basert på transcript-størrelse, ikke Claude's reelle kontekst-måling. Estimat kan avvike ±10% — terskel satt konservativt til 70%.
- statusLine-plassering i `hooks/hooks.json` er antakelse; smoke-test før release.
- `disable-model-invocation: true` har en åpen issue (#26251) som potensielt kan blokkere user-invocation. Verifiser med smoke-test.

## Feilsøking

- Pipeline-skriptet feiler: kjør med `--dry-run` for å se hva det ville gjort
- Git-state uvanlig (detached HEAD, ingen remote): pipeline returnerer `errors[]`, ikke crash
- Stop hook trigger for tidlig/sent: terskel kan justeres i `hooks/scripts/stop-context-monitor.mjs` (look for `0.70`)
