Bump 1.5.0 -> 1.6.0 across plugin.json, CLAUDE.md title, okr-offentlig-sektor SKILL.md, README badge. README version-history row + Under-the-Hood Skills table; CHANGELOG 1.6.0 entry. CLAUDE.md gains OKF Knowledge Layout section (two-root model, okf-index/okf-check/compose-org-profile, lib/frontmatter), second skill in Skills table, and two architecture lines. Ref-count: kept '16 domain reference files' (correct -- freshen-references scores 16, excludes okr-quality-rubrics.md as the scoring instrument; 17 is the directory total). Tightened CLAUDE.md:20 wording to '16 domain' for clarity; did NOT apply the plan's 16->17 (would contradict the command). References dir untouched (SC9). Verify: node --test 55/55; all version surfaces 1.6.0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SFW5scLL7oEwWWTv1fPQG6
6.9 KiB
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-levelindex.md(verbatim OKF index format).scripts/okf-check.mjs— validate each concept file carriestype:(exit 1 + count otherwise); reportokf_versionper root.scripts/compose-org-profile.mjs— build the nested org-profile YAML with top-level OKF keys (type/resource/timestamp) before piping towrite-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)