Skip to content

Cambium

A governance standard for the knowledge corpora that LLM agents maintain, shipped together with the reference toolset that executes it: a normative kernel of numbered domains that a per-repository profile may tighten but never switch off, three ledgers that have to agree, deterministic tools that check, write and compile, and append-only receipts that decide which evidence must exist before work is allowed to close.

Screenshot of Cambium
Editor screenshot, 1 Oct 2026Cambium ↗

What it is

Cambium is a governance standard and a reference toolset for knowledge repositories maintained with LLM agents, and it governs the work rather than the corpus. It has three layers. A normative kernel of numbered domains holds rules as prose plus machine contracts, and a per-repository profile may fill or tighten an extension point but never disable a kernel rule. Adoption is one explicit transaction that resolves an upstream reference to a full commit SHA as the sole Standards identity and rolls the previous control plane back if any step fails. Runtime state belongs to the adopter, where Coverage, Required Queue and Progress must agree without being interchangeable. Underneath, deterministic tools check, write and compile: every writer is a dry run until --apply, shared-state writes are integrator-only, and receipts are append-only JSONL where an uncertain append keeps its lock. It also names what does not ship — no scheduler, no authenticated identity, no protected whole-workspace execution — on the principle that a host must not claim evidence for a capability it cannot prove.

Who built itOf the repository’s 400 commits, 379 are attributed to his account, under three different names and three different addresses; fifteen commits are attributed to the claude account and three to codex, two to another person, and one carries an address wrapped in typographic quotes, so GitHub links it to no account at all. Ninety-five commits carry a co-author trailer, 67 naming Claude Opus 5 and 28 naming Claude Fable 5.

How it is put together

The parts · 6

The model is a three-term sum, and most decisions here follow from keeping the terms apart. The kernel is normative and written as prose plus machine contracts, so a rule can be read by a person and checked by a program; each numbered domain owns semantics, invariants and extension points, and the numbering is a stable identity, not a display order. A profile is the only place where one repository’s answers live, and it may tighten an extension point but never disable a kernel rule. Runtime state belongs to the adopter, where a single module owns the current path spellings and object classifications so that the README keeps no second directory contract. Above that sits a deterministic tool layer, thin at the edge and grouped underneath — one public command per tool, four machine-checked areas holding the implementations, and generated projections compiled from declarations rather than maintained by hand; a tool’s own declaration and a closed capability policy compile into the MCP surface and the per-host configuration for Claude Code, Codex, Kimi Code and dsh. The runner that advances work is bounded on purpose: it derives one identity-bound next action from current state, invokes only registered capabilities, reads the result back and stops at every semantic boundary. It is not a scheduler and not a second policy engine. Two habits cut across it: state changes travel through dry runs that require --apply, and long-running work is tracked in three ledgers that must agree while remaining, in the README’s words, “not interchangeable task lists”.

