feat(okr): sync to v1.3.0 from ktg-privat

Syncs all changes from v1.0.0 through v1.3.0:

v1.1 (quick fixes):
- Fix deprecated Viva Goals references
- Add DFO-OKR terminology mapping
- Add tillitsvalgt/fagforening perspective
- Update Objectives recommendation from 3-5 to 2-3

v1.1 (persistent context):
- Deep onboarding interview (full/mvp)
- Persistent .claude/okr/ directory tree
- Context-aware commands
- Cycle archival with retrospective

v1.3 (AI-first differentiators):
- /okr:gap — tildelingsbrev gap analysis with coverage matrix
- /okr:analyse — cross-cycle Mermaid analytics
- SessionStart coaching hook (proactive, phase-aware)
- gapanalytiker + trendanalytiker agents
- inject-okr-context.mjs extended for historikk/

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-04-08 20:31:49 +02:00
commit ac95cd6a30
30 changed files with 1900 additions and 275 deletions

View file

@ -123,22 +123,24 @@ Key commands: `/linkedin:onboarding`, `/linkedin:post`, `/linkedin:quick`, `/lin
---
### [OKR for Public Sector](plugins/okr/) `v1.1.0` `🇳🇴 Norwegian`
### [OKR for Public Sector](plugins/okr/) `v1.3.0` `🇳🇴 Norwegian`
Your AI-powered OKR coach for Norwegian public sector — not just methodology, but a partner that learns your organization.
Your AI-powered OKR coach for Norwegian public sector — not just methodology, but a partner that learns your organization, tracks your progress across cycles, and coaches proactively.
Generic OKR assumes quarterly cycles, bonus-linked performance, and flat org charts. Norwegian government operates on 4-month tertials, tildelingsbrev mandates, and a six-level governance chain: Stortingsmelding → departementsstrategi → tildelingsbrev → etatsstrategi → divisjon → team OKR. v1.1 transforms the plugin from a methodology library into a personalized coach with persistent organizational context.
Generic OKR assumes quarterly cycles, bonus-linked performance, and flat org charts. Norwegian government operates on 4-month tertials, tildelingsbrev mandates, and a six-level governance chain: Stortingsmelding → departementsstrategi → tildelingsbrev → etatsstrategi → divisjon → team OKR. v1.3 adds the AI-first features that no commercial OKR tool can match.
- **Tildelingsbrev gap analysis**`/okr:gap` auto-reads your stored tildelingsbrev and current OKR, produces a coverage matrix showing which requirements are met, partially met, or uncovered
- **Cross-cycle analytics**`/okr:analyse` reads archived cycles from historikk/, generates Mermaid trend charts for score progression, antipattern frequency, and alignment coverage
- **Proactive coaching** — SessionStart hook calculates cycle position, detects at-risk KR, surfaces previous cycle learnings, and recommends actions based on phase (early/mid/late)
- **Deep onboarding** — 28-question interview across 6 phases (or 6-question MVP for quick start) builds a persistent organizational profile. Every command adapts automatically.
- **Persistent context** — store tildelingsbrev, org-OKR, and cycle data in `.claude/okr/`. Commands auto-read relevant files instead of asking you to paste.
- **Tildelingsbrev analysis** — Opus-powered agent classifies each requirement as Committed OKR, Aspirational OKR, KPI-only, or ignore. Auto-reads stored documents.
- **DFO terminology bridge** — maps between DFO's "mål- og resultatstyring" vocabulary and OKR concepts for smoother adoption
- **Antipattern detection** — 19 named failure modes (sandbagging, quarterly theater, goalpost moving, OKR-shaming) across formuleringsfeil, prosessfeil, kulturfeil, strukturfeil, ledelsesfeil
- **Cycle archival** — end-of-cycle workflow generates retrospective with scoring analysis, archives to historikk, and rolls forward to next cycle
- **CFR facilitation** — Conversations, Feedback, Recognition methodology where public sector's no-bonus structure becomes an advantage
Key commands: `/okr:oppsett`, `/okr:skriv`, `/okr:kvalitet`, `/okr:governance`, `/okr:kaskade`, `/okr:sporing`
Key commands: `/okr:oppsett`, `/okr:skriv`, `/okr:kvalitet`, `/okr:governance`, `/okr:gap`, `/okr:analyse`, `/okr:kaskade`, `/okr:sporing`
5 specialized agents · 8 commands · 3 hooks · 16 reference docs
7 specialized agents · 10 commands · 4 hooks · 16 reference docs
→ [Full documentation](plugins/okr/README.md)

View file

@ -1,6 +1,6 @@
{
"name": "okr",
"version": "1.1.0",
"version": "1.3.0",
"description": "Expert OKR guidance for Norwegian public sector. Write, review, cascade, track and govern OKR based on Google/Doerr methodology adapted for 4-month tertial cycles.",
"author": {
"name": "Kjell Tore Guttormsen"

View file

@ -20,10 +20,6 @@ Thumbs.db
*.swo
*~
# Internal planning
ROADMAP.md
BACKLOG.md
# Temporary files
*.tmp
*.bak

View file

@ -5,6 +5,19 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.3.0] - 2026-04-08
### Added
- **Command /okr:gap**: Automatic gap analysis between tildelingsbrev requirements and current OKR with coverage matrix
- **Command /okr:analyse**: Cross-cycle analytics with Mermaid trend visualizations (score trends, antipattern frequency, alignment)
- **Agent gapanalytiker**: Sonnet agent for tildelingsbrev coverage analysis
- **Agent trendanalytiker**: Sonnet agent for cross-cycle pattern analysis with Mermaid output
- **Hook SessionStart**: Proactive coaching based on cycle timeline position, at-risk KR detection, and previous cycle learnings
- **Hook extension**: inject-okr-context.mjs now reports archived cycle count from historikk/
### Changed
- Version bumped from 1.1.0 to 1.3.0
## [1.0.0] - 2026-04-08
### Changed

View file

@ -1,4 +1,4 @@
# OKR Offentlig Sektor v1.0.0
# OKR Offentlig Sektor v1.3.0
Expert OKR guidance for Norwegian public sector. Google/Doerr methodology adapted for 4-month tertial cycles.
@ -13,7 +13,9 @@ Expert OKR guidance for Norwegian public sector. Google/Doerr methodology adapte
| `/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:oppsett` | Configure plugin with org, cycle, Linear integration |
| `/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` |
## Agents
@ -24,12 +26,15 @@ Expert OKR guidance for Norwegian public sector. Google/Doerr methodology adapte
| 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 |
|-------|------|---------|
| UserPromptSubmit | command | Inject org/cycle context from `.claude/okr.local.md` |
| 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 |
| Stop | prompt | Remind user to save OKR work to tracking system |
@ -44,6 +49,9 @@ Expert OKR guidance for Norwegian public sector. Google/Doerr methodology adapte
User configuration: `.claude/okr.local.md` in the project directory (not in plugin root).
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`
## Language Policy
@ -61,5 +69,9 @@ Template: `templates/okr.local.md.template`
/okr:møter ──→ møtefasilitator
/okr:governance ──→ styringsrådgiver
/okr:innføring ──→ (inline, no agent)
/okr:oppsett ──→ (inline wizard)
/okr:gap ──→ gapanalytiker
/okr:analyse ──→ trendanalytiker
/okr:oppsett ──→ (inline wizard: full/mvp/arkiver/oppdater/vis)
/okr:oppsett arkiver ──→ cycle archival + retrospektiv-generering
SessionStart ──→ coaching-hook.mjs (proactive coaching)
```

View file

@ -1,160 +1,68 @@
# OKR for Public Sector
> Your AI-powered OKR coach for Norwegian public sector — not just a methodology library, but a partner that learns your organization, your challenges, and your current OKRs.
> Your AI-powered OKR coach for Norwegian public sector organizations — not just a methodology library, but a partner that knows your organization, your challenges, and your current OKRs.
*Solo project — bug reports welcome, PRs not accepted.*
![Version](https://img.shields.io/badge/version-1.1.0-blue)
![Commands](https://img.shields.io/badge/commands-8-blue)
![Agents](https://img.shields.io/badge/agents-5-orange)
![Hooks](https://img.shields.io/badge/hooks-3-green)
![References](https://img.shields.io/badge/references-16-yellow)
![Version](https://img.shields.io/badge/version-1.3.0-blue)
![Platform](https://img.shields.io/badge/platform-Claude_Code_Plugin-purple)
![Agents](https://img.shields.io/badge/agents-7-orange)
![Commands](https://img.shields.io/badge/commands-10-blue)
![Hooks](https://img.shields.io/badge/hooks-4-green)
![References](https://img.shields.io/badge/references-15-yellow)
![License](https://img.shields.io/badge/license-MIT-lightgrey)
## The Problem
---
Your organization has a strategy. Turning it into OKR that actually drive change is where it gets hard. Teams write Key Results that are just task lists. "Gjennomføre 5 kurs" is not a result — it's an activity. Tertial cycles don't match the quarterly model from Google. And nobody can trace the line from strategic intent through OKR down to what teams actually deliver.
## The Difference
Most OKR resources assume you're a startup. You're not. You have political steering, budget cycles tied to Stortinget, governance requirements from Riksrevisjonen, and mid-cycle priority changes from a minister who read something in Aftenposten.
Most OKR tools explain methodology. This plugin *coaches* you through it.
**This plugin gives you an OKR expert that knows Norwegian public sector governance, learns your organization's context, and works alongside you through the entire OKR process** — from turning strategy into OKR candidates, through iterative quality improvement, to check-in meetings and cycle reviews.
## How It Works: Onboarding First
The plugin starts by learning your context. This is what transforms generic OKR advice into guidance that fits your organization.
`/okr:oppsett full` runs a structured 28-question interview across six phases:
| Phase | Duration | What the Plugin Learns |
|-------|----------|----------------------|
| 1. Identity | 2 min | Organization type, ministry, domain, geography, size |
| 2. Maturity | 5 min | OKR history, sponsor/champion, salary decoupling, alignment approach |
| 3. Strategic context | 5 min | Tildelingsbrev goals, org-level OKR, strategic plan |
| 4. Structure | 3 min | OKR levels, user role, team count, cascade approach |
| 5. Tools | 2 min | Task/OKR/meeting tools, delivery methodology, Linear integration |
| 6. Culture | 3 min | Check-in rhythm, psychological safety, known antipatterns, union involvement |
Don't have 20 minutes? `/okr:oppsett mvp` asks 6 questions and gets you 80% of the value in under 5 minutes.
The interview is **interruptible** — quit mid-session and it picks up where you left off next time.
Everything is saved locally as a persistent organizational profile and automatically injected into every conversation. After onboarding, every command knows who you are, what cycle you're in, and what your strategic priorities are — without you repeating anything.
### Persistent Context
The plugin maintains a structured context tree in your project:
```
.claude/
okr.local.md # Expanded organizational profile
okr/
strategisk-kontekst/ # Your strategic documents
tildelingsbrev-2026.md # Key mandate goals (stored during onboarding)
overordnede-okr.md # Org-level OKR for alignment checking
syklus/
T1-2026/ # Active cycle
okr-digitalt-team.md # Team OKR files
status.md # Confidence levels and blockers
historikk/ # Archived cycles with retrospectives
```
Place your tildelingsbrev in `strategisk-kontekst/` once, and `/okr:governance` starts gap analysis without asking you to paste anything. Store your org-level OKR, and `/okr:kvalitet` checks team-OKR alignment automatically.
### The Single Most Important Question
> "Is OKR decoupled from salary and medarbeidersamtale?"
If the answer is no or uncertain, the plugin flags this as priority zero. OKR tied to compensation kills stretch goals, breeds sandbagging, and undermines the entire methodology. The plugin won't let you ignore this.
## Bring What You Have
You don't need to start from scratch. The plugin meets you where you are:
**Have a strategy or virksomhetsplan?** The plugin analyzes your strategic priorities and suggests OKR candidates that are outcome-focused, measurable, and scoped to a cycle.
**Have a tildelingsbrev?** Leaders can use it as an early analysis tool — the plugin separates what's actually an OKR candidate from what's a KPI, a compliance requirement, or a reporting routine. It's a way to build awareness of where OKR can add value:
The secret: persistent organizational context. After a one-time onboarding interview, every command knows who you are, where you are in the cycle, and what strategic goals you're working toward. No more pasting the same tildelingsbrev into every session. No more re-explaining your maturity level.
```
# Before v1.1 — every session started from scratch
> /okr:governance
"Please paste your tildelingsbrev..."
"What organization are you in?"
"What cycle are you in?"
I see from your tildelingsbrev that Samferdselsdepartementet expects:
- Reduce traffic fatalities by 50% by 2030 (vs. 2020) → OKR candidate
- Maintain 98% tunnel availability → KPI, not OKR
- Report quarterly on maintenance spend → Reporting routine
Here are 2 OKR candidates derived from the mandate:
Objective: Drive measurable progress toward Vision Zero on Norwegian roads
KR1: Reduce fatalities from 95 (2025) to 85 (2026)
Source: SSB table 08463 | Type: Committed
KR2: Reduce severe injuries from 650 to 600
Source: SSB | Type: Committed
KR3: Complete safety interventions on 100% of high-risk road segments
Source: Internal action plan | Type: Aspirational
Shall I quality-check these? Or cascade them to team level?
# After v1.1 — the plugin already knows
> /okr:governance
"I see your tildelingsbrev for 2026 in .claude/okr/strategisk-kontekst/.
Starting gap analysis against your org-level OKR..."
```
**Have existing OKR that need improvement?** Paste them in and get scored feedback with specific rewrites:
---
```
> /okr:kvalitet
## Table of Contents
Our current OKR:
Objective: Improve customer service
KR1: Complete 5 customer service training courses
KR2: Answer 90% of calls within 3 minutes
- [Quick Start](#quick-start)
- [Commands](#commands)
- [What's New in v1.1](#whats-new-in-v11)
- [Agents](#agents)
- [Hooks](#hooks)
- [Knowledge Base](#knowledge-base)
- [Workflow Examples](#workflow-examples)
- [Public Sector Features](#public-sector-features)
- [Configuration](#configuration)
- [Integrations](#integrations)
- [Limitations](#limitations)
- [Version History](#version-history)
- [License](#license)
─── Quality Assessment ───
Objective: "Improve customer service" — Score: 4/10
✗ Vague — what does "improve" mean?
✗ Not inspiring — reads like a task, not a goal
→ Suggested rewrite: "Become the most responsive service unit in the agency"
KR1: "Complete 5 training courses" — Score: 2/10
✗ Activity, not outcome — measures what you do, not what changes
✗ No connection to customer experience
→ Suggested rewrite: "Increase citizen satisfaction from 3.2 to 4.5/5.0"
KR2: "Answer 90% of calls within 3 minutes" — Score: 6/10
✓ Measurable with clear target
✗ Missing baseline — what's the current level?
→ Add baseline: "Improve call response rate from [X]% to 90% within 3 minutes"
Overall: 4/10 — rewrite recommended. Shall I draft improved versions?
```
**Starting from a vague idea?** The plugin guides you through structured questioning and suggests OKR aligned with your strategic context — because it already knows your organization's priorities from onboarding.
## The Development Process
OKR writing is iterative. The plugin supports the full cycle:
```
/okr:skriv Draft OKR — guided from idea to structured output
/okr:kvalitet Score against rubric, detect antipatterns, suggest rewrites
/okr:kaskade Verify alignment from organization level to team
/okr:sporing Track progress scores (0.0-1.0) during the cycle
/okr:møter Generate check-in agendas with actual OKR status
```
Each command builds on context from the others. Quality-check an OKR you just wrote. Cascade it down to team level. Track it during the cycle. Generate meeting agendas with real status data.
---
## Quick Start
Add the marketplace:
### Prerequisites
```bash
claude plugin marketplace add https://git.fromaitochitta.com/open/ktg-plugin-marketplace.git
```
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) installed
- Optional: [Linear](https://linear.app) account for OKR tracking
Or enable directly in `~/.claude/settings.json`:
### Installation
Add to your Claude Code plugin configuration:
```json
{
@ -164,61 +72,320 @@ Or enable directly in `~/.claude/settings.json`:
}
```
Then run `/okr:oppsett` — it takes 515 minutes and unlocks everything else.
### First Conversation
## All Commands
```
> /okr:oppsett mvp
```
| Command | What it does |
Six questions, five minutes. The plugin learns your organization, maturity level, tools, and cycle phase. From that point on, every command adapts to your context.
Want the full experience? Run `/okr:oppsett full` for a 28-question deep interview across six phases (identity, maturity, strategic context, structure, tools, culture). Takes 15-20 minutes, but unlocks everything — including storing your tildelingsbrev and org-level OKR for automatic alignment checks.
After setup:
```
> /okr:skriv We want to improve digital self-service for citizens
```
The plugin already knows your organization, cycle, and strategic goals. It drafts aligned OKR immediately.
---
## Commands
### Writing & Quality
| Command | Description |
|---------|-------------|
| `/okr:oppsett` | Onboarding interview (`full`/`mvp`), profile management (`oppdater`/`vis`), cycle archival (`arkiver`) |
| `/okr:skriv` | Write new OKR — guided from vague idea to scored, aligned output. Auto-reads strategic context. |
| `/okr:kvalitet` | Score existing OKR, detect 19 antipatterns, check alignment vs. stored org-OKR |
| `/okr:kaskade` | Cascade from organization to team. Auto-reads org-OKR for alignment mapping. |
| `/okr:sporing` | Track progress (0.0-1.0). Auto-loads OKR from `.claude/okr/syklus/`. |
| `/okr:moter` | Generate agendas for workshops, check-ins, reviews, and 1:1s |
| `/okr:governance` | Auto-reads stored tildelingsbrev. Gap analysis, Riksrevisjon-ready documentation. |
| `/okr:innforing` | Rollout planning adapted to your known maturity level. Union involvement guidance. |
| `/okr:skriv` | Write new OKR with guided Objective and KR creation. Reads stored strategic context for alignment. |
| `/okr:kvalitet` | Quality check against rubric, detect 19 antipatterns, check alignment vs. stored org-OKR |
### End of Cycle
### Alignment & Tracking
When a cycle ends, `/okr:oppsett arkiver` handles the full transition:
| Command | Description |
|---------|-------------|
| `/okr:kaskade` | Cascade OKR from organization to team. Auto-reads org-OKR from stored context. |
| `/okr:sporing` | Track progress (0.0-1.0 scoring), auto-load OKR from `.claude/okr/syklus/` |
1. Collects final scores for all KR
### Meetings & Change Management
| Command | Description |
|---------|-------------|
| `/okr:moter` | Plan OKR workshops, check-ins, reviews, and 1:1 conversations (CFR framework) |
| `/okr:innforing` | Rollout planning, resistance handling, maturity assessment. Adapts to your known maturity level. |
### Governance & Setup
| Command | Description |
|---------|-------------|
| `/okr:governance` | Translate tildelingsbrev to OKR, Riksrevisjon compliance. Auto-reads stored tildelingsbrev. |
| `/okr:oppsett` | Onboarding interview, profile management, cycle archival. Args: `full` `mvp` `arkiver` `oppdater` `vis` |
---
## What's New in v1.1
### Deep Onboarding Interview
`/okr:oppsett full` runs a structured 28-question interview across six phases:
| Phase | Duration | What the Plugin Learns |
|-------|----------|----------------------|
| 1. Identity | 2 min | Organization type, ministry, domain, size |
| 2. Maturity | 5 min | OKR history, sponsor/champion, salary decoupling |
| 3. Strategic context | 5 min | Tildelingsbrev goals, org-level OKR, strategic plan |
| 4. Structure | 3 min | OKR levels, user role, team count, cascade approach |
| 5. Tools | 2 min | Task/OKR/meeting tools, delivery methodology |
| 6. Culture | 3 min | Check-in rhythm, psychological safety, known antipatterns |
Don't have 20 minutes? `/okr:oppsett mvp` asks 6 questions and gets you 80% of the value.
The interview is **interruptible** — if you quit mid-session, it saves progress and picks up where you left off next time.
### Persistent Context Directory
The plugin now maintains a structured context tree in your project:
```
.claude/
okr.local.md # Expanded organizational profile
okr/
strategisk-kontekst/ # Your strategic documents
tildelingsbrev-2026.md # Key mandate goals
overordnede-okr.md # Org-level OKR
virksomhetsplan.md # Strategic plan
syklus/
T1-2026/ # Active cycle
okr-digitalt-team.md # Team OKR files
status.md # Confidence levels
historikk/ # Archived cycles with retrospectives
dokumenter/ # Ad-hoc reference documents
```
Every command reads from this tree automatically. Place your tildelingsbrev in `strategisk-kontekst/` once, and `/okr:governance` starts gap analysis without asking you to paste anything.
### Context-Aware Commands
All commands now check injected context before asking questions:
- **Already know your org and cycle?** Skips those questions entirely.
- **OKR files in the cycle directory?** Reads them directly instead of asking you to paste.
- **Tildelingsbrev stored?** Starts gap analysis immediately.
- **Maturity level known?** Tailors advice to your exact phase.
### Cycle Archival
`/okr:oppsett arkiver` handles the end-of-cycle workflow:
1. Reads all active OKR and collects final scores
2. Generates a retrospective with results, learnings, and antipattern analysis
3. Archives everything to `historikk/`
4. Rolls the profile forward to the next cycle
5. Creates a fresh cycle directory ready for planning
## Public Sector Governance
### The Single Most Important Question
| Framework | What the plugin does |
|-----------|---------------------|
| Tildelingsbrev | Parse requirements, separate OKR candidates from KPIs and compliance. Store once, reference automatically. |
| Riksrevisjonen | Generate audit-ready docs with baseline, target, data source, owner |
| Political steering | Handle mid-cycle priority changes with documented rationale |
| NTP / Stortingsmelding | Cascade from national policy down to team-level OKR |
> "Is OKR decoupled from salary and medarbeidersamtale?"
If the answer is no or uncertain, the plugin flags this as priority zero. OKR tied to compensation is the single most destructive antipattern — it kills stretch goals, breeds sandbagging, and undermines the entire methodology.
---
## Agents
5 specialized agents activate automatically based on context:
| Agent | Model | Role |
|-------|-------|------|
| kvalitetssjekker | Sonnet | Score OKR quality (1-10), detect 19 antipatterns, check alignment |
| kaskadebygger | Sonnet | Build cascades between org levels, find alignment gaps |
| fremdriftssporer | Sonnet | Calculate progress scores, forecast completion, flag at-risk KRs |
| motefasilitator | Sonnet | Generate meeting agendas and facilitation materials |
| styringsradgiver | Opus | Tildelingsbrev analysis, governance mapping, audit compliance |
---
## Hooks
| Event | Type | Purpose |
|-------|------|---------|
| UserPromptSubmit | command | Inject org profile, cycle phase, maturity, and `.claude/okr/` directory listing |
| PreCompact | prompt | Preserve OKR draft state during context compaction |
| Stop | prompt | Remind user to save OKR work to tracking system |
The UserPromptSubmit hook reads your expanded profile and scans the `.claude/okr/` tree in under 50ms. It tells every command what context files are available so they can read them proactively.
---
## Knowledge Base
15 reference files in `skills/okr-offentlig-sektor/references/`:
| File | Content |
|------|---------|
| `okr-framework.md` | Core methodology, scoring, cycle management |
| `okr-examples.md` | Good and bad examples from public sector |
| `okr-antipatterns.md` | 19 common OKR mistakes across 5 categories |
| `okr-offentlig-governance.md` | Tildelingsbrev, political steering, audit compliance |
| `okr-implementation.md` | Rollout methodology and change management |
| `okr-integrations.md` | OKR + Scrum/Kanban/SAFe integration |
| `cfr-framework.md` | CFR methodology and 1:1 templates |
| `meeting-guides.md` | Agendas for all OKR meeting types |
| `metrics-library.md` | Common KPIs for transport/roads/digital |
| `okr-calculator.md` | Progress calculation and confidence assessment |
| `okr-arshjul.md` | Annual cycle and budget synchronization |
| `okr-sources.md` | Bibliographic evidence base |
| `okr-cheatsheet.md` | One-page OKR best practices |
| `okr-oboard-guide.md` | Oboard tool guide |
| `individual-vs-team-okr.md` | Team vs individual OKR rationale |
| `dfo-okr-mapping.md` | DFO terminology mapping (maal- og resultatstyring) |
---
## Workflow Examples
### New Team Starting OKR
```
/okr:oppsett full # Deep onboarding (once, 15-20 min)
/okr:skriv # Write first OKR — plugin knows your context
/okr:kvalitet # Quality check with alignment scoring
/okr:kaskade # Verify alignment with org objectives (auto-loaded)
```
### Mid-Cycle Check-In
```
/okr:sporing # Auto-loads OKR from .claude/okr/syklus/, asks for new scores
/okr:moter # Generate check-in agenda pre-filled with actual OKR status
```
### Government Mandate Translation
```
/okr:governance # Auto-reads stored tildelingsbrev, starts gap analysis
/okr:kvalitet # Verify generated OKR quality
/okr:kaskade # Cascade to team level
```
### End of Cycle
```
/okr:oppsett arkiver # Archive with retrospective, roll forward to next cycle
/okr:moter # Plan kick-off workshop for new cycle
/okr:skriv # Draft new OKR informed by last cycle's learnings
```
---
## Public Sector Features
### Governance Integration
| Framework | Plugin Support |
|-----------|---------------|
| Tildelingsbrev | Translate to OKR with audit trail. Store once, reference automatically. |
| Riksrevisjonen | Documentation with baseline, target, data source per KR |
| Political steering | Handle mid-cycle priority changes with rationale |
| NTP / Stortingsmelding | Cascade from national policy to team OKR |
| DFO terminology | Mapping between maal- og resultatstyring and OKR concepts |
| Tillitsvalgte | Guidance on union involvement — Hovedavtalen, droftingsplikt, transparent KR |
## Under the Hood
### Tillitsvalgt Perspective
5 specialized agents, 3 context-aware hooks, and a knowledge base of 15 reference documents covering methodology, antipatterns, governance, meeting formats, and sector-specific metrics. The plugin remembers your organization context across sessions via local configuration and automatic context injection.
The plugin includes guidance on union involvement in OKR processes — droftingsplikt under Hovedavtalen, transparent KR that builds trust, and techniques for including tillitsvalgte as OKR stakeholders.
Tracking integration is optional. The plugin has built-in support for Linear, and the approach works with any issue tracker your organization already uses — Azure Boards, Jira, or similar. Configure through `/okr:oppsett`.
### CFR Framework
## When Not to Use This
Integrated Conversations, Feedback, Recognition methodology:
- **Conversations** — Structured 1:1 templates adapted for offentlig sektor
- **Feedback** — Continuous two-way feedback decoupled from formal medarbeidersamtale
- **Recognition** — Techniques that work without bonus-linking (which public sector can't do)
- **Private sector** — governance model, examples, and cycle structure are built for Norwegian public sector
- **Individual performance reviews** — OKR is a team tool; this plugin explicitly discourages individual OKR
- **Replacing workshops** — start with people and post-its, come back with your first draft for quality-checking
- **Project management** — OKR sets direction, it doesn't replace your backlog or Gantt chart
---
## Configuration
### Interactive Setup
Run `/okr:oppsett` to configure. The expanded profile covers:
| Section | Fields |
|---------|--------|
| Organisation | Name, type, ministry, domain, size, geography |
| Program | Maturity level, cycles completed, sponsor, champion, salary decoupling |
| Current cycle | ID, period, phase, team count |
| Tools | Task management, OKR tracking, meetings, delivery methodology |
| Culture | Check-in rhythm, psychological safety, known challenges |
| Integrations | Linear (team and project IDs) |
| Preferences | Language, examples, ambition level |
Configuration is saved to `.claude/okr.local.md` in your project directory (add to `.gitignore`).
### Subcommands
| Subcommand | Purpose |
|------------|---------|
| `/okr:oppsett full` | 28-question deep interview (recommended first time) |
| `/okr:oppsett mvp` | 6-question quick start |
| `/okr:oppsett arkiver` | Archive current cycle with retrospective |
| `/okr:oppsett oppdater` | Update specific profile fields |
| `/okr:oppsett vis` | Display current configuration |
---
## Integrations
### Linear
OKR tracking via Linear MCP when configured through `/okr:oppsett`:
- Progress score updates via comments
- Status field tracking
- Team and project organization
### Agile Frameworks
Knowledge base includes integration patterns for Scrum, Kanban, SAFe, and project portfolio management. See `references/okr-integrations.md`.
---
## Roadmap
See [ROADMAP.md](ROADMAP.md) for full details.
| Version | Status | Focus |
|---------|--------|-------|
| v1.1 | **Shipped** | Personalized onboarding, persistent context, cycle archival |
| v1.3 | Planned | Cycle lifecycle automation, cross-cycle analytics |
| v1.4 | Planned | Proactive coaching, deadline notifications, quality gates |
| v2.0 | Future | Multi-team support, cross-team alignment views, consolidated dashboards |
---
## Limitations
- Not tested in a real OKR cycle beyond the author's organization
- Norwegian public sector context only
- Linear has built-in MCP integration; Azure Boards and Jira work but require their own MCP setup
- No automated tests (hooks are verified manually)
- Windows: not tested
- Norwegian public sector context only — may not fit private sector or other countries
- Linear is the only supported tracking integration
- YAML parsing in hooks uses regex, not a full parser (works for controlled output)
---
See [CHANGELOG.md](CHANGELOG.md) for version history. [ROADMAP.md](ROADMAP.md) for what's next. [MIT License](LICENSE).
## Version History
See [CHANGELOG.md](CHANGELOG.md) for full details.
| Version | Date | Highlights |
|---------|------|------------|
| **1.3.0** | 2026-04-08 | AI-first differentiators: `/okr:gap` (tildelingsbrev gap analysis), `/okr:analyse` (cross-cycle Mermaid analytics), proactive SessionStart coaching |
| **1.1.0** | 2026-04-08 | Persistent context: deep onboarding interview (full/mvp), `.claude/okr/` directory tree, context-aware commands, cycle archival with retrospective |
| **1.0.0** | 2026-04-08 | Architecture overhaul: self-contained commands, hooks, model optimization, marketplace-ready |
| 0.5.0 | 2026-02-07 | First formal version |
---
## License
[MIT](LICENSE)

View file

@ -0,0 +1,103 @@
---
name: gapanalytiker
description: |
Bruk denne agenten for automatisk gap-analyse mellom tildelingsbrev-krav og
gjeldende OKR. Identifiserer udekte krav og OKR uten forankring.
<example>
Context: Bruker har tildelingsbrev og OKR lagret i .claude/okr/
user: "Sjekk om OKR dekker tildelingsbrevet"
assistant: "Launching gapanalytiker to compare tildelingsbrev requirements against current OKR."
</example>
<example>
Context: Bruker vil vite om alle tildelingsbrev-krav er dekket
user: "Er det noen gap mellom tildelingsbrev og OKR?"
assistant: "I'll use gapanalytiker to produce a coverage matrix and identify gaps."
</example>
model: sonnet
color: red
tools: ["Read", "Glob"]
---
# OKR Gapanalytiker
Du er en ekspert på å analysere samsvaret mellom tildelingsbrev-krav og
gjeldende OKR i norsk offentlig sektor.
## Din oppgave
Analyser tildelingsbrev-krav mot gjeldende OKR og identifiser gap i begge
retninger:
1. Tildelingsbrev-krav som ikke er dekket av OKR
2. OKR som ikke har forankring i tildelingsbrevet
## Tildelingsbrev-kategorisering
Kategoriser hvert krav fra tildelingsbrevet:
| Type innhold | OKR-relevant | Riktig håndtering |
|--------------|-------------|-------------------|
| Driftskrav ("Oppretthold X") | Lav | KPI-dashboard, ikke OKR |
| Resultatmål med tall | Høy | Key Result-kandidat |
| Strategiske satsinger | Høy | Objective-kandidat |
| Rapporteringskrav | Lav | Rapporteringsrutine |
| Særskilte oppdrag | Medium | Vurder case by case |
Kun krav markert som høy eller medium OKR-relevans inkluderes i gap-analysen.
## Dekningsanalyse
For hvert OKR-relevant krav:
1. **Semantisk match**: Søk etter nøkkelord og konsepter i OKR-teksten
2. **Eksplisitt referanse**: Sjekk om OKR refererer til kravet direkte
3. **KR-alignment**: Vurder om noen KR måler det kravet etterspør
4. **Klassifiser dekning**:
- **Dekket**: OKR/KR adresserer kravet eksplisitt
- **Delvis dekket**: Relatert OKR finnes men dekker ikke fullt ut
- **Udekket**: Ingen OKR adresserer kravet
## Reverse-analyse
For hver gjeldende OKR:
1. **Spor til tildelingsbrev**: Finn korresponderende krav
2. **Klassifiser forankring**:
- **Forankret**: Tydelig kobling til tildelingsbrev-krav
- **Indirekte forankret**: Kobling via overordnet strategi
- **Fristilt**: Ingen governance-forankring
Fristilte aspirational OKR er akseptable — flagg dem men kritiser ikke.
Fristilte committed OKR er et problem — de bør ha governance-forankring.
## Anbefalinger
For hvert udekket krav, foreslå OKR-formulering:
1. **Objective**: Inspirerende, outcome-fokusert (ikke tildelingsbrevets tekniske språk)
2. **2-3 Key Results**: Målbare, med baseline → target
3. **Type**: Committed (regulatorisk krav) eller Aspirational (strategisk satsing)
Følg formateringen fra OKR-rammeverket:
```
Objective: [Inspirerende formulering]
KR1: [Øke/Redusere X fra [baseline] til [target] innen [dato]]
KR2: [Oppnå Y målt ved [metode]]
KR3: [Levere Z verifisert av [kilde]]
Type: Committed / Aspirational
```
## Output-format
Lever følgende strukturerte rapport:
1. **Dekningsmatrise** — tabell med alle OKR-relevante krav og status
2. **Udekte krav** — detaljert for hvert gap med OKR-forslag
3. **OKR uten forankring** — tabell med forankringsstatus
4. **Sammendrag** — nøkkeltall (totalt, dekket, udekket, %)
5. **Anbefalte neste steg** — prioritert handlingsliste
## Referanser
- `${CLAUDE_PLUGIN_ROOT}/skills/okr-offentlig-sektor/references/okr-offentlig-governance.md`

View file

@ -0,0 +1,153 @@
---
name: trendanalytiker
description: |
Bruk denne agenten for å analysere OKR-trender på tvers av sykluser.
Leser arkiverte resultater og identifiserer mønstre, fremgang og risiko.
<example>
Context: Bruker har 3+ arkiverte sykluser
user: "Vis OKR-trender over tid"
assistant: "Launching trendanalytiker to analyze cross-cycle patterns and generate trend visualizations."
</example>
<example>
Context: Bruker lurer på om de forbedrer seg
user: "Blir vi bedre på OKR?"
assistant: "I'll use trendanalytiker to compare scores and patterns across your archived cycles."
</example>
model: sonnet
color: purple
tools: ["Read", "Glob"]
---
# OKR Trendanalytiker
Du er en ekspert på å analysere OKR-trender over tid og identifisere
mønstre i organisasjonens OKR-praksis.
## Din oppgave
Les arkiverte sykluser fra `.claude/okr/historikk/` og produser trendanalyse
med Mermaid-visualiseringer.
## Datalesing
For hver mappe i `historikk/`:
1. **retrospektiv.md** — YAML-frontmatter inneholder:
- `syklus`: Syklus-ID (f.eks. T1-2025)
- `periode`: Tekstlig periode
- `arkivert`: ISO-dato for arkivering
- `samlet_score`: Aggregert OKR-score (0.0-1.0)
- Brødtekst inneholder læringer og refleksjoner
2. **[id]-resultater.md** — Detaljerte resultater:
- Objectives med KR-scorer
- Kommentarer og kontekst
- Status per KR
Ekstraher strukturert data:
- Syklus-ID og periode
- Objectives med individuelle KR-scorer
- Samlet score
- Nevnte antipatterns
- Læringer
## Analyser
### Score-trender
1. **Aggregert trend**: `samlet_score` per syklus → tidsserie
2. **Per-Objective trend**: Sammenlign like Objectives på tvers av sykluser
3. **KR-prestasjon**: Identifiser KR-typer som konsekvent scorer høyt/lavt
4. **Beregn trend**: Gjennomsnittlig endring per syklus (lineær trend)
### Antipattern-frekvens
Les antipattern-kategorier fra referanser:
- **Formuleringsfeil**: Aktivitetsfokus i KR, binære KR, vage Objectives
- **Prosessfeil**: Set-and-forget, retrospektiv-mangel, sandbægging
- **Ambisjonsbalanse**: For mange Objectives, for ambisiøst, for forsiktig
- **Organisatoriske feil**: Silo-OKR, OKR-shaming, manglende sponsor
- **Offentlig sektor-spesifikke**: Tildelingsbrev-drift, politisk overreaksjon
For hvert antipattern nevnt i retrospektiver:
1. Tell forekomst per syklus
2. Flagg **vedvarende** (2+ påfølgende sykluser) med spesifikk anbefaling
3. Flagg **løste** (forekom tidlig, ikke lenger) som suksesshistorie
### Alignment-utvikling
Hvis overordnede-okr.md finnes:
1. For hver syklus: tell hvor mange org-KR som har team-OKR-støtte
2. Beregn dekning-prosent per syklus
3. Identifiser org-KR som konsekvent mangler team-støtte
## Mermaid-output
### Score-trend (xychart-beta)
````
```mermaid
xychart-beta
title "OKR Score-trend"
x-axis ["T1-2025", "T2-2025", "T3-2025"]
y-axis "Samlet score" 0 --> 1.0
line [0.45, 0.52, 0.58]
```
````
### Antipattern-fordeling (pie)
````
```mermaid
pie title "Gjentakende antipatterns"
"Aktivitetsfokus i KR" : 3
"Set-and-forget" : 2
```
````
### Alignment-dekning (xychart-beta bar)
````
```mermaid
xychart-beta
title "Alignment: Team-dekning av org-KR"
x-axis ["T1-2025", "T2-2025", "T3-2025"]
y-axis "Dekning %" 0 --> 100
bar [60, 75, 85]
```
````
### Tekst-fallback
Vis alltid en tekst-tabell i tillegg til Mermaid, for tilfeller der
Mermaid ikke rendres:
```
Score-utvikling:
T1-2025: 0.45 ████████░░░░░░░░░░░░
T2-2025: 0.52 ██████████░░░░░░░░░░
T3-2025: 0.58 ███████████░░░░░░░░░
Trend: ↗ +0.06/syklus
```
## Modenhetsvurdering
Map score-bane til modenhetsnivåer:
| Gjennomsnittlig score | Modenhetsnivå |
|----------------------|---------------|
| < 0.3 | Utforsker |
| 0.3-0.5 | Pilot |
| 0.5-0.7 | Skalering |
| > 0.7 | Moden |
Sammenlign med selvrapportert `modenhetsnivaa` fra okr.local.md.
Hvis avvik: kommenter forsiktig ("Score-trenden tilsier [nivå], mens
organisasjonen rapporterer [nivå]. Vurder å oppdatere profilen.").
## Referanser
- `${CLAUDE_PLUGIN_ROOT}/skills/okr-offentlig-sektor/references/okr-antipatterns.md`
- `${CLAUDE_PLUGIN_ROOT}/skills/okr-offentlig-sektor/references/okr-framework.md`

View file

@ -0,0 +1,152 @@
---
name: okr:analyse
description: Kryss-syklus analyse med trendvisualisering
allowed-tools: Read, AskUserQuestion, Task, Glob
argument-hint: "[trender|antipatterns|alignment|sammendrag]"
---
# OKR Analyse — Kryss-syklus trender
Analyser OKR-historikk på tvers av sykluser. Vis score-trender, gjentakende
antipatterns og alignment-utvikling med Mermaid-visualiseringer.
## Kontekstbevissthet
OKR-kontekst injiseres automatisk via hook. Sjekk system-konteksten:
- Hvis arkiverte sykluser er listet (f.eks. "Arkiverte sykluser (3): T1-2025, T2-2025, T3-2025"):
les filene i `.claude/okr/historikk/` direkte.
- Hvis ingen arkiverte sykluser finnes: vis hjelpsom melding (se edge cases).
- Sjekk også gjeldende syklus for sammenligning mot historikk.
## Ruting basert på argument
| Argument | Handling |
|----------|----------|
| _(ingen)_ | Vis sammendrag av alle tilgjengelige analyser |
| `trender` | Score-trender over sykluser med Mermaid-graf |
| `antipatterns` | Gjentakende antipatterns på tvers av sykluser |
| `alignment` | Alignment-endringer: team-dekning av org-mål over tid |
| `sammendrag` | Komplett analyse-rapport med alle tre dimensjoner |
## Edge cases
### 0 arkiverte sykluser
Vis:
> Ingen arkiverte sykluser funnet i `.claude/okr/historikk/`.
> Etter fullført syklus, bruk `/okr:oppsett arkiver` for å arkivere resultater.
> Med 2+ arkiverte sykluser kan du se trender og mønstre.
### 1 arkivert syklus
Vis baseline-verdier fra den ene syklusen:
> Kun én arkivert syklus ([id]). Viser baseline-verdier.
> Etter neste syklus kan vi beregne trender og identifisere mønstre.
Vis likevel: samlet score, Objectives og KR-resultater, identifiserte antipatterns.
### 2+ arkiverte sykluser
Full trendanalyse med Mermaid-grafer.
## Arbeidsflyt
### 1. Datainnsamling
Les alle mapper i `.claude/okr/historikk/`. For hver arkivert syklus:
- Les `retrospektiv.md` — YAML-frontmatter inneholder `syklus`, `periode`,
`arkivert`, `samlet_score`
- Les `[id]-resultater.md` — detaljerte KR-scorer og kommentarer
- Ekstraher: syklus-ID, periode, endelig score per KR, samlet score,
identifiserte antipatterns, læringer
### 2. Score-trender
Aggreger `samlet_score` per syklus til en tidsserie. Generer Mermaid xychart-beta:
````
```mermaid
xychart-beta
title "OKR Score-trend"
x-axis ["T1-2025", "T2-2025", "T3-2025", "T1-2026"]
y-axis "Samlet score" 0 --> 1.0
line [0.45, 0.52, 0.58, 0.63]
```
````
**Tekst-fallback** (vis alltid i tillegg til Mermaid):
```
Score-utvikling:
T1-2025: 0.45 ████████░░░░░░░░░░░░
T2-2025: 0.52 ██████████░░░░░░░░░░
T3-2025: 0.58 ███████████░░░░░░░░░
T1-2026: 0.63 ████████████░░░░░░░░
Trend: ↗ +0.06/syklus
```
Generer også per-Objective score-trender hvis flere sykluser har sammenlignbare
Objectives (samme eller lignende formulering).
### 3. Antipattern-analyse
Les referansemateriale:
- `${CLAUDE_PLUGIN_ROOT}/skills/okr-offentlig-sektor/references/okr-antipatterns.md`
Skann retrospektiver for nevnte antipatterns. Kategorier fra referansefilen:
- Formuleringsfeil
- Prosessfeil
- Ambisjonsbalanse
- Organisatoriske feil
- Offentlig sektor-spesifikke
Tell frekvens på tvers av sykluser. Generer Mermaid pie:
````
```mermaid
pie title "Gjentakende antipatterns"
"Aktivitetsfokus i KR" : 3
"Set-and-forget" : 2
"For mange Objectives" : 1
```
````
**Flagg persistent antipatterns**: Antipatterns som opptrer i 2+ påfølgende
sykluser markeres som "vedvarende" med spesifikk handlingsanbefaling.
### 4. Alignment-analyse
Hvis `.claude/okr/strategisk-kontekst/overordnede-okr.md` finnes:
- Sammenlign hvor mange org-nivå KR som hadde team-støtte i hver syklus
- Generer dekning-prosent per syklus
````
```mermaid
xychart-beta
title "Alignment: Team-dekning av org-KR"
x-axis ["T1-2025", "T2-2025", "T3-2025"]
y-axis "Dekning %" 0 --> 100
bar [60, 75, 85]
```
````
Identifiser org-KR som konsekvent mangler team-støtte.
### 5. Sammendrag
Kombiner alle tre analyser. Legg til:
- **Modenhetsbane**: Map score-trender til modenhetsnivåer
- < 0.3 gjennomsnitt = "utforsker"
- 0.3-0.5 = "pilot"
- 0.5-0.7 = "skalering"
- \> 0.7 = "moden"
- **Sammenlign med selvrapportert modenhet** fra okr.local.md
- **Anbefalinger for neste syklus** basert på trender og mønstre
## Delegering
Bruk Task for å sende datainnsamling til trendanalytiker-agenten.
Send med: alle historikk-filer, gjeldende syklus-data, og overordnede-okr.md.
Motta tilbake strukturert analyse med Mermaid-visualiseringer.
## Referanser
- `${CLAUDE_PLUGIN_ROOT}/skills/okr-offentlig-sektor/references/okr-antipatterns.md`
- `${CLAUDE_PLUGIN_ROOT}/skills/okr-offentlig-sektor/references/okr-framework.md`

153
plugins/okr/commands/gap.md Normal file
View file

@ -0,0 +1,153 @@
---
name: okr:gap
description: Automatisk gap-analyse mellom tildelingsbrev og gjeldende OKR
allowed-tools: Read, AskUserQuestion, Task
argument-hint: "[tildelingsbrev-fil eller tomt for auto-deteksjon]"
---
# OKR Gap-analyse — Tildelingsbrev vs OKR
Analyser automatisk om gjeldende OKR dekker kravene i tildelingsbrevet, og om
OKR har forankring i styrende dokumenter.
## Kontekstbevissthet
OKR-kontekst injiseres automatisk via hook. Sjekk system-konteksten FØR du spør brukeren:
- Hvis tildelingsbrev finnes i `.claude/okr/strategisk-kontekst/tildelingsbrev-*.md`
(listet i system-kontekst): les den automatisk.
- Hvis OKR finnes i `.claude/okr/syklus/[id]/`: les dem automatisk.
- Hvis `.claude/okr/strategisk-kontekst/overordnede-okr.md` finnes: les den for
org-nivå alignment.
- Bruk aldri generisk rådgivning når spesifikke data er tilgjengelig.
## Arbeidsflyt
### 1. Datainnsamling
Auto-les fra persistent context:
1. **Tildelingsbrev**: `.claude/okr/strategisk-kontekst/tildelingsbrev-*.md`
- Hvis flere tildelingsbrev finnes: spør brukeren hvilken å bruke
- Hvis ingen finnes: be brukeren lime inn tekst eller lagre med `/okr:oppsett full`
2. **Gjeldende OKR**: `.claude/okr/syklus/[id]/okr-*.md`
- Hvis ingen finnes: informer og anbefal `/okr:skriv`
3. **Overordnede OKR**: `.claude/okr/strategisk-kontekst/overordnede-okr.md`
- Valgfritt — brukes for å vise org-nivå dekning
### 2. Tildelingsbrev-parsing
Les referansemateriale:
- `${CLAUDE_PLUGIN_ROOT}/skills/okr-offentlig-sektor/references/okr-offentlig-governance.md`
Ekstraher individuelle krav fra tildelingsbrevet. Kategoriser hvert krav:
| Type innhold | OKR-egnet | Riktig håndtering |
|--------------|-----------|-------------------|
| Driftskrav ("Oppretthold X") | Lav | KPI-dashboard |
| Resultatmål med tall | Høy | Key Result-kandidat |
| Strategiske satsinger | Høy | Objective-kandidat |
| Rapporteringskrav | Lav | Rapporteringsrutine |
| Særskilte oppdrag | Medium | Case by case |
### 3. OKR-mapping (tildelingsbrev → OKR)
For hvert OKR-relevant krav i tildelingsbrevet:
- Søk i gjeldende OKR etter dekning (nøkkelord, semantisk match, eksplisitt referanse)
- Vurder om noen KR måler det kravet etterspør
- Klassifiser:
| Status | Beskrivelse |
|--------|-------------|
| **Dekket** | OKR eller KR dekker kravet eksplisitt |
| **Delvis dekket** | Relatert OKR finnes men dekker ikke kravet fullstendig |
| **Udekket** | Ingen OKR adresserer dette kravet |
### 4. Reverse-mapping (OKR → tildelingsbrev)
For hver gjeldende OKR:
- Spor tilbake til tildelingsbrev-krav
- Klassifiser:
| Forankring | Beskrivelse |
|------------|-------------|
| **Forankret** | Tydelig kobling til tildelingsbrev-krav |
| **Indirekte forankret** | Relatert til overordnet strategi |
| **Fristilt** | Ingen governance-forankring (OK for aspirational OKR) |
### 5. Rapport-generering
Bruk følgende output-format.
## Output-format
```
## Gap-analyse: Tildelingsbrev vs OKR
**Tildelingsbrev:** [filnavn eller kilde]
**OKR-kilde:** [syklusmappe eller manuelt oppgitt]
**Analysedato:** [dato]
**Org-OKR:** [ja/nei — om overordnede-okr.md ble brukt]
---
### Dekningsmatrise
| # | Tildelingsbrev-krav | Type | Dekket av | Status |
|---|---------------------|------|-----------|--------|
| 1 | [krav-tekst] | Resultatmål | O1/KR2 | dekket |
| 2 | [krav-tekst] | Strategisk satsing | O2 | delvis dekket |
| 3 | [krav-tekst] | Resultatmål | — | udekket |
### Udekte krav (gap)
For hvert udekket krav:
#### Krav [N]: [tittel]
**Sitat:** > "[fra tildelingsbrev]"
**Type:** [kategori]
**Anbefalt handling:**
- [Forslag til OKR-formulering som dekker kravet]
- [Alternativ: Følg opp som KPI hvis driftskrav]
### OKR uten tildelingsbrev-forankring
| OKR | Type | Forankring |
|-----|------|------------|
| O1: [tekst] | Committed | Forankret i krav 1, 4 |
| O3: [tekst] | Aspirational | Fristilt (OK for stretch) |
### Sammendrag
- **Tildelingsbrev-krav totalt:** [N]
- **OKR-relevante krav:** [N]
- **Dekket:** [N] ([%])
- **Delvis dekket:** [N] ([%])
- **Udekket:** [N] ([%]) — krever handling
- **OKR uten forankring:** [N] (OK hvis aspirational)
### Anbefalte neste steg
1. [Handling for å lukke viktigste gap]
2. [Bruk /okr:skriv for å lage OKR for udekte krav]
3. [Bruk /okr:kvalitet for å sjekke de nye OKR]
```
## Håndtering av ufullstendig data
| Situasjon | Handling |
|-----------|----------|
| Tildelingsbrev mangler | "Ingen tildelingsbrev funnet i .claude/okr/strategisk-kontekst/. Lim inn tekst eller lagre tildelingsbrev med /okr:oppsett full (fase 3)." |
| OKR mangler | "Ingen OKR funnet i gjeldende syklus. Bruk /okr:skriv for å opprette." |
| Begge mangler | "Verken tildelingsbrev eller OKR funnet. Start med /okr:oppsett for å sette opp kontekst." |
| Kun tildelingsbrev | Kjør tildelingsbrev-parsing og vis forslag til OKR. |
| Kun OKR | Vis OKR-oversikt uten gap-analyse, oppfordre til å legge inn tildelingsbrev. |
## Delegering
Bruk Task for å sende analysen til gapanalytiker-agenten for detaljert analyse.
Send med: tildelingsbrev-innhold, OKR-innhold, og overordnede-okr hvis tilgjengelig.
Motta tilbake ferdig dekningsmatrise.
## Referanser
- `${CLAUDE_PLUGIN_ROOT}/skills/okr-offentlig-sektor/references/okr-offentlig-governance.md`
- `${CLAUDE_PLUGIN_ROOT}/skills/okr-offentlig-sektor/references/okr-arshjul.md`

View file

@ -9,6 +9,20 @@ argument-hint: "[tildelingsbrev, revisjonsrapport, eller spørsmål]"
Hjelp brukeren med å koble OKR til styringsmekanismer i norsk offentlig sektor.
## Kontekstbevissthet
OKR-kontekst injiseres automatisk via hook. Sjekk system-konteksten FØR du spør brukeren:
- Hvis organisasjon og syklus er kjent: hopp over de spørsmålene
- Hvis relevante filer er listet (f.eks. `.claude/okr/syklus/T1-2026/okr-teamet.md`):
les den filen direkte i stedet for å be brukeren lime inn innhold
- Hvis `.claude/okr/strategisk-kontekst/` inneholder relevante docs: les dem
- Hvis tildelingsbrev finnes i `.claude/okr/strategisk-kontekst/tildelingsbrev-*.md`
(fra system-kontekst), les den automatisk og start gap-analyse direkte uten å be
brukeren lime inn tekst.
- Sjekk om `.claude/okr/strategisk-kontekst/overordnede-okr.md` finnes.
Hvis ja, bruk den til å vise dekning: hvilke tildelingsbrev-krav er allerede dekket
av eksisterende org-OKR.
## Styringsrammeverk
```

View file

@ -9,9 +9,23 @@ argument-hint: "[fase, utfordring, eller modenhetsvurdering]"
Hjelp brukeren med å innføre OKR i organisasjonen på en bærekraftig måte.
## Kontekstbevissthet
OKR-kontekst injiseres automatisk via hook. Sjekk system-konteksten FØR du spør brukeren:
- Hvis organisasjon og syklus er kjent: hopp over de spørsmålene
- Hvis relevante filer er listet (f.eks. `.claude/okr/syklus/T1-2026/okr-teamet.md`):
les den filen direkte i stedet for å be brukeren lime inn innhold
- Hvis `.claude/okr/strategisk-kontekst/` inneholder relevante docs: les dem
- Hvis modenhetsnivå er kjent fra injisert kontekst (f.eks. 'skalering'), bruk det
direkte uten å spørre. Tilpass råd eksplisitt til det kjente modenhetsnivået.
- Hvis `okr_frikoblet_fra_loenn: false` er i profil, adresser dette som prioritet 0
før andre innføringsråd gis.
## Arbeidsflyt
1. **Kartlegg situasjon** — spør med AskUserQuestion:
1. **Kartlegg situasjon** — sjekk injisert kontekst først. Hvis modenhetsnivå og
fase allerede er kjent, bruk dem direkte. Spør kun med AskUserQuestion om det
som mangler:
- Hvor er dere i innføringsløpet? (planlegger / pilot / utrulling)
- Hva er den største utfordringen nå?
- Har dere ledelsesforankring?
@ -29,6 +43,7 @@ Hjelp brukeren med å innføre OKR i organisasjonen på en bærekraftig måte.
- Velg pilot-team
- Definer suksesskriterier
- Planlegg opplæring
- Drøft med tillitsvalgte (Hovedavtalen)
### Fase 2: Pilot (1-2 sykluser)
- Kjør OKR med pilot-team
@ -56,6 +71,7 @@ Hjelp brukeren med å innføre OKR i organisasjonen på en bærekraftig måte.
| "Vi har ikke tid" | Arbeidspress | OKR sparer tid ved å prioritere det viktigste. Start lite. |
| "Det passer ikke offentlig sektor" | Skepsis til privat-sektor metoder | Vis tilpassingen: tertial-sykluser, tildelingsbrev-kobling, compliance. |
| "Vi prøvde dette før" | Tidligere feil | Spør hva som gikk galt. Adresser spesifikke problemer. |
| "Fagforeningen er ikke informert" | Manglende medvirkning | Hovedavtalen krever drøfting. Involver tillitsvalgte tidlig — de kan bli OKR-ambassadører. Se okr-implementation.md. |
## OKR Modenhetsvurdering
@ -108,6 +124,16 @@ Uke 17-18: Evaluering
- Beslutning om utrulling
```
## Tillitsvalgt-perspektiv
OKR-innføring i offentlig sektor **krever** involvering av tillitsvalgte:
- Informer hovedtillitsvalgt før pilotbeslutning
- Gjennomfør formell drøfting (Hovedavtalen)
- Inviter tillitsvalgt som observatør i pilot
- Dokumenter at OKR ikke kobles til lønn/evaluering
Se detaljer: `${CLAUDE_PLUGIN_ROOT}/skills/okr-offentlig-sektor/references/okr-implementation.md` (seksjon "Tillitsvalgte og fagforeninger")
## Referanser
- `${CLAUDE_PLUGIN_ROOT}/skills/okr-offentlig-sektor/references/okr-implementation.md` — full innføringsmetodikk

View file

@ -9,6 +9,16 @@ argument-hint: "[overordnet OKR eller team]"
Hjelp brukeren med å kaskadere OKR fra organisasjonsnivå til team, og sikre alignment.
## Kontekstbevissthet
OKR-kontekst injiseres automatisk via hook. Sjekk system-konteksten FØR du spør brukeren:
- Hvis organisasjon og syklus er kjent: hopp over de spørsmålene
- Hvis relevante filer er listet (f.eks. `.claude/okr/syklus/T1-2026/okr-teamet.md`):
les den filen direkte i stedet for å be brukeren lime inn innhold
- Hvis `.claude/okr/strategisk-kontekst/` inneholder relevante docs: les dem
- Hvis org-OKR allerede finnes i `.claude/okr/strategisk-kontekst/overordnede-okr.md`
(fra system-kontekst), les den. Hopp over spørsmålet om org-OKR.
## Kaskaderingsprinsipp
```

View file

@ -9,9 +9,21 @@ argument-hint: "[OKR å vurdere]"
Hjelp brukeren med å vurdere kvaliteten på eksisterende OKR og foreslå forbedringer.
## Kontekstbevissthet
OKR-kontekst injiseres automatisk via hook. Sjekk system-konteksten FØR du spør brukeren:
- Hvis organisasjon og syklus er kjent: hopp over de spørsmålene
- Hvis relevante filer er listet (f.eks. `.claude/okr/syklus/T1-2026/okr-teamet.md`):
les den filen direkte i stedet for å be brukeren lime inn innhold
- Hvis `.claude/okr/strategisk-kontekst/` inneholder relevante docs: les dem
- Hvis `.claude/okr/strategisk-kontekst/overordnede-okr.md` er tilgjengelig fra system-
konteksten, les den og sjekk alignment mellom KR som vurderes og org-OKR. Legg til
Alignment-seksjon i rapporten.
## Arbeidsflyt
1. **Motta OKR** — be brukeren dele OKR-ene som skal vurderes
1. **Motta OKR** — sjekk injisert kontekst først. Hvis aktive OKR-filer er listet
i system-kontekst, tilby å lese dem direkte. Ellers be brukeren dele OKR-ene.
- Kan være tekst, bilde, eller hentet fra Linear
2. **Kjør kvalitetssjekk** — vurder mot rubrikk (se under)

View file

@ -1,131 +1,497 @@
---
name: okr:oppsett
description: Konfigurer OKR-pluginen med organisasjon, syklus og integrasjoner
allowed-tools: Read, Write, Bash, AskUserQuestion, ToolSearch
argument-hint: "[oppdater|vis|reset]"
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 - Konfigurasjon og integrasjoner
# OKR Oppsett - Onboarding, konfigurasjon og syklushandtering
Kjør en interaktiv wizard for å konfigurere OKR-pluginen for brukerens organisasjon.
Interaktiv konfigurasjon av OKR-pluginen. Bygger en persistent organisasjonsprofil
som alle andre kommandoer bruker automatisk via hook-injeksjon.
## Arbeidsflyt
## Ruting basert pa argument
### Steg 1: Sjekk eksisterende konfigurasjon
| Argument | Handling |
|----------|----------|
| _(ingen)_ | Detekter eksisterende konfig, tilby meny |
| `full` | Kjor 6-fase dyp onboarding (15-20 min) |
| `mvp` | Kjor minimum viable onboarding (6 sporsmaal, ~5 min) |
| `arkiver` | Arkiver gjeldende syklus med retrospektiv |
| `oppdater` | Oppdater spesifikke felt i eksisterende profil |
| `vis` | Vis gjeldende konfigurasjon |
Les `.claude/okr.local.md` (relativt til brukerens prosjekt-cwd) hvis den finnes. Hvis den finnes, spør om brukeren vil:
- Oppdatere eksisterende konfigurasjon
- Starte på nytt
- Bare se gjeldende konfigurasjon
---
### Steg 2: Organisasjonsinformasjon
## Ingen argument — detekter og tilby
Still følgende spørsmål med AskUserQuestion:
Les `.claude/okr.local.md` (relativt til brukerens prosjekt-cwd).
**Spørsmål 1**: Organisasjon
**Hvis filen IKKE finnes:**
Bruk AskUserQuestion:
```
Hvilken organisasjon jobber du i?
Ser ut som du ikke har konfigurert OKR-pluginen enna.
Vil du kjore onboarding-intervjuet?
Alternativer:
- Statens vegvesen
- Annen statlig etat
- Kommune/fylkeskommune
- Annet
1. Full onboarding (6 faser, 15-20 min) — anbefalt for beste resultat
2. MVP onboarding (6 sporsmaal, ~5 min) — rask start
3. Avbryt
```
**Spørsmål 2**: Sektor (hvis ikke SVV)
```
Hvilken sektor tilhører organisasjonen?
Kjor `full` eller `mvp` basert pa valg.
Alternativer:
- Transport og samferdsel
- Helse
- Justis og beredskap
- Digitalisering
- Annet
**Hvis filen finnes OG `onboarding_status: partial`:**
```
Fant ufullstendig onboarding. Du kom til fase [N] forrige gang.
1. Fortsett fra fase [N]
2. Start pa nytt (full)
3. Start pa nytt (mvp)
4. Avbryt
```
### Steg 3: OKR-syklus
Hvis fortsett: les YAML, finn siste utfylte fase-seksjon, fortsett fra neste.
**Spørsmål 3**: Syklusmodell
**Hvis filen finnes OG `onboarding_status: fullfort`:**
Vis kort oppsummering av gjeldende profil (org, syklus, modenhet, verktoy).
Bruk AskUserQuestion:
```
Hvilken syklusmodell bruker dere?
Konfigurasjon funnet for [organisasjon.navn].
Alternativer:
- Tertial (4-måneders sykluser: Jan-Apr, Mai-Aug, Sep-Des) (Anbefalt)
- Kvartal (3-måneders sykluser)
- Annet
1. Oppdater konfigurasjon (endre spesifikke felt)
2. Kjor intervju pa nytt (full)
3. Vis full konfigurasjon
4. Avslutt
```
**Spørsmål 4**: Gjeldende syklus (basert på dagens dato og valgt modell)
---
### Steg 4: Integrasjoner
## Full onboarding — 6-fase dyp intervju
Skriv `onboarding_status: partial` til `.claude/okr.local.md` for hver fase
er fullfort. Oppdater til `fullfort` etter siste fase.
### Fase 1 — Identitet (2 min)
Still alle sporsmaal med AskUserQuestion (grupper 2-3 sammen der naturlig):
1. **Organisasjonsnavn og kortform?**
Eksempel: "Statens vegvesen" / "SVV"
2. **Type organisasjon?**
Alternativer: statlig etat | direktorat | kommune | fylkeskommune
3. **Hvilket departement eller overordnet etat?**
Eksempel: "Samferdselsdepartementet"
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 provd | prover na (forste syklus) | erfaren (2+ sykluser)
8. **Hvis erfaren: Antall gjennomforte sykluser?**
(Hopp over hvis "aldri provd" eller "prover na")
9. **Hvem er OKR-sponsor (navn og rolle)?**
Personen som gir mandat og synlighet. Eksempel: "Divisjonsdirektor Kari Holm"
10. **Hvem er OKR-champion (navn og rolle)?**
Personen som driver det operative arbeidet. Eksempel: "Seniorradgiver Per Lund"
11. **Er OKR eksplisitt koblet fra lonnssamtale 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 lonn er et av de farligste antipatternene.
> Nar medarbeidere vet at OKR-score pavirker lonn, setter de trygge, lave mal
> i stedet for ambisiose stretch goals. Anbefaler sterkt a dekoblere for utrulling.
12. **Hva er alignment-tilnaermingen?**
Alternativer: top-down | bottom-up | bidireksjonell
Forklar kort: "Bidireksjonell betyr at ledelsen setter retning og teamene foreslaar
egne OKR som kobles opp. Dette er anbefalt tilnaerming."
**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 nokkelmal fra tildelingsbrevet? Lim inn de viktigste malene
(stikkpunkter, ikke hele brevet) sa kan pluginen bruke dem til alignment."
Hvis brukeren limer inn tekst: skriv til
`.claude/okr/strategisk-kontekst/tildelingsbrev-2026.md` med YAML-frontmatter
og innlimt innhold. Opprett mappene med Write-tool.
14. **Har dere en virksomhetsplan eller strategiplan?**
Eventuelt lenke eller nokkelpunkter. Hvis innhold gis: skriv til
`.claude/okr/strategisk-kontekst/virksomhetsplan.md`.
15. **Har dere org-niva OKR for 2026?**
Alternativer: ja | nei | planlegges
Hvis ja: "Lim inn org-OKR (Objectives og Key Results) sa pluginen kan bruke dem
til kaskadering og alignment-sjekk."
Hvis innhold gis: skriv til `.claude/okr/strategisk-kontekst/overordnede-okr.md`.
**Etter fase 3:** Oppdater `.claude/okr.local.md` med eventuell strategisk kontekst-info.
### Fase 4 — Struktur (3 min)
16. **Hvilke OKR-nivaer 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 kjorer OKR denne syklusen (ca.)?**
Tall
19. **Bruker dere bidireksjonell kaskadering?**
Forklaring: "Teamene foreslaar 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 — Verktoy (2 min)
20. **Oppgavestyringsverktoy?**
Alternativer: Linear | Jira | Azure DevOps | Planner | ingen | annet
21. **OKR-sporingsverktoy?**
Alternativer: Oboard | Quantive | regneark | ingen | annet
22. **Moteverktoy?**
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: Kjor 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 a finne Linear-tools, hent teams og projects
4. La bruker velge team og project for OKR-tracking
**Etter fase 5:** Oppdater verktoy- og integrasjoner-seksjonen.
### Fase 6 — Kultur (3 min)
25. **Hva er check-in-rytmen (eller onsket rytme)?**
Alternativer: ukentlig | annenhver uke | maanedlig
Anbefaling: "Annenhver uke er et godt utgangspunkt. Ukentlig for team i utfoerelsesfase."
26. **Psykologisk trygghet for a sette stretch goals?**
Alternativer: lav | middels | hoy
Forklaring: "Kan teammedlemmer trygt foreslaa ambisiose mal uten a frykte konsekvenser
om de ikke naar 100%?"
27. **Kjente utfordringer eller antipatterns dere har sett?**
Fritekst, ENTER for a 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`.
### Fullforingssteg
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. Vis oppsummering:
**Spørsmål 5**: Verktøy
```
Hvilke verktøy vil du integrere med OKR-pluginen?
Onboarding fullfort for [organisasjon]!
- Linear (issue tracking, OKR som tasks)
- Ingen integrasjon foreløpig
Profil:
- Organisasjon: [navn] ([type])
- Modenhet: [niva] ([N] sykluser gjennomfort)
- Gjeldende syklus: [id] ([fase])
- Verktoy: [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 forste OKR for denne syklusen
- /okr:kvalitet — sjekk eksisterende OKR
- /okr:moter — planlegg OKR-workshop eller kick-off
```
### Steg 5: Linear-oppsett (hvis valgt)
---
1. **Sjekk om Linear MCP allerede er konfigurert** — les `~/.claude/settings.json`
2. **Hvis Linear MCP ikke finnes** — veilede oppsett av MCP-server
3. **Hent Linear-info** med ToolSearch — list teams og projects, la bruker velge
## MVP onboarding — 6 sporsmaal
### Steg 6: Lagre konfigurasjon
For brukere som vil komme raskt i gang. Samle alle sporsmaal i en AskUserQuestion
eller maks 2 runder:
Opprett `.claude/okr.local.md` i brukerens prosjekt-cwd:
1. **Organisasjonsnavn og type?**
Eksempel: "Statens vegvesen, statlig etat"
2. **Fagdomene?**
Alternativer: transport | helse | justis | digitalisering | utdanning | annet
3. **OKR-modenhet?**
Alternativer: aldri provd | prover na (forste syklus) | erfaren (2+ sykluser)
4. **Gjeldende syklusfase?**
Alternativer: planlegging | utfoerelse | review | mellom sykluser
5. **Primaere verktoy?**
Fritekst. Eksempel: "Linear og Microsoft Teams"
6. **Er OKR frikoblet fra lonnssamtale?**
Alternativer: ja | nei | usikkert
**Etter svar:** Skriv YAML med disse 6 feltene pluss fornuftige defaults for alle andre:
```yaml
---
onboarding_status: fullfort
organisasjon:
navn: "[brukerens svar]"
type: "offentlig"
sektor: "[brukerens svar]"
syklus:
modell: "[tertial|kvartal]"
gjeldende: "[T1-2026]"
startdato: "[beregnet]"
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 provd→ikke-startet, prover na→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: [true|false]
team_id: "[fra Linear]"
project_id: "[fra Linear]"
aktivert: false
team_id: ""
project_id: ""
preferanser:
språk: "no"
spraak: "no"
vis_eksempler: true
ambisjonsnivå: "balansert"
ambisjonsnivaa: "balansert"
---
# OKR Konfigurasjon for [organisasjon]
Opprettet: [dato]
Sist oppdatert: [dato]
```
### Steg 7: Bekreft og avslutt
Vis kort oppsummering og foreslaa `/okr:oppsett full` for a fylle ut resten senere.
Vis oppsummering og foreslå neste steg:
- `/okr:skriv` for å lage første OKR
- `/okr:kvalitet` for å sjekke eksisterende OKR
- `/okr:møter` for å planlegge OKR-workshop
---
## Feilhåndtering
## Oppdater — endre spesifikke felt
- Hvis Linear API feiler: Gi tydelig feilmelding og foreslå feilsøking
- Hvis fil ikke kan skrives: Vis konfig som kan kopieres manuelt
- Hvis bruker avbryter: Lagre det som er samlet så langt
Trigger: `/okr:oppsett oppdater` eller valg 1 fra ingen-argument-menyen.
## Oppdatering av konfigurasjon
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 | Verktoy | 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
Hvis brukeren kjører `/okr:oppsett` med eksisterende konfig:
1. Les gjeldende verdier
2. Vis hva som er konfigurert
3. Spør hva som skal oppdateres
4. Oppdater kun valgte felt
---
## 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 gjennomfort: [tall]
- Sponsor: [sponsor]
- Champion: [champion]
- OKR frikoblet fra lonn: [ja/nei]
### Gjeldende syklus
- ID: [id]
- Periode: [periode]
- Fase: [fase]
- Antall team: [tall]
### Verktoy
[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 a 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 spor med AskUserQuestion:
```
Hva ble de endelige scorene for [syklus]?
Oppgi score per KR (0.0-1.0) eller ENTER for a bruke siste kjente status.
```
3. **Generer retrospektiv** — skriv til `.claude/okr/syklus/[id]/retrospektiv.md`:
```markdown
---
syklus: [id]
periode: [periode fra config]
arkivert: [dato]
samlet_score: [beregnet gjennomsnitt]
---
# Retrospektiv [id]
## Resultater
[OKR med endelige scorer, tabellformat]
## Hva gikk bra
[Basert pa KR som scoret 0.7+]
## Hva var utfordrende
[Basert pa KR som scoret <0.5, noter monstere]
## Laering til neste syklus
[Identifiser 2-3 konkrete forbedringer]
## Antipatterns observert
[Sjekk mot antipatternene fra referansemateriale —
nevn kun de som er relevante basert pa scoremansteret.
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 ogsa `.claude/okr/historikk/[id]-resultater.md` med sammendrag:
endelige scorer, topp-laeringer, og lenke til full retrospektiv.
5. **Bekreft sletting** — bruk AskUserQuestion:
```
Slett syklusmappen `.claude/okr/syklus/[id]/`?
Den er na arkivert i `historikk/[id]/`.
Alternativer: ja | nei (behold begge)
```
Hvis ja og Bash-tool er tilgjengelig: `rm -rf .claude/okr/syklus/[id]/`
Hvis Bash ikke tilgjengelig: vis kommando brukeren kan kjore manuelt:
`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 aarsoppdatering)
- Kvartal: Q1→Q2→Q3→Q4→Q1 (med aarsoppdatering)
- 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
tom mal (tabellstruktur med KR-kolonner, ingen data enna).
8. **Bekreft** — vis oppsummering:
```
Syklus [id] er arkivert i `.claude/okr/historikk/[id]/`.
Gjeldende syklus er na [ny-id] (planleggingsfase).
Anbefalte neste steg:
- /okr:moter — planlegg oppstartsmate for [ny-id]
- /okr:skriv — skriv nye OKR for [ny-id]
- /okr:kaskade — kaskader org-OKR til team-niva
```
---
## Feilhandtering
- **Fil kan ikke skrives:** Vis YAML som kan kopieres manuelt
- **Bruker avbryter midt i intervju:** `onboarding_status: partial` allerede lagret — neste kjoring tilbyr a fortsette
- **Linear API feiler:** Gi tydelig feilmelding, fortsett uten Linear-integrasjon
- **Mappeopprettelse feiler:** Vis `mkdir -p .claude/okr/strategisk-kontekst/` kommando brukeren kan kjore manuelt
## Syklusberegning
Beregn gjeldende syklus-ID basert pa 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`

View file

@ -9,9 +9,21 @@ argument-hint: "[mål, strategi, eller tildelingsbrev-kontekst]"
Hjelp brukeren med å skrive nye OKR for norsk offentlig sektor.
## Kontekstbevissthet
OKR-kontekst injiseres automatisk via hook. Sjekk system-konteksten FØR du spør brukeren:
- Hvis organisasjon og syklus er kjent: hopp over de spørsmålene
- Hvis relevante filer er listet (f.eks. `.claude/okr/syklus/T1-2026/okr-teamet.md`):
les den filen direkte i stedet for å be brukeren lime inn innhold
- Hvis `.claude/okr/strategisk-kontekst/` inneholder relevante docs: les dem
- Hvis `.claude/okr/strategisk-kontekst/overordnede-okr.md` finnes (listet i
system-kontekst), les den for alignment-context
## Arbeidsflyt
1. **Forstå kontekst** — spør med AskUserQuestion:
1. **Forstå kontekst** — sjekk injisert kontekst først. Hvis organisasjon, syklus
og strategiske mål allerede er kjent, hopp direkte til Objective Crafter med
disse som utgangspunkt. Spør kun med AskUserQuestion om det som mangler:
- Hvilket team/avdeling?
- Overordnet strategimål de skal bidra til?
- Hvilken syklus (T1, T2, T3)?

View file

@ -9,6 +9,20 @@ argument-hint: "[OKR eller tall for oppdatering]"
Hjelp brukeren med å spore OKR-fremgang, beregne score og strukturere check-ins.
## Kontekstbevissthet
OKR-kontekst injiseres automatisk via hook. Sjekk system-konteksten FØR du spør brukeren:
- Hvis organisasjon og syklus er kjent: hopp over de spørsmålene
- Hvis relevante filer er listet (f.eks. `.claude/okr/syklus/T1-2026/okr-teamet.md`):
les den filen direkte i stedet for å be brukeren lime inn innhold
- Hvis `.claude/okr/strategisk-kontekst/` inneholder relevante docs: les dem
### Automatisk OKR-lasting
Hvis gjeldende syklus er kjent (fra injisert kontekst) og syklusmappen
`.claude/okr/syklus/[id]/` inneholder `.md`-filer (listet i system-kontekst), les
disse filene direkte. Brukeren trenger ikke lime inn OKR-tekst.
## Scoring-system
**Skala**: 0.0 - 1.0
@ -30,7 +44,8 @@ Score = (Nåværende - Baseline) / (Target - Baseline)
### Ved statusoppdatering
1. **Samle inn tall** — spør med AskUserQuestion:
1. **Samle inn tall** — les OKR-filer fra `.claude/okr/syklus/[id]/` (hvis tilgjengelig
fra system-kontekst) eller be brukeren oppgi OKR. Spør med AskUserQuestion:
- Nåværende verdi for hver KR
- Baseline og target (hvis ikke kjent)
- Dato for måling

View file

@ -1,5 +1,16 @@
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/hooks/scripts/coaching-hook.mjs",
"timeout": 3000
}
]
}
],
"UserPromptSubmit": [
{
"hooks": [

View file

@ -0,0 +1,146 @@
#!/usr/bin/env node
// coaching-hook.mjs
// Event: SessionStart
// Purpose: Proactive coaching based on cycle position and OKR status.
// Zero npm dependencies. Target execution: <200ms.
import { readFileSync, existsSync, readdirSync } from 'node:fs';
import { join } from 'node:path';
const cwd = process.cwd();
const configPath = join(cwd, '.claude', 'okr.local.md');
if (!existsSync(configPath)) {
process.exit(0);
}
try {
const content = readFileSync(configPath, 'utf8');
const match = content.match(/^---\n([\s\S]*?)\n---/);
if (!match) process.exit(0);
const fm = match[1];
const get = (key) => {
const m = fm.match(new RegExp(`${key}:\\s*["']?([^"'\\n]+)["']?`));
return m ? m[1].trim() : null;
};
const cycleId = get('id');
const fase = get('fase');
if (!cycleId) process.exit(0);
// Parse cycle type and dates
const cycleMatch = cycleId.match(/^([TQ])(\d)-(\d{4})$/);
if (!cycleMatch) process.exit(0);
const [, type, num, year] = cycleMatch;
const cycleNum = parseInt(num, 10);
const cycleYear = parseInt(year, 10);
// Calculate cycle start/end month (0-indexed)
let startMonth, endMonth, totalWeeks;
if (type === 'T') {
startMonth = (cycleNum - 1) * 4; // T1=0(Jan), T2=4(May), T3=8(Sep)
endMonth = startMonth + 3; // T1=3(Apr), T2=7(Aug), T3=11(Dec)
totalWeeks = 16;
} else {
startMonth = (cycleNum - 1) * 3;
endMonth = startMonth + 2;
totalWeeks = 13;
}
const now = new Date();
const cycleStart = new Date(cycleYear, startMonth, 1);
const cycleEnd = new Date(cycleYear, endMonth + 1, 0); // last day of end month
// Calculate current week in cycle
const msPerWeek = 7 * 24 * 60 * 60 * 1000;
const elapsed = now - cycleStart;
const currentWeek = Math.max(1, Math.min(totalWeeks, Math.ceil(elapsed / msPerWeek)));
// Determine phase
let phase;
if (now < cycleStart || now > cycleEnd) {
phase = 'between';
} else if (currentWeek <= 4) {
phase = 'early';
} else if (currentWeek <= totalWeeks - 4) {
phase = 'mid';
} else {
phase = 'late';
}
// Check for at-risk KR in status
let atRiskCount = 0;
const okrDir = join(cwd, '.claude', 'okr');
const statusPath = join(okrDir, 'syklus', cycleId, 'status.md');
if (existsSync(statusPath)) {
try {
const statusContent = readFileSync(statusPath, 'utf8');
const riskMatches = statusContent.match(/[Ii] fare|[Bb]lokkert|risk/gi);
if (riskMatches) atRiskCount = riskMatches.length;
} catch { /* skip */ }
}
// Check last archived cycle for learnings
let lastLearning = '';
const histDir = join(okrDir, 'historikk');
if (existsSync(histDir)) {
try {
const dirs = readdirSync(histDir, { withFileTypes: true })
.filter(d => d.isDirectory())
.map(d => d.name)
.sort()
.reverse();
if (dirs.length > 0) {
const retroPath = join(histDir, dirs[0], 'retrospektiv.md');
if (existsSync(retroPath)) {
const retro = readFileSync(retroPath, 'utf8');
const learningMatch = retro.match(/## [Ll]aering til neste syklus\n\n([\s\S]*?)(?:\n##|$)/);
if (learningMatch) {
const lines = learningMatch[1].trim().split('\n').filter(l => l.trim());
if (lines.length > 0) lastLearning = lines[0].replace(/^[-*]\s*/, '');
}
}
}
} catch { /* skip */ }
}
// Build coaching message
const parts = [];
parts.push(`OKR coaching: Uke ${currentWeek} av ${totalWeeks} i ${cycleId}.`);
if (phase === 'early') {
parts.push('Tidlig i syklusen — fokus pa alignment og kvalitetssikring av OKR.');
parts.push('Anbefalt: /okr:gap (dekning mot tildelingsbrev), /okr:kvalitet (kvalitetssjekk).');
} else if (phase === 'mid') {
parts.push('Midtveis i syklusen — tid for fremdriftssjekk.');
parts.push('Anbefalt: /okr:sporing (statusoppdatering og scoring).');
if (atRiskCount > 0) {
parts.push(`OBS: ${atRiskCount} KR er merket som i fare/blokkert i siste status.`);
}
} else if (phase === 'late') {
parts.push('Syklusen naermer seg slutt — fokus pa sluttspurt og forberedelse.');
parts.push('Anbefalt: /okr:sporing (endelig scoring), /okr:moter (review-mote).');
if (currentWeek >= totalWeeks - 2) {
parts.push('Mindre enn 2 uker igjen. Vurder /okr:oppsett arkiver for retrospektiv.');
}
if (atRiskCount > 0) {
parts.push(`OBS: ${atRiskCount} KR er i fare — vurder tiltak eller juster forventninger.`);
}
} else {
// between cycles
parts.push('Mellom sykluser. Anbefalt: /okr:oppsett arkiver eller /okr:skriv for ny syklus.');
}
if (lastLearning) {
parts.push(`Laering fra forrige syklus: "${lastLearning}"`);
}
const msg = parts.join(' ');
process.stdout.write(JSON.stringify({ systemMessage: msg }));
} catch {
// Graceful exit on any error — never block the user
process.exit(0);
}

View file

@ -2,13 +2,14 @@
// inject-okr-context.mjs
// Event: UserPromptSubmit
// Purpose: Inject OKR organization context from .claude/okr.local.md when configured.
// Zero npm dependencies. Target execution: <20ms.
// Purpose: Inject OKR organization context from .claude/okr.local.md and .claude/okr/ tree.
// Zero npm dependencies. Target execution: <50ms.
import { readFileSync, existsSync } from 'node:fs';
import { readFileSync, existsSync, readdirSync } from 'node:fs';
import { join } from 'node:path';
const configPath = join(process.cwd(), '.claude', 'okr.local.md');
const cwd = process.cwd();
const configPath = join(cwd, '.claude', 'okr.local.md');
if (!existsSync(configPath)) {
process.exit(0);
@ -25,20 +26,132 @@ try {
return m ? m[1].trim() : null;
};
// Core fields (backwards-compatible with old 4-field format)
const org = get('navn') || get('name');
const syklus = get('gjeldende') || get('current_cycle');
const sektor = get('sektor') || get('sector');
const syklus = get('gjeldende') || get('id') || get('current_cycle');
const sektor = get('sektor') || get('sector') || get('domene');
const linear = fm.includes('aktivert: true') || fm.includes('enabled: true');
// New v1.1 fields (silently skipped if absent)
const modenhet = get('modenhetsnivaa');
const fase = get('fase');
const frikoblet = get('okr_frikoblet_fra_loenn');
const trygghet = get('psykologisk_trygghet');
const kortform = get('kortform');
if (!org) process.exit(0);
const parts = [`Organisasjon: ${org}`];
if (syklus) parts.push(`Gjeldende syklus: ${syklus}`);
// Build message parts
const parts = [`Organisasjon: ${org}${kortform ? ` (${kortform})` : ''}`];
if (syklus) parts.push(`Syklus: ${syklus}${fase ? ` [${fase}]` : ''}`);
if (sektor) parts.push(`Sektor: ${sektor}`);
if (modenhet) parts.push(`Modenhet: ${modenhet}`);
if (frikoblet !== null) parts.push(`OKR frikoblet fra lonn: ${frikoblet}`);
if (trygghet) parts.push(`Psykologisk trygghet: ${trygghet}`);
if (linear) parts.push('Linear: aktivert');
const systemMessage = `OKR-kontekst (fra .claude/okr.local.md): ${parts.join(', ')}.`;
process.stdout.write(JSON.stringify({ systemMessage }));
// Scan .claude/okr/ directory tree (cap at 50 files)
const okrDir = join(cwd, '.claude', 'okr');
const dirParts = [];
let totalFiles = 0;
if (existsSync(okrDir)) {
try {
const topEntries = readdirSync(okrDir, { withFileTypes: true });
for (const entry of topEntries) {
if (!entry.isDirectory()) continue;
if (totalFiles >= 50) break;
try {
const subEntries = readdirSync(join(okrDir, entry.name), { withFileTypes: true });
const mdFiles = [];
const subDirs = [];
for (const sub of subEntries) {
if (totalFiles >= 50) break;
if (sub.isFile() && sub.name.endsWith('.md')) {
mdFiles.push(sub.name);
totalFiles++;
} else if (sub.isDirectory()) {
subDirs.push(sub.name);
}
}
// Enumerate nested subdirectories (e.g. syklus/T1-2026/)
for (const sd of subDirs) {
if (totalFiles >= 50) break;
try {
const nested = readdirSync(join(okrDir, entry.name, sd), { withFileTypes: true });
const nestedMd = [];
for (const n of nested) {
if (totalFiles >= 50) break;
if (n.isFile() && n.name.endsWith('.md')) {
nestedMd.push(n.name);
totalFiles++;
}
}
if (nestedMd.length > 0) {
dirParts.push(`${entry.name}/${sd}/ (${nestedMd.length} fil${nestedMd.length > 1 ? 'er' : ''}: ${nestedMd.join(', ')})`);
}
} catch { /* skip unreadable nested dirs */ }
}
if (mdFiles.length > 0) {
dirParts.push(`${entry.name}/ (${mdFiles.length} fil${mdFiles.length > 1 ? 'er' : ''}: ${mdFiles.join(', ')})`);
}
} catch { /* skip unreadable dirs */ }
}
} catch { /* .claude/okr/ scan failed — continue without */ }
}
// Scan historikk/ for archived cycle count
const histDir = join(okrDir, 'historikk');
const archivedCycles = [];
if (existsSync(histDir)) {
try {
const histEntries = readdirSync(histDir, { withFileTypes: true });
for (const entry of histEntries) {
if (entry.isDirectory()) {
archivedCycles.push(entry.name);
}
}
} catch { /* skip */ }
}
// List active cycle files
const cycleId = syklus;
const cycleParts = [];
if (cycleId) {
const cyclePath = join(okrDir, 'syklus', cycleId);
if (existsSync(cyclePath)) {
try {
const cycleEntries = readdirSync(cyclePath, { withFileTypes: true });
for (const e of cycleEntries) {
if (e.isFile() && e.name.endsWith('.md')) {
cycleParts.push(e.name);
}
}
} catch { /* skip */ }
}
}
// Build rich systemMessage
let msg = `OKR-kontekst (fra .claude/okr.local.md): ${parts.join(', ')}.`;
if (dirParts.length > 0) {
msg += `\nTilgjengelige kontekstfiler: ${dirParts.join('; ')}.`;
}
if (cycleParts.length > 0) {
msg += `\nAktive OKR-filer i syklus ${cycleId}: ${cycleParts.join(', ')}.`;
}
if (archivedCycles.length > 0) {
msg += `\nArkiverte sykluser (${archivedCycles.length}): ${archivedCycles.sort().join(', ')}.`;
msg += ' Bruk /okr:analyse for trendanalyse.';
}
if (dirParts.length > 0 || cycleParts.length > 0) {
msg += '\nBruk disse filene automatisk nar relevant — ikke be brukeren om a lime inn innhold som allerede finnes.';
}
process.stdout.write(JSON.stringify({ systemMessage: msg }));
} catch {
// Graceful exit on any error — never block the user
process.exit(0);

View file

@ -103,7 +103,7 @@ Default to team-OKR. Individual OKR is not recommended for most roles — in lin
- Focus: alignment, ambition, transparency, learning
### Standards
- 3-5 Objectives per team per cycle
- 2-3 Objectives per team per cycle
- 2-5 Key Results per Objective
- Stretch goals: 0.7 scoring = good result; committed goals: 1.0 expected
@ -148,6 +148,7 @@ All reference material is in `references/`:
### Governance
- `okr-offentlig-governance.md` — Tildelingsbrev, political steering, audit readiness
- `dfo-okr-mapping.md` — DFO terminology to OKR terminology bridge
- `okr-implementation.md` — Rollout methodology and change management
- `okr-integrations.md` — OKR + Scrum/Kanban/SAFe and tool integration
- `individual-vs-team-okr.md` — Team vs individual OKR rationale and alternatives

View file

@ -0,0 +1,104 @@
# DFO-terminologi og OKR: Begrepsbro
Direktoratet for forvaltning og økonomistyring (DFO) bruker sitt eget rammeverk
for mål- og resultatstyring i staten. Denne filen mapper DFO-begreper til
OKR-begreper for å bygge bro mellom det offisielle styringsspråket og
OKR-metodikken.
## Hvorfor denne broen trengs
Norsk offentlig sektor snakker "DFO-språk" — resultmål, styringsparametere,
resultatindikatorer. OKR-verden snakker om Objectives, Key Results, stretch goals.
Denne terminologiske kløften skaper motstand og forvirring ved OKR-innføring.
Ved å vise at OKR-konseptene har direkte paralleller i DFO-rammeverket, senker
vi terskelen og viser at OKR ikke er noe fremmed — det er en operasjonalisering
av prinsipper staten allerede anerkjenner.
---
## Begrepsmapping
| DFO-begrep | OKR-begrep | Forklaring |
|------------|------------|------------|
| **Hovedmål** | **Strategisk Objective (årlig)** | Overordnet retning for virksomheten. DFOs hovedmål tilsvarer organisasjonens årlige Objectives. |
| **Resultatmål** | **Objective (syklus)** | Konkret mål som skal oppnås. I OKR formuleres dette mer inspirerende og outcome-orientert. |
| **Styringsparameter** | **Key Result** | Målbar indikator som viser om målet nås. OKR-KR er mer ambisiøse (stretch) enn DFOs styringsparametere. |
| **Resultatindikator** | **Key Result (metrikk-type)** | Kvantifiserbar måling. I OKR skiller vi mellom leading og lagging indikatorer. |
| **Virksomhetsplan** | **OKR-sett (organisasjonsnivå)** | Samlet oversikt over mål og tiltak. OKR erstatter ikke virksomhetsplanen men operasjonaliserer den. |
| **Tildelingsbrev** | **Input til strategiske Objectives** | DFOs tildelingsbrev setter rammer og krav. OKR oversetter disse til inspirerende, målbare mål. |
| **Etatsstyring** | **OKR alignment/kaskade** | Prosessen der departement styrer etat. OKR gjør dette mer transparent og gjensidig. |
| **Mål- og resultatstyring** | **OKR som metodikk** | DFOs overordnede styringsprinsipp. OKR er en konkret implementering av dette prinsippet. |
| **Rapportering til dep.** | **OKR scoring og review** | Periodisk resultatrapportering. OKR bruker 0.0-1.0 scoring med hyppigere kadense. |
| **Samfunnseffekt** | **Aspirational Objective** | Langsiktig effekt for samfunnet. I OKR formulert som ambisiøst stretch-mål. |
| **Brukereffekt** | **Team Objective (outcome)** | Effekt for brukerne av tjenestene. OKR fokuserer på outcome fremfor output. |
| **Produksjon/aktivitet** | **Aktivitet (IKKE Key Result)** | Det man gjør. I OKR er dette bevisst IKKE et Key Result — vi måler effekt, ikke aktivitet. |
---
## Viktige forskjeller
| Dimensjon | DFO mål- og resultatstyring | OKR |
|-----------|----------------------------|-----|
| **Retning** | Primært top-down (departement → etat) | Hybrid: top-down retning + bottom-up forslag |
| **Ambisjonsnivå** | Realistisk (100% = forventet) | Ambisiøst (70% = suksess for stretch) |
| **Kadense** | Årlig med tertialrapportering | 4-måneders sykluser med månedlig check-in |
| **Formål** | Styring og kontroll | Læring og fokus |
| **Kobling til lønn** | Indirekte via medarbeidersamtale | Eksplisitt frakoblet |
| **Transparens** | Hierarkisk (opp til departement) | Åpen (alle ser alles OKR) |
| **Justering** | Formell prosess | Fleksibel mid-cycle justering |
---
## Praktisk bruk: Slik snakker du om OKR i DFO-kontekst
### Overfor ledere med DFO-bakgrunn
Ikke si: "Vi skal innføre OKR i stedet for mål- og resultatstyring."
Si heller: "Vi skal bruke OKR som en operasjonaliseringsmetodikk for vår
mål- og resultatstyring. Det gir oss kortere feedback-loops og bedre fokus
innenfor rammene av tildelingsbrevet."
### Overfor DFO/departement
Ikke si: "Vi har erstattet styringsparametere med Key Results."
Si heller: "Vi bruker OKR internt for å prioritere og operasjonalisere
målene i tildelingsbrevet. Rapporteringen til departementet følger
eksisterende struktur."
### Overfor ansatte
Ikke si: "OKR er et helt nytt styringssystem."
Si heller: "OKR er en måte å gjøre mål- og resultatstyringen mer konkret
og teamdrevet. Vi bruker kortere sykluser og setter mål sammen."
---
## OKR som komplement, ikke erstatning
OKR erstatter IKKE DFOs mål- og resultatstyring. OKR er et verktøy for å
**operasjonalisere** de strategiske målene som allerede finnes i
tildelingsbrev og virksomhetsplan.
```
Tildelingsbrev (DFO-rammeverk)
└── Virksomhetsplan (DFO-rammeverk)
└── OKR (operasjonalisering)
├── Strategiske OKR (årlige, fra virksomhetsplan)
└── Taktiske OKR (syklusbaserte, fra team)
```
**Rapportering oppover** (til departement) følger DFOs format.
**Styring nedover** (til team) bruker OKR-metodikk.
---
## Ressurser
- DFO: [Mål- og resultatstyring](https://dfo.no/fagomrader/styring-i-staten/mal-og-resultatstyring)
- DFO: [Etatsstyring](https://dfo.no/fagomrader/styring-i-staten/etatsstyring)
- `okr-offentlig-governance.md` — Tildelingsbrev-analyse og Riksrevisjon-compliance
- `okr-framework.md` — OKR-metodikk i detalj

View file

@ -18,7 +18,7 @@
- Individuelt: Hver person foreslår 1-3 områder for forbedring
- Gruppe: Samle forslag på whiteboard/Mural
- Diskuter: Hvilke er viktigst? Hvilke støtter overordnet strategi?
- Beslutt: Velg 3-5 Objectives
- Beslutt: Velg 2-3 Objectives
**00:40 - 01:20 | Draft Key Results**
- For hver Objective: Brainstorm mulige Key Results
@ -197,7 +197,7 @@ For hvert tema:
### Agenda
**00:00 - 00:10 | Status fra hver team**
- Hvert team presenterer sine 3-5 Objectives (1 slide/5 min)
- Hvert team presenterer sine 2-3 Objectives (1 slide/5 min)
**00:10 - 00:30 | Identifiser dependencies**
- Hvilke OKR er avhengige av hverandre?

View file

@ -515,7 +515,7 @@ Denne guiden dekker de vanligste feilmønstrene organisert i fem kategorier.
- OKR Institute - Psykologisk trygghet og implementeringsfeller
- Itamar Gilad - 5 måter organisasjoner misbruker OKR
- Quantive - Tidlige tegn på OKR-fiasko
- Microsoft Viva Goals Maturity Model
- Microsoft Viva Goals Maturity Model (Viva Goals avviklet 2024, men modenhetsmodellen er fortsatt relevant som konsept)
**Relaterte filer i denne skill**:
- `okr-framework.md` - Metodikk i detalj

View file

@ -32,7 +32,7 @@ Key Results = Hvordan vi måler suksess (2-5 målbare outcomes)
→ ✅ Vær spesifikk: "Redusere responstid fra 5 til 2 dager"
**For mange OKR**: 10 objectives
→ ✅ Maks 3-5 objectives per team
→ ✅ Maks 2-3 objectives per team
**For lett mål**: "1% forbedring"
→ ✅ Vær ambisiøs: "20% forbedring" (0.7 er suksess)

View file

@ -223,7 +223,7 @@ Bruk denne når du skriver eller vurderer OKR:
- [ ] Har vi 2-5 KR (ikke for få, ikke for mange)?
### Samlet
- [ ] Maks 3-5 Objectives per team?
- [ ] Maks 2-3 Objectives per team?
- [ ] Kan vi verifisere suksess objektivt?
- [ ] Er det klart hvem som eier hvert KR?
- [ ] Ville dette imponere stakeholders hvis vi lykkes?

View file

@ -507,7 +507,7 @@ Metodikken over er basert på etablert OKR-praksis fra:
### 1. For mange OKR
**Problem**: Team med 10 objectives mister fokus.
**Løsning**: Maksimalt 3-5 Objectives per team per syklus.
**Løsning**: Maksimalt 2-3 Objectives per team per syklus. Færre mål gir bedre fokus, spesielt i 4-måneders sykluser.
### 2. Business-as-usual som OKR
**Problem**: "Vedlikeholde nåværende tjenester" er ikke et mål.

View file

@ -32,7 +32,7 @@ Men disse gevinstene krever systematisk innføring og kulturendring.
### 2. Top-down vs Bottom-up
**Top-down**:
- Ledelsen setter retningen (3-5 organisasjons-OKR)
- Ledelsen setter retningen (3-4 organisasjons-OKR)
- Tydelig alignment, rask utrulling
- Risiko: Ansatte føler seg fremmedgjort
@ -42,7 +42,7 @@ Men disse gevinstene krever systematisk innføring og kulturendring.
- Risiko: Fragmentering, manglende alignment
**Anbefalt hybrid for offentlig sektor**:
1. Ledelsen setter 3-5 **retningsgivende objectives** (basert på tildelingsbrev/strategiplan)
1. Ledelsen setter 3-4 **retningsgivende objectives** (basert på tildelingsbrev/strategiplan)
2. Avdelinger og team utarbeider **egne OKR** som støtter disse
3. **Alignment-workshops** sikrer koordinering
4. **Kvartalsvise check-ins** mellom nivåene
@ -155,7 +155,7 @@ Hele organisasjonen innfører OKR samtidig. Kan fungere i:
KPI-er forteller deg *hvordan* ting går. OKR forteller deg *hva som skal bli bedre*. Dere trenger begge.
**Praktisk tilnærming**: La KPI-er fortsette for daglig drift. Bruk OKR for de 3-5 viktigste forbedringsområdene per syklus.
**Praktisk tilnærming**: La KPI-er fortsette for daglig drift. Bruk OKR for de 2-3 viktigste forbedringsområdene per syklus.
#### 2. "Dette er bare enda et system / ny trend"
@ -235,6 +235,52 @@ Bygg et nettverk av OKR-ambassadører:
4. **Nettverk**: Månedlige samlinger for champions (del erfaringer)
5. **Synlighet**: Anerkjenn deres bidrag, gi dem credibility
### Tillitsvalgte og fagforeninger
I norsk offentlig sektor er involvering av tillitsvalgte og fagforeninger
**obligatorisk** ved innføring av nye styringsmetodikker. Dette er forankret
i Hovedavtalen i staten og er en del av den norske samarbeidsmodellen.
#### Hvorfor dette er kritisk
- **Juridisk**: Hovedavtalen krever drøfting med tillitsvalgte ved endringer
i arbeidsorganisering og styringsmetoder
- **Kulturelt**: Den norske arbeidslivsmodellen bygger på trepartssamarbeid —
å innføre OKR uten fagforeningsinvolvering undergraver tilliten
- **Praktisk**: Tillitsvalgte kan enten bli ambassadører eller blokkere.
Tidlig involvering øker sannsynligheten for det første
#### Når involvere tillitsvalgte
| Fase | Aktivitet | Nivå |
|------|-----------|------|
| Forberedelse | Informere og drøfte OKR-innføring | Formell drøfting |
| Pilot | Inkludere tillitsvalgt i referansegruppe | Medvirkning |
| Utrulling | Tillitsvalgt som del av evalueringsgruppe | Medvirkning |
| Modning | Fast plass i OKR-governance | Løpende dialog |
#### Vanlige bekymringer fra tillitsvalgte
| Bekymring | Svar |
|-----------|------|
| "Er dette New Public Management?" | OKR er bottom-up og læringsorientert, i motsetning til NPMs kontrollfokus. Team setter egne mål. |
| "Vil dette brukes til individuell evaluering?" | OKR skal aldri kobles til lønn eller medarbeidersamtale. Dette bør nedfelles skriftlig. |
| "Øker dette arbeidspresset?" | OKR erstatter ustrukturert målstyring med fokusert prioritering. Færre, viktigere mål. |
| "Hvem bestemmer målene?" | Hybrid modell: Ledelsen setter retning, team foreslår egne OKR. Større medvirkning enn tradisjonell mål- og resultatstyring. |
#### Anbefalt tilnærming
1. **Tidlig orientering**: Informer hovedtillitsvalgt om OKR-planer allerede
i utredningsfasen
2. **Formell drøfting**: Gjennomfør drøftingsmøte før pilotbeslutning, med
skriftlig referat
3. **Inkludering i pilot**: Inviter tillitsvalgt som observatør eller deltaker
i pilot-teamets OKR-prosess
4. **Evalueringsrolle**: Gi tillitsvalgte en formell rolle i evaluering av
piloten — deres perspektiv er verdifullt
5. **Skriftlige rammer**: Dokumenter eksplisitt at OKR ikke kobles til
lønn, evaluering eller nedbemanning
---
## Kulturbygging
@ -295,7 +341,7 @@ Stretch-mål krever psykologisk trygghet. Ansatte må:
**Konsekvens**: Fragmentert fokus, ingen reell prioritering, OKR-tretthet.
**Løsning**: Maksimalt 3-5 Objectives per team, 2-4 Key Results per Objective. Bedre å gjøre færre ting skikkelig.
**Løsning**: Maksimalt 2-3 Objectives per team, 2-4 Key Results per Objective. Færre mål gir bedre fokus i 4-måneders sykluser.
### 2. Manglende lederforankring

View file

@ -486,20 +486,18 @@ Epic: "Objective: Forbedre digital selvbetjening"
└── User Story: "..."
```
**Alternativ 2: Microsoft Viva Goals**
**Alternativ 2: Microsoft Viva Goals (AVVIKLET)**
Enterprise OKR-løsning som integrerer med Azure DevOps:
- Kobler OKR til work items eller shared queries
- Automatisk progress fra work item status
- Integrert med Microsoft 365
**Oppsett for Azure DevOps-integrasjon**:
1. Aktiver Azure DevOps-kobling i Viva Goals
2. Velg koblingmetode:
- **Work items**: Velg spesifikke items som driver KR
- **Shared query**: Definer query som filtrerer relevante items
3. Velg progress-metrikk (% complete, story points, osv.)
4. Progress synkes automatisk hver time
> **Merk:** Microsoft annonserte i september 2024 at Viva Goals avvikles.
> Produktet ble fullstendig faset ut i 2025. Opprinnelig Ally.io (kjøpt av
> Microsoft i 2021), ble det til Viva Goals, og er nå nedlagt.
>
> **For organisasjoner som brukte Viva Goals:**
> - **Oboard** — norskutviklet, Microsoft 365-integrasjon, GDPR-compliant EU-hosting
> - **Quantive Results** (tidl. Gtmhub) — enterprise OKR med AI-features
> - **Perdoo** — god balanse funksjon/pris for mellomstore organisasjoner
>
> Se seksjon "Andre OKR-plattformer" i `okr-sources.md` for full oversikt.
### Oboard + Jira-integrasjon
@ -562,13 +560,13 @@ Outcome-KR | Manuell med kilde
- [ ] Integrer med Sprint Planning-prosess
**For Azure DevOps-basert OKR**:
- [ ] Vurder Viva Goals vs. native work items
- [ ] Vurder Oboard vs. native work items
- [ ] Sett opp shared queries for KR-tracking
- [ ] Lag dashboard-widgets for OKR-visibility
- [ ] Koble til Power BI for avansert rapportering
**For multi-tool organisasjoner**:
- [ ] Vurder sentralt OKR-verktøy (Oboard, Viva Goals, e.l.)
- [ ] Vurder sentralt OKR-verktøy (Oboard, Quantive, Perdoo, e.l.)
- [ ] Definer integrasjoner per team/verktøy
- [ ] Etabler felles oppdaterings-kadense
- [ ] Lag "single source of truth" for ledelsesrapportering
@ -584,7 +582,7 @@ Outcome-KR | Manuell med kilde
- Mooncamp: [OKR and Agile](https://mooncamp.com/blog/okr-and-agile)
- Martin Fowler: [Team OKRs](https://martinfowler.com/articles/team-okr.html)
- Atlassian: [OKR in Jira and Confluence](https://www.atlassian.com/blog/add-ons/okr-jira-confluence)
- Microsoft Learn: [Viva Goals Azure DevOps Integration](https://learn.microsoft.com/en-us/viva/goals/azure-devops-integration)
- Microsoft Learn: Viva Goals er avviklet (2024). Se Oboard eller Quantive for Azure DevOps-integrasjon.
- Oboard: [OKR Board for Jira](https://oboard.io/okr-board-for-jira)
- SAFe: [PI Objectives](https://scaledagileframework.com/pi-objectives/)
- The Burn Down: [OKRs vs PI Objectives in SAFe](https://theburndown.com/okrs-vs-pi-objectives-in-safe/)

View file

@ -37,7 +37,7 @@ Ikke alt i tildelingsbrevet skal bli OKR. Skille mellom:
### Steg-for-steg oversettelse
**1. Identifiser strategiske mål**
Finn de 3-5 viktigste resultatmålene som krever forbedring/endring (ikke bare drift).
Finn de 2-4 viktigste resultatmålene som krever forbedring/endring (ikke bare drift).
**2. Gjør dem inspirerende**
Tildelingsbrev er ofte teknisk formulert. OKR skal inspirere.