Lift okr's reference okf-check.mjs into the catalog as the single cross-plugin acceptance gate for the OKF-compatible second-brain form (spec §3): - scripts/okf-check.mjs (+ vendored okf-frontmatter.mjs): verdict logic byte-identical to okr's reference impl, English output, zero deps, self-contained. - scripts/okf-check.test.mjs: 5 self-contained tests (temp-dir bundles). - spec §7 + §14: the shared checker now lives here; only TS/mjs reconciliation remains Stage-3, not required for the gate. log.md protocol §6: conformance is verified by the gate, not asserted — a plugin moves to 🟢 only after passing it. Verified: 33/33 catalog tests green (canonical glob form); verdict parity with okr's checker on okr fixtures (positive + negative missing-type); a scaffolded linkedin-studio brain/ validates clean (exit 0). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012GqEHp4uDiivfrAUjw4BdE
11 KiB
OKF-compatible second-brain form
A cross-plugin convention for how each plugin stores the user's own context — their personal/organizational "second brain" / LLM-wiki — as a portable, interoperable markdown bundle, compatible with Google's Open Knowledge Format (OKF) v0.1.
Version 0.1 · 2026-06-29 · Cross-cutting catalog artifact, owned by no single plugin. Reference design: linkedin-studio's
brain/. Interop layer: Google OKF v0.1 (thin veneer). Change log + per-plugin rollout status + coordination protocol:log.md(same directory).
1. Purpose & scope
This convention exists for interop, not standard-adoption for its own sake. Three plugins in this marketplace independently grew a user-owned "second brain" — a wiki of the user's personal and organizational context the plugin retrieves from during chat and commands. This document defines the one shared on-disk form so a single reader can traverse all three, and so a future shared retrieval skill (if ever justified — §10) has one contract to build against.
- In scope: the user's own context/data — the per-user second brain (e.g.
~/.claude/<plugin>/...). - Explicitly out of scope: each plugin's domain reference files (skill
references/*). Those stay native Claude Code skill-references (Anthropic-recommended progressive disclosure). The decisive test, which all three plugins reached independently: not "is it an LLM-wiki" (both are) but "is there already a native, recommended mechanism?" — for skill-refs YES (skills + references + grep), for the second brain NO (it lived in ad-hocorg/*.mdwith no retrieval mechanism). OKF fills a real gap only for the second brain.
2. The three consumers
| Plugin | Second-brain maturity | Role here |
|---|---|---|
| linkedin-studio | Provenance-weighted learning system (episodic/semantic split, evidence-threshold promotion, temporal validity). Most mature. | Reference design. Siblings rise toward it; it is not levelled down to bare OKF. |
| okr | Built: writer + checker (okf-check.mjs, okf-index.mjs) + retrieval skill okr-second-brain-search. |
Reference checker (§7). |
| ms-ai-architect | Designed, not built. Targets the fuller OKF package + a retrieval skill. | Builds against this spec. |
Live rollout status (🔵/🟡/🟢 + commit-refs) lives in log.md, not here.
3. Minimal contract (normative)
A conforming bundle is a directory tree of markdown files, one concept per file. Concept ID =
file path minus .md.
- MUST — every concept file (every
.mdexceptindex.md) carries atype:frontmatter key (free string, e.g.Profile,Operations,JournalEntry). - MUST — every directory level has an
index.md(directory enumeration, no frontmatter, carries progressive-disclosure prose). - MUST — the bundle-root
index.mdcarries anokf_versionmarker (the upstream OKF version the bundle targets, currently0.1). - MUST (consumers) — preserve unknown frontmatter keys, tolerate unknown
typevalues, tolerate broken cross-links.
This is exactly okr's okf-check.mjs semantics, generalized (§7).
4. Recommended fields (warnings, not errors)
title, description, resource (canonical source URI), tags, timestamp. Supply where cheap.
- Canonical name is
resource(the OKF spec's name) — notsource. - A field that would break a plugin's invariant may be omitted. Example: linkedin-studio omits
timestamp(its serializer is pure/deterministic — a timestamp would break round-trip) andresource(an internal concept has no canonical URI), keepingtype/title/description.
5. Extension keys — rich fields ride along
OKF's permissiveness is the whole point for us: conforming costs type + index.md, nothing more. A
plugin's richer schema survives untouched as extension frontmatter keys that consumers MUST
preserve. linkedin-studio's brain keeps provenance, first_seen, last_seen, evidence_count,
status, and its episodic/semantic split — all as extension keys. Its model-collapse guard
(provenance=published only) is unaffected. Plugins rise toward the richest design; they are not
levelled down to bare OKF.
6. Reserved files & cross-links
index.md— directory enumeration, no frontmatter, progressive-disclosure prose. The bundle-root one carriesokf_version.log.md— change log (optional per bundle; reserved name).- Cross-links — plain markdown (bundle-relative
/...or relative); relation type conveyed by prose. Consumers MUST tolerate broken links.
7. Reference checker
okr's scripts/okf-check.mjs is the de-facto reference implementation of the minimal contract (§3):
only type required (missing → fail + names the files), recommended fields → warnings, root
index.md okf_version echoed for human comparison (no network — hooks are offline). ~91 lines, zero
npm dependencies, only couples to a ~55-line frontmatter.mjs. The shared spec generalizes okr's
semantics; it does not reinvent them. Reading okr's code is fine; writing okr is a separate go.
A shared checker now lives here: catalog/scripts/okf-check.mjs (+ vendored
okf-frontmatter.mjs), lifted faithfully from okr's reference impl — verdict logic byte-identical,
output in English, zero deps, self-contained. It is the canonical cross-plugin acceptance gate: a
bundle's pass/fail is the same here as under okr's checker. Run it per bundle root:
node catalog/scripts/okf-check.mjs <bundle-root>
Verdict parity is verified — identical exit codes to okr's checker on okr's own fixtures
(okf-minimal, okf-realistic), positive and negative (injected missing-type) — and a scaffolded
linkedin-studio brain/ validates clean ("OK: valid OKF bundle", exit 0). Each plugin may keep its own
dev-loop check (linkedin-studio's TypeScript impl under scripts/brain/ stays for its own suite); the
catalog .mjs is the shared gate all three are measured by. The only Stage-3 remainder is reconciling
the two language implementations into one — deferred until measured need, and not required for the
gate to function.
8. Deliberately NOT mandated
- Auto-classify / convert of arbitrary documents into the bundle — OKF provides nothing for it; a manual inbox/drop-zone seam suffices; build only on demonstrated need.
- Retrieval mechanism — native Grep/Glob/Read (skill instruction "search the wiki first, open only what's relevant") vs. a dedicated fileskb MCP server. All three plugins lean native (Claude Code's Grep/Glob/Read already cover OKF's list/search/read). Per-plugin choice; a "build both, measure" candidate.
- Degree of OKF formalism — full v0.1 conformance vs. this "OKF-compatible form." Plugins sit at
different points (ms-ai-architect targets the fuller package; linkedin-studio emits the minimal form
- extension keys; okr has writer + checker). The minimal contract (§3) is the floor all meet; going further is per-plugin and never required by this spec.
9. Verified premise corrections (dead-ends — do not plan against these)
Ground-truth-checked against the live GoogleCloudPlatform/knowledge-catalog repo (research agent,
2026-06-26, file+URL log retained). These overturn earlier framing in the per-plugin design notes:
mdcode/kcmdis NOT an OKF tool. It is a Google Cloud Dataplex git-sync tool whose on-disk markdown carries a different frontmatter schema (id/resource.name/createTime/links) than OKF (type/title/description/tags/timestamp). Do not plan to emit or sync OKF bundles via mdcode. (Corrects the "metadata as code" pattern listed in ms-ai-architect's ecosystem digest.)- No reusable OKF ingest code exists. The repo's
reference_agentis a BigQuery+web → OKF producer, Gemini/GCP-bound; it reads a BQ dataset + seed URLs, not a document folder. The GCP-free reusable parts are the SPEC, the emit/serialize/validate core, and theindex.mdsynthesis — patterns, not a drop-in library. Classify/convert of arbitrary docs is 100% build-yourself. - "OKF has no ingest" is true of the format, not the repo. And the per-plugin design notes never actually asked for auto-classification — all three frame the work as OKF as the storage form for a user-owned wiki + a retrieval skill + a maintenance mechanism, with ingest being light ("onboarding writes OKF-conformant").
10. Staged plan
- Stage 1 — Shared form (this document). Cheap, delivers interop alone. Each plugin's user-data conforms; one reader traverses all three. This alone meets the interop goal.
- Stage 2 — Measure divergence. Do the per-plugin retrieval paths diverge enough to hurt? Only a measured "yes" justifies Stage 3 (operator anti-pattern: ambitious initiatives where a config tweak suffices).
- Stage 3 — Conditional shared skill. If justified: extract/generalize okr's working retrieval skill into one home (§11), with a discovery convention for where each plugin's brain lives. Do not build before Stage 2 says so.
11. Homes
- This spec — catalog/marketplace level (here), owned by no single plugin.
- A future shared skill (Stage 3 only) — a standalone marketplace plugin (own repo, release-tagged,
catalog-pinned), installable alongside the others, serving the user's own context directly. Rejected
alternatives: duplicate-per-plugin (drift risk); user-level
~/.claude/skills/(unversioned, outside the catalog).
12. Versioning
Two independent version markers:
okf_versionin each bundle-rootindex.md— the upstream Google OKF version the bundle targets (currently0.1). When Google bumps OKF, each plugin re-checks conformance.- This convention's version (top of this file) — bumped when the shared form changes.
log.mdrecords both. Hooks are offline (no auto-poll); version drift is caught by human review + theokf_versionecho inokf-check.
13. Success criterion
Measured against user value (does the plugin retrieve the right personal/org context in chat and commands?) + maintenance reliability — not against formal OKF conformance for its own sake. (Operator, inherited identically by all three tracks.)
14. References
- OKF SPEC v0.1:
github.com/GoogleCloudPlatform/knowledge-catalog/blob/main/okf/SPEC.md(12 June 2026, "a starting point, not a finished standard"). - Per-plugin design notes: linkedin-studio
docs/okf-convergence-brief.md; okrdocs/okf-second-brain-note-2026-06.md; ms-ai-architectdocs/okf-second-brain-brief-2026-06.md. - Shared checker (the cross-plugin gate):
catalog/scripts/okf-check.mjs(+okf-frontmatter.mjs,okf-check.test.mjs) — lifted from okr's reference implokr/scripts/okf-check.mjs(+okf-index.mjs,lib/frontmatter.mjs). - Reference design: linkedin-studio
docs/second-brain/architecture.md; enginescripts/brain/. - Coordination + rollout status:
log.md(this directory).