feat(graceful-handoff): 2.0 — migrate to skills/ with disable-model-invocation [skip-docs]
Step 1 of v2.0 plan. Hard cut from commands/ to skills/ per Anthropic recommendation for new plugins. Frontmatter sets disable-model-invocation: true and pins model: claude-sonnet-4-6. Docs (README, CLAUDE.md, root README) deferred to Step 9 per plan.
This commit is contained in:
parent
65c9242160
commit
1a65d8e4d5
12 changed files with 331 additions and 355 deletions
98
plugins/graceful-handoff/skills/graceful-handoff/SKILL.md
Normal file
98
plugins/graceful-handoff/skills/graceful-handoff/SKILL.md
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
---
|
||||
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`)
|
||||
Loading…
Add table
Add a link
Reference in a new issue