# OKR Offentlig Sektor v1.6.0 Expert OKR guidance for Norwegian public sector. Google/Doerr methodology adapted for 4-month tertial cycles. ## Commands | Command | Description | |---------|-------------| | `/okr:skriv` | Write new OKR with guided Objective and KR creation | | `/okr:kvalitet` | Quality check OKR against rubric and antipatterns | | `/okr:kaskade` | Cascade OKR from org to team, visualize alignment | | `/okr:sporing` | Track progress, calculate scores, generate check-ins | | `/okr:møter` | Plan OKR workshops, check-ins, reviews, 1:1s | | `/okr:innføring` | OKR adoption planning, resistance handling, maturity | | `/okr:governance` | Tildelingsbrev translation, Riksrevisjon compliance | | `/okr:gap` | Automatic gap analysis between tildelingsbrev and current OKR | | `/okr:analyse` | Cross-cycle analytics with Mermaid trend visualizations | | `/okr:oppsett` | Configure plugin: onboarding interview (full/mvp), cycle archival, profile update. Args: `full\|mvp\|arkiver\|oppdater\|vis` | | `/okr:export` | Export OKR deliverables (quality review, gap matrix, status report, retrospective) to print-ready PDF via weasyprint | | `/okr:freshen-references` | KB self-evaluator: score the 16 domain reference files against an anchored rubric + currency-poll public sources | | `/okr:help` | Full overview of all commands, agents, and recommended cycle workflow | ## Agents | Agent | Model | Color | Tools | Role | |-------|-------|-------|-------|------| | kvalitetssjekker | sonnet | blue | Read, Glob | Score OKR quality against rubric | | kaskadebygger | sonnet | green | Read, Glob | Build OKR cascades between levels | | fremdriftssporer | sonnet | yellow | Read, Glob, ToolSearch | Calculate scores and generate reports | | møtefasilitator | sonnet | magenta | Read, Glob | Generate meeting agendas and materials | | styringsrådgiver | opus | cyan | Read, Glob | Tildelingsbrev analysis, governance | | gapanalytiker | sonnet | red | Read, Glob | Tildelingsbrev gap analysis and coverage matrix | | trendanalytiker | sonnet | purple | Read, Glob | Cross-cycle trend analysis and Mermaid visualization | ## Hooks | Event | Type | Purpose | |-------|------|---------| | SessionStart | command | Proactive coaching based on cycle position and OKR status | | UserPromptSubmit | command | Inject org profile (expanded YAML), current cycle, `.claude/okr/` summary, and archived cycle count | | PreCompact | prompt | Preserve OKR draft state during compaction | ## Skills | Component | Location | |-----------|----------| | SKILL.md (okr-offentlig-sektor) | `skills/okr-offentlig-sektor/SKILL.md` | | References (17) | `skills/okr-offentlig-sektor/references/` | | SKILL.md (okr-second-brain-search) | `skills/okr-second-brain-search/SKILL.md` | The second skill (`okr-second-brain-search`) does on-demand retrieval over the user's OKF-compatible wiki (native Glob/Read/Grep, no MCP) — see OKF Knowledge Layout below. ## State Management User configuration: `.claude/okr.local.md` in the project directory (not in plugin root). Org profile (reinstall-surviving): `~/.claude/okr/org/profil.md` — the machine-global org identity (`organisasjon:`/`program:`), written atomically (temp + `renameSync`) by `scripts/write-org-profile.mjs` during `/okr:oppsett`. Resolution is most-specific-wins: a project-local `.claude/okr.local.md` overrides the home profile; the home profile is the backwards-compatible fallback when no project config exists (read side: `hooks/scripts/inject-okr-context.mjs`). On any home-write failure the helper circuit-breaks to the gitignored project-local `.claude/okr.local.md`. Only the org *profile* migrates to home — cycle/`historikk` data stays cwd-bound. Template: `templates/okr.local.md.template` Context tree: `.claude/okr/` — `strategisk-kontekst/`, `syklus/[id]/`, `historikk/`, `dokumenter/` Onboarding state: `onboarding_status` field in okr.local.md (`partial` | `fullfort`) Cycle archival: `/okr:oppsett arkiver` — moves `syklus/` to `historikk/`, generates `retrospektiv.md` ## OKF Knowledge Layout Context files carry OKF-compatible frontmatter (Knowledge Catalog "Documents/kb Layout", aka "Metadata as Code" — not a formal "OKF v0.1" standard): a Title-Case `type` (`Organisasjonsprofil`, `Tildelingsbrev`, `Virksomhetsplan`, `Overordnede OKR`, `OKR`, `Retrospektiv`, `Status`) plus recommended `resource`/`title`/`description`/`tags`/`timestamp`. Only `type` is de-facto required. The flat frontmatter parser reads only single-line keys (`type`, profile/config fields); tree files may carry multi-line `tags` lists without breaking it. **Two bundle roots** with distinct lifecycles: project `.claude/okr/` (cwd-bound cycle/work) and home `~/.claude/okr/org/` (reinstall-surviving org identity). Each root carries its own `index.md` (no frontmatter; `# H1` + `* [title](link) - description`) and an `okf_version` marker. `okf-index`/`okf-check` run per root; retrieval Globs both (project preferred, else home). - `lib/frontmatter.mjs` — shared frontmatter parser/writer; both hooks route through it (strips trailing ` #…` only from unquoted values). - `scripts/okf-index.mjs` — regenerate a root's per-level `index.md` (verbatim OKF index format). - `scripts/okf-check.mjs` — validate each concept file carries `type:` (exit 1 + count otherwise); report `okf_version` per root. - `scripts/compose-org-profile.mjs` — build the nested org-profile YAML with top-level OKF keys (`type`/`resource`/`timestamp`) before piping to `write-org-profile.mjs`. Retrieval is on-demand via the `okr-second-brain-search` skill. The UserPromptSubmit hook no longer pre-injects the full context-file enumeration — it emits the core profile plus one resolved pointer to `index.md` (< 512 B, independent of file count). ## Language Policy - Commands, agents, user-facing text: Norwegian - Code, config, technical identifiers: English - SKILL.md: English (for broader LLM comprehension) ## Architecture ``` /okr:skriv ──→ kvalitetssjekker (auto) /okr:kvalitet ──→ kvalitetssjekker /okr:kaskade ──→ kaskadebygger /okr:sporing ──→ fremdriftssporer ──→ Linear MCP (optional) /okr:møter ──→ møtefasilitator /okr:governance ──→ styringsrådgiver /okr:innføring ──→ (inline, no agent) /okr:gap ──→ gapanalytiker /okr:analyse ──→ trendanalytiker /okr:oppsett ──→ (inline wizard: full/mvp/arkiver/oppdater/vis) /okr:oppsett arkiver ──→ cycle archival + retrospektiv-generering /okr:export ──→ scripts/export-pdf.py (weasyprint, documented prerequisite) /okr:freshen-references ──→ (inline KB-evaluator + currency-polling via WebSearch/Task) /okr:help ──→ (inline command/agent/workflow overview) SessionStart ──→ coaching-hook.mjs (proactive coaching) UserPromptSubmit ──→ inject-okr-context.mjs (core profile + resolved index.md pointer) okr-second-brain-search (skill) ──→ Glob/Read/Grep over .claude/okr/ + ~/.claude/okr/org/ (on-demand retrieval) ```