Sandbox
@scaccogatto/okf-skills

OKF skills and Claude Code plugin

This repo teaches Claude Code and other agent setups to work with Open Knowledge Format bundles. It combines packaged skills, a Claude Code plugin, a read-only MCP server, and a CI action so you can produce, check, and render knowledge bundles in one toolkit.

380 starsβ€’35 forksβ€’Pythonβ€’Updated 12d ago
Who it's for

Builders who want their agent to keep project knowledge in markdown bundles and update it as work changes.

What it delivers

You can keep knowledge bundles current, validate them before commit, and turn them into a browsable graph.

What it does

OKF authoring and upkeep

The `/okf:okf` skill helps produce, maintain, and consume `.okf` bundles, and can auto-trigger when a repo already has one.

Deterministic validation

The `/okf:validate` skill runs the OKF conformance check, with strict mode and migration support for older bundle fields.

Backfill from history

The `/okf:backfill` skill reconstructs an OKF bundle from git history and Claude session transcripts.

Interactive bundle visualization

The `/okf:visualize` skill renders a bundle to a self-contained `viz.html` graph with backlinks, trust, and staleness badges.

Read-only MCP access

`servers/okf_mcp.py` exposes `search_concepts`, `read_concept`, and `get_neighbors` for hosts that speak MCP.

GitHub Action gating

`action.yml` lets any repo validate an OKF bundle in CI, with JSON report output for later steps.

Claude Code upkeep hooks

`templates/CLAUDE-okf.md` and the `hooks/` folder support automatic bundle consult and stop-hook enforcement.

How to get it

  1. 1As a Claude Code plugin
    /plugin marketplace add scaccogatto/okf-skills
    /plugin install okf@scaccogatto
  2. 2As agent skills via skills.sh (Claude Code, Cursor, Codex, and 20+ agents)
    npx skills add scaccogatto/okf-skills            # the okf, validate & visualize skills

README

πŸ“š okf: the Open Knowledge Format toolkit for Claude Code

Teach your coding agent to author, maintain, validate, and visualize portable knowledge bundles: markdown your team and your agents both read.

Built for OKF v0.2: trust signals, provenance, staleness.

License: MIT OKF spec Claude Code plugin skills.sh PRs welcome

β–Ά Open the live demo: a real OKF bundle as an interactive graph

okf: explore an OKF bundle as an interactive graph

Click any node for rendered markdown, the derived trust tier and staleness, provenance with its credibility signals, and "Links to / Cited by" backlinks. No backend, nothing leaves the page.

/plugin install okf@scaccogatto
npx skills add scaccogatto/okf-skills

OKF is an open, vendor-neutral format (announced by Google Cloud, June 2026) that represents knowledge (the context and curated insight around your systems) as a directory of markdown files with YAML frontmatter. No schema registry, no runtime, no SDK. If you can cat a file you can read it; if you can git clone a repo you can ship it.

This is the Claude Code-native OKF toolchain. It teaches Claude to produce, maintain, consume, validate, and visualize OKF bundles as a normal part of how it already works, driven by the verbatim spec, backed by a deterministic conformance checker, with a self-contained graph renderer. Ships as a Claude Code plugin, as agent skills (Cursor, Codex, and 20+ agents), as a GitHub Action for repos with no agent at all, and as a read-only MCP server for hosts whose agents cannot reach the files. This one is v0.2 throughout: trust signals, provenance and staleness, validated by skills/validate/scripts/okf_validate.py.

πŸͺž This repo documents itself in OKF. The architecture, skills, and decisions behind okf-skills live in .okf/, explorable as a live self-graph. CI validates that bundle on every push (dogfooding the conformance checker).

Install

As a Claude Code plugin:

/plugin marketplace add scaccogatto/okf-skills
/plugin install okf@scaccogatto

As agent skills via skills.sh (Claude Code, Cursor, Codex, and 20+ agents):

npx skills add scaccogatto/okf-skills            # the okf, validate & visualize skills

Local development (no marketplace): claude --plugin-dir /path/to/okf-skills.

