<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marco 'Gatto' Boffo</title>
    <description>The latest articles on DEV Community by Marco 'Gatto' Boffo (@scaccogatto).</description>
    <link>https://dev.to/scaccogatto</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4006486%2F6ebffc95-eab0-4440-b686-6a7ac7830fa4.jpg</url>
      <title>DEV Community: Marco 'Gatto' Boffo</title>
      <link>https://dev.to/scaccogatto</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/scaccogatto"/>
    <language>en</language>
    <item>
      <title>Don't store trust, derive it: a trust model for agent-written docs</title>
      <dc:creator>Marco 'Gatto' Boffo</dc:creator>
      <pubDate>Sat, 15 Aug 2026 09:43:15 +0000</pubDate>
      <link>https://dev.to/scaccogatto/dont-store-trust-derive-it-a-trust-model-for-agent-written-docs-515e</link>
      <guid>https://dev.to/scaccogatto/dont-store-trust-derive-it-a-trust-model-for-agent-written-docs-515e</guid>
      <description>&lt;p&gt;Your coding agent writes persistent knowledge now. &lt;code&gt;CLAUDE.md&lt;/code&gt; files, memory directories, runbooks, "what I learned about this codebase" notes. If you use Claude Code, Cursor, or Codex daily, a growing share of the markdown in your repos was written by something that is not you.&lt;/p&gt;

&lt;p&gt;The dangerous part is not that agents write wrong things. Humans do too. The dangerous part is that six weeks later, nothing in the file answers three basic questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who wrote this: a person or a model?&lt;/li&gt;
&lt;li&gt;Did anyone ever check it?&lt;/li&gt;
&lt;li&gt;Is it still supposed to be true?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the answers are missing, an agent that reads its own unverified guess treats it as ground truth and builds on top of it. The next session inherits the error with more confidence than the first one had. That is knowledge rot with a feedback loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tempting fix that doesn't work
&lt;/h2&gt;

&lt;p&gt;First instinct: add a field.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;trusted&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;confidence&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.87&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A stored trust score has three problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It's an opinion, and it doesn't say whose.&lt;/li&gt;
&lt;li&gt;It's not portable: your 0.87 is not my 0.87.&lt;/li&gt;
&lt;li&gt;It rots silently: edit the content, the score stays.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's a cache without an invalidation strategy. Same bug, different costume.&lt;/p&gt;

