okf

Author, maintain, and consume Open Knowledge Format (OKF) knowledge bundles — portable markdown + YAML frontmatter that both humans and agents read. Use when capturing project knowledge (services, APIs, schemas, metrics, runbooks, decisions) into an OKF bundle, when updating one after code or docs c

By scaccogatto · 722 installs

npx skills add scaccogatto/okf-skills --skill okf

Source repository · Upstream listing

Open Knowledge Format (OKF) skill OKF represents knowledge as a directory of markdown files with YAML frontmatter. It is minimal by design: no schema registry, no runtime, no SDK. Your job is to produce, maintain, and consume OKF bundles conformant with the spec , not your memory of it. Always read the canonical spec before non trivial work: [reference/SPEC.md](reference/SPEC.md). It is the verbatim OKF v0.2 specification and the source of truth for every rule below. The one hard rule A bundle is conformant (§11) iff: every non reserved .md file has a parseable YAML frontmatter block, and every such block has a non empty type field. Everything else is soft guidance. Consumers MUST tolerate missing optional fields, unknown types, and broken links — never reject a bundle over them. Conventions to apply One concept = one file. The file path (minus .md ) is the concept ID. Frontmatter: type is required. Add title , description , tags when they aid consumption; add resource (a canonical URI) only for concepts bound to a real asset — omit it for abstract concepts. Body: prefer structural markdown (headings, tables, lists, fenced code). Conventional headings: Schema , Examples , Computation . Cross links: standard markdown links; prefer absolute bundle relative form ( /services/auth api.md ). A link asserts a relationship; its kind lives in the surrounding prose, not the link. Reserved files: index.md (directory listing, no frontmatter, except the bundle root index, which may carry okf version and this plugin's upkeep: enforced opt in flag) and log.md (ISO dated change history, newest first). Never use these names for concepts. The v0.2 families (all optional, all worth filling) Trust (§5.2): generated: { by, at } — who produced the current content and when. verified: [{ by, at }] — who confirmed it since (a bare mapping is one entry). Write by in the actor convention (§7): <producer /<version for an agent, human:<id for a person, process:<id for an automated job. Use human: whenever a person authored or signed off — consumers key trust tiers off that prefix. Lifecycle (§5.4–5.5): status: draft stable deprecated (absent means stable) and stale after: YYYY MM DD , an absolute date, not a TTL. Provenance (§5.1): sources: [{ id, resource, title, author, usage count, last modified }] plus a usage window: { from, to } sibling of sources framing every usage count (an entry may carry its own to override it); a usage count without a window warns. resource is required per entry and may be a URL, a bundle path, or a scope descriptor. Attribute a specific claim with a markdown footnote whose label is the source's id : …sharded daily.[^ga4 schema] plus a [^ga4 schema]: … definition. The label is the join key, it must match a sources[].id . Attestation (§10): a sanctioned computation is its own concept, type: Attested Computation , carrying runtime (required), parameters , executor , attester , and the computation itself under Computation (or a computation: path). Concepts that need the value link to it. Never inline a number's SQL into the concept that narrates it. Reading a v0.1 bundle? Two constructs were superseded (§13.1): timestamp is now generated.at , and a body Citations list is now sources . Read both, write v0.2 — and when you touch a legacy concept in maintain mode, migrate its frontmatter as part of the edit. The validator warns on both. Templates to copy: [concept](templates/concept.md), [index](templates/index.md), [log](templates/log.md). Default bundle location Use .okf/ at the repository root unless the project already uses another location. Commit it alongside the code it describes — knowledge as code. Modes produce — create or extend a bundle Starting a brand new bundle? Use the init fast path instead of hand writing the first files — it scaffolds a conformant index.md , log.md , and a getting started.md concept with full recommended frontmatter in one shot: It refuses to touch a directory that already has .md files unless force is given. Then extend it: 1. Read [reference/SPEC.md](reference/SPEC.md). 2. Pick the source(s): code (derive concepts from source, READMEs, docstrings, config), docs/wiki (distill pages into concepts, record the originals in sources ), manual (decisions, playbooks, metrics). 3. Choose a directory layout by domain (e.g. services/ , datasets/ , decisions/ ). One concept per file. 4. Write each concept from [templates/concept.md](templates/concept.md): set a descriptive type , fill recommended fields, record generated and the sources you actually read, cross link related concepts. 5. Add/refresh index.md per directory (and okf version: "0.2" in the root index). Append a dated entry to log.md . 6. Validate (see below). Fix every error before finishing. maintain — keep a bundle in sync with reality 1. Identify which concepts the change affects (search by resource , path, or topic). This bookkeeping is exactly what agents are good at — touch every affected file in one pass. 2. Update the body and generated.at (with your own actor in generated.by ); fix or add cross links; create new concepts for new assets; mark removed assets status: deprecated and note the deprecation in log.md rather than silently deleting context. Facing a whole v0.1 bundle rather than a stray field? Do not hand edit it — run the validator's migrate once. 3. Update the relevant index.md files and append a dated log.md entry describing what changed. 4. Validate. consume — use a bundle as context 1. Read the bundle root index.md first for progressive disclosure, then follow links only into the concepts relevant to the task. 2. Weigh what you read: status: draft / deprecated , a stale after already past, or no verified entry all mean "check before relying on this". Treat broken links as not yet written knowledge, not errors. 3. Need a number an Attested Computation covers? Run its computation with values bound to the declared parameters — never write your own query. 4. If you learn something durable while working, switch to maintain and write it back. Validation (do this before declaring done) Never eyeball conformance — run the deterministic checker. Invoke the companion validate skill ( /okf:validate <bundle dir strict ), which ships the checker. If that skill is not installed, run it directly: Resolve every ERROR (hard §11 failures). Under strict warnings also fail the run (exit 1), so clear them too; drop strict (or use max warnings N ) if you only want §11 conformance gated.