diff --git a/README.md b/README.md index fcdcde9..7a89cfa 100644 --- a/README.md +++ b/README.md @@ -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) diff --git a/plugins/okr/.claude-plugin/plugin.json b/plugins/okr/.claude-plugin/plugin.json index 1b462db..ae76e20 100644 --- a/plugins/okr/.claude-plugin/plugin.json +++ b/plugins/okr/.claude-plugin/plugin.json @@ -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" diff --git a/plugins/okr/.gitignore b/plugins/okr/.gitignore index ced7da6..05d2025 100644 --- a/plugins/okr/.gitignore +++ b/plugins/okr/.gitignore @@ -20,10 +20,6 @@ Thumbs.db *.swo *~ -# Internal planning -ROADMAP.md -BACKLOG.md - # Temporary files *.tmp *.bak diff --git a/plugins/okr/CHANGELOG.md b/plugins/okr/CHANGELOG.md index 818a814..1bfac5e 100644 --- a/plugins/okr/CHANGELOG.md +++ b/plugins/okr/CHANGELOG.md @@ -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 diff --git a/plugins/okr/CLAUDE.md b/plugins/okr/CLAUDE.md index cb8546a..fd2b775 100644 --- a/plugins/okr/CLAUDE.md +++ b/plugins/okr/CLAUDE.md @@ -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) ``` diff --git a/plugins/okr/README.md b/plugins/okr/README.md index 0ab83fc..23064b4 100644 --- a/plugins/okr/README.md +++ b/plugins/okr/README.md @@ -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 5–15 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) diff --git a/plugins/okr/agents/gapanalytiker-agent.md b/plugins/okr/agents/gapanalytiker-agent.md new file mode 100644 index 0000000..42b6c06 --- /dev/null +++ b/plugins/okr/agents/gapanalytiker-agent.md @@ -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. + + + 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." + + + + 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." + +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` diff --git a/plugins/okr/agents/trendanalytiker-agent.md b/plugins/okr/agents/trendanalytiker-agent.md new file mode 100644 index 0000000..f60c873 --- /dev/null +++ b/plugins/okr/agents/trendanalytiker-agent.md @@ -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. + + + Context: Bruker har 3+ arkiverte sykluser + user: "Vis OKR-trender over tid" + assistant: "Launching trendanalytiker to analyze cross-cycle patterns and generate trend visualizations." + + + + 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." + +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` diff --git a/plugins/okr/commands/analyse.md b/plugins/okr/commands/analyse.md new file mode 100644 index 0000000..b76ea24 --- /dev/null +++ b/plugins/okr/commands/analyse.md @@ -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` diff --git a/plugins/okr/commands/gap.md b/plugins/okr/commands/gap.md new file mode 100644 index 0000000..b0e252c --- /dev/null +++ b/plugins/okr/commands/gap.md @@ -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` diff --git a/plugins/okr/commands/governance.md b/plugins/okr/commands/governance.md index f10af79..e134954 100644 --- a/plugins/okr/commands/governance.md +++ b/plugins/okr/commands/governance.md @@ -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 ``` diff --git a/plugins/okr/commands/innfĂžring.md b/plugins/okr/commands/innfĂžring.md index e8a591f..d06c375 100644 --- a/plugins/okr/commands/innfĂžring.md +++ b/plugins/okr/commands/innfĂžring.md @@ -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 diff --git a/plugins/okr/commands/kaskade.md b/plugins/okr/commands/kaskade.md index cf56d75..c137f87 100644 --- a/plugins/okr/commands/kaskade.md +++ b/plugins/okr/commands/kaskade.md @@ -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 ``` diff --git a/plugins/okr/commands/kvalitet.md b/plugins/okr/commands/kvalitet.md index 7171f9b..cd3cfad 100644 --- a/plugins/okr/commands/kvalitet.md +++ b/plugins/okr/commands/kvalitet.md @@ -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) diff --git a/plugins/okr/commands/oppsett.md b/plugins/okr/commands/oppsett.md index 64977a2..ca634e5 100644 --- a/plugins/okr/commands/oppsett.md +++ b/plugins/okr/commands/oppsett.md @@ -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` diff --git a/plugins/okr/commands/skriv.md b/plugins/okr/commands/skriv.md index 9dc8162..13888ed 100644 --- a/plugins/okr/commands/skriv.md +++ b/plugins/okr/commands/skriv.md @@ -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)? diff --git a/plugins/okr/commands/sporing.md b/plugins/okr/commands/sporing.md index cbc54b3..c3e0e20 100644 --- a/plugins/okr/commands/sporing.md +++ b/plugins/okr/commands/sporing.md @@ -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 diff --git a/plugins/okr/hooks/hooks.json b/plugins/okr/hooks/hooks.json index a157a79..47b7eb4 100644 --- a/plugins/okr/hooks/hooks.json +++ b/plugins/okr/hooks/hooks.json @@ -1,5 +1,16 @@ { "hooks": { + "SessionStart": [ + { + "hooks": [ + { + "type": "command", + "command": "node ${CLAUDE_PLUGIN_ROOT}/hooks/scripts/coaching-hook.mjs", + "timeout": 3000 + } + ] + } + ], "UserPromptSubmit": [ { "hooks": [ diff --git a/plugins/okr/hooks/scripts/coaching-hook.mjs b/plugins/okr/hooks/scripts/coaching-hook.mjs new file mode 100644 index 0000000..66a515a --- /dev/null +++ b/plugins/okr/hooks/scripts/coaching-hook.mjs @@ -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); +} diff --git a/plugins/okr/hooks/scripts/inject-okr-context.mjs b/plugins/okr/hooks/scripts/inject-okr-context.mjs index 8630dc6..69e8e47 100644 --- a/plugins/okr/hooks/scripts/inject-okr-context.mjs +++ b/plugins/okr/hooks/scripts/inject-okr-context.mjs @@ -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); diff --git a/plugins/okr/skills/okr-offentlig-sektor/SKILL.md b/plugins/okr/skills/okr-offentlig-sektor/SKILL.md index 9d2b4a9..75a2908 100644 --- a/plugins/okr/skills/okr-offentlig-sektor/SKILL.md +++ b/plugins/okr/skills/okr-offentlig-sektor/SKILL.md @@ -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 diff --git a/plugins/okr/skills/okr-offentlig-sektor/references/dfo-okr-mapping.md b/plugins/okr/skills/okr-offentlig-sektor/references/dfo-okr-mapping.md new file mode 100644 index 0000000..efe3c18 --- /dev/null +++ b/plugins/okr/skills/okr-offentlig-sektor/references/dfo-okr-mapping.md @@ -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 diff --git a/plugins/okr/skills/okr-offentlig-sektor/references/meeting-guides.md b/plugins/okr/skills/okr-offentlig-sektor/references/meeting-guides.md index a640f51..bed4f45 100644 --- a/plugins/okr/skills/okr-offentlig-sektor/references/meeting-guides.md +++ b/plugins/okr/skills/okr-offentlig-sektor/references/meeting-guides.md @@ -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? diff --git a/plugins/okr/skills/okr-offentlig-sektor/references/okr-antipatterns.md b/plugins/okr/skills/okr-offentlig-sektor/references/okr-antipatterns.md index b1eff36..bf2a3e4 100644 --- a/plugins/okr/skills/okr-offentlig-sektor/references/okr-antipatterns.md +++ b/plugins/okr/skills/okr-offentlig-sektor/references/okr-antipatterns.md @@ -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 diff --git a/plugins/okr/skills/okr-offentlig-sektor/references/okr-cheatsheet.md b/plugins/okr/skills/okr-offentlig-sektor/references/okr-cheatsheet.md index db343c9..73a645a 100644 --- a/plugins/okr/skills/okr-offentlig-sektor/references/okr-cheatsheet.md +++ b/plugins/okr/skills/okr-offentlig-sektor/references/okr-cheatsheet.md @@ -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) diff --git a/plugins/okr/skills/okr-offentlig-sektor/references/okr-examples.md b/plugins/okr/skills/okr-offentlig-sektor/references/okr-examples.md index 8e570cf..4cf079b 100644 --- a/plugins/okr/skills/okr-offentlig-sektor/references/okr-examples.md +++ b/plugins/okr/skills/okr-offentlig-sektor/references/okr-examples.md @@ -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? diff --git a/plugins/okr/skills/okr-offentlig-sektor/references/okr-framework.md b/plugins/okr/skills/okr-offentlig-sektor/references/okr-framework.md index f56ce0a..cc15a9c 100644 --- a/plugins/okr/skills/okr-offentlig-sektor/references/okr-framework.md +++ b/plugins/okr/skills/okr-offentlig-sektor/references/okr-framework.md @@ -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. diff --git a/plugins/okr/skills/okr-offentlig-sektor/references/okr-implementation.md b/plugins/okr/skills/okr-offentlig-sektor/references/okr-implementation.md index b15ac15..6c52988 100644 --- a/plugins/okr/skills/okr-offentlig-sektor/references/okr-implementation.md +++ b/plugins/okr/skills/okr-offentlig-sektor/references/okr-implementation.md @@ -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 diff --git a/plugins/okr/skills/okr-offentlig-sektor/references/okr-integrations.md b/plugins/okr/skills/okr-offentlig-sektor/references/okr-integrations.md index 1937071..389aba0 100644 --- a/plugins/okr/skills/okr-offentlig-sektor/references/okr-integrations.md +++ b/plugins/okr/skills/okr-offentlig-sektor/references/okr-integrations.md @@ -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/) diff --git a/plugins/okr/skills/okr-offentlig-sektor/references/okr-offentlig-governance.md b/plugins/okr/skills/okr-offentlig-sektor/references/okr-offentlig-governance.md index 36da8b2..8cf10a4 100644 --- a/plugins/okr/skills/okr-offentlig-sektor/references/okr-offentlig-governance.md +++ b/plugins/okr/skills/okr-offentlig-sektor/references/okr-offentlig-governance.md @@ -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.