feat(graceful-handoff): initial plugin with /graceful-handoff command
New plugin that produces a complete session handoff in under 60s: NEXT-SESSION artifact, commit+push, and copy-paste prompt for next session. Built for context-constrained models like Opus 4.7 where sessions fill fast. - Single declarative command, no hooks/agents/skills - Detects handoff type: multi-session / plugin-work / single-task - Default filename NEXT-SESSION-PROMPT.local.md; slug-override - Flags: --no-commit, --dry-run - Auto-generated Conventional Commits message from git diff --stat - Respects pre-commit hooks (secrets, pathguard) — never bypasses Also: add *.local.md to root .gitignore (existing NEXT-SESSION files were untracked but not ignored) and list plugin in marketplace README + CLAUDE.md per docs-convention.
This commit is contained in:
parent
f2080adf35
commit
b9269f853d
9 changed files with 676 additions and 0 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -2,6 +2,7 @@
|
|||
REMEMBER.md
|
||||
TODO.md
|
||||
ROADMAP.md
|
||||
*.local.md
|
||||
|
||||
# Per-plugin session directories (plans, research, execution progress)
|
||||
plugins/*/.claude/
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ Open-source Claude Code plugin marketplace. Solo project by Kjell Tore Guttormse
|
|||
plugins/
|
||||
ai-psychosis/ v1.0.0 — Interaction awareness (sycophancy, reinforcement loops)
|
||||
config-audit/ v3.1.0 — Configuration intelligence (health, opportunities, auto-fix, whats-active)
|
||||
graceful-handoff/ v1.0.0 — Session handoff in <60s (NEXT-SESSION artifact + commit+push + copy-paste prompt)
|
||||
linkedin-thought-leadership/ v1.2.0 — LinkedIn content pipeline + analytics
|
||||
llm-security/ v6.0.0 — Security scanning, auditing, threat modeling
|
||||
ms-ai-architect/ v1.8.0 — Microsoft AI architecture (Cosmo Skyberg persona)
|
||||
|
|
|
|||
20
README.md
20
README.md
|
|
@ -119,6 +119,26 @@ Research-informed thresholds. Alerts are progressive and never blocking. Privacy
|
|||
|
||||
---
|
||||
|
||||
### [Graceful Handoff](plugins/graceful-handoff/) `v1.0.0`
|
||||
|
||||
Session handoff in under 60 seconds. Built for context-constrained models like Opus 4.7 where sessions fill fast.
|
||||
|
||||
When you hit 60-70% context and have to start a new session, three things usually get rushed or forgotten: summarizing state, committing finished work, and writing a continuation prompt. `/graceful-handoff` does all three in one step.
|
||||
|
||||
- **Auto-detect handoff type** — multi-session (active ultraplan project), plugin-work (inside a marketplace plugin), or single-task (fallback)
|
||||
- **Writes `NEXT-SESSION-PROMPT.local.md`** — 7-section artifact (why, status, how to continue, push-policy, verification, gotchas) matching the established pattern in llm-security and config-audit
|
||||
- **Auto-commit + push** — generates Conventional Commits message from `git diff --stat`, respects pre-commit hooks (secrets, pathguard), pushes to Forgejo. `--no-commit` skips
|
||||
- **Copy-paste prompt for next session** — the critical output, always printed even if everything else fails
|
||||
- **No subagents, no web** — entirely inline in the main session, under 60 seconds budget
|
||||
|
||||
Key command: `/graceful-handoff [topic-slug] [--no-commit] [--dry-run]`
|
||||
|
||||
1 command · 0 hooks · 0 agents · declarative markdown
|
||||
|
||||
→ [Full documentation](plugins/graceful-handoff/README.md)
|
||||
|
||||
---
|
||||
|
||||
### [MS AI Architect — Azure AI and Microsoft Foundry](plugins/ms-ai-architect/) `v1.8.0` `🇳🇴 Norwegian`
|
||||
|
||||
Microsoft AI solution architecture guidance for Norwegian public sector and enterprise.
|
||||
|
|
|
|||
19
plugins/graceful-handoff/.claude-plugin/plugin.json
Normal file
19
plugins/graceful-handoff/.claude-plugin/plugin.json
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"name": "graceful-handoff",
|
||||
"version": "1.0.0",
|
||||
"description": "Produce session-handoff artifacts, commit and push pending work, and print a copy-paste prompt for the next session. Designed for context-constrained models like Opus 4.7 where sessions fill fast.",
|
||||
"author": {
|
||||
"name": "Kjell Tore Guttormsen"
|
||||
},
|
||||
"auto_discover": true,
|
||||
"license": "MIT",
|
||||
"repository": "https://git.fromaitochitta.com/open/ktg-plugin-marketplace",
|
||||
"keywords": [
|
||||
"session",
|
||||
"handoff",
|
||||
"context-management",
|
||||
"opus-4.7",
|
||||
"git",
|
||||
"workflow"
|
||||
]
|
||||
}
|
||||
24
plugins/graceful-handoff/CHANGELOG.md
Normal file
24
plugins/graceful-handoff/CHANGELOG.md
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
# Changelog
|
||||
|
||||
All notable changes to graceful-handoff are documented here.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
||||
|
||||
## [1.0.0] - 2026-04-19
|
||||
|
||||
### Added
|
||||
|
||||
- Initial release with single command `/graceful-handoff`
|
||||
- 6-fase deklarativ workflow: detect → classify → write artifact → update REMEMBER/TODO → commit+push → print copy-paste-prompt
|
||||
- Tre handoff-typer: `multi-sesjon` (ultraplan-prosjekt), `plugin-arbeid` (marketplace-plugin), `enkelt-oppgave` (fallback)
|
||||
- Default filnavn `NEXT-SESSION-PROMPT.local.md`; slug-override via første posisjons-argument
|
||||
- Flag: `--no-commit` (skip git), `--dry-run` (ingen skriving, ingen git-ops)
|
||||
- Auto-generert Conventional Commits-melding fra `git diff --stat`
|
||||
- Respekterer pre-commit hooks (secrets, pathguard) — bypasser aldri
|
||||
- Tidsbudsjett < 60 sekunder; ingen Agent-delegering, ingen WebSearch
|
||||
- 7-seksjons-template for NEXT-SESSION-artefakt (matcher eksisterende konvensjon i llm-security/config-audit)
|
||||
|
||||
### Notes
|
||||
|
||||
- Auto-discover plugin — `marketplace.json`-oppføring ikke nødvendig
|
||||
- MIT-lisens
|
||||
40
plugins/graceful-handoff/CLAUDE.md
Normal file
40
plugins/graceful-handoff/CLAUDE.md
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
# graceful-handoff
|
||||
|
||||
Én kommando (`/graceful-handoff`) som produserer en komplett sesjonsoverlevering i ett steg: NEXT-SESSION-artefakt, commit+push, og copy-paste-prompt for neste sesjon.
|
||||
|
||||
## Når brukes den
|
||||
|
||||
Når du nærmer deg kontekst-trøskelen (typisk 60-70% på Opus 4.7) og må starte en ny sesjon. Kommandoen tar jobben med å oppsummere state og pushe ferdig arbeid fra minutter ned til sekunder.
|
||||
|
||||
## Hva den skriver
|
||||
|
||||
| Fil | Når |
|
||||
|-----|-----|
|
||||
| `NEXT-SESSION-PROMPT.local.md` (eller `NEXT-SESSION-<slug>.local.md`) | Alltid — hovedartefakt med 7 seksjoner (Hvorfor / Status / Fortsett / Push-policy / Verifisering / Husk) |
|
||||
| `REMEMBER.md` | Hvis den finnes — oppdaterer "Sist oppdatert" og PÅGÅENDE-seksjon |
|
||||
| `TODO.md` | Hvis den finnes — flytter ferdige items, legger til neste-økt-items |
|
||||
| Commit + push | Hvis ucommittede endringer finnes OG `--no-commit` ikke er gitt |
|
||||
|
||||
Alle handoff-filer er `*.local.md`-mønster → gitignored, ikke sporet i git.
|
||||
|
||||
## Arkitektur
|
||||
|
||||
Helt deklarativ — ingen hooks, ingen agents, ingen subprocess. Main-sesjonen utfører alle seks faser inline med Bash + Read/Write/Edit:
|
||||
|
||||
1. Detekter arbeidsmappe og prosjekt (pwd, git, find)
|
||||
2. Identifiser handoff-type (multi-sesjon / plugin-arbeid / enkelt-oppgave)
|
||||
3. Skriv NEXT-SESSION-artefakt til riktig lokasjon
|
||||
4. Oppdater REMEMBER.md og TODO.md
|
||||
5. Commit + push med Conventional Commits-melding (auto-generert)
|
||||
6. Print copy-paste-prompt til terminal
|
||||
|
||||
## Tidsbudsjett
|
||||
|
||||
< 60 sekunder totalt. Ingen Agent-delegering, ingen WebSearch. Hvis den drar ut: bruker er allerede på kontekst-trøskelen og trenger output raskt.
|
||||
|
||||
## Begrensninger (v1.0.0)
|
||||
|
||||
- Ingen auto-invokasjon ved kontekst-terskel — bruker triggrer manuelt
|
||||
- Ingen backup av eksisterende NEXT-SESSION-filer (overskrives, men merger fra innhold)
|
||||
- Ingen integrasjon mot ultraplan-local progress.json (lesing, ikke skriving)
|
||||
- Commit-meldingen er auto-generert uten bekreftelse — bruk `--no-commit` hvis du vil håndtere commit manuelt
|
||||
21
plugins/graceful-handoff/LICENSE
Normal file
21
plugins/graceful-handoff/LICENSE
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2026 Kjell Tore Guttormsen
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
221
plugins/graceful-handoff/README.md
Normal file
221
plugins/graceful-handoff/README.md
Normal file
|
|
@ -0,0 +1,221 @@
|
|||
# graceful-handoff
|
||||
|
||||
> Sesjonsoverlevering på under 60 sekunder. Designet for Opus 4.7-sesjoner som fyller kontekst raskt.
|
||||
|
||||
**Problemet:** Opus 4.7 fyller kontekstvinduet mye raskere enn 4.6 — ofte innen ~5 minutter for reelt arbeid. Når du er på 60-70% og må starte ny sesjon, er det tre manuelle steg som blir hastverk eller glemt:
|
||||
|
||||
1. Oppsummere hvor arbeidet står (commits, lokale endringer, hva som er testet)
|
||||
2. Commite og pushe ferdig arbeid (ellers tapes det)
|
||||
3. Skrive en copy-paste-prompt som lar neste sesjon fortsette uten tap
|
||||
|
||||
`/graceful-handoff` gjør alle tre, automatisk, i ett steg.
|
||||
|
||||
## Installasjon
|
||||
|
||||
```bash
|
||||
claude plugin marketplace add https://git.fromaitochitta.com/open/ktg-plugin-marketplace.git
|
||||
# Deretter /plugin install graceful-handoff
|
||||
```
|
||||
|
||||
## Bruk
|
||||
|
||||
Minimum:
|
||||
|
||||
```
|
||||
/graceful-handoff
|
||||
```
|
||||
|
||||
Med slug (hvis du har flere handoffs i samme mappe):
|
||||
|
||||
```
|
||||
/graceful-handoff refactor-auth
|
||||
```
|
||||
|
||||
Uten auto-commit:
|
||||
|
||||
```
|
||||
/graceful-handoff --no-commit
|
||||
```
|
||||
|
||||
Dry-run (se hva som ville skjedd):
|
||||
|
||||
```
|
||||
/graceful-handoff --dry-run
|
||||
```
|
||||
|
||||
## Hvordan den fungerer
|
||||
|
||||
Kommandoen utfører 6 faser inline i main-sesjonen (ingen Agent-delegering, ingen WebSearch — alt må skje raskt):
|
||||
|
||||
### 1. Detekter arbeidsmappe
|
||||
|
||||
```bash
|
||||
pwd
|
||||
git status --porcelain
|
||||
git log --oneline -10
|
||||
# Let oppover etter .claude-plugin/plugin.json
|
||||
# Let etter .claude/projects/*/brief.md + progress.json
|
||||
```
|
||||
|
||||
### 2. Identifiser handoff-type
|
||||
|
||||
| Type | Når |
|
||||
|------|-----|
|
||||
| `multi-sesjon` | Aktivt ultraplan-prosjekt finnes (progress.json status ≠ "completed") |
|
||||
| `plugin-arbeid` | Inne i en marketplace-plugin (`.claude-plugin/plugin.json` finnes oppover i tre) |
|
||||
| `enkelt-oppgave` | Ingen av over |
|
||||
|
||||
### 3. Skriv NEXT-SESSION-artefakt
|
||||
|
||||
Standardfilnavn: `NEXT-SESSION-PROMPT.local.md`. Med slug: `NEXT-SESSION-<slug>.local.md`.
|
||||
|
||||
Lokasjon:
|
||||
- `multi-sesjon` → i prosjektmappen
|
||||
- `plugin-arbeid` → i plugin-root
|
||||
- `enkelt-oppgave` → i cwd
|
||||
|
||||
Innhold (7 seksjoner — samme struktur som `NEXT-SESSION-PROMPT.local.md` i llm-security/config-audit):
|
||||
|
||||
```markdown
|
||||
# NEXT-SESSION-PROMPT — <tittel>
|
||||
|
||||
## Hvorfor dette eksisterer
|
||||
...
|
||||
|
||||
## Status ved sesjonshåndoff
|
||||
### ✅ Ferdig
|
||||
### ⏳ Ikke startet / delvis
|
||||
### ⚠️ Brutt / kjent risiko
|
||||
|
||||
## Slik fortsetter du
|
||||
...
|
||||
|
||||
## Push-policy
|
||||
...
|
||||
|
||||
## Verifiseringskommandoer
|
||||
...
|
||||
|
||||
## Husk
|
||||
...
|
||||
```
|
||||
|
||||
### 4. Oppdater REMEMBER.md og TODO.md
|
||||
|
||||
Kun hvis filene finnes (opprettes ikke i random mapper). Flytter ferdige items, oppdaterer datoer.
|
||||
|
||||
### 5. Commit + push
|
||||
|
||||
Skip hvis `--no-commit`, `--dry-run`, eller `git status --porcelain` er tom.
|
||||
|
||||
Auto-genererer Conventional Commits-melding basert på endrede filer:
|
||||
|
||||
| Filmønster | Type |
|
||||
|------------|------|
|
||||
| `tests/**` | `test` |
|
||||
| `*.md`, `README`, `CHANGELOG` | `docs` |
|
||||
| Ny funksjon i `hooks/`, `scanners/` | `feat` |
|
||||
| Bugfix | `fix` |
|
||||
| Config, lockfile | `chore` |
|
||||
|
||||
Scope: plugin-navn hvis alle endringer er i én plugin.
|
||||
|
||||
Viser meldingen til bruker før commit. Pusher til `origin <current-branch>`.
|
||||
|
||||
Pre-commit hooks (secrets, pathguard) respekteres — hvis de blokkerer, stopper kommandoen og rapporterer uten bypass.
|
||||
|
||||
### 6. Print copy-paste-prompt
|
||||
|
||||
Kompakt blokk til terminal som bruker kopierer direkte til ny Claude-sesjon:
|
||||
|
||||
```
|
||||
═════════════════════════════════════════════
|
||||
NESTE SESJON — copy-paste til ny Claude:
|
||||
═════════════════════════════════════════════
|
||||
|
||||
cd /Users/.../plugins/llm-security
|
||||
cat NEXT-SESSION-PROMPT.local.md
|
||||
git log --oneline -5
|
||||
git status
|
||||
|
||||
Fortsett fra Commit 2 (entropy-scanner kontekst-suppression).
|
||||
═════════════════════════════════════════════
|
||||
```
|
||||
|
||||
## Argumenter
|
||||
|
||||
| Argument | Beskrivelse |
|
||||
|----------|-------------|
|
||||
| `[topic-slug]` | Kebab-case slug. Med slug: `NEXT-SESSION-<slug>.local.md`. Uten: `NEXT-SESSION-PROMPT.local.md` |
|
||||
| `--no-commit` | Hopp over commit+push. Bruker håndterer commit manuelt |
|
||||
| `--dry-run` | Ingen filer skrives, ingen git-operasjoner. Print kun hva som ville skjedd |
|
||||
|
||||
## Eksempler
|
||||
|
||||
**Plugin-arbeid:**
|
||||
|
||||
```
|
||||
cd plugins/llm-security
|
||||
# ... arbeid ...
|
||||
/graceful-handoff
|
||||
# → skriver plugins/llm-security/NEXT-SESSION-PROMPT.local.md
|
||||
# → oppdaterer plugins/llm-security/REMEMBER.md + TODO.md
|
||||
# → committer + pusher
|
||||
# → printer copy-paste-prompt
|
||||
```
|
||||
|
||||
**Multi-sesjon (ultraplan-prosjekt):**
|
||||
|
||||
```
|
||||
cd prosjekt-med-.claude/projects/2026-04-18-foo/
|
||||
/graceful-handoff
|
||||
# → skriver .claude/projects/2026-04-18-foo/NEXT-SESSION-PROMPT.local.md
|
||||
# → (REMEMBER/TODO kun hvis de finnes i prosjektmappen)
|
||||
# → committer + pusher
|
||||
```
|
||||
|
||||
**Flere parallelle handoffs:**
|
||||
|
||||
```
|
||||
/graceful-handoff api-migration
|
||||
/graceful-handoff token-refresh
|
||||
# → to filer: NEXT-SESSION-api-migration.local.md + NEXT-SESSION-token-refresh.local.md
|
||||
```
|
||||
|
||||
**Bare artefakt, ingen git:**
|
||||
|
||||
```
|
||||
/graceful-handoff --no-commit
|
||||
# → skriver artefakt + REMEMBER/TODO
|
||||
# → git status viser fortsatt uncommittede endringer
|
||||
```
|
||||
|
||||
**Forhåndssjekk:**
|
||||
|
||||
```
|
||||
/graceful-handoff --dry-run
|
||||
# → printer planlagt artefakt, foreslått commit-melding, copy-paste-prompt
|
||||
# → skriver ingenting, gjør ingen git-operasjoner
|
||||
```
|
||||
|
||||
## Tidsbudsjett
|
||||
|
||||
< 60 sekunder totalt. Hvis den drar ut: lag en minimal handoff med det du har, og noter det som ufullstendig. Aldri Agent-delegering eller WebSearch — main-sesjonen er raskere.
|
||||
|
||||
## Begrensninger (v1.0.0)
|
||||
|
||||
- Ingen auto-invokasjon ved kontekst-terskel — bruker triggrer manuelt. Vurderes i v1.1
|
||||
- Commit-meldingen er auto-generert uten Y/n-bekreftelse. Hvis kvalitet blir et problem: rapporter, vurderer "vis og bekreft" i v1.1
|
||||
- Overskriver eksisterende NEXT-SESSION-fil (merger fra innhold, men ikke fra diff). Sikkerhetskopi-mønster vurderes
|
||||
- Ingen integrasjon mot `.claude/projects/*/progress.json` utover lesing
|
||||
|
||||
## Sikkerhet
|
||||
|
||||
- Respekterer alle pre-commit hooks (secrets-scanning, pathguard). Bypasser ALDRI
|
||||
- Filer er `*.local.md` → matches av `*.local.md` i global/prosjekt-gitignore
|
||||
- Ingen nettverks-kall, ingen eksterne avhengigheter
|
||||
- Krever kun `allowed-tools: Read, Write, Edit, Bash, Glob`
|
||||
|
||||
## Lisens
|
||||
|
||||
MIT
|
||||
329
plugins/graceful-handoff/commands/graceful-handoff.md
Normal file
329
plugins/graceful-handoff/commands/graceful-handoff.md
Normal file
|
|
@ -0,0 +1,329 @@
|
|||
---
|
||||
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]"
|
||||
allowed-tools: Read, Write, Edit, Bash, Glob
|
||||
---
|
||||
|
||||
# Graceful Handoff — sesjonsoverlevering
|
||||
|
||||
Produser en komplett handoff-pakke i ett steg: analyser state, skriv NEXT-SESSION-artefakt, oppdater REMEMBER/TODO, commit+push hvis mulig, og print en copy-paste-prompt for neste sesjon.
|
||||
|
||||
**Tidsbudsjett:** Hele kjøringen (fase 1-6) skal ligge under 60 sekunder reell tid. Bruker er typisk på 60-70% kontekst når de trigger dette — ikke bruk Agent-delegering eller WebSearch.
|
||||
|
||||
## Argumenter
|
||||
|
||||
| Argument | Effekt |
|
||||
|----------|--------|
|
||||
| `[topic-slug]` | Kebab-case slug som styrer filnavnet. Default: `NEXT-SESSION-PROMPT.local.md`. Med slug: `NEXT-SESSION-<slug>.local.md` |
|
||||
| `--no-commit` | Hopp over fase 5 (commit+push). Bruker håndterer commit manuelt |
|
||||
| `--dry-run` | Ikke skriv filer eller gjør git-operasjoner. Print kun hva som ville skjedd |
|
||||
|
||||
Parse argumenter fra `$ARGUMENTS` (kombinert streng). Støtt flag i vilkårlig rekkefølge. Første ikke-flag-token er slug.
|
||||
|
||||
---
|
||||
|
||||
## Fase 1 — Detekter arbeidsmappe og aktivt prosjekt
|
||||
|
||||
Kjør i parallell (én Bash-melding med flere tool calls):
|
||||
|
||||
```bash
|
||||
pwd
|
||||
git rev-parse --show-toplevel 2>/dev/null
|
||||
git status --porcelain
|
||||
git log --oneline -10
|
||||
git branch --show-current
|
||||
```
|
||||
|
||||
Let oppover i tre etter plugin-markør (maks 5 nivåer):
|
||||
|
||||
```bash
|
||||
# Fra cwd og oppover, stopp på første treff
|
||||
cur="$(pwd)"
|
||||
for i in 1 2 3 4 5; do
|
||||
if [ -f "$cur/.claude-plugin/plugin.json" ]; then
|
||||
echo "PLUGIN_ROOT=$cur"
|
||||
break
|
||||
fi
|
||||
cur="$(dirname "$cur")"
|
||||
[ "$cur" = "/" ] && break
|
||||
done
|
||||
```
|
||||
|
||||
Finn ultraplan-prosjekt (nyeste først):
|
||||
|
||||
```bash
|
||||
find . -maxdepth 4 -path '*/.claude/projects/*/brief.md' 2>/dev/null | sort -r | head -3
|
||||
find . -maxdepth 4 -path '*/.claude/projects/*/progress.json' 2>/dev/null | sort -r | head -3
|
||||
```
|
||||
|
||||
For hver progress.json-treff: kjør `jq -r '.status' <file>` for å se om prosjektet er aktivt.
|
||||
|
||||
## Fase 2 — Identifiser handoff-type
|
||||
|
||||
Prioritet: **multi-sesjon > plugin-arbeid > enkelt-oppgave**
|
||||
|
||||
| Type | Betingelse |
|
||||
|------|------------|
|
||||
| `multi-sesjon` | Finnes `.claude/projects/<NN>/progress.json` med `status != "completed"` OG `status != null`. Eller: finnes `.claude/projects/<NN>/plan.md` uten progress.json |
|
||||
| `plugin-arbeid` | Fase 1 fant `PLUGIN_ROOT` OG ingen aktiv multi-sesjon |
|
||||
| `enkelt-oppgave` | Ingen av over |
|
||||
|
||||
Lagre i intern state: `HANDOFF_TYPE`, `PROJECT_DIR` (hvis multi-sesjon), `PLUGIN_ROOT` (hvis plugin-arbeid), `WRITE_DIR` (hvor artefakten skal skrives).
|
||||
|
||||
Write-dir-logikk:
|
||||
- `multi-sesjon` → `WRITE_DIR = <PROJECT_DIR>`
|
||||
- `plugin-arbeid` → `WRITE_DIR = <PLUGIN_ROOT>`
|
||||
- `enkelt-oppgave` → `WRITE_DIR = $(pwd)`
|
||||
|
||||
Rapporter til bruker i en kort linje:
|
||||
|
||||
```
|
||||
Handoff-type: plugin-arbeid (llm-security). Skriver til /Users/ktg/.../plugins/llm-security/
|
||||
```
|
||||
|
||||
Hvis overlapp eksisterer (f.eks. plugin-arbeid innenfor et aktivt ultraplan-prosjekt): rapporter begge, men velg multi-sesjon som primær.
|
||||
|
||||
## Fase 3 — Skriv/oppdater NEXT-SESSION-artefakt
|
||||
|
||||
Filnavn:
|
||||
- Hvis `[topic-slug]` gitt: `NEXT-SESSION-<slug>.local.md`
|
||||
- Ellers: `NEXT-SESSION-PROMPT.local.md`
|
||||
|
||||
Full sti: `<WRITE_DIR>/<filename>`.
|
||||
|
||||
**Hvis filen finnes**: les den først, bevar "Hvorfor dette eksisterer"-seksjonen hvis den er relevant, oppdater status-seksjoner med dagens dato og aktuell state.
|
||||
|
||||
**Template** (samme 7-seksjons-struktur som llm-security/config-audit bruker):
|
||||
|
||||
```markdown
|
||||
# NEXT-SESSION-PROMPT — <plugin-eller-prosjekt-navn> <kort-tittel>
|
||||
|
||||
## Hvorfor dette eksisterer
|
||||
|
||||
<1-3 setninger om hva bruker jobber med og hvorfor denne sesjonen stoppet. Hent fra: siste commits, brief.md hvis multi-sesjon, git diff, samtale-kontekst. Vær konkret — ingen fluff.>
|
||||
|
||||
## Status ved sesjonshåndoff
|
||||
|
||||
### ✅ Ferdig
|
||||
|
||||
<List commits fra denne sesjonen med SHA + hva hver gjorde. Eks:
|
||||
- `a9fb328` fix(config-audit): complete conflict-project fixture
|
||||
- `94ce701` test(config-audit): add Opus 4.7 pattern fixtures
|
||||
|
||||
Hvis ingen commits: skriv "Ingen nye commits i denne sesjonen".>
|
||||
|
||||
### ⏳ Ikke startet / delvis
|
||||
|
||||
<Konkrete neste steg. Nevn filnavn og linjenummer hvis du vet dem. Eks:
|
||||
- Commit 2: Kontekst-bevisst entropy — scanners/entropy-scanner.mjs:40-47, 90-137
|
||||
- Commit 3: Policy-integrasjon
|
||||
|
||||
Hvis det finnes en plan-fil: peker til den.>
|
||||
|
||||
### ⚠️ Brutt / kjent risiko
|
||||
|
||||
<Tester som feiler, uncommittede endringer, antakelser som ikke er verifisert. Eks:
|
||||
- 25/80 tester feiler i tests/lib/severity.test.mjs (forventet — tester gammel formel)
|
||||
- Commit 1 er lokal, ikke pushet
|
||||
|
||||
Hvis ingenting er brutt: skriv "Ingen kjente broken tester".>
|
||||
|
||||
## Slik fortsetter du
|
||||
|
||||
1. `cd <absolute-path-til-WRITE_DIR>`
|
||||
2. `cat <filename>` — les denne filen igjen
|
||||
3. `git log --oneline -5` og `git status`
|
||||
<4. (hvis multi-sesjon) Les planen: `cat .claude/projects/<slug>/plan.md`>
|
||||
<5. Start med: <konkret neste handling>>
|
||||
|
||||
## Push-policy
|
||||
|
||||
- Direkte push til `main` på Forgejo er pre-autorisert (ikke spør om tillatelse)
|
||||
- Aldri GitHub — kun Forgejo (`git.fromaitochitta.com`)
|
||||
<evt. prosjekt- eller plugin-spesifikke regler, f.eks. versjonsbump-timing>
|
||||
|
||||
## Verifiseringskommandoer
|
||||
|
||||
```bash
|
||||
<Copy-paste-klare sjekker som beviser state. Eks:
|
||||
git log --oneline -5 # forventet: <siste commit SHA>
|
||||
git status # forventet: clean (eller <N> uncommittede)
|
||||
node --test tests/ # forventet: alle grønne
|
||||
>
|
||||
```
|
||||
|
||||
## Husk
|
||||
|
||||
- <Gotchas og antakelser som ikke er åpenbare fra koden. Eks:
|
||||
- Hooks (pre-edit-secrets, pre-write-pathguard) blokkerer writes til .claude-plugin/
|
||||
- Versjonsbump krever sync i 7+ filer — bruk grep-mønster
|
||||
- Opus 4.7 fyller kontekst raskt — kjør /graceful-handoff ved 60-70%>
|
||||
```
|
||||
|
||||
**Innholdsregler:**
|
||||
- Ikke fyll inn plassholdere med placeholder-tekst. Les faktisk git-state, samtalekontekst, og evt. brief.md/plan.md for å fylle inn ekte info.
|
||||
- Hvis en seksjon er irrelevant (f.eks. ingen push-policy avvik): skriv én setning som sier det, ikke utelat seksjonen (strukturen må være konsistent).
|
||||
- Tone: nøktern, norsk, teknisk. Ingen "gøy å jobbe med deg" eller "vi har kommet langt". Hvis brukeren var sint eller frustrert: nevn det kort i "Husk" slik at neste sesjon ikke trår i samme fellen.
|
||||
|
||||
Hvis `--dry-run`: print artefakten til stdout i stedet for å skrive.
|
||||
|
||||
## Fase 4 — Oppdater REMEMBER.md og TODO.md
|
||||
|
||||
**Lokasjon:**
|
||||
- `plugin-arbeid` → `<PLUGIN_ROOT>/REMEMBER.md` og `<PLUGIN_ROOT>/TODO.md`
|
||||
- `multi-sesjon` → `<PROJECT_DIR>/REMEMBER.md` og `<PROJECT_DIR>/TODO.md` (hvis de finnes; ellers skip — ultraplan-prosjekter har ikke alltid disse)
|
||||
- `enkelt-oppgave` → `$(pwd)/REMEMBER.md` og `$(pwd)/TODO.md` (kun hvis de allerede finnes; ikke opprett nye i random mapper)
|
||||
|
||||
**REMEMBER.md-oppdatering:**
|
||||
|
||||
Hvis filen finnes — les, oppdater:
|
||||
- Øverst: `## Sist oppdatert\n<YYYY-MM-DD>` (absolutt dato, ikke "i dag")
|
||||
- "PÅGÅENDE"-seksjon (eller lag den): plan-sti hvis relevant, 3-5 status-bullets (✅ ferdig, ⏳ pågående, ⚠️ blokkert)
|
||||
- Flytt tidligere "PÅGÅENDE" til "TIDLIGERE" med datostempel hvis den peker på annet arbeid
|
||||
|
||||
Hvis filen ikke finnes og type er `plugin-arbeid`: opprett minimal REMEMBER.md med dagens dato og én PÅGÅENDE-bullet. Ellers skip.
|
||||
|
||||
**TODO.md-oppdatering:**
|
||||
|
||||
Hvis filen finnes — les, oppdater:
|
||||
- Flytt items som ble gjort denne sesjonen til en "✅ Ferdig denne sesjonen (YYYY-MM-DD)"-seksjon øverst
|
||||
- Legg til items for neste sesjon under "⏳ Neste"
|
||||
- Ikke slett — kommenter ut eller flytt
|
||||
|
||||
Hvis filen ikke finnes: skip (ikke push onboarding i en handoff).
|
||||
|
||||
**Gitignore-verifisering:** Etter skriving, kjør `git check-ignore -v <path>` for hver fil. Hvis filen IKKE er ignorert: rapporter til bruker som advarsel (ikke blokker, men bruker må vite).
|
||||
|
||||
Hvis `--dry-run`: print diff i stedet for å skrive.
|
||||
|
||||
## Fase 5 — Commit + push hvis ucommittet arbeid finnes
|
||||
|
||||
Skip hele fasen hvis `--no-commit` eller `--dry-run`.
|
||||
|
||||
Skip hvis `git status --porcelain` er tom (ingenting å commite).
|
||||
|
||||
**Steg 5a — Klassifiser endringer:**
|
||||
|
||||
```bash
|
||||
git diff --stat
|
||||
git diff --cached --stat
|
||||
git status --porcelain
|
||||
```
|
||||
|
||||
Kategoriser endrede filer for å utlede commit-type:
|
||||
|
||||
| Filmønster | Type |
|
||||
|------------|------|
|
||||
| `tests/**`, `**/*.test.*` | `test` |
|
||||
| `*.md`, `README`, `CHANGELOG`, `CLAUDE.md` (kun docs-endring) | `docs` |
|
||||
| `plugins/<name>/hooks/**`, `plugins/<name>/scanners/**` (ny funksjon) | `feat` |
|
||||
| Samme mønster, men fikser eksisterende atferd | `fix` |
|
||||
| `package.json`, config, lockfile kun | `chore` |
|
||||
| Blandet | Bruk dominerende kategori; hvis uklart, `chore` |
|
||||
|
||||
Scope: plugin-navn hvis `plugin-arbeid` eller hvis alle endringer er i én plugin. Ellers ingen scope.
|
||||
|
||||
**Steg 5b — Generer commit-melding:**
|
||||
|
||||
Format: `<type>(<scope>): <kort beskrivelse>` (Conventional Commits).
|
||||
|
||||
Krav:
|
||||
- Første linje ≤ 72 tegn
|
||||
- Beskrivelse på norsk eller engelsk (match eksisterende commits i repoet — sjekk `git log --oneline -10`)
|
||||
- Beskriv **hva** som endres, ikke hvorfor (hvorfor hører hjemme i body hvis nødvendig)
|
||||
- Hvis flere uavhengige endringer: vurder om de skal splittes i to commits. Hvis bruker er i hastverk (kontekst-trøskel): ett commit med samlet beskrivelse er akseptabelt, men noter at det er samlet i body.
|
||||
|
||||
Eksempler (match stil fra eksisterende repo):
|
||||
- `test(config-audit): add Opus 4.7 pattern fixtures`
|
||||
- `fix(llm-security): complete conflict-project fixture for CNF cross-scope tests`
|
||||
- `feat(graceful-handoff): initial plugin with /graceful-handoff command`
|
||||
|
||||
Body (valgfri, bruk hvis commit dekker flere endringer):
|
||||
```
|
||||
- Endring 1
|
||||
- Endring 2
|
||||
|
||||
Samlet som ett commit pga. graceful-handoff-flyt.
|
||||
```
|
||||
|
||||
**Steg 5c — Vis meldingen og commit:**
|
||||
|
||||
Print den genererte meldingen ordrett til bruker FØR commit:
|
||||
|
||||
```
|
||||
Commit-melding:
|
||||
---
|
||||
feat(graceful-handoff): initial plugin with /graceful-handoff command
|
||||
---
|
||||
```
|
||||
|
||||
Deretter:
|
||||
|
||||
```bash
|
||||
git add -A # eller eksplisitt filvalg hvis endringene spenner flere uavhengige områder
|
||||
git commit -m "$(cat <<'EOF'
|
||||
<meldingen>
|
||||
EOF
|
||||
)"
|
||||
```
|
||||
|
||||
Hvis commit feiler pga. pre-commit hook (secrets, pathguard, osv.): STOPP, rapporter feilmeldingen, **ikke** bypass med `--no-verify`. Be bruker håndtere manuelt.
|
||||
|
||||
**Steg 5d — Push:**
|
||||
|
||||
```bash
|
||||
BRANCH="$(git branch --show-current)"
|
||||
if [ -n "$BRANCH" ]; then
|
||||
git push origin "$BRANCH"
|
||||
else
|
||||
git push origin HEAD
|
||||
fi
|
||||
```
|
||||
|
||||
Bekreft push med `git rev-parse @{u}` (at upstream er satt) eller hent siste output fra push-kommandoen.
|
||||
|
||||
Hvis push feiler: rapporter, men ikke force-push. Bruker kan håndtere manuelt.
|
||||
|
||||
## Fase 6 — Print copy-paste-prompt for neste sesjon
|
||||
|
||||
Print en kompakt prompt til terminal som bruker kan kopiere direkte inn i ny Claude Code-sesjon:
|
||||
|
||||
```
|
||||
════════════════════════════════════════════════════════════
|
||||
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)">
|
||||
════════════════════════════════════════════════════════════
|
||||
```
|
||||
|
||||
Dette er den KRITISKE output-en — hvis alt annet feiler, må minst denne blokken nå bruker slik at de kan fortsette. Bruk én final assistant-tekst-melding til å printe dette.
|
||||
|
||||
---
|
||||
|
||||
## Tidsbudsjett og escalation
|
||||
|
||||
- Hele kommandoen: < 60 sekunder
|
||||
- Hvis du oppdager at du trenger å lese >5 filer eller kjøre >3 Agent-delegeringer: stopp, skriv en minimal handoff med det du har, og noter i "Brutt/risiko" at handoff var ufullstendig.
|
||||
- **Aldri Agent-delegering i denne kommandoen** — main-sesjonen er raskere enn å spinne opp en subagent for noe mekanisk som dette.
|
||||
- **Aldri WebSearch** — ingen ekstern info trengs.
|
||||
|
||||
## Fallback hvis state er helt uklart
|
||||
|
||||
Hvis fase 1-2 ikke kan identifisere noen av de tre handoff-typene (f.eks. cwd er utenfor git, ingen plugin-markør, ingen ultraplan-prosjekt):
|
||||
|
||||
1. Sett `HANDOFF_TYPE = enkelt-oppgave`
|
||||
2. `WRITE_DIR = $(pwd)`
|
||||
3. Varsle bruker: "Kunne ikke detektere handoff-type. Skriver til cwd."
|
||||
4. Fortsett som vanlig — prompten er fremdeles nyttig
|
||||
Loading…
Add table
Add a link
Reference in a new issue