okr/commands/oppsett.md
Kjell Tore Guttormsen 77280ac319 feat(okr): tre-skrivere emitterer OKF-frontmatter + index-regenerering (SC2,SC3)
oppsett.md (eneste tre-skriver m/ Write+Bash): strategisk-kontekst-filer
faar OKF-frontmatter (type: Tildelingsbrev/Virksomhetsplan/Overordnede OKR),
retro -> type: Retrospektiv, ny-syklus status.md -> type: Status; regenererer
.claude/okr-indeksen via okf-index.mjs etter tre-skriv (2 punkter). skriv.md/
sporing.md har ikke Write -> dokumenterer OKF-frontmatter (type: OKR / Status)
i eksempel-output (malen brukeren lagrer). Lukker SC2-gapet: alle konsept-
filer paa disk baerer type:. Verify: okf-check fixture exit 0; suite 55/55.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SFW5scLL7oEwWWTv1fPQG6
2026-06-26 17:24:20 +02:00

19 KiB

name description allowed-tools argument-hint
okr:oppsett Konfigurer OKR-pluginen med dyp onboarding, profiloppdatering og syklusarkivering Read, Write, Bash, AskUserQuestion, ToolSearch, Glob [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: transport | helse | justis | digitalisering | utdanning | 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)

  1. OKR-historikk? Alternativer: aldri prøvd | prøver nå (første syklus) | erfaren (2+ sykluser)

  2. Hvis erfaren: Antall gjennomførte sykluser? (Hopp over hvis "aldri prøvd" eller "prøver nå")

  3. Hvem er OKR-sponsor (navn og rolle)? Personen som gir mandat og synlighet. Eksempel: "Divisjonsdirektør Kari Holm"

  4. Hvem er OKR-champion (navn og rolle)? Personen som driver det operative arbeidet. Eksempel: "Seniorrådgiver Per Lund"

  5. 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.

  6. 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)

  1. 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:

    ---
    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]
    
  2. 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).

  3. 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:

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 okf_version.)

Fase 4 — Struktur (3 min)

  1. Hvilke OKR-nivåer bruker dere? Alternativer (flervalg): etat | divisjon | avdeling | seksjon | team

  2. Din rolle i OKR-programmet? Alternativer: leder | produkteier | seksjonsleder | koordinator | annet

  3. Antall team som kjører OKR denne syklusen (ca.)? Tall

  4. 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)

  1. Oppgavestyringsverktøy? Alternativer: Linear | Jira | Azure DevOps | Planner | ingen | annet

  2. OKR-sporingsverktøy? Alternativer: Oboard | Quantive | regneark | ingen | annet

  3. Møteverktøy? Alternativer: Microsoft Teams | Zoom | annet

  4. Leveransemetodikk? Alternativer: Scrum | Kanban | SAFe | prosjekt | annet

  5. 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)

  1. 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."

  2. 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%?"

  3. Kjente utfordringer eller antipatterns dere har sett? Fritekst, ENTER for å hoppe over. Eksempler: "set-and-forget", "aktivitetsfokus i KR", "for mange Objectives"

  4. 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:

    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: transport | helse | justis | digitalisering | utdanning | 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:

---
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:
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:

    ---
    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å):

    ---
    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:

    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