--- 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: 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) 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 `okf_version`.) ### 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: 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: ```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`