Okf author
Create, edit, and enrich Open Knowledge Format (OKF) bundles — directories of markdown concept documents with YAML frontmatter that describe data assets, APIs, metrics, playbooks, and other knowledge. Use this skill whenever the user wants to create a knowledge bundle, document a dataset/table/schema/API as markdown knowledge, add or update a concept in an existing OKF bundle, maintain index.md or log.md files, or mentions OKF, knowledge bundles, knowledge catalogs, or "markdown + frontmatter" knowledge bases — even if they don't say "OKF" explicitly.From its SKILL.md
npx -y skills add kodepapa/okfleet --skill okf-authorAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 2 commands, including `python3 <path-to-this-skill>/scripts/okf.py validate <bundle>` and 1 more.
SKILL.md
7.1 KB, ~1.6k tokens by cl100k_base, as published. Nobody here has run it
Authoring OKF Bundles
OKF (Open Knowledge Format v0.1) represents knowledge as a plain directory of markdown files with YAML frontmatter. No SDK, no registry — if you can write a file, you can produce OKF. Your output will be read verbatim by humans browsing the repo and by agents loading files into context, so every document must be clean, self-contained markdown.
The full spec is at references/spec.md in this skill — consult it for edge
cases (versioning, conformance details). This file covers everything needed for
day-to-day authoring.
Helper script: scripts/okf.py inside this skill's directory (next to this
SKILL.md). Invoke it with its full path, e.g.
python3 <path-to-this-skill>/scripts/okf.py validate <bundle>.
Bundle anatomy
bundle/
├── index.md # reserved: directory listing (no frontmatter, except optional
│ # okf_version block at the bundle root only)
├── log.md # reserved: change history, newest first
├── <concept>.md # a concept document
└── <group>/ # any directory layout the domain suggests (tables/, metrics/, …)
├── index.md
└── <concept>.md
- A concept is one markdown file describing one unit of knowledge — a table, an API endpoint, a metric, a playbook, anything.
- The concept ID is its path minus
.md(e.g.tables/users). index.mdandlog.mdare reserved at every level — never use those names for concepts.- Organize directories by what makes sense for the domain; the spec doesn't prescribe a taxonomy.
Writing a concept document
---
type: BigQuery Table # REQUIRED — the only hard requirement in OKF
title: Customer Orders
description: One row per completed customer order across all channels.
resource: https://console.cloud.google.com/bigquery?p=acme&d=sales&t=orders
tags: [sales, orders]
timestamp: 2026-07-03T10:00:00Z
---
One to three paragraphs of prose: what this is, what it represents, how it is
used. For tables state the grain ("one row per X"), time range, and any
sampling/obfuscation caveats.
# Schema
| Column | Type | Description |
|------------|--------|----------------------------------|
| `order_id` | STRING | Globally unique order identifier.|
# Examples
```sql
SELECT ... -- 1–3 short, realistic snippets
Citations
[1] Source Title
Field rules, and why they matter:
- `type` — required, non-empty. Free-form but descriptive (`BigQuery Table`,
`Metric`, `Playbook`, `API Endpoint`, `Reference`). Consumers route and
filter on it, so reuse the same string for concepts of the same kind within
a bundle.
- `description` — ONE tight sentence. It is quoted verbatim in `index.md`
listings and search snippets; a paragraph here breaks every index.
- `title` — short display name (falls back to filename if omitted).
- `resource` — canonical URI of the underlying asset. Omit for abstract
concepts (metrics, playbooks).
- `tags` — short strings for cross-cutting categorization.
- `timestamp` — ISO 8601, update on every meaningful change.
- Producers may add any extra keys. When editing an existing document,
**preserve frontmatter keys you don't recognize** — other tools may depend
on them.
Body rules:
- Prefer structural markdown (headings, tables, lists, fenced code) over prose
walls — structure is what makes documents retrievable by agents.
- `# Schema`, `# Examples`, `# Citations` are conventional headings; use them
when applicable. Other headings are fine too (`# Joins`, `# Steps`, …).
- Ground everything in real metadata. Never invent columns, partitions, or
URLs. Cite only sources you actually consulted, numbered under
`# Citations`; when the concept has a `resource`, list it as citation `[1]`.
- No preamble, apologies, or meta-commentary in the body — it must read as a
finished reference document.
## Cross-linking
Links between concepts are how a bundle becomes a graph instead of a tree.
When prose mentions another concept, link it.
- **Match the bundle's existing link style.** The spec allows bundle-absolute
(`/tables/users.md`) and file-relative (`../tables/users.md`) links. For new
bundles default to **file-relative**: they render correctly on GitHub and
anywhere else the bundle is browsed as plain files.
- Link only to files that exist — check first (`okf.py list` gives the full
inventory). Broken links are legal in OKF but sloppy in fresh writing.
- One link per concept mention per section is enough; don't over-link.
- Never place links inside headings, fenced code blocks, or schema field-name
cells.
## The maintenance ritual
Indexes and logs are what make a bundle navigable without loading everything
into context. After creating, renaming, or meaningfully editing any concept:
1. **Update every affected `index.md`** — the listing in the concept's
directory, and parent listings if a directory was added. Easiest:
```bash
python3 <path-to-this-skill>/scripts/okf.py index <bundle> --write
(Run without --write first to preview the diff. If the bundle's existing
indexes are hand-curated with custom grouping, edit them by hand in the
same style instead of regenerating.)
Index format — sections of bullets, each * [Title](url) - description,
where the description comes from the target's frontmatter. No frontmatter
in index.md itself (bundle root may carry a small okf_version: "0.1"
block — that's the only exception).
-
Append to
log.mdat the bundle root (create it if the bundle has one convention-wise; it's optional). Newest first, ISO date headings:## 2026-07-03 * **Creation**: Added [Customer Orders](/tables/orders.md) table concept. * **Update**: Documented partitioning on [events](/tables/events.md). -
Stamp
timestampin the frontmatter of every document you touched.
Validate before you finish
python3 <path-to-this-skill>/scripts/okf.py validate <bundle>
Fix all ERRORs (unparseable frontmatter, missing type, frontmatter in a
non-root index.md) — these are the only hard conformance rules. Review WARNs
(broken links, missing descriptions, malformed log dates) and fix the ones you
introduced; pre-existing warnings in a bundle you're only extending can be
reported to the user instead.
If the script is unavailable, check the same things by hand — parseable
frontmatter and a non-empty type on every non-reserved .md file is what
makes a bundle conformant.
What ships with it: 2 files
24.4 KB alongside SKILL.md, 1 of them executable
references/
- spec.md14.7 KB
scripts/
- okf.pyruns9.7 KB