--- 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 ``` 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 cat git log --oneline -5 git status Fortsett fra . ════════════════════════════════════════════════════════════ Artefakt: Commit: 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-.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`)