Your First OKF Bundle in 5 Minutes
You’ll walk out of here with a working OKF bundle. The example: a knowledge package about SaaS metrics — MRR, churn, and NPS. Three interconnected concepts, an index, a log. The kind of thing an AI agent can read, navigate, and use to give you real answers.
What’s a bundle? Ten seconds.
A folder with .md files. Each file is a concept. Every concept has YAML frontmatter with at least a type field. Done. That’s OKF.
No SDK, no schema registry, no build step. If cat works, OKF works.
Final structure
This is what we’re putting together:
saas-metrics/
├── index.md ← lists what's in the bundle
├── log.md ← change history
├── mrr.md ← concept: Monthly Recurring Revenue
├── churn.md ← concept: Churn Rate
└── nps.md ← concept: Net Promoter ScoreFlat. No subfolders. For a small bundle, you don’t need more.
Step 1 — Create the folder
mkdir saas-metrics && cd saas-metricsStep 2 — First concept: MRR
Create mrr.md:
---
type: Metric
title: MRR — Monthly Recurring Revenue
description: Normalized monthly recurring revenue. The financial heartbeat of any SaaS.
tags: [revenue, saas, finance]
timestamp: 2026-06-13T10:00:00Z
---
MRR is the sum of all recurring revenue normalized to one month. Excludes one-time fees, services, or one-off discounts.
# Formula
MRR = Σ (monthly value of each active subscription)
# Variations
| Type | What it measures |
|------|-----------------|
| New MRR | Revenue from new customers |
| Expansion MRR | Upgrades and add-ons |
| Contraction MRR | Downgrades |
| Churned MRR | Revenue lost to cancellations — see [churn](./churn.md) |
# Relationship to other concepts
- Churn hits MRR directly. Details at [churn rate](./churn.md).
- [NPS](./nps.md) is a leading indicator: NPS dropping today = MRR dropping in 60–90 days.
# Citations
[1] [SaaS Metrics 2.0 — David Skok](https://www.forentrepreneurs.com/saas-metrics-2/)Notice the cross-links — [churn](./churn.md) and [NPS](./nps.md). Relative links between concepts at the same level. That’s the OKF knowledge graph.
Step 3 — Second concept: Churn
Create churn.md:
---
type: Metric
title: Churn Rate
description: Percentage of customers (or revenue) lost over a given period.
tags: [retention, saas, health]
timestamp: 2026-06-13T10:00:00Z
---
Churn is the metric nobody wants to look at but everybody needs. It measures how fast you're losing customers or revenue.
# Formulas
**Logo churn (customers):**Churn Rate = (customers lost in period / customers at start of period) × 100
**Revenue churn:**Revenue Churn = churned MRR / MRR at start of month × 100
Revenue churn is more honest. One enterprise customer canceling hurts more than ten freemium accounts.
# Benchmarks
| Stage | Acceptable monthly churn |
|-------|-------------------------|
| Early-stage | < 5% |
| Growth | < 3% |
| Scale | < 1% |
# Relationship to other concepts
- Churn destroys [MRR](./mrr.md). Negative net MRR = company dying slowly.
- [NPS](./nps.md) detractors (0–6) are churn candidates. Track the correlation.
# Citations
[1] [What is Good SaaS Churn Rate — Lenny Rachitsky](https://www.lennysnewsletter.com/p/what-is-good-retention-rate)Step 4 — Third concept: NPS
Create nps.md:
---
type: Metric
title: NPS — Net Promoter Score
description: Score from -100 to 100 measuring likelihood of product recommendation.
tags: [satisfaction, saas, product]
timestamp: 2026-06-13T10:00:00Z
---
NPS asks one thing: "from 0 to 10, how likely are you to recommend us?" Simple, imperfect, but universally comparable.
# Formula
NPS = % promoters (9-10) − % detractors (0-6)
Passives (7–8) don't enter the calculation. They exist but they're invisible. Like that colleague who never comments on code reviews.
# Segmentation
| Group | Score | Meaning |
|-------|-------|---------|
| Promoters | 9–10 | Evangelists. They bring referrals. |
| Passives | 7–8 | Satisfied but vulnerable to competitors. |
| Detractors | 0–6 | [Churn](./churn.md) risk. Can generate negative noise. |
# Relationship to other concepts
- Detractors become churn. Correlate NPS by cohort with [churn rate](./churn.md).
- Falling NPS is an early warning of [MRR](./mrr.md) impact.
# Citations
[1] [The One Number You Need to Grow — HBR](https://hbr.org/2003/12/the-one-number-you-need-to-grow)Step 5 — index.md
The index is your bundle’s table of contents. No frontmatter — reserved file. Just lists contents with links and short descriptions.
Create index.md:
# SaaS Metrics Bundle
Core metrics for SaaS companies.
## Metrics
* [MRR — Monthly Recurring Revenue](./mrr.md) - Normalized monthly recurring revenue
* [Churn Rate](./churn.md) - Percentage of customers/revenue lost per period
* [NPS — Net Promoter Score](./nps.md) - Recommendation score (-100 to 100)Step 6 — log.md
The log is your changelog. Most recent entries first. Grouped by ISO 8601 date.
Create log.md:
# Bundle Update Log
## 2026-06-13
* **Creation**: Initial bundle with three core SaaS metrics.
* **Creation**: Added [MRR](./mrr.md) with formulas and variations.
* **Creation**: Added [Churn Rate](./churn.md) with benchmarks by stage.
* **Creation**: Added [NPS](./nps.md) with segmentation and correlations.Quick validation
Your bundle is OKF v0.1 conformant if:
- ✅ Every
.mdthat isn’tindex.mdorlog.mdhas parseable YAML frontmatter - ✅ Every frontmatter has a
typefield filled in - ✅
index.mdandlog.mdfollow the structure defined in the spec
Those three checks. That’s it. The rest (title, description, tags, timestamp) is recommended but won’t break conformance.
What you just built
A navigable knowledge graph. Any agent that understands markdown + YAML can:
- List concepts via
index.md - Understand each concept’s kind via
type - Navigate relationships via cross-links
- Check history via
log.md
You don’t need anything beyond a text editor and git. No database, no API, no vendor lock-in. Knowledge stays as portable as a repo.
Next steps
- Add subfolders when the bundle grows (
operational/,financial/,product/) - Put
resource:in frontmatter when a metric has a real dashboard attached - Version with git — each commit is a snapshot of knowledge state
- Run the validator at okf.md to check conformance
Actual time spent: probably under 5 minutes. If it took longer, blame your editor, not the format.