Both layouts coexist in this one repo: .claude-plugin/ makes it a plugin marketplace, skills/<name>/SKILL.md makes it skills.sh-discoverable. Scripts live inside their skills and are referenced via ${CLAUDE_SKILL_DIR}, so they work in either path. The scripts need uv (or python3 + pyyaml).

Use it

Capture knowledge: ask Claude to "document the auth service in OKF", or run:

/okf:okf produce .okf

Validate before committing:

/okf:validate .okf --strict
# or directly, zero-config:
uv run skills/validate/scripts/okf_validate.py .okf --strict
# gate in CI while some warnings are still outstanding:
uv run skills/validate/scripts/okf_validate.py .okf --max-warnings 5

Gate it in CI: the composite action works in any repo, with or without Claude Code:

- uses: scaccogatto/okf-skills@v1
  with:
    bundle: .okf
    strict: "true"      # or: max-warnings: "5"

@v1 follows every release (the repo is pre-1.0, so it tracks the latest one rather than a major line). Pin an exact @okf--v<version> tag instead if you want the action frozen.

The step also exposes a report output: the validator's JSON report (--json), for a later step to post or parse via ${{ steps.<id>.outputs.report }}.

Visualize the knowledge graph, a self-contained viz.html that opens in any browser (live example):

/okf:visualize .okf
# or directly, with a title and a back-link to your repo:
uv run skills/visualize/scripts/okf_visualize.py .okf \
  -o viz.html --title "My project" --link "https://github.com/me/project"

Above 1000 concepts the default layout falls back to a linear one (force layout freezes the page); override with --layout cose, or refuse oversized bundles with --max-nodes N.

