Skip to main content

okflify

Converts OKF bundles into HTML. One command, one self-contained file — no server, no build pipeline, no dependencies.

ORF (research) and EMF (memory) are additive OKF profiles. The same command renders them and labels their profile versions in the header.

See it live → · served from Eidos Hostkey and rebuilt from the same source CI verifies on every push.

A rendered OKF document with its verification tier shown above the content
pip install -e .
okflify --example --open        # a real investigation, rendered
okflify ~/path/to/bundle        # or your own
okflify → bundle/okflify.html — 8 documents, 14 edges, 3 diagrams

Start with the manual

--example renders the detailed OKFlify manual as an OKF bundle. It explains the OKF foundation, the renderer, ORF research packs, EMF memory packs, how the profiles compose, and the compatibility proof. The public Hostkey site is built from this same bundle: OKFlify documents itself by rendering its own source format.

Trust is the point

OKF v0.2 weights evidence human: > job: > agent:. okflify puts that at the top of every page, colours every graph node by it, and warns when a document is agent-verified only:

Agent-verified. Under OKF v0.2 weighting treat as unverified for gate-shaped decisions.

Knowledge bases fail in one specific way: everything in them looks equally true. A confident paragraph a model produced in four seconds renders exactly like a number a human checked against a bank statement. A renderer that shows those the same way isn't neutral — it's broken.

OKF is a graph, not a tree

Bundles live in folders, so every renderer reaches for a folder tree. That throws away the structure: concepts connect through ordinary markdown links, and the network is richer than any parent-child path.

Force-directed knowledge graph, nodes coloured by verification tier

Cytoscape + fCoSE: directed edges, overlap-aware layout, hover to light the neighbourhood, click to open. Node size is inbound links; colour is trust tier.

If your bundle has no cross-links, you get a star — every edge leaving the index. okflify warns on stderr rather than flattering it. That is a content signal, not a bug report.

…but a tree when you have 100 documents

Tree view grouped by bundle, showing type and trust tier per document

Bundle → section → document, collapsible, with the type and trust tier of every document at a glance — which the sidebar doesn't carry.

Above is a four-bundle catalogue. The largest it has been run against is 18 bundles / 102 documents / 88 edges, rendered into a single file.

Diagram surfing

Click any diagram or image. Scroll zooms at the cursor, drag or space+drag pans, +/ zoom, 0 fit, 1 actual size, arrows nudge, esc closes.

Opening a diagram, zooming at the cursor, panning, fitting, closing

Whole bundle, one page

Every document in reading order on a single page

Every document in reading order — for skimming end to end, ⌘F, printing, or copying the lot as Markdown. Each keeps its tier.

Everything else

⌘K palette documents and every h2/h3
Copy page Markdown for LLMs · open in Claude/ChatGPT with the page attached · copy whole bundle
Backlinks "links to" / "linked from" cards
Light / dark diagrams re-render to match
Print every document, page-broken
Catalogues a directory of bundles renders as one site with cross-bundle edges
The same document in light theme

Bundle layout

bundle/
  index.md          # required — the root
  log.md            # append-only, no frontmatter by convention
  concepts/*.md     # claims, rules, questions
  evidence/*.md     # what was actually observed
  learnings/*.md    # promoted, re-verified
  docs.json         # optional theming

Only index.md is required. A catalogue is a directory of bundles — root/bundles/<slug>/ or root/<slug>/.

---
okf_version: "0.2"
type: claim          # claim | rule | learning | question | evidence-pointer | investigation
title: "One sentence someone could disagree with"
verified:
  by: human:daniel   # human: > job: > agent:
  at: 2026-07-29
  method: "how you checked  the field people skip"
  stale_after: 2026-10-01
---

method does the work. "Verified" without one is a feeling.

Theming

docs.json, Mintlify-shaped. Never edit the template to restyle.

{
  "name": "My Knowledge",
  "colors": { "primary": "#2E6F5E", "light": "#6FC7AC", "dark": "#1F5044" },
  "fonts": { "family": "Inter" },
  "appearance": { "default": "system" },
  "background": { "decoration": "gradient" },
  "home": { "href": "/boxes/", "label": "Boxes" },
  "github": false
}

Any Google Font name loads automatically. background.decoration: gradient, grid, none.

home — optional return link to the host app (not the pack index). The pack logo still jumps to the first document; the host control is a separate ← label in the header. When the HTML is opened full-page inside a product (e.g. Greenmark Boxes), set home.href to that product’s root. Runtime override: ?return=/path or ?home=/path (same-origin only), optional returnLabel.

github — header GitHub button. false / omit-with-home hides it (hosted packs must not advertise the okflify tool repo). Explicit URL or { "href", "label?", "title?" } for the pack’s own repo. Standalone packs (no home) still default to eidos-agi/okflify.

Notes from building it

Two things that cost real time:

Mermaid's built-in themes fight the page. neutral and dark render dark subgraph fills with dark labels. okflify uses theme: "base" with themeVariables bound to the CSS palette.

mermaid.run() is a no-op on an already-rendered block. It stamps data-processed and replaces the content, so the first theme rendered wins permanently — a light page keeps black diagrams forever. okflify caches each block's source and restores it before re-running.

Known gaps

Stated because overselling would contradict the whole premise:

  • Graph edges have arrowheads but no bundle clustering in catalogue view
  • Layout is re-seeded per visit rather than stable across reloads
  • Search covers titles and headings, not document bodies
  • Not an editor — okflify reads; something else writes

Development

pip install -e ".[dev]"
python -m pytest -q          # 19 tests
okflify --example --open

Releasing is bumping the version. Edit version in pyproject.toml, push to master, and CI publishes to PyPI over OIDC and tags the commit. There is no tag to remember, no token anywhere, and no upload step.

It asks PyPI whether that version exists rather than trusting git, so re-runs, reverts and force-pushes are all safe. Touching okflify/ without bumping fails the build — okflify once shipped eleven times as 0.1.0, and on PyPI a version can never be reused.

Related

Sibling of mafia (Chromium for agents). Same house, same conventions.

MIT.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

okflify-0.1.6.tar.gz (48.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

okflify-0.1.6-py3-none-any.whl (49.0 kB view details)

Uploaded Python 3

File details

Details for the file okflify-0.1.6.tar.gz.

File metadata

  • Download URL: okflify-0.1.6.tar.gz
  • Upload date:
  • Size: 48.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for okflify-0.1.6.tar.gz
Algorithm Hash digest
SHA256 d869e2d6f4f19df34d08490926520941926de92cb70850b689e8686ef5d7b89e
MD5 aa16d5843d0a07a4f23f0cf1f56539ad
BLAKE2b-256 ae1aad5319a9ee62da2a1b741bf60646db0e22d7d81e789cbf6051413bfe832a

See more details on using hashes here.

Provenance

The following attestation bundles were made for okflify-0.1.6.tar.gz:

Publisher: release.yml on eidos-agi/okflify

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file okflify-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: okflify-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 49.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for okflify-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 4a077506fd1b753e9e994dcafc04b6bebedc411bc5f7272de44745896f62d244
MD5 ec7b94c5349802060cf186d7728ff888
BLAKE2b-256 8d032447bd8c7aeff491850abe53c580ed86f06ce1f5c315fce73027b1768fbf

See more details on using hashes here.

Provenance

The following attestation bundles were made for okflify-0.1.6-py3-none-any.whl:

Publisher: release.yml on eidos-agi/okflify

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.2.0

2 files

This release

0.1.6 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page