kernel/
The normative layer: fourteen numbered domains, K00 Standards Control through K13 Task Runtime and Execution Control, holding prose rules beside machine contracts in YAML, CUE and JSON. K00 is the largest of the control domains at nineteen files, K12 Quality Assurance is the largest overall at thirty-four files and 217 KB, and K13 carries the runtime state model. Module numbers are stable identities and are not reused after a module moves or retires.
Tools/
Eighty-three files at the top level, mostly thin public commands named after the operation they perform, over four machine-checked areas: governance at 23 files and 523 KB, knowledge at 36 files and 703 KB, execution at 102 files and 2,847 KB, and platform at 39 files and 922 KB. Underneath sit 23 schema templates, seven YAML policies including a 33 KB agent-interface capability policy and a 94 KB module-boundary map, and 380 test files at 3,241 KB.
Tools/compiled/
Ten generated files weighing 7.9 MB: a 317 KB command-line contract, a 120 KB MCP tool projection, a 56 KB metadata execution contract, a 1.45 MB tool catalog and a 6.2 MB test catalog, plus the four host configurations for Claude Code, Codex, Kimi Code and dsh. These are projections of declarations, which is what lets the same rules feed a CLI, an MCP server and a host config without a second handwritten copy.
Card/ and Read Set/
Thirteen paired route cards, R01 Core Bootstrap through R13 Corpus Planning, at 26 KB in total, each with a matching Read Set at 39 KB in total that declares what canonical material the route must load. They are curated and non-authoritative: when a card is insufficient or disputed, its read-back hook resolves through the paired Read Set to the canonical owner. A 60-byte budget file and a stamping tool keep the set honest.
profiles/
An empty 165-byte candidate template, an 18 KB interview document that drives the agent-assisted conversation, an answer-patterns reference, and two worked examples that are explicitly not defaults: a 45 KB profile for the earlier Agent Systems Atlas project, and a 19 KB planning example whose corpus is bicycle wheel maintenance, complete with coverage, gap register and global map outputs.
Root documents and .github/
A 51 KB status-based roadmap with a 47 KB Chinese translation, parallel 19 KB READMEs, and a contributing guide covering issue ownership, defect promotion and the pull-request contract. The GitHub directory holds a 387-byte pull-request template, a bug form, a script that makes issue ownership checkable, and two workflows — a 12 KB verify pipeline and a 2.9 KB deep verification job — fed by a 39 KB impact analysis script.

Choices, and what they beat

  • Canonical state moves only through the writer that owns it over editing state files by hand

    The README states the rule and its reason together: use the owning writer so that revisions, hashes, receipts and recovery evidence move as one. A surviving writer lock is treated as recovery evidence to be reconciled, not deleted, and an uncertain append keeps the lock rather than guessing whether the receipt landed.

  • Ship an empty profile template beside explicitly non-authoritative examples over shipping a worked profile that an adopter could simply select

    Adoption means creating and approving one profile for one repository, and copying a template or an example does not select it. The README says examples show answer shape and must not be selected in place of an adopter-owned profile, and that the repository is intentionally uninstantiated, so it creates no fabricated task state.

  • Refuse to reuse a successful validation result over serving a cached checked view and adding another hash over the same inputs

    A previously successful full projection check can depend on parser defaults outside the component fingerprint, and the issue says that checking the current artefact, or adding another hash over an incomplete input set, does not establish equivalence. The checked-view cache, the runner decorators, the public API declaration and the cache-only assertions were retired together.

  • Split rendering by capability over one browser-dependent path for parsing, mathematics, diagrams and table layout

    A mathematics-only check was probing a browser, separate obligations rendered the same page repeatedly, and setup could implicitly select the operator’s daily Chrome. The change keeps mathematics on Node alone, fetches a pinned Chromium lazily for SVG and layout, shares one render group, and scopes evidence dependencies to the construct.

  • Cut the repeated work at the owner that performs it over raising the timeout, dropping Python 3.14, or mocking the full lifecycle

    The issue refuses all three explicitly. The target of about 300 seconds and the 360-second limit are kept while repeated contract discovery, registry projection and evidence consumption are attributed to their machine owners, and overrunning the limit must fail acceptance without truncating the measurement.

  • State the trust boundary instead of claiming assurance over treating SHA-256 bindings as signatures and actor labels as authenticated

    The README says the bindings detect drift and inconsistent history inside the adopter’s local trust domain but are not signatures, that actor and reviewer labels are not authenticated, and that a party able to rewrite the repository, tools and evidence can construct a new internally consistent history. A host may add capabilities, but must not claim evidence for a capability it cannot prove.

Read fromREADME.md in full (18,930 characters), the kernel/ domain and module listings with their sizes, the Tools/ tree across its four areas with the schema templates and compiled projections, Card/ and Read Set/, profiles/ including the empty template and the two worked examples, .github/, and the issue and pull request bodies quoted above.

Build log

