Skip to content

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 Score

Flat. No subfolders. For a small bundle, you don’t need more.

Step 1 — Create the folder

mkdir saas-metrics && cd saas-metrics

Step 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 retention? — Lenny Rachitsky (2020)](https://www.lennysnewsletter.com/p/what-is-good-retention-issue-29)

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 conformant (v0.1 and v0.2 share these rules) if:

  1. ✅ Every .md that isn’t index.md or log.md has parseable YAML frontmatter
  2. ✅ Every frontmatter has a type field filled in
  3. ✅ index.md and log.md follow 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
  • Check conformance with the one-liner in the FAQ or the skill’s validate.sh (a browser validator is coming soon)

Actual time spent: probably under 5 minutes. If it took longer, blame your editor, not the format.