Every concept gets a shareable deep link (viz.html#services/auth-api opens with that concept selected). Each panel carries two derived badges: the Β§5.3 trust tier (unverified / machine-confirmed / human-reviewed) and staleness once stale_after is past. OKF stores neither (a stored tier is a stored opinion, and it goes stale), so both are computed at render time.

Read a bundle over MCP. A read-only server exposes any bundle to a host that speaks MCP, for agents that have no file tools of their own:

ToolWhat it returns
search_concepts(query, limit)Matching concepts as cards: id, type, title, description, status, stale_after. Metadata hits rank above body-only hits.
read_concept(concept_id)One concept verbatim, frontmatter included. concept_id is the bundle path without .md; index and log work too.
get_neighbors(concept_id)outgoing and incoming cards, from markdown links and bundle-internal sources. External URLs are not neighbours.

Nothing writes, and no concept_id resolves outside the bundle root.

It ships with the plugin and starts with it, reading ./.okf, so inside Claude Code there is nothing to configure: the tools appear as mcp__plugin_okf_bundle__search_concepts and friends. In a project with no bundle the server still connects and says so on the first call.

Standalone, or for any other MCP host:

uv run servers/okf_mcp.py .okf           # stdio; a bundle path, else $OKF_BUNDLE, else ./.okf
{ "mcpServers": { "okf": { "command": "uv",
    "args": ["run", "/path/to/okf-skills/servers/okf_mcp.py", "/path/to/.okf"] } } }

Worth saying plainly: for Claude Code this duplicates Read and Grep, and it was declined on those grounds in July 2026. It ships for parity with a category that now expects one, and decisions/mcp-server.md records that as the reason instead of inventing a user need.

Keep it up to date. Two opt-in ways to make upkeep automatic:

  • Soft mode: paste templates/CLAUDE-okf.md into your project's CLAUDE.md (or ~/.claude/CLAUDE.md) to have Claude consult .okf/ before tasks and write knowledge back after changes.
  • Enforced mode: add upkeep: enforced to .okf/index.md's frontmatter to arm the plugin's dormant Stop hook, which then blocks finishing when tracked files changed but .okf/log.md wasn't updated. Off by default; a user overrides any bundle with OKF_HOOK=off. Full gate sequence: stop-hook concept.

What's inside

ComponentWhat it does
/okf:okf skillProduce / maintain / consume bundles, applying the spec and templates. Auto-triggers when a repo has an OKF bundle.
/okf:validate skillDeterministic Β§11 conformance check (not an eyeball pass).
/okf:backfill skillReconstruct an OKF bundle from git history and Claude session transcripts for repos that predate this toolchain.
/okf:visualize skillRender a bundle to a self-contained interactive HTML graph (viz.html).
skills/okf/scripts/okf_init.pyScaffold a conformant starter bundle in one shot.
skills/validate/scripts/okf_validate.pyStandalone, zero-config validator (uv run, PyYAML via PEP 723).
skills/visualize/scripts/okf_visualize.pyStandalone bundle→viz.html renderer.
servers/okf_mcp.pyRead-only MCP server over a bundle: search_concepts, read_concept, get_neighbors. Ships with the plugin via .mcp.json.
skills/okf/reference/SPEC.mdThe OKF v0.2 spec, vendored verbatim: the source of truth.
templates/CLAUDE-okf.mdSnippet that turns on automatic consume/maintain in your project.
action.ymlComposite GitHub Action to gate a bundle in any repo's CI, no Claude Code needed.
examples/sample-bundle/The conformant bundle behind the live demo.

How a bundle looks

A bundle is a directory of markdown files; a concept's path is its ID. The only rule for conformance is YAML frontmatter with a non-empty type; everything else is optional.

.okf/
β”œβ”€β”€ index.md                  # progressive disclosure (root carries okf_version)
β”œβ”€β”€ log.md                    # ISO-dated change history, newest first
β”œβ”€β”€ services/auth-api.md      # one concept = one file; path is its ID
β”œβ”€β”€ decisions/use-okf.md
└── metrics/checkout-conversion.md
---
type: Service
title: Auth API
description: Issues and verifies short-lived access tokens.
resource: https://github.com/acme/auth
status: stable
generated: { by: doc_agent/1.0, at: 2026-06-14T10:00:00Z }
verified: { by: human:dana, at: 2026-06-20T09:00:00Z }
sources:
  - id: auth-readme
    resource: https://github.com/acme/auth#readme
    title: Auth service README
---

# Endpoints
Tokens live 15 minutes.[^auth-readme]

[^auth-readme]: Auth service README

What OKF v0.2 adds

v0.2 assumes a corpus that agents keep writing, so it makes four things answerable from frontmatter alone. All optional; a concept carrying only type is still fully conformant. Full normative detail is in SPEC.md.

FamilyFieldsAnswers
Provenancesources[] + author / usage_count / last_modified, usage_windowWhere did this come from, and how credible is that source?
Trustgenerated: {by, at}, verified[], actor convention (human: / process: / agent/version)Who wrote it, who confirmed it?
Lifecyclestatus, stale_afterIs it current? Is it still true?
Attestationtype: Attested Computation + runtime, parameters, executor, attesterWas this number produced the sanctioned way?

Upgrading from v0.1? --migrate rewrites the two superseded constructs (timestamp β†’ generated.at, body # Citations β†’ sources) in place, textually and idempotently. The tools read both meanwhile and flag the old forms as warnings, never errors; --strict is the nudge, --migrate is the door:

uv run skills/validate/scripts/okf_validate.py .okf --migrate --strict

What has actually been measured

Two experiments live in benchmark/, both pre-registered and tagged before their measurement run, both published with their transcripts and with the defects the runs exposed. Read the results files rather than these two lines; the headline numbers are smaller than they look.

QuestionResultWhere
Do the v0.2 lifecycle and trust fields stop a consumer asserting superseded facts?The channel works β€” with that frontmatter present the consumer never asserted a superseded fact, and it reads the fields without being told what they mean. The primary contrast is invalid under the protocol's own rule (too many items where the control simply refused to answer), and the corpus had to be stripped of every other recency signal before the metadata mattered.benchmark/trust/RESULTS.md
Does a write-side process gate make that metadata redundant?No, and neither makes the other pointless: a gate reduced stale answers by 39pp, an expired stale_after by 28pp, and the two are not distinguishable on 20 items. Ungated writers left documentation untouched 57% of the time, which is exactly where the metadata acts.benchmark/gate/RESULTS.md
Can the backfill's map phase run on the cheap tier, and in batches?Batching small events eight per call cut the map phase by a third at the same tier with no per-event loss. The cheap tier extracted commits at parity with sonnet and failed two pre-set rules in run 1, both instruction failures (it copied the last summary line it saw, it filled thin session evidence with the plausible continuation); with both instructions made explicit it passed every rule in run 3, the truncation flag at the threshold. Not pre-registered: an engineering A/B, one run per arm, on this repository's own history.benchmark/map-tier/RESULTS.md

Neither experiment estimates what OKF is worth in a real repository, where prose, filenames and history already carry recency; both say so in their own headlines. A third-party benchmark measures a different v0.2 claim β€” sufficiency β€” and measures it well: aws-samples/sample-okf-llm-wiki scores EX 74.0 on BIRD mini_dev with 500 independent agents.

Repository layout

okf-skills/
β”œβ”€β”€ .claude-plugin/{plugin.json, marketplace.json}
β”œβ”€β”€ skills/{okf, validate, visualize}/{SKILL.md, scripts/}
β”œβ”€β”€ hooks/                         # the dormant Stop hook
β”œβ”€β”€ servers/okf_mcp.py             # the read-only MCP server (.mcp.json wires it)
β”œβ”€β”€ benchmark/{trust,gate}/        # the two experiments, protocols and published runs
β”œβ”€β”€ examples/sample-bundle/        # the live-demo bundle
β”œβ”€β”€ docs/                          # GitHub Pages: the live interactive demo
β”œβ”€β”€ templates/CLAUDE-okf.md
β”œβ”€β”€ action.yml                     # the CI-gating GitHub Action
β”œβ”€β”€ Makefile                       # make docs / test / validate; CI runs `make docs`
└── .github/workflows/{ci,release}.yml

Contributing

Issues and PRs welcome: new templates, producers for more sources, validator and visualizer improvements. CI validates the plugin manifest and the example bundle on every push. Releases are automatic: bump version in .claude-plugin/plugin.json and merging to main tags and publishes okf--v<version> on its own. That bump is required, not optional: a PR touching the shipped surface (skills/, hooks/, templates/, action.yml, .claude-plugin/) fails CI until the version is raised. A bump must also add a ## [<version>] section to CHANGELOG.md; CI refuses the PR otherwise. Docs and tests are exempt. A PR touching skills/*/scripts/ or hooks/ must additionally update .okf/, and the skip-version-check label bypasses all three checks.

This repo's own bundle sets upkeep: enforced, so the plugin's Stop hook blocks finishing until .okf/log.md records your change. Set OKF_HOOK=off to opt out.

Credits & license

  • The Open Knowledge Format specification is by the Google Cloud Data Cloud team, released under Apache-2.0. skills/okf/reference/SPEC.md is vendored verbatim from the reference repository with attribution.
  • This plugin's own code and content: MIT Β© Marco Boffo (@scaccogatto).

Files in the repo

Repository payloadβ€’20 top-level entries
  • .claude-plugin
  • .github
  • .okf
  • agents
  • benchmark
  • docs
  • examples
  • hooks
  • servers
  • skills
  • templates
  • tests
  • .gitignore
  • .mcp.json
  • action.yml
  • CHANGELOG.md
  • LICENSE
  • Makefile
  • NOTICE
  • README.md

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More skills

obra/
superpowers

An agentic skills framework & software development methodology that works.

285k
1 add

Turn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.

117k
1 add
Vincentwei1021/
anything2explainer

Topic in, narrated explainer video out. A Claude Code / Codex skill that turns any topic into a black-canvas motion-graphics explainer video with TTS voiceover, subtitles and a chapter progress bar. Chinese or English; every frame drawn in code with Remotion.

666

Open-source AI job search: scan job portals, evaluate listings into a structured A-H report with a global 1-5 score, tailor your CV, track applications β€” runs locally in your AI coding CLI (Claude Code, Codex, OpenCode, Antigravity…)

71k