6 stages
  1. 01

    A standard carried in from another project, and not a single release

    The oldest commit in the repository is dated 2026-07-31 and its message is itself a provenance note: Baseline: Knowledge Base Standards v2.3 verbatim snapshot from Agent Systems Atlas. The repository was created four days later, on 2026-08-04, so Cambium does not begin with an empty directory — it begins with a standards document imported whole from an earlier project, and one of its two worked examples is still named after it. From there it moved quickly: 400 commits in six weeks, 13 in July, 309 in August and 78 in the first eleven days of September, ending with the merge of pull request 224. What it never produced in that time is a release or a tag; both counts are zero. Version identity is carried elsewhere. The adoption transaction resolves an upstream reference to its full Git commit SHA and records that SHA as the sole Standards identity, adopt_standards.py moves a task that is already running onto an approved revision without rewriting its lifecycle history, and the kernel fixes module numbers as stable identities that are not reused after a module moves or retires. The thirty issues and pull requests read here run from 195 to 224, and the numbering is the record of the loop: every odd number is an issue, every even number the pull request that closes it. All thirty are closed, and around them sit 478 stars, 31 forks, 12 watchers, four contributors and four open issues.

  2. 02

    Which layer each party is allowed to write

    Effective governance is a sum: the kernel, plus exactly one selected profile, plus adopter-owned runtime state — and each term carries a different right. The kernel is normative: a profile may tighten an extension point but never disable a kernel rule, and tools execute declared rules without making the final semantic judgement. The adopter owns the runtime namespace, and the README states the prohibition flatly: do not edit canonical state by hand, use the owning writer, so that revisions, hashes, receipts and recovery evidence move together. Shared-state writes are integrator-only and require current revisions or hashes wherever a tool asks for them, and every writer is a dry run unless --apply is present. Adoption stays off the agent surface as an explicit command-line maintenance transaction whose external upstream repository input is never exposed as an unrestricted MCP argument; it binds the selected profile with the resulting contracts and evidence, resolves the upstream reference to a full commit SHA, and never restamps or rewrites the adopter’s own copy of the upstream material. Writing rights split by kind: slot meaning belongs to the kernel and its domain contracts, while TOML encoding and file layout belong to the tools. The same discipline reaches the draft: an unanswered field stays unanswered, because omission is not agreement to disable an option, and mechanical validity, user confirmation and adoption stay three separate things.

  3. 03

    The shape of a change: one issue, one pull request, and the test counts

    Cambium reviews its own governance in a fixed form. Every pull request quoted here opens with a problem statement before anything else; the section headings in the sample are Problem, Scope, Required behaviour, Evidence and Validation, the changes are grouped by the machine owner they touch, and the boundaries that were preserved are named explicitly. The closing argument is usually a table: make check, then fast 898 of 898, integration 231 of 231, end-to-end 4 of 4, and a focused count that varies with the change — 64 focused lifecycle tests on one item, 74 focused kernel and tool tests on another, 39 focused tests on a third. Only two of the thirty items carry comments, and both comments are the maintainer diagnosing performance in public, with run identifiers, fixed source commits and tables of measured seconds. The same loop shows up in the commits: 95 of the 400 carry a co-author trailer, 67 of them naming Claude Opus 5 and 28 naming Claude Fable 5, while fifteen commits are attributed to the claude account and three to codex. Review is not prose alone here: issue ownership is a script under .github/scripts/, and the contributing guide is described as covering issue ownership, defect promotion and the pull-request contract.

  4. 04

    What has to exist before work is allowed to close

    Evidence is the part of the model with the hardest edges. Receipts are JSONL and append-only, and an uncertain append keeps the lock rather than guessing whether the receipt landed; a surviving writer lock is recovery evidence that must not be deleted until the writer, state files, receipts, pending deltas and archive moves are reconciled. Exit code 2 is a hold, not success and not an ordinary failure, and reports and generated projections are views, never canonical input. The mechanism is named: one append-only evidence-invalidation-v1 producer, with exact target bindings, a dry run, idempotent event identity, and confirmed publication through both the command line and MCP. It exists because of a specific failure: a reviewer can record a structurally valid but incorrect judgement, and the lifecycle had no controlled way to withdraw that claim without changing source content or discarding history, so a checklist item marked not applicable was accepted and reused downstream while its frozen audit plan still listed required dependencies. The correction draws an authority line instead of adding authentication: a declaration may be withdrawn by its own author, by the existing semantic authority, or by an explicit user decision, and the integrator does not acquire judgement authority. These are operator and host attestations, not an authentication system.

  5. 05

    Adjudicating between the stale record and the current one

    The sharpest defect class here is not a crash but a disagreement about which record is current. One report describes the ordinary case: a page changes inside an open batch, the producer creates a successor audit receipt, and the runtime currentness owner marks the predecessor stale. Stable validation of the consuming review then treated every matching historical receipt as current because no live currentness set had been supplied, and the persisted consumer was rejected for having multiple current attempts even though it cited the sole current successor. The owner’s own summary of the defect is the clearest statement of the rule — stale history remains valid history, and it must not block the current batch. The correction splits the two checks: stable validation reads exactly the immutable references the consumer recorded, and live validation independently checks that they equal the currentness projection. A later pair of items closes the same seam further along: receipt stage selection must survive batch close and terminal consumption, so a legitimate revision whose pre-merge selection picked the new evidence is not re-read at close time as two competing current candidates. That fix also rejects the cheap version of itself: narrowing the scan to the selected producers would have dropped earlier reconciliation history and the first-round body needed to validate a second-round review.

  6. 06

    Budgeting the governor, and retiring what it grew out of

    A governance toolchain is itself governed, and here by a stopwatch. The required chain has a target of about 300 seconds and a hard limit of 360 seconds, and one fixed sample of the end-to-end scenario took 911 seconds, which the issue calls non-compliance even though the run passed inside a fifteen-minute job timeout. The measurement was then made explicit: two runs on pinned setups, once each on Python 3.10.21 and 3.14.7, reported 463.52 and 485.36 seconds, 454.02 and 476.94 for the existing end-to-end module, and 103.52 and 125.36 seconds left past the 360-second limit. Overrunning the limit must fail acceptance without truncating the measurement, so execution got an independent 1,800-second safety deadline. One gap is recorded rather than explained away: the same scenario was slower on 3.14 in one run and slower on 3.10 in another of an identical tree, and the logs cannot attribute the reversal to the interpreter. The proposed shortcuts were refused too: the issue states this is not a request to raise timeouts, drop Python 3.14, or mock the full lifecycle. What followed was a sequence of retirements: a superseded alias removed rather than kept, an empty receipt finaliser module deleted, a duplicated list-shape algorithm dropped, and a group of unsafe reuse — a checked-view cache, runner decorators, a public API declaration and cache-only assertions — retired together.

Adjacent records

All records →

No. 119

headcount

An agent organization shaped like a company — a chief executive over sixteen independently installable departments and 172 skills, where a skill is a folder of Markdown that loads itself when a request matches its description, one tree installs in both Claude Code and ChatGPT because only the manifests differ, and the 184 outside authorities that settle a question rather than decorate an answer — a regulator, a standards body, primary law — sit in a catalog beside the skills they answer for, each labeled with what an agent may do with it.

No. 071

Open Mercato Skills

A pack of forty-one agent skills that installs into any repository and runs the whole pull-request pipeline — plan, implement in an isolated worktree, self-review, browser-checked QA, merge — with three entry paths (a task brief, a specification, or a tracker issue) converging on one review loop, every project-specific value read from a single committed configuration file, tracker commands confined to committed descriptor documents shipped for GitHub, GitLab, Linear and Jira, and each skill handing the next one a machine-parsed PR reference line.

No. 065

GSD Core

Git. Ship. Done. — a meta-prompting, context-engineering and spec-driven development framework that runs the same five-step loop on every milestone: discuss, plan, execute, verify and ship. The heavy work is pushed into fresh-context subagents so the main session stays lean, and every decision is written into Markdown and JSON under a planning directory instead of living in the conversation.