&lt;h2&gt;
  
  
  Record facts, derive the judgment
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://cloud.google.com/blog/products/data-analytics/how-the-open-knowledge-format-can-improve-data-sharing" rel="noopener noreferrer"&gt;Open Knowledge Format&lt;/a&gt; (OKF: an open, vendor-neutral spec announced by Google Cloud in June 2026, plain markdown + YAML frontmatter, no runtime, no SDK) takes the other route. I covered the format itself in &lt;a href="https://dev.to/scaccogatto/okf-for-claude-code-structured-portable-memory-your-agent-and-team-can-read-4ocn"&gt;a previous post&lt;/a&gt;: knowledge as a directory of markdown concepts, versioned next to the code it describes. Since then the spec moved to v0.2, and v0.2 is about exactly this problem. Frontmatter stores only &lt;em&gt;observable events&lt;/em&gt;. Every consumer derives the judgment at read time.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Service&lt;/span&gt;
&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Auth&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;API"&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Issues&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;verifies&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;short-lived&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;access&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tokens."&lt;/span&gt;
&lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;stable&lt;/span&gt;
&lt;span class="na"&gt;generated&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;by&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;doc_agent/1.0&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;at&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;2026-06-14T10&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;00&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;00Z&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
&lt;span class="na"&gt;verified&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;by&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;human&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;dana&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;at&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;2026-06-20T09&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;00&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;00Z&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
&lt;span class="na"&gt;stale_after&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2026-09-23&lt;/span&gt;
&lt;span class="na"&gt;sources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;auth-readme&lt;/span&gt;
    &lt;span class="na"&gt;resource&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/acme/auth#readme&lt;/span&gt;
    &lt;span class="na"&gt;author&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;team:auth&lt;/span&gt;
    &lt;span class="na"&gt;last_modified&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2026-06-01&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything here is a fact you could check:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;The fact it records&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;generated: {by, at}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Who produced the current content, and when it last meaningfully changed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;verified: [{by, at}]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Who confirmed it against its sources, and when. A list: a human sign-off plus a nightly process are independent events.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;status&lt;/code&gt;, &lt;code&gt;stale_after&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Lifecycle: &lt;code&gt;draft / stable / deprecated&lt;/code&gt;, and an absolute date after which the content is stale.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sources[]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;What it derives from, with per-source credibility signals (&lt;code&gt;author&lt;/code&gt;, &lt;code&gt;last_modified&lt;/code&gt;, &lt;code&gt;usage_count&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The load-bearing detail is the &lt;strong&gt;actor convention&lt;/strong&gt;: &lt;code&gt;human:dana&lt;/code&gt; for people, &lt;code&gt;process:finance-nightly&lt;/code&gt; for automation, &lt;code&gt;doc_agent/1.0&lt;/code&gt; for agents and tools. The prefix is the machine-parseable part. Who wrote a concept and who checked it are deliberately separate fields, because the writer need not be the checker: an agent generating and a human confirming is the normal case, not the exception.&lt;/p&gt;

&lt;h2&gt;
  
  
  The derivation
&lt;/h2&gt;

&lt;p&gt;The whole trust model is four rules a consumer applies at read time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No &lt;code&gt;verified&lt;/code&gt; key ⇒ &lt;strong&gt;unverified&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Verified by non-&lt;code&gt;human:&lt;/code&gt; actors only ⇒ &lt;strong&gt;machine-confirmed&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Any &lt;code&gt;human:&lt;/code&gt; verifier ⇒ &lt;strong&gt;human-reviewed&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;today &amp;gt;= stale_after&lt;/code&gt; ⇒ &lt;strong&gt;stale&lt;/strong&gt;, whatever the tier.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it. No score, no registry, nothing to keep in sync. And because &lt;code&gt;generated.at&lt;/code&gt; and the latest &lt;code&gt;verified[].at&lt;/code&gt; are both plain timestamps, a consumer can also see the case that stored scores hide: content that changed &lt;em&gt;after&lt;/em&gt; its last verification. The check is still a fact; it just visibly no longer covers the current text.&lt;/p&gt;

&lt;p&gt;Deriving instead of storing is not a new idea. Git does not store "this branch is merged": it derives it from the commit graph, so it can never be stale. A stored trust tier is a stored opinion, and it goes stale the moment anything around it moves. A derived tier is recomputed against today's date and the current frontmatter on every read.&lt;/p&gt;

&lt;p&gt;One failure mode is worth automating away: &lt;code&gt;humans:dana&lt;/code&gt; (a typo) is a non-&lt;code&gt;human:&lt;/code&gt; actor, so a real human review silently downgrades to machine-confirmed. It's the one typo that changes a trust tier without breaking anything visibly, which is exactly the kind of bug that deserves a linter, not a code review.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this looks like in practice
&lt;/h2&gt;

&lt;p&gt;We maintain &lt;a href="https://github.com/scaccogatto/okf-skills" rel="noopener noreferrer"&gt;okf-skills&lt;/a&gt;, the Claude Code-native OKF toolchain: skills to produce, maintain, validate, and visualize bundles, plus a GitHub Action to gate them in CI with no agent at all. The graph renderer computes the trust tier and staleness badges at render time and stores neither. The validator enforces the frontmatter families and warns on actor near-misses like the &lt;code&gt;humans:&lt;/code&gt; typo above.&lt;/p&gt;

&lt;p&gt;The repo also documents itself in OKF, so you can browse a real bundle with derived trust signals as a &lt;a href="https://scaccogatto.github.io/okf-skills/self.html" rel="noopener noreferrer"&gt;live interactive graph&lt;/a&gt;: architecture, decisions, and the update log, each node showing who generated it and what tier that earns.&lt;/p&gt;

&lt;p&gt;One thing we deliberately don't claim: that bundles make agents cheaper. We benchmarked a bundle's effect on agent answers early on (+8 points of claim coverage on "why" questions, no token savings) and then deleted the benchmark from the repo, because it measured an adoption pitch, not the standard. The trust model is the part we'd defend on its own: it makes agent-written knowledge &lt;em&gt;auditable&lt;/em&gt;, and that property doesn't depend on a benchmark.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# as a Claude Code plugin&lt;/span&gt;
/plugin marketplace add scaccogatto/okf-skills
/plugin &lt;span class="nb"&gt;install &lt;/span&gt;okf@scaccogatto

&lt;span class="c"&gt;# as agent skills (Claude Code, Cursor, Codex, 20+ agents)&lt;/span&gt;
npx skills add scaccogatto/okf-skills

&lt;span class="c"&gt;# validate any bundle, zero config&lt;/span&gt;
uv run skills/validate/scripts/okf_validate.py .okf &lt;span class="nt"&gt;--strict&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then ask your agent to "document the auth service in OKF", and check the frontmatter it writes.&lt;/p&gt;

&lt;p&gt;If your agents write knowledge your team reads, don't ask them to be right. Ask them to leave evidence: who wrote it, who checked it, until when it holds. Trust is not a field. It's a query.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claudecode</category>
      <category>opensource</category>
      <category>llm</category>
    </item>
    <item>
      <title>OKF for Claude Code: structured, portable memory your agent (and team) can read</title>
      <dc:creator>Marco 'Gatto' Boffo</dc:creator>
      <pubDate>Sun, 28 Jun 2026 12:44:50 +0000</pubDate>
      <link>https://dev.to/scaccogatto/okf-for-claude-code-structured-portable-memory-your-agent-and-team-can-read-4ocn</link>
      <guid>https://dev.to/scaccogatto/okf-for-claude-code-structured-portable-memory-your-agent-and-team-can-read-4ocn</guid>
      <description>&lt;h2&gt;
  
  
  The problem: agents forget your project every session
&lt;/h2&gt;

&lt;p&gt;If you pair with a coding agent, you have lived this: a new session starts and the context is gone. The agent re-discovers your auth flow, re-guesses why a decision was made, re-reads the same files to rebuild a mental model you already explained yesterday. Project knowledge — the &lt;em&gt;why&lt;/em&gt; behind your systems, the runbooks, the "don't touch this, here's the reason" — lives scattered across wikis, code comments, and people's heads. None of it travels with the code, and none of it survives a fresh context window.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt; helps, but it's for standing &lt;em&gt;instructions&lt;/em&gt;, and it gets loaded wholesale into every prompt. Auto-memory captures what an agent picked up, but it's implicit, per-agent, and not reviewed. A wiki is for humans and needs exporting. There's a gap: &lt;strong&gt;curated team knowledge that's structured, versioned with the code, and readable by any agent or person.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What OKF is
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://cloud.google.com/blog/products/data-analytics/how-the-open-knowledge-format-can-improve-data-sharing" rel="noopener noreferrer"&gt;&lt;strong&gt;Open Knowledge Format&lt;/strong&gt;&lt;/a&gt; is an open, vendor-neutral format (announced by the Google Cloud Data Cloud team in June 2026, Apache-2.0) that represents knowledge as &lt;strong&gt;a directory of markdown files with YAML frontmatter&lt;/strong&gt;. That's the whole idea. No schema registry, no runtime, no SDK. If you can &lt;code&gt;cat&lt;/code&gt; a file you can read it; if you can &lt;code&gt;git clone&lt;/code&gt; a repo you can ship it.&lt;/p&gt;

&lt;p&gt;A bundle looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.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
├── datasets/orders-db.md
├── decisions/use-okf.md
├── runbooks/payment-failures.md
└── metrics/checkout-conversion.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each concept needs exactly one thing to be conformant: YAML frontmatter with a non-empty &lt;code&gt;type&lt;/code&gt;. Everything else is optional.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Service&lt;/span&gt;
&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Auth&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;API"&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Issues&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;verifies&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;short-lived&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;access&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tokens."&lt;/span&gt;
&lt;span class="na"&gt;resource&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/acme/auth&lt;/span&gt;
&lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;auth&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;platform&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2026-06-14T10:00:00Z&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gh"&gt;# Endpoints&lt;/span&gt;
| Method | Path     | Description               |
|--------|----------|---------------------------|
| &lt;span class="sb"&gt;`POST`&lt;/span&gt; | &lt;span class="sb"&gt;`/token`&lt;/span&gt; | Exchange creds for a JWT. |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Concepts link to each other with plain markdown links, which makes the bundle a graph of typed, cross-referenced knowledge — diffable, reviewable in PRs, and portable across tools because it's just text.&lt;/p&gt;

&lt;h2&gt;
  
  
  What okf-skills adds
&lt;/h2&gt;

&lt;p&gt;OKF is the format. &lt;strong&gt;&lt;a href="https://github.com/scaccogatto/okf-skills" rel="noopener noreferrer"&gt;okf-skills&lt;/a&gt;&lt;/strong&gt; is the Claude Code-native toolchain that teaches your agent to actually use it, driven by the verbatim v0.1 spec. It ships as a Claude Code plugin and as agent skills (installable on Cursor, Codex, and 20+ agents via skills.sh). Three pieces:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/okf:okf&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Produce, maintain, and consume bundles, applying the spec and templates. Auto-triggers when a repo already has an OKF bundle.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/okf:validate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deterministic §9 conformance check — a real Python checker, not an eyeball pass.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/okf:visualize&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Render a bundle to a self-contained interactive HTML graph.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The validator and visualizer are standalone scripts too (&lt;code&gt;uv run&lt;/code&gt;, PyYAML via PEP 723), so they work the same whether installed as a plugin or as skills. The visualizer output is a single &lt;code&gt;viz.html&lt;/code&gt; — concepts as nodes, links as edges, a wiki-style detail panel with rendered markdown and "Links to / Cited by" backlinks. No backend; nothing leaves the page. There's a &lt;a href="https://scaccogatto.github.io/okf-skills/" rel="noopener noreferrer"&gt;&lt;strong&gt;live demo&lt;/strong&gt;&lt;/a&gt; of a real bundle, and the repo &lt;a href="https://scaccogatto.github.io/okf-skills/self.html" rel="noopener noreferrer"&gt;documents itself in OKF&lt;/a&gt;, with CI validating that bundle on every push.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest scope
&lt;/h2&gt;

&lt;p&gt;A few things worth being straight about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OKF is curation, not magic.&lt;/strong&gt; It's a place to put knowledge deliberately, not a system that captures it automatically. Someone (you, or the agent on request) still writes the concepts. The payoff is durability and portability, not zero effort.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's complementary, not a replacement.&lt;/strong&gt; Use &lt;code&gt;CLAUDE.md&lt;/code&gt; for &lt;em&gt;how to behave&lt;/em&gt;, auto-memory for &lt;em&gt;what the agent picked up&lt;/em&gt;, and an OKF bundle for &lt;em&gt;what the team knows&lt;/em&gt;. They stack.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No hooks by design.&lt;/strong&gt; The plugin won't silently rewrite your repo. Automatic upkeep is opt-in (see below).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The format spec is Google's&lt;/strong&gt;, vendored verbatim with attribution; this plugin's own code is MIT © Marco Boffo.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Install and try it
&lt;/h2&gt;

&lt;p&gt;As a Claude Code plugin:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/plugin marketplace add scaccogatto/okf-skills
/plugin &lt;span class="nb"&gt;install &lt;/span&gt;okf@scaccogatto
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As agent skills (Claude Code, Cursor, Codex, 20+ agents):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add scaccogatto/okf-skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then capture, validate, and visualize:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/okf:okf produce .okf          &lt;span class="c"&gt;# or just ask: "document the auth service in OKF"&lt;/span&gt;
/okf:validate .okf &lt;span class="nt"&gt;--strict&lt;/span&gt;
/okf:visualize .okf            &lt;span class="c"&gt;# opens a shareable viz.html&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every concept gets a deep link — &lt;code&gt;viz.html#services/auth-api&lt;/code&gt; loads the graph with that concept already selected.&lt;/p&gt;

&lt;p&gt;To turn on automatic upkeep (consult &lt;code&gt;.okf/&lt;/code&gt; before tasks, write knowledge back after changes), paste &lt;code&gt;templates/CLAUDE-okf.md&lt;/code&gt; into your project's &lt;code&gt;CLAUDE.md&lt;/code&gt;. It's soft mode and entirely opt-in. The scripts need &lt;a href="https://docs.astral.sh/uv/" rel="noopener noreferrer"&gt;&lt;code&gt;uv&lt;/code&gt;&lt;/a&gt; (or &lt;code&gt;python3&lt;/code&gt; + &lt;code&gt;pyyaml&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Why bother
&lt;/h2&gt;

&lt;p&gt;The pitch is small and concrete: give your project's knowledge &lt;strong&gt;one durable, diffable, portable home, versioned next to the code it describes&lt;/strong&gt; — instead of re-explaining it to a fresh agent every morning. It's plain markdown, so worst case you've written some good docs your team can read. Best case your agent stops forgetting.&lt;/p&gt;

&lt;p&gt;Repo, demo, and spec: &lt;strong&gt;&lt;a href="https://github.com/scaccogatto/okf-skills" rel="noopener noreferrer"&gt;github.com/scaccogatto/okf-skills&lt;/a&gt;&lt;/strong&gt;. Issues and PRs welcome.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claudecode</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
