A structured knowledge base your AI agents can actually use.
Not another pile of markdown files. A layered, schema-validated, content-addressed
specification format with machine-verifiable traceability to code.
AI agents working with your codebase deserve better than grepping through scattered docs. Clayers gives them a structured knowledge model where every concept has a definition, every definition links to implementing code, and every link is machine-verified against content hashes.
For AI/LLM tooling builders - Your agents get XPath-queryable specifications with typed layers (prose, terminology, relations, plans) instead of unstructured text. Every node carries an LLM description layer purpose-built for machine consumption.
For teams fighting documentation drift - Content hashes on both sides (spec
and code) mean drift is detected automatically, not discovered during an
incident. Run clayers artifact --drift in CI and know immediately when specs
and code diverge.
For spec-first developers - Write the spec, implement the code, map one to the other. Coverage analysis tells you what's specified but unbuilt, what's built but unspecified, and what's drifted since last review.
clayers doc generates a single-file knowledge explorer from any spec, with
navigable concepts, artifact coverage badges, inline code fragments, and an
interactive knowledge graph:
# Install via Cargo
cargo install clayers
# Or via pip (includes CLI)
pip install clayers
# Bootstrap clayers in your project
clayers adopt .
# Validate your specification
clayers validate clayers/my-project/
# Check for drift between spec and code
clayers artifact --drift clayers/my-project/
# Generate browsable documentation
clayers doc clayers/my-project/A clayers spec is a set of XML documents. Each document can mix content from independent layers, each with its own namespace and schema. Layers are orthogonal: editing prose doesn't require touching artifact mappings.
The layer model is open: clayers ships with a set of built-in layers, but anyone can define new ones. Add a namespace, write a schema, and your custom layer works alongside the built-ins with full validation, querying, and tooling support.
Built-in layers:
| Layer | What it captures |
|---|---|
| Prose | Technical writing: sections, paragraphs, steps, notes |
| Terminology | Controlled vocabulary with canonical definitions |
| Organization | Topic typing: concept, task, reference |
| Relation | Typed semantic links: depends-on, refines, implements |
| Plan | Implementation plans with acceptance criteria and witnesses |
| Artifact | Bidirectional code traceability with content-hash drift detection |
| LLM | Machine-readable descriptions optimized for agent consumption |
| Decision | Decision records with status and rationale |
| Source | External references and citations |
| Revision | Named snapshots for temporal anchoring |
All layers share a common ID space enforced by the index. Nodes reference each other by ID across files and layers. Custom layers participate in the same ID space and can reference or be referenced by any built-in layer.
Both spec nodes and code ranges carry SHA-256 content hashes. When either side
changes, --drift catches it:
$ clayers artifact --drift clayers/my-project/
drift: my-project (23 mappings, 1 drifted)
map-auth-handler: ARTIFACT DRIFTED
file: src/auth/handler.rs:42-98
stored: sha256:d4ca047eaa97...
current: sha256:abc123def456...
See what's specified but unbuilt, and what's built but unspecified:
clayers artifact --coverage clayers/my-project/
clayers artifact --coverage clayers/my-project/ --code-path src/Graph metrics across your knowledge model: density, hubs, bridges, isolated nodes, cycles.
clayers connectivity clayers/my-project/Query the assembled spec as a structured knowledge base:
# Find a term's definition
clayers query clayers/my-project/ '//trm:term[@id="term-drift"]/trm:definition' --text
# Locate code implementing a concept
clayers query clayers/my-project/ '//art:mapping[art:spec-ref/@node="auth-flow"]/art:artifact/@path'
# Get the LLM description for a node
clayers query clayers/my-project/ '//llm:node[@ref="auth-flow"]' --textA purpose-built VCS that understands XML structure. Documents are decomposed into a Merkle DAG of XML Infoset nodes, enabling structural diffs, element-level deduplication, and meaningful merge operations.
clayers init
clayers add *.xml
clayers commit -m "initial specification"
clayers checkout -b feature-auth
# ... edit, commit, merge ...
clayers merge main --strategy autoPush and pull specs over WebSocket. One server hosts multiple named repositories with per-user authentication and daisy-chain proxying.
clayers serve init --repo myspec:/path/to/myspec.db -o server.yaml
clayers serve run server.yaml
clayers clone ws://server:9100/myspec --token <token>Four Rust crates, each with a clear responsibility:
crates/
clayers-xml/ XML utilities: C14N, content hashing, OASIS catalog, RNC export
clayers-repo/ Content-addressed Merkle DAG with async SQLite storage
clayers-spec/ Spec-aware tooling: validation, drift, coverage, connectivity
clayers/ CLI combining spec and repository commands
Storage is a single .clayers.db SQLite file per repository.
The clayers PyPI package provides the full CLI plus a Python API via PyO3:
pip install clayers
clayers validate clayers/my-project/Spec commands
| Command | Description |
|---|---|
validate <path> |
Validate spec structure and cross-layer references |
artifact <path> |
List artifact mappings |
artifact --drift <path> |
Detect spec/code drift via content hashes |
artifact --coverage <path> |
Analyze spec-to-code coverage |
artifact --fix-node-hash <path> |
Recompute spec-side hashes |
artifact --fix-artifact-hash <path> |
Recompute code-side hashes |
connectivity <path> |
Graph metrics: density, hubs, bridges, cycles |
schema [path] |
Export XSD schemas as RELAX NG Compact |
query <path> <xpath> |
XPath query against assembled spec |
doc <path> |
Generate HTML documentation |
adopt [path] |
Bootstrap clayers in a project |
Repository commands
| Command | Description |
|---|---|
init [path] |
Create a new repository (.clayers.db) |
init --bare <path> |
Create a bare repository (no working copy) |
clone <source> [target] |
Clone from local path or ws:// URL |
add <files...> |
Stage files for commit |
rm <files...> |
Stage deletion |
status |
Show staged, modified, and untracked files |
commit -m <msg> |
Record staged changes |
log [-n N] |
Show commit history |
branch [name] |
List or create branches |
checkout <branch> |
Switch branches |
merge <branch> |
Three-way merge with strategy selection |
remote add <name> <url> |
Add a remote |
push [remote] |
Push to a remote |
pull [remote] |
Pull from a remote |
serve run <config> |
Start a WebSocket repository server |
serve init |
Generate a server config |
query <xpath> |
XPath query against repository |
diff |
Show structural diff between commits |
revert <files...> |
Restore files to committed state |
cargo build --workspace
cargo test --workspace
cargo install --path crates/clayersBuilt by Inferal

