okr/commands/oppsett.md
Kjell Tore Guttormsen ec1abf999c
docs(okr): generiske, fiktive eksempler i kunnskapsbasen
Sektorspesifikt eksempelmateriale er erstattet med generiske, fiktive
eksempler. Det fiktive direktoratet DDT får eksempler fra digitale
tjenester, som samsvarer med navnet. Fjordvik kommune (fiktiv) får
eksempler fra vann, avløp og avfall. Strukturen, tallene og poenget i
hvert eksempel er bevart, blant annet committed-doktrinens stokastiske
samfunnsutfall, progress-regnestykkene i Oboard-eksempelet og
kaskadekjeden.

Valg:
- Én kildebelagt case er fjernet fra okr-sources.md og én virksomhetsliste er
  gjort generell («m.fl.»). Påstandene som står igjen, er fortsatt sanne.
- Standardverdien i malens domene-felt er «digitalisering». «annet»
  dekker det som er tatt ut av alternativlistene.
- De historiske evalueringsdokumentene er endret bare der de siterte det
  gamle eksempelinnholdet.

Suite 350/350 grønn, vakten har 0 treff.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 12:28:54 +02:00

592 lines
19 KiB
Markdown

---
name: okr:oppsett
description: Konfigurer OKR-pluginen med dyp onboarding, profiloppdatering og syklusarkivering
allowed-tools: Read, Write, Bash, AskUserQuestion, ToolSearch, Glob
argument-hint: "[full|mvp|arkiver|oppdater|vis]"
---
# OKR Oppsett - Onboarding, konfigurasjon og syklushåndtering
Interaktiv konfigurasjon av OKR-pluginen. Bygger en persistent organisasjonsprofil
som alle andre kommandoer bruker automatisk via hook-injeksjon.
## Ruting basert på argument
| Argument | Handling |
|----------|----------|
| _(ingen)_ | Detekter eksisterende konfig, tilby meny |
| `full` | Kjør 6-fase dyp onboarding (15-20 min) |
| `mvp` | Kjør minimum viable onboarding (6 spørsmål, ~5 min) |
| `arkiver` | Arkiver gjeldende syklus med retrospektiv |
| `oppdater` | Oppdater spesifikke felt i eksisterende profil |
| `vis` | Vis gjeldende konfigurasjon |
---
## Ingen argument — detekter og tilby
Les `.claude/okr.local.md` (relativt til brukerens prosjekt-cwd).
**Hvis filen IKKE finnes:**
Bruk AskUserQuestion:
```
Ser ut som du ikke har konfigurert OKR-pluginen ennå.
Vil du kjøre onboarding-intervjuet?
1. Full onboarding (6 faser, 15-20 min) — anbefalt for beste resultat
2. MVP onboarding (6 spørsmål, ~5 min) — rask start
3. Avbryt
```
Kjør `full` eller `mvp` basert på valg.
**Hvis filen finnes OG `onboarding_status: partial`:**
```
Fant ufullstendig onboarding. Du kom til fase [N] forrige gang.
1. Fortsett fra fase [N]
2. Start på nytt (full)
3. Start på nytt (mvp)
4. Avbryt
```
Hvis fortsett: les YAML, finn siste utfylte fase-seksjon, fortsett fra neste.
**Hvis filen finnes OG `onboarding_status: fullfort`:**
Vis kort oppsummering av gjeldende profil (org, syklus, modenhet, verktøy).
Bruk AskUserQuestion:
```
Konfigurasjon funnet for [organisasjon.navn].
1. Oppdater konfigurasjon (endre spesifikke felt)
2. Kjør intervju på nytt (full)
3. Vis full konfigurasjon
4. Avslutt
```
---
## Full onboarding — 6-fase dyp intervju
Skriv `onboarding_status: partial` til `.claude/okr.local.md` for hver fase er
fullført. Oppdater til `fullfort` etter siste fase.
### Fase 1 — Identitet (2 min)
Still alle spørsmål med AskUserQuestion (grupper 2-3 sammen der naturlig):
1. **Organisasjonsnavn og kortform?**
Eksempel (fiktiv eksempeletat): «Direktoratet for digital tjenesteutvikling» / «DDT»
2. **Type organisasjon?**
Alternativer: statlig etat | direktorat | kommune | fylkeskommune
3. **Hvilket departement eller overordnet etat?**
Eksempel: "fagdepartementet"
4. **Fagdomene?**
Alternativer: helse | justis | digitalisering | utdanning | miljø | annet
5. **Antall ansatte i OKR-programmet (ca.)?**
Tall eller estimat
6. **Nasjonal, regional eller lokal virksomhet?**
Alternativer: nasjonal | regional | lokal
**Etter fase 1:** Skriv organisasjon-seksjonen til `.claude/okr.local.md`.
### Fase 2 — Modenhet (5 min)
7. **OKR-historikk?**
Alternativer: aldri prøvd | prøver nå (første syklus) | erfaren (2+ sykluser)
8. **Hvis erfaren: Antall gjennomførte sykluser?**
(Hopp over hvis "aldri prøvd" eller "prøver nå")
9. **Hvem er OKR-sponsor (navn og rolle)?**
Personen som gir mandat og synlighet. Eksempel: "Divisjonsdirektør Kari Holm"
10. **Hvem er OKR-champion (navn og rolle)?**
Personen som driver det operative arbeidet. Eksempel: "Seniorrådgiver Per Lund"
11. **Er OKR eksplisitt koblet fra lønnssamtale og medarbeidersamtale?**
Alternativer: ja | nei | usikkert
**VIKTIG:** Hvis "nei" eller "usikkert" — sett `okr_frikoblet_fra_loenn: false` og
legg til advarsel i Markdown-body:
> **ADVARSEL:** OKR koblet til lønn er et av de farligste antipatternene.
> Når medarbeidere vet at OKR-score påvirker lønn, setter de trygge, lave mål
> i stedet for ambisiøse stretch goals. Anbefaler sterkt å dekoble før utrulling.
12. **Hva er alignment-tilnærmingen?**
Alternativer: top-down | bottom-up | bidireksjonell
Forklar kort: "Bidireksjonell betyr at ledelsen setter retning og teamene foreslår
egne OKR som kobles opp. Dette er anbefalt tilnærming."
**Etter fase 2:** Oppdater `.claude/okr.local.md` med program-seksjonen.
### Fase 3 — Strategisk kontekst (5 min)
13. **Har dere et tildelingsbrev for 2026?**
Alternativer: ja | nei
Hvis ja: "Vil du lagre nøkkelmål fra tildelingsbrevet? Lim inn de viktigste målene
(stikkpunkter, ikke hele brevet) så kan pluginen bruke dem til alignment."
Hvis brukeren limer inn tekst: skriv til
`.claude/okr/strategisk-kontekst/tildelingsbrev-2026.md` med **OKF-frontmatter**
(second-brain-kompatibel: påkrevd `type:` i Title-Case + anbefalt `resource`/
`title`/`description`/`tags`-liste/`timestamp`) og innlimt innhold. Opprett mappene
med Write-tool:
```markdown
---
type: Tildelingsbrev
resource: "[lenke/arkiv-ID til kilden]"
title: "Tildelingsbrev 2026"
description: "Nøkkelmål fra tildelingsbrevet for alignment"
tags:
- tildelingsbrev
- styringssignaler
timestamp: "[ISO-8601, f.eks. 2026-01-15T09:00:00+00:00]"
---
[innlimt innhold]
```
14. **Har dere en virksomhetsplan eller strategiplan?**
Eventuelt lenke eller nøkkelpunkter. Hvis innhold gis: skriv til
`.claude/okr/strategisk-kontekst/virksomhetsplan.md` med OKF-frontmatter
(`type: Virksomhetsplan` + anbefalte felt som over).
15. **Har dere org-nivå OKR for 2026?**
Alternativer: ja | nei | planlegges
Hvis ja: "Lim inn org-OKR (Objectives og Key Results) så pluginen kan bruke dem
til kaskadering og alignment-sjekk."
Hvis innhold gis: skriv til `.claude/okr/strategisk-kontekst/overordnede-okr.md`
med OKF-frontmatter (`type: Overordnede OKR` + anbefalte felt som over).
**Etter fase 3:** Oppdater `.claude/okr.local.md` med eventuell strategisk kontekst-info.
Hvis du skrev én eller flere strategisk-kontekst-filer, regenerér OKF-indeksen for
prosjekt-treet så `index.md` per nivå reflekterer de nye konsept-filene:
```bash
node ${CLAUDE_PLUGIN_ROOT}/scripts/okf-index.mjs .claude/okr
```
(Idempotent: bygger `index.md`-entries fra konsept-filenes `title`/`description`,
bevarer menneske-skrevne overskrifter og rotens markører `okf_version` +
`okf_layout`.)
### Fase 4 — Struktur (3 min)
16. **Hvilke OKR-nivåer bruker dere?**
Alternativer (flervalg): etat | divisjon | avdeling | seksjon | team
17. **Din rolle i OKR-programmet?**
Alternativer: leder | produkteier | seksjonsleder | koordinator | annet
18. **Antall team som kjører OKR denne syklusen (ca.)?**
Tall
19. **Bruker dere bidireksjonell kaskadering?**
Forklaring: "Teamene foreslår egne OKR som kobles til org-OKR, i stedet for at
alt kommer ovenfra."
Alternativer: ja | nei | planlegger det
**Etter fase 4:** Oppdater gjeldende_syklus-seksjonen.
### Fase 5 — Verktøy (2 min)
20. **Oppgavestyringsverktøy?**
Alternativer: Linear | Jira | Azure DevOps | Planner | ingen | annet
21. **OKR-sporingsverktøy?**
Alternativer: Oboard | Quantive | regneark | ingen | annet
22. **Møteverktøy?**
Alternativer: Microsoft Teams | Zoom | annet
23. **Leveransemetodikk?**
Alternativer: Scrum | Kanban | SAFe | prosjekt | annet
24. **Vil du koble Linear til OKR-pluginen?**
Alternativer: ja | nei
Hvis ja: Kjør Linear-oppsett:
1. Sjekk om Linear MCP er konfigurert — les `~/.claude/settings.json`
2. Hvis ikke: veilede oppsett av MCP-server (referer til Linear MCP docs)
3. Bruk ToolSearch for å finne Linear-tools, hent teams og projects
4. La bruker velge team og project for OKR-tracking
**Etter fase 5:** Oppdater verktøy- og integrasjoner-seksjonen.
### Fase 6 — Kultur (3 min)
25. **Hva er check-in-rytmen (eller ønsket rytme)?**
Alternativer: ukentlig | annenhver uke | månedlig
Anbefaling: "Annenhver uke er et godt utgangspunkt. Ukentlig for team i utførelsesfase."
26. **Psykologisk trygghet for å sette stretch goals?**
Alternativer: lav | middels | høy
Forklaring: "Kan teammedlemmer trygt foreslå ambisiøse mål uten å frykte konsekvenser
om de ikke når 100%?"
27. **Kjente utfordringer eller antipatterns dere har sett?**
Fritekst, ENTER for å hoppe over.
Eksempler: "set-and-forget", "aktivitetsfokus i KR", "for mange Objectives"
28. **Er tillitsvalgte involvert i OKR-prosessen?**
Alternativer: ja | nei | planlegges
**Etter fase 6:** Oppdater kultur-seksjonen. Sett `onboarding_status: fullfort`.
### Fullføringssteg
Etter alle 6 faser:
1. Skriv komplett YAML til `.claude/okr.local.md` (oppdater alle seksjoner)
2. Sett `onboarding_status: fullfort` og `Sist oppdatert: [dato]`
3. **Skriv reinstall-overlevende org-profil til hjem-stien.** Profilen
(`organisasjon:`- og `program:`-seksjonene — org-identiteten som skal overleve
reinstall og være tilgjengelig på tvers av prosjekter) skrives **uten `---`-fences**
til en temp-fil og sendes gjennom OKF-komponisten + skrivehelperen via Bash:
```bash
OUT=$(node ${CLAUDE_PLUGIN_ROOT}/scripts/compose-org-profile.mjs < /tmp/okr-profil.tmp \
| node ${CLAUDE_PLUGIN_ROOT}/scripts/write-org-profile.mjs)
echo "$OUT"
```
`compose-org-profile.mjs` prepender de tre top-level OKF-nøklene (`type:
Organisasjonsprofil`, `resource:`, `timestamp:`) over den nestede YAML-en og pakker
alt i **ett** frontmatter-blokk (second-brain-kompatibelt). Legg **aldri** til en ny
top-level `navn:`/`id:`/`fase:`/`domene:`/`sektor:` i profilen — de ville skygge de
nestede verdiene som hooken leser. Helperen skriver atomisk (temp + `renameSync`) til `~/.claude/okr/org/profil.md` og
rapporterer den **faktisk brukte stien** på stdout (`$OUT`); en eventuell
fallback-notice går til stderr. Rapporter til brukeren: «Org-profil skrevet til: $OUT».
Hvis `$OUT` peker på den prosjektlokale fallbacken (`.claude/okr.local.md` — skjer kun
ved skrivefeil mot hjem), vis i tillegg hele profil-YAML-en for manuell plassering
(jf. Feilhåndtering «Fil kan ikke skrives»), slik at brukeren kan legge
`~/.claude/okr/org/profil.md` på plass selv. Behold den prosjektlokale
`.claude/okr.local.md`-skrivingen (steg 1) for syklus- og strategisk-kontekst-data —
kun selve profilen migrerer til hjem.
4. Vis oppsummering:
```
Onboarding fullført for [organisasjon]!
Profil:
- Organisasjon: [navn] ([type])
- Modenhet: [nivå] ([N] sykluser gjennomført)
- Gjeldende syklus: [id] ([fase])
- Verktøy: [oppgavestyring], [okr_tracking]
- Check-in: [rytme]
Lagrede kontekstfiler:
- .claude/okr.local.md (organisasjonsprofil)
[- .claude/okr/strategisk-kontekst/tildelingsbrev-2026.md]
[- .claude/okr/strategisk-kontekst/overordnede-okr.md]
Anbefalte neste steg:
- /okr:skriv — skriv første OKR for denne syklusen
- /okr:kvalitet — sjekk eksisterende OKR
- /okr:møter — planlegg OKR-workshop eller kick-off
```
---
## MVP onboarding — 6 spørsmål
For brukere som vil komme raskt i gang. Samle alle spørsmål i en AskUserQuestion
eller maks 2 runder:
1. **Organisasjonsnavn og type?**
Eksempel (fiktiv eksempeletat): «Direktoratet for digital tjenesteutvikling, statlig etat»
2. **Fagdomene?**
Alternativer: helse | justis | digitalisering | utdanning | miljø | annet
3. **OKR-modenhet?**
Alternativer: aldri prøvd | prøver nå (første syklus) | erfaren (2+ sykluser)
4. **Gjeldende syklusfase?**
Alternativer: planlegging | utførelse | review | mellom sykluser
5. **Primære verktøy?**
Fritekst. Eksempel: "Linear og Microsoft Teams"
6. **Er OKR frikoblet fra lønnssamtale?**
Alternativer: ja | nei | usikkert
**Etter svar:** Skriv YAML med disse 6 feltene pluss fornuftige defaults for alle andre:
```yaml
---
onboarding_status: fullfort
organisasjon:
navn: "[svar 1: navn]"
kortform: ""
type: "[svar 1: type]"
departement: ""
ansatte_i_okr_program: 0
domene: "[svar 2]"
geografi: "nasjonal"
program:
modenhetsnivaa: "[utledet fra svar 3: aldri prøvd→ikke-startet, prøver nå→utforsker, erfaren→pilot]"
sykluser_gjennomfort: 0
sponsor: ""
champion: ""
okr_frikoblet_fra_loenn: [svar 6: true/false]
alignment_tilnaerming: "bidireksjonell"
gjeldende_syklus:
id: "[beregnet fra dato og fase]"
periode: "[beregnet]"
fase: "[svar 4]"
antall_team: 1
verktoy:
oppgavestyring: "[parsed fra svar 5]"
okr_tracking: ""
moeteverktoy: "[parsed fra svar 5]"
leveransemetodikk: ""
kultur:
sjekk_inn_rytme: "annenhver uke"
psykologisk_trygghet: "middels"
kjente_utfordringer: []
integrasjoner:
linear:
aktivert: false
team_id: ""
project_id: ""
preferanser:
spraak: "no"
vis_eksempler: true
ambisjonsnivaa: "balansert"
---
```
**Skriv også reinstall-overlevende org-profil til hjem-stien.** Skriv profil-YAML-en
(`organisasjon:` + `program:`, **uten `---`-fences**) til en temp-fil og kjør OKF-komponisten
+ skrivehelperen via Bash:
```bash
OUT=$(node ${CLAUDE_PLUGIN_ROOT}/scripts/compose-org-profile.mjs < /tmp/okr-profil.tmp \
| node ${CLAUDE_PLUGIN_ROOT}/scripts/write-org-profile.mjs)
echo "$OUT"
```
`compose-org-profile.mjs` prepender top-level OKF-nøkler (`type: Organisasjonsprofil`,
`resource:`, `timestamp:`) over den nestede profilen i ett frontmatter-blokk. Rapporter
«Org-profil skrevet til: $OUT». Hvis `$OUT` er den prosjektlokale fallbacken, vis YAML-en
for manuell plassering (jf. Feilhåndtering). Syklus-/kontekstdata forblir prosjektlokalt
i `.claude/okr.local.md`.
Vis kort oppsummering og foreslå `/okr:oppsett full` for å fylle ut resten senere.
---
## Oppdater — endre spesifikke felt
Trigger: `/okr:oppsett oppdater` eller valg 1 fra ingen-argument-menyen.
1. Les `.claude/okr.local.md`
2. Vis gjeldende verdier gruppert per seksjon
3. Bruk AskUserQuestion: "Hvilken seksjon vil du oppdatere?"
Alternativer: Organisasjon | Program | Syklus | Verktøy | Kultur | Integrasjoner | Preferanser
4. Vis feltene i valgt seksjon med gjeldende verdier
5. La bruker endre ett eller flere felt
6. Skriv oppdatert YAML tilbake
7. Oppdater `Sist oppdatert` i filen
---
## Vis — vis gjeldende konfigurasjon
Trigger: `/okr:oppsett vis` eller valg 3 fra ingen-argument-menyen.
Les `.claude/okr.local.md` og vis innholdet formatert:
```
## OKR-profil for [organisasjon.navn]
### Identitet
- Navn: [navn] ([kortform])
- Type: [type]
- Departement: [departement]
- Domene: [domene]
- Ansatte i OKR-program: [tall]
### Program
- Modenhet: [modenhetsnivaa]
- Sykluser gjennomført: [tall]
- Sponsor: [sponsor]
- Champion: [champion]
- OKR frikoblet fra lønn: [ja/nei]
### Gjeldende syklus
- ID: [id]
- Periode: [periode]
- Fase: [fase]
- Antall team: [tall]
### Verktøy
[liste]
### Kultur
[liste]
### Integrasjoner
[status]
Kontekstfiler:
[list .claude/okr/ directory if exists]
```
---
## Arkiver syklus
Trigger: `/okr:oppsett arkiver`
### Forutsetninger
Les `gjeldende_syklus.id` fra `.claude/okr.local.md` (f.eks. `T1-2026`).
Sjekk at `.claude/okr/syklus/[id]/` finnes. Hvis ikke:
```
Ingen aktiv syklusmappe funnet for [id].
Opprett `.claude/okr/syklus/[id]/` med OKR-filer for å bruke arkivering.
```
### Arkiveringsflyt
1. **Les gjeldende syklus** — les alle `.md`-filer i `.claude/okr/syklus/[id]/`
og `status.md` hvis den finnes.
2. **Samle endelige scorer** — hvis `status.md` har endelige scorer, bruk dem.
Ellers spør med AskUserQuestion:
```
Hva ble de endelige scorene for [syklus]?
Oppgi score per KR (0.0-1.0) eller ENTER for å bruke siste kjente status.
```
3. **Generer retrospektiv** — skriv til `.claude/okr/syklus/[id]/retrospektiv.md`:
```markdown
---
type: Retrospektiv
syklus: [id]
periode: [periode fra config]
arkivert: [dato]
samlet_score: [beregnet gjennomsnitt]
---
# Retrospektiv [id]
## Resultater
[OKR med endelige scorer, tabellformat]
## Hva gikk bra
[Basert på KR som scoret 0.7+]
## Hva var utfordrende
[Basert på KR som scoret <0.5, noter mønstre]
## Læring til neste syklus
[Identifiser 2-3 konkrete forbedringer]
## Antipatterns observert
[Sjekk mot antipatternene fra referansemateriale —
nevn kun de som er relevante basert på scoremønsteret.
Les ${CLAUDE_PLUGIN_ROOT}/skills/okr-offentlig-sektor/references/okr-antipatterns.md]
```
4. **Arkiver til historikk** — opprett `.claude/okr/historikk/[id]/` med Write-tool
og kopier alle filer fra syklusmappen dit (les innhold, skriv til ny sti).
Opprett også `.claude/okr/historikk/[id]-resultater.md` med sammendrag:
endelige scorer, topp-læringer, og lenke til full retrospektiv.
5. **Bekreft sletting** — bruk AskUserQuestion:
```
Slett syklusmappen `.claude/okr/syklus/[id]/`?
Den er nå arkivert i `historikk/[id]/`.
Alternativer: ja | nei (behold begge)
```
Hvis ja og Bash-tool er tilgjengelig: **valider FØRST at `[id]` ikke er tom OG
matcher mønsteret `^[TQ][1-4]-[0-9]{4}$`** (f.eks. `T1-2026`). Kun hvis
valideringen passerer, kjør: `rm -rf .claude/okr/syklus/[id]/`. Ved tom eller
malformert `[id]`: AVVIS slettingen og be om en gyldig syklus-id — kjør ALDRI
`rm -rf` med tom verdi (det ville blitt `rm -rf .claude/okr/syklus//` og slettet
hele syklus-treet).
Hvis Bash ikke er tilgjengelig: vis kommandoen brukeren kan kjøre manuelt (samme
validering gjelder): `rm -rf .claude/okr/syklus/[id]/`
6. **Oppdater profil** — i `.claude/okr.local.md`:
- Inkrementer `sykluser_gjennomfort` med 1
- Oppdater `gjeldende_syklus.id` til neste syklus:
- Tertial: T1→T2→T3→T1 (med årsoppdatering)
- Kvartal: Q1→Q2→Q3→Q4→Q1 (med årsoppdatering)
- Sett `gjeldende_syklus.fase` til `planlegging`
- Oppdater `gjeldende_syklus.periode` til neste periodestreng
7. **Opprett ny syklusmappe** — skriv `.claude/okr/syklus/[ny-id]/status.md` med
OKF-frontmatter + tom mal (tabellstruktur med KR-kolonner, ingen data ennå):
```markdown
---
type: Status
syklus: [ny-id]
title: "Status [ny-id]"
description: "Fremdrift og scoring for syklus [ny-id]"
timestamp: "[ISO-8601]"
---
# OKR Status [ny-id]
[tom tabellstruktur med KR-kolonner]
```
Regenerér deretter OKF-indeksen for prosjekt-treet:
```bash
node ${CLAUDE_PLUGIN_ROOT}/scripts/okf-index.mjs .claude/okr
```
8. **Bekreft** — vis oppsummering:
```
Syklus [id] er arkivert i `.claude/okr/historikk/[id]/`.
Gjeldende syklus er nå [ny-id] (planleggingsfase).
Anbefalte neste steg:
- /okr:møter — planlegg oppstartsmøte for [ny-id]
- /okr:skriv — skriv nye OKR for [ny-id]
- /okr:kaskade — kaskader org-OKR til team-nivå
```
---
## Feilhåndtering
- **Fil kan ikke skrives:** Vis YAML som kan kopieres manuelt
- **Bruker avbryter midt i intervju:** `onboarding_status: partial` allerede lagret — neste kjøring tilbyr å fortsette
- **Linear API feiler:** Gi tydelig feilmelding, fortsett uten Linear-integrasjon
- **Mappeopprettelse feiler:** Vis `mkdir -p .claude/okr/strategisk-kontekst/` kommando brukeren kan kjøre manuelt
## Syklusberegning
Beregn gjeldende syklus-ID basert på dagens dato:
- **Tertial:** Jan-Apr = T1, Mai-Aug = T2, Sep-Des = T3
- **Kvartal:** Jan-Mar = Q1, Apr-Jun = Q2, Jul-Sep = Q3, Okt-Des = Q4
- Format: `T[1-3]-YYYY` eller `Q[1-4]-YYYY`