okf-cli — Open Knowledge Format tooling
Converts plain markdown into OKF-conformant knowledge bundles. Domain experts write the content, okf bundle generates frontmatter, type, timestamps, and index files.
Also validates bundles, lists concepts, reads concepts by ID, and reports version.
Install
uv tool install okf-cli
Dev quickstart
uv sync
uv run okf --help
uv run okf --version
Global options: --version, --help.
Commands
okf bundle — convert plain markdown to OKF bundle
okf bundle <input-dir> [output-dir] [--default-type <name>] [--force] [--strict]
| Argument | Description |
|---|---|
input-dir |
Directory of plain .md files |
output-dir |
Target directory (default: <input-dir>_knowledge_base) |
--default-type |
Type for root-level files (default: input directory name) |
--force, -f |
Overwrite output directory if it exists |
--strict |
Enforce strict OKF spec output: fail on broken local .md links and skip AGENTS.md generation |
okf bundle example --default-type reference # → example_knowledge_base/
okf bundle example bundled --default-type reference --force --strict
.okfignore: put in input-dir root; one bundle-relative .md path per line. Exact match only (no glob).
Link checking: scans body links to local .md targets. Missing or out-of-bundle links warn by default, fail with --strict.
okf list — list concepts in a bundle
okf list <directory>
Prints a table of concepts with ID, type, title, and description. Requires valid OKF bundle.
okf list example_knowledge_base/
# ┏━━━━━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━┓
# ┃ ID ┃ Type ┃ Title ┃ Description ┃
# ┡━━━━━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━┩
# │ datasets/sales │ datasets │ Sales │ Sales data. │
# │ tables/orders │ tables │ Orders │ One row. │
# └────────────────┴──────────┴────────┴─────────────┘
okf read — read a concept by ID
okf read <directory> <concept-id>
Prints full concept contents (frontmatter + body). Concept IDs as printed by okf list. Guards against path traversal.
okf validate — check OKF conformance
okf validate <directory>
Checks OKF v0.1 §9 conformance: frontmatter required, type required, reserved filenames follow spec structure, UTF-8 required.
okf validate example_knowledge_base/
# 16 files: 16 ok
Input format
Strict (recommended)
# Title
> Description
Lenient fallback
Files without strict format are bundled best-effort: title omitted if absent, description synthesized from first 80 chars of body.
| Rule | Why |
|---|---|
| Folder name = concept type | tables/orders.md → type: "tables" |
Only .md files processed |
Non-.md files ignored |
index.md, log.md, README.md skipped in bundle |
Repo artifacts; not OKF concepts. list/read/validate only reserve index.md and log.md. |
.okfignore entries skipped |
Skip selected files without moving them. |
Root files use --default-type, defaulting to the input directory name. See example/ for sample structure.
Output
Each concept becomes a markdown file with YAML frontmatter:
---
type: "tables"
title: "Customer Orders"
description: "One row per completed customer order across all channels."
timestamp: "2026-07-04T15:06:51+00:00"
---
Original body preserved as-is.
Every directory gets an index.md listing files and subdirs.
OKF Conformance
Generated bundles conform to OKF v0.1 (§9): frontmatter required, non-empty type, reserved filenames follow spec structure.
Project layout
okf-cli
├── .github/workflows/test.yml # CI
├── AGENTS.md # Contributor context for AI agents
├── OKF_SPEC.md # OKF specification
├── README.md # This file
├── openwiki/ # Contributor docs (architecture, workflows, etc.)
├── pyproject.toml # uv-managed Python project
├── skills/ # Optional skill definitions
├── uv.lock # uv lockfile
├── src/okf/
│ ├── cli.py # Typer entrypoint
│ ├── api.py # Programmatic Python API
│ ├── core.py # Shared parsing/formatting
│ └── commands/ # bundle, list, read, validate
├── tests/ # pytest suite
└── example/ # Sample input markdown
For contributor guidance, see AGENTS.md and openwiki/quickstart.md.
Release files for okf-cli 0.5.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| okf_cli-0.5.4.tar.gz | 47.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| okf_cli-0.5.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 62.6 kB
Release files / okf_cli-0.5.4.tar.gz
| Download URL | okf_cli-0.5.4.tar.gz |
|---|---|
| Size | 47.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0dd29dd566b7e24aa1823fbacd9c2311c786146da46f6db0c140667ff4a3a0ca
|
|
BLAKE2b-256 checksum How to use checksums |
6254719b1de5cad48eff95170e485dacedeb2f3df0b4d92400e5abb6eba57e98
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / okf_cli-0.5.4-py3-none-any.whl
| Download URL | okf_cli-0.5.4-py3-none-any.whl |
|---|---|
| Size | 15.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
db92635d6e55ffbd094e676a901a473bc141cf06cbfd33418a407a62589aca26
|
|
BLAKE2b-256 checksum How to use checksums |
8ae893a878046b8536d808fbe5557a7c2885b8478f5f1a10510214a140d98bee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|