384 lines
23 KiB
Markdown
384 lines
23 KiB
Markdown
# OKR for Public Sector
|
||
|
||
> Turn strategy into measurable goals. An AI coach that learns your organization, tracks progress across cycles, and guides you from first OKR to organizational mastery.
|
||
|
||
> **Solo-maintained, fork-and-own.** This plugin is a starting point, not a vendor product. Issues are welcome as signals; pull requests are not accepted. See [GOVERNANCE.md](GOVERNANCE.md) for the full model and what upstream provides.
|
||
|
||
*AI-generated: all code produced by Claude Code through dialog-driven development. [Full disclosure →](../../README.md#ai-generated-code-disclosure)*
|
||
|
||

|
||

|
||

|
||

|
||

|
||

|
||

|
||
|
||
---
|
||
|
||
## Why This Exists
|
||
|
||
Every organization has a strategy. Few manage to turn it into goals that teams actually work toward.
|
||
|
||
OKR (Objectives and Key Results) is a proven framework for that translation — used by Google and Intel, and documented in Norwegian practice: Digdir runs OKR in its product delivery model, NAV product teams use it at team level, Oslo Origo built and open-sourced its own OKR tracker, and FINN.no has more than six years of it. Every adopter named here has a public source in `skills/okr-offentlig-sektor/references/okr-sources.md` § 4; organizations we could not source are not named. But adopting OKR is hard. The methodology sounds simple ("write inspiring goals with measurable results") until you try it. Then you hit real questions:
|
||
|
||
- *How do we connect our OKR to the goals in our tildelingsbrev?*
|
||
- *What's a good Key Result vs. just an activity disguised as one?*
|
||
- *How do we handle it when political priorities shift mid-cycle?*
|
||
- *Are we actually getting better at this, or just going through the motions?*
|
||
|
||
This plugin is an AI coach that helps with all of these. It's built specifically for Norwegian public sector — 4-month tertial cycles, DFØ's "mål- og resultatstyring" framework, tillitsvalgt involvement, and the governance chain from Stortingsmelding to team OKR.
|
||
|
||
### What makes it different from a methodology guide?
|
||
|
||
A methodology guide explains OKR theory. This plugin *knows your organization*.
|
||
|
||
After a one-time onboarding conversation, it remembers your maturity level, your strategic documents, your current OKR, and your cultural challenges. Every interaction builds on that knowledge. When you ask it to write new OKR, it already knows what your organization is trying to achieve. When you check quality, it checks alignment against your actual strategy — not a generic rubric.
|
||
|
||
Over time, it tracks how your OKR practice evolves. It spots recurring mistakes, shows score trends, and coaches you based on where you are in the cycle. Early in the cycle? Focus on alignment. Midway? Time for a progress check. Near the end? Let's prepare the retrospective.
|
||
|
||
---
|
||
|
||
## What It Does
|
||
|
||
### From Strategy to OKR
|
||
|
||
The core workflow: take your strategic goals (from virksomhetsplan, tildelingsbrev, etatsstrategi, or any strategic document) and transform them into well-structured OKR.
|
||
|
||
```
|
||
> /okr:skriv We want to make the application process faster for citizens
|
||
```
|
||
|
||
The plugin guides you through writing an inspiring Objective and measurable Key Results, calibrating ambition, and checking alignment against your organization's strategic direction.
|
||
|
||
### Quality That Goes Beyond Spell-Check
|
||
|
||
```
|
||
> /okr:kvalitet
|
||
```
|
||
|
||
Checks your OKR against 19 named antipatterns (like "activity disguised as a Key Result", "sandbagging", or "set-and-forget") and scores quality across multiple dimensions. If your OKR has issues, you get concrete improvement suggestions — not just "try harder."
|
||
|
||
### Strategy Alignment
|
||
|
||
```
|
||
> /okr:kaskade
|
||
```
|
||
|
||
Cascades OKR from organizational level down to teams. Shows which strategic goals have team support and which are orphaned. If you've stored your org-level OKR, it reads them automatically.
|
||
|
||
### Gap Analysis
|
||
|
||
```
|
||
> /okr:gap
|
||
```
|
||
|
||
Compares your strategic documents (tildelingsbrev, virksomhetsplan) against your current OKR and produces a coverage matrix: which requirements are fully covered, which are partially covered, and which are completely missing. For each gap, it suggests OKR formulations.
|
||
|
||
### Progress Tracking
|
||
|
||
```
|
||
> /okr:sporing
|
||
```
|
||
|
||
Calculates scores (0.0–1.0), assesses confidence levels, generates forecasts, and flags Key Results that are at risk. If you use Linear, it can sync status there too.
|
||
|
||
### Cross-Cycle Learning
|
||
|
||
```
|
||
> /okr:analyse
|
||
```
|
||
|
||
After your first completed cycle, this is where the real value begins. Reads your archived cycles and shows:
|
||
- **Score trends** — are you improving? Visualized with charts.
|
||
- **Recurring antipatterns** — the same mistakes across cycles get flagged explicitly.
|
||
- **Alignment progression** — is your team coverage of org goals getting better?
|
||
|
||
### Proactive Coaching
|
||
|
||
You don't have to remember to check in. When you start a session, the plugin automatically tells you where you are in the cycle and what to focus on:
|
||
|
||
> *"OKR coaching: Week 12 of 16 in T1-2026. Approaching cycle end — focus on final scoring and retrospective preparation. 2 KR flagged as at-risk in last status update."*
|
||
|
||
### Meetings and Facilitation
|
||
|
||
```
|
||
> /okr:møter
|
||
```
|
||
|
||
Generates tailored agendas for OKR workshops, check-ins, reviews, and 1:1 conversations using the CFR (Conversations, Feedback, Recognition) framework — adapted for public sector where bonuses aren't an option.
|
||
|
||
### Adoption and Change Management
|
||
|
||
```
|
||
> /okr:innføring
|
||
```
|
||
|
||
Planning to introduce OKR in your organization? Get a phased rollout plan with resistance-handling strategies, maturity assessment, and guidance on involving tillitsvalgte — because in Norwegian public sector, change management without union involvement doesn't work.
|
||
|
||
### Governance and Compliance
|
||
|
||
```
|
||
> /okr:governance
|
||
```
|
||
|
||
Translate tildelingsbrev requirements into OKR. Map the governance chain (Stortingsmelding → tildelingsbrev → etatsstrategi → OKR). Verify that your OKR documentation meets Riksrevisjon standards.
|
||
|
||
### Export Deliverables
|
||
|
||
```
|
||
> /okr:export
|
||
```
|
||
|
||
Renders any OKR deliverable — quality review, gap matrix, status report, or retrospective — to a print-ready A4 PDF for management or Riksrevisjon. Tables get striping and score cells are color-coded (green/yellow/red). PDF generation is a documented prerequisite (`pip install markdown weasyprint`, `brew install pango`), not bundled — a missing dependency exits with a clear install hint, never a traceback.
|
||
|
||
### Archive Readiness
|
||
|
||
```
|
||
> /okr:arkivklar
|
||
```
|
||
|
||
Reports which categories of bevaringsforskrifta (FOR-2025-12-19-2729) the tree's contents likely fall under — § 7 for the state governance line, § 30 for the municipal one, and the § 3 safety net for everything not named — and what should be *considered* for transfer to the organization's case/archive system. The two governance lines are parallel, not alternative: the same file can match a category in both, and both are reported.
|
||
|
||
The command decides nothing. Kassasjon requires authority from Nasjonalarkivet under arkivlova § 13, and the assessment itself belongs to the organization's documentation plan (arkivlova § 8, arkivforskrifta § 12 b). There is **no deletion model in this plugin and none will be added** — the command declares neither `Write` nor `Edit`, so it is read-only in the tool layer, not merely in prose. Falling under § 3 means the material *must be preserved*, not the opposite. The report also names what it cannot see: arkivforskrifta § 1 letter c makes the assessment conditional on whether the documentation is already managed as archive in another system, and that state is reported as unknown rather than assumed away.
|
||
|
||
### Inbox Ingestion
|
||
|
||
```
|
||
> /okr:innboks
|
||
```
|
||
|
||
Drop documents — tildelingsbrev PDFs, virksomhetsplan docx, meeting notes — into `.claude/okr/innboks/` and ingest them into the knowledge tree in one sweep. The pipeline is deterministic (no LLM in the core): convert (txt/md/docx/eml/pdf) → split on headings → stamp OKF frontmatter with a `kilde: innboks` provenance marker → route by document type → validate each document against a strict security gate. A document that fails the gate is discarded alone with a per-document report; originals always stay untouched in the inbox, and re-running on unchanged input is a byte-identical no-op. Known v1 limitations (flat PDF extraction, table structure loss) are listed in the CHANGELOG.
|
||
|
||
### Cycle Reporting
|
||
|
||
```
|
||
> /okr:rapport
|
||
```
|
||
|
||
Generates a report straight from the KR numbers in the cycle's `okr-*.md` frontmatter — deterministic, so the same data yields byte-identical output. Three forms, one command argument: `tertial` for interim reporting, `arsrapport` for part III of the statutory annual report ("Årets aktiviteter og resultater"), and `etatsstyring` for the agency-governance meeting brief. Committed and aspirational Key Results are reported **separately** in all three, never aggregated into one figure: the two are measured against different standards, and a combined average is ambiguous by construction. The generator owns the arithmetic, the table structure and the formatting invariants (score is stated on its 0–1.0 scale, never as percent goal attainment; a committed KR below target is flagged as a deviation, not a middling score).
|
||
|
||
An aspirational KR with a low score is **never** presented as a deviation — landing near 0.7 is expected attainment for that type, and letting the aspirational score carry consequences in reporting would re-bundle target and forecast, which is what makes sandbagging structurally rational in the next cycle.
|
||
|
||
It does **not** own confidence, nor the assessment fields it reserves — the per-Objective evaluation of goal attainment in the annual report, and the mapping from Objectives to the letter of allocation's governance parameters. Those are left as marked placeholders because they require judgement or sources the generator does not read. The Confidence column is likewise left empty by design and filled in during `/okr:sporing`, because confidence is a probability judgement — the canon designates one source of truth for the On Track / At Risk / Off Track scale and explicitly rejects deriving it mechanically from score. Scores themselves are never written to disk; they are recomputed from `baseline`/`target`/`naa` each run so a second, drifting source of truth cannot arise.
|
||
|
||
### Help and Maintenance
|
||
|
||
```
|
||
> /okr:help
|
||
> /okr:freshen-references
|
||
```
|
||
|
||
`/okr:help` lists all 16 commands, 7 agents, and a recommended workflow keyed to where you are in the tertial cycle. `/okr:freshen-references` is a knowledge-base self-evaluator: it scores 18 of the 19 domain reference files against an anchored quality rubric — the quality rubric itself is excluded, since scoring the scoring instrument is circular — and polls named public sources (UN EGDI, EU eGov Benchmark, OECD DGI, Digdir, WCAG, forvaltningsloven) to flag outdated `Sist oppdatert` markers.
|
||
|
||
---
|
||
|
||
## Getting Started
|
||
|
||
### Install
|
||
|
||
Add to your Claude Code plugin configuration:
|
||
|
||
```json
|
||
{
|
||
"enabledPlugins": {
|
||
"okr@ktg-plugin-marketplace": true
|
||
}
|
||
}
|
||
```
|
||
|
||
### First Conversation
|
||
|
||
```
|
||
> /okr:oppsett mvp
|
||
```
|
||
|
||
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? `/okr:oppsett full` runs a deeper interview (15-20 minutes) that also captures your strategic context, cultural challenges, and organizational structure.
|
||
|
||
### Typical Workflow
|
||
|
||
**Starting fresh:**
|
||
```
|
||
/okr:oppsett full # One-time setup
|
||
/okr:skriv # Write your first OKR
|
||
/okr:kvalitet # Quality check
|
||
/okr:kaskade # Align with org goals
|
||
```
|
||
|
||
**During a cycle:**
|
||
```
|
||
/okr:sporing # Update progress
|
||
/okr:møter # Prepare check-in meeting
|
||
```
|
||
|
||
**End of cycle:**
|
||
```
|
||
/okr:oppsett arkiver # Archive with retrospective
|
||
/okr:analyse # See how you're trending
|
||
/okr:skriv # Start the next cycle
|
||
```
|
||
|
||
---
|
||
|
||
## Built for Norwegian Public Sector
|
||
|
||
### What's different about OKR in offentlig sektor?
|
||
|
||
| Challenge | How the plugin helps |
|
||
|-----------|---------------------|
|
||
| 4-month tertial cycles (not quarterly) | Built-in tertial support with correct week counting and phase detection |
|
||
| Tildelingsbrev drives priorities | `/okr:governance` and `/okr:gap` translate and check coverage |
|
||
| DFØ uses different terminology | Built-in mapping between "mål- og resultatstyring" and OKR concepts |
|
||
| Riksrevisjonen requires documentation | Audit-ready format with baseline, target, data source per KR |
|
||
| No performance bonuses | CFR framework designed for recognition without financial incentives |
|
||
| Tillitsvalgte must be involved | Guidance on drøftingsplikt, transparent KR, and union involvement |
|
||
| Consensus culture | Advice calibrated for organizations where stretch goals feel risky |
|
||
| Political priorities can shift mid-cycle | Strategies for handling mid-cycle mandate changes |
|
||
|
||
### The governance chain
|
||
|
||
```
|
||
Stortingsmelding / NTP
|
||
|
|
||
Tildelingsbrev fra departement
|
||
|
|
||
Etatsstrategi / Virksomhetsplan
|
||
|
|
||
Org-level OKR (annual, strategic)
|
||
|
|
||
Cycle OKR (tertial, tactical)
|
||
|
|
||
Team OKR
|
||
```
|
||
|
||
The plugin understands this hierarchy and helps you maintain alignment at every level.
|
||
|
||
### The documented problem class
|
||
|
||
The design targets a problem class that has been described by the audit
|
||
authority itself, not a general assertion about public-sector management.
|
||
|
||
**Read the dates before the findings.** All four audits below were carried out in
|
||
**2019–2020**. Riksrevisjonen has since **closed these cases following
|
||
improvements in mål- og resultatstyring** (DFØ-notat 2026:2, fn. 152 and fn. 217).
|
||
They are cited here as historically documented weaknesses that the administration
|
||
has addressed — not as current criticism of any agency.
|
||
|
||
All four are chapters of **Dokument 1** (the annual accounting and compliance
|
||
audit), not of the Dokument 3 forvaltningsrevisjon series. Stable per-chapter URLs
|
||
do not exist, so each is cited through DFØ's aggregation with page and footnote.
|
||
|
||
| Documented finding (2019–2020) | Source | Problem class the plugin works on |
|
||
|---|---|---|
|
||
| Annual reports give information about activities and service deliveries, and to a limited degree about effects — attributed to measurement problems, including missing statistics | Riksrevisjonen (2019), part of Dokument 1 (2019–2020), as rendered in DFØ-notat 2026:2 p. 53 (fn. 253) | Leading/lagging balance as a rubric dimension; annual-report generation (`/okr:rapport arsrapport`) |
|
||
| The annual report presentation showed the agency's own analysis of goal attainment to a lesser degree, appearing instead as a snapshot of activities and results (NIBIO, 2020) | Riksrevisjonen (2020), part of Dokument 1, as rendered in DFØ-notat 2026:2 pp. 47–48 (fn. 216) | The antipattern report generation is built to avoid |
|
||
| The department had not established a mål- og resultatstyring system giving sufficient information about how effectively the agency used its resources (Havforskningsinstituttet, 2019) | Riksrevisjonen (2019), part of Dokument 1 (2019–2020), as rendered in DFØ-notat 2026:2 p. 48 (fn. 222) | Benefit realisation tied to OKR rather than treated as a separate track |
|
||
| Steering information did not give a sufficient basis for prioritisation (Luftfartstilsynet and Havforskningsinstituttet, 2019) | Riksrevisjonen (2019), part of Dokument 1 (2019–2020), as rendered in DFØ-notat 2026:2 p. 47 (fn. 210–211) | Gap analysis against tildelingsbrev (`/okr:gap`) |
|
||
|
||
The positive mandate for what `/okr:governance` and `/okr:gap` read out of a
|
||
tildelingsbrev is separate: the department **shall** set styringsparametere in
|
||
order to assess goal attainment and results, and set requirements for the annual
|
||
report — *Bestemmelser om økonomistyring i staten* point 1.5 (DFØ-notat 2026:2
|
||
p. 49, fn. 228).
|
||
|
||
**What is not claimed here.** These quotations are DFØ's rendering of
|
||
Riksrevisjonen, not Riksrevisjonen's own wording; the NIBIO finding in particular
|
||
has not been verified against the primary source. Nothing above says the plugin
|
||
resolves these findings, that the findings are open, or that any agency is
|
||
currently deficient. A separate 2021 consultancy figure sometimes cited in this
|
||
context is omitted deliberately: it is not Riksrevisjonen's, and its sample is
|
||
unknown.
|
||
|
||
---
|
||
|
||
## Under the Hood
|
||
|
||
### Agents
|
||
|
||
7 specialized agents activate automatically:
|
||
|
||
| Agent | Role |
|
||
|-------|------|
|
||
| kvalitetssjekker | Score quality, detect antipatterns, check alignment |
|
||
| kaskadebygger | Build cascades between organizational levels |
|
||
| fremdriftssporer | Calculate scores, forecast completion, flag risks |
|
||
| møtefasilitator | Generate meeting agendas and facilitation materials |
|
||
| styringsrådgiver | Governance analysis, tildelingsbrev translation, audit compliance |
|
||
| gapanalytiker | Coverage matrix between strategic documents and OKR |
|
||
| trendanalytiker | Cross-cycle pattern analysis with trend visualization |
|
||
|
||
### Hooks
|
||
|
||
| Event | What it does |
|
||
|-------|-------------|
|
||
| SessionStart | Proactive coaching — tells you where you are in the cycle and what to focus on |
|
||
| UserPromptSubmit | Injects your organization profile and available context files into every interaction |
|
||
| PreCompact | Preserves OKR draft state if the conversation gets long |
|
||
|
||
### Skills
|
||
|
||
| Skill | Role |
|
||
|-------|------|
|
||
| okr-offentlig-sektor | Core OKR methodology and Norwegian public-sector domain knowledge |
|
||
| okr-second-brain-search | On-demand retrieval from your personal OKF wiki (`.claude/okr/` + `~/.claude/okr/org/`) — in free chat and during `/okr:*` commands, without pre-injecting everything |
|
||
|
||
### Dependencies
|
||
|
||
The plugin core is zero-dependency (`node:` builtins only). The inbox-ingestion pipeline (`/okr:innboks`, v1.7.0) is the one deliberate exception: it needs four pure-JS conversion libraries, exact-pinned in `package.json` (no `^`/`~` ranges) — `mammoth` (docx), `turndown` (HTML→markdown), `postal-mime` (eml), `unpdf` (PDF). Install with `npm install --ignore-scripts` (the repo `.npmrc` enforces `ignore-scripts=true` as supply-chain protection); requires Node >= 22. Everything else in the plugin runs without `node_modules/`.
|
||
|
||
### Knowledge Base
|
||
|
||
19 reference files covering OKR methodology, Norwegian public sector governance (state and municipal steering lines), antipatterns, meeting guides, metrics library, anchored quality rubrics, integration patterns, and more. The plugin reads only what's relevant to each interaction — never the whole library at once.
|
||
|
||
### Persistent Context
|
||
|
||
```
|
||
.claude/
|
||
okr.local.md # Your organizational profile
|
||
okr/
|
||
strategisk-kontekst/ # Strategic documents you provide
|
||
syklus/T1-2026/ # Active cycle OKR and status
|
||
historikk/ # Archived cycles with retrospectives
|
||
dokumenter/ # Any other relevant documents
|
||
```
|
||
|
||
---
|
||
|
||
## Limitations
|
||
|
||
- Designed for Norwegian public sector — may not fit other contexts without adaptation
|
||
- Not yet tested in a real multi-cycle OKR program
|
||
- Linear is the only supported tracking integration
|
||
- Norwegian language for all user-facing interactions
|
||
|
||
---
|
||
|
||
## Version History
|
||
|
||
| Version | Date | Highlights |
|
||
|---------|------|------------|
|
||
| **1.8.2** | 2026-07-31 | Patch: siterte markørverdier korrumperte begge rot-markørene — `okf_version: "0.2"` (formen OKF-specen selv viser) ble avvist som ikke-upstream, flyttet til `okf_layout`, og `okf_version` nedgradert til vår konstant. Anførselstegn strippes nå ved parse (før tolkning og før emisjon) og verdien emitteres unquoted; unquote er konservativ (kun matchende par). Suite 187 → 192 |
|
||
| **1.8.1** | 2026-07-25 | Patch: `okf_version`/`okf_layout`-splitt (OKF-spec §12) — rot-`index.md` bærer nå to distinkte markører i stedet for én som bar to urelaterte konsepter: `okf_version` = upstream OKF-versjonen (`0.1`, verdisett eid av Google), `okf_layout` = pluginens egen layout-revisjon (`kb-layout-2026-06`). Automatisk migrasjonssti for eksisterende bundles (layout-verdi i `okf_version` flyttes verbatim); `okf-check` ekkoer begge; `--okf-layout` erstatter `--okf-version` (beholdt som deprecated alias m/ stderr-varsel) |
|
||
| **1.8.0** | 2026-07-25 | «Én kanon» — metodekonsolidering etter dyp review: én kanonisk confidence-tabell og én kadens-doktrine i `okr-framework.md` med konsument-dedup på tvers av referanser, kommandoer og agenter; score→modenhet-avledningen fjernet; `committed` = forpliktelse OG påvirkbarhet; kvalitetsvurdering ankret i rubrikken (alle 10 dimensjoner, ingen parallelle scorebånd); ekte antipattern-kategorier; milepæl-/binær-unntak; «align, don't cascade» i kaskadeflatene; markedsclaims kildebelagt + nye kilder (NCT, EBM 2024); ny konsistensvakt `tests/canon-consistency.test.mjs` (suite 149 → 167 cases) |
|
||
| **1.7.1** | 2026-07-17 | Patch: restsanering etter dyp review — KB/doc-hygiene med referanse-integritetstest (B1) + ingestion-kode-hygiene (B2): æ/ø-translitterering i slugify, ikke-destruktiv circuit-breaker (merge, config overlever), sanitizeEntry mot bidi/zero-width/Unicode-tag, `--okf-version`-bump, BOM/CRLF-toleranse, presis at-risk-telling, bøyningsformer i topic-guard |
|
||
| **1.7.0** | 2026-07-17 | Innboks-ingestion: `/okr:innboks` med deterministisk pipeline (convert/split/frontmatter/gate/relasjoner/indeks), per-dokument sikkerhetsgate mot RAG-poisoning, `kilde: innboks`-provenans + untrusted-envelope i retrieval-skillen, 4 exact-pinnede pure-JS-avhengigheter (eneste zero-dep-unntak) |
|
||
| **1.6.1** | 2026-06-26 | Patch: credibility-sanering etter 360-re-evaluering (C+ → A−) — ASCII-strippet kvalitetsrubrikk omskrevet til korrekt norsk, `okr-second-brain-search` `~`-glob søker nå hjemme-roten, uverifisert kb-search-sitat fjernet, regnefeil i oboard-eksempel rettet |
|
||
| **1.6.0** | 2026-06-26 | OKF «second brain»: on-demand retrieval-skill (`okr-second-brain-search`) over OKF-wiki, OKF-frontmatter på kontekstfiler, `okf-index`/`okf-check`, delt frontmatter-modul, slankere inject-hook |
|
||
| **1.5.0** | 2026-06-26 | Referansegrad-løft (Fase 3): `/okr:help`, `/okr:export` (PDF), `/okr:freshen-references`, ankret kvalitetsrubrikk, atomisk org-profil-skriving |
|
||
| **1.4.0** | 2026-06-24 | Domenedybde + kildeintegritet (Fase 1), UX-/kommando-/agent-modning (Fase 2), hybrid org-kontekst-lesing |
|
||
| 1.3.2 | 2026-06-24 | Fix: loopende Stop-hook fjernet |
|
||
| 1.3.1 | 2026-06-23 | Fakta- og troverdighetssanering |
|
||
| **1.3.0** | 2026-04-08 | Gap analysis, cross-cycle analytics with Mermaid visualizations, proactive SessionStart coaching |
|
||
| **1.1.0** | 2026-04-08 | Persistent context, deep onboarding, context-aware commands, cycle archival |
|
||
| **1.0.0** | 2026-04-08 | Architecture overhaul, self-contained commands, hooks, marketplace-ready |
|
||
| 0.5.0 | 2026-02-07 | First formal version |
|
||
|
||
See [CHANGELOG.md](CHANGELOG.md) for full details.
|
||
|
||
---
|
||
|
||
## License
|
||
|
||
[MIT](LICENSE)
|