Skip to main content

klode

A klode — a rich vein — of grounded, verifiable knowledge, with the machinery to encode it and to supervise work against it. Every claim is anchored to a verbatim source and checked by a fail-closed linter, so a citation can't quietly rot: cite, don't recall.

That guarantee is referential, not semantic — it proves the quoted text is still there, in a current source, in exactly one place. It does not prove the quote supports the claim built on it. Green klode check means "no citation rot," never "this is true."

A second, narrower limit sits beside it. klode ingest verifies an extraction against a control and against the rendered page, which catches dropped pages, duplicated blocks, and scrambled reading order — but no signal detects a value transposition that preserves the words, the length, and the order. A table extractor that swaps two cells produces this, and every check passes:

control:   Alice status approved   Bob status rejected
candidate: Alice status rejected   Bob status approved

Both claims are inverted; containment, inflation, order, and coverage are all perfect. A table-derived claim needs human verification. Recorded rather than hoped away.

Zero runtime dependencies — Python 3.11+, standard library only.

The two loops

  • Loop A — encode expertise (klode.lib): turn sources into cited, retrievable knowledge. Every card claim carries a verbatim (grep: …) anchor; klode check fails if any citation stops resolving.
  • Loop B — supervise work (klode.gate): submit a draft, score it against a CriterionSpec — an authored, corpus-pinned, human-approved rubric with stable ids and behaviorally anchored levels — and return Go / Recycle. Each cited defect is grounded through klode.lib.verify, so the judge's citations are un-fakeable, and every authored field declares whether it is the source's words, a paraphrase, an inference, or not stated at all. The boundary is enforced: klode.gate consumes only the klode.lib public API, never its internals. See dev-docs/SPEC-criterion.md.

Install

pip install klode
# or from a source checkout:
pipx install -e .              # provides the `klode` and `klode-mcp` commands

Three surfaces over one engine

A knowledge base is a library.toml plus a corpus of cited cards. Point klode at one with -c, or register several in a manifest and address them by id (--kb <id> / --registry).

CLI — klode:

klode -c path/to/library.toml check                 # citation-rot linter (exit 1 on any broken citation)
klode -c path/to/library.toml search pacing         # retrieval over the cards
klode -c path/to/library.toml consult brevity       # read a craft lens
klode -c path/to/library.toml verify brevity "the exact quote"   # prove a quote against its source
klode ingest paper.pdf --shelf papers               # ingest a source -> clean, grep-ready text
klode kbs                                            # list the KBs in a registry

Add --json to any read verb for machine-readable output (the same structured result the MCP renders).

MCP server — klode-mcp (stdio): exposes the read/verify surface to an agent — list_kbs, search_sources, consult_dimension, consult_framework, zoom_card, verify_quote, diagnose, list_lenses. Serves one KB (-c) or many (--registry), and every grounded result names its KB.

Library — import klode.lib: the stable public-API facade — verify, search, consult, resolve, diagnose, Config. Cheap to import; pulls in no frontends or optional backends.

Ingestion — any format to grep-ready text

klode ingest detects the format by content signature (not the extension) and converges every source on one clean-text pipeline: PDF, EPUB, DOCX, HTML/XHTML, TXT. EPUB/DOCX/HTML/TXT are pure stdlib; only PDF's OCR tiers are optional.

For table-heavy or multi-column PDFs, point klode at a docling-serve endpoint — the GPU runs server-side, so klode stays dependency-free — and pass --tier docling:

# ~/.klode/settings.toml
[ingest]
docling_url = "http://<host>:15001"
tier = "docling"          # or leave at "auto" and escalate only when the text layer is bad

KLODE_DOCLING_URL overrides the file, and klode settings prints every value with the source that won. The URL is topology, not a credential: bind docling-serve to a private interface, and do not rely on the URL being unguessable.

marker is supported the same way (marker_url, --tier marker) and is remote-only — it pulls torch and layout models, which klode does not depend on. It is deliberately not in the auto escalation ladder: a backend earns a ladder slot by measuring better than the one it would displace, not by being installed.

Backends are chosen by measurement, never by intuition — eval/extract_bakeoff.py ranks them against the rendered page (pdftoppm + tesseract), the one signal not downstream of another extractor. The committed result over 20 two-column academic papers (eval/results/extract-bakeoff-2026-08-11.json): docling and pdftotext tie on recall (0.931 vs 0.945), and docling wins decisively on reading order — median 1.000 against 0.697, better on 10 documents of 17 and worse on 1. That is what earns it the tier-3 slot. marker failed 16 of the same 20 documents on the deployment tested, so it has no paired basis to be ranked at all.

Architecture

One operations registry projects a single core to both surfaces (CLI + MCP), so they can differ in formatting but never in behaviour. Every grounded result carries structured provenance (which KB, which source, which policy). See dev-docs/ for the design record and SPEC-operations.md for the machine-readable operation table.

Status

0.4.1 — beta. The engine (klode.lib) is solid: 867 tests, a stable public-API facade, an AST layering guard, a content-sniffing multi-format ingester, and an MCP server, all with zero runtime dependencies. klode.gate (Loop B) is now a fail-closed supervising gate — freshness/review-aware grounding (verify_evidence), a bounded evidence-context op (verify_context), a fail-closed verified-context bundle (build_context_bundle), a shared structured anchor contract (parse_markers/Marker, regex/context/#n), and CriterionSpec v1 as its sole rubric input (field-level epistemics, behaviorally anchored levels, a computed corpus fingerprint, and a human-approval admission gate) are in place, and the rubric judge is real (LLMJudge: G-Eval two-step form-filling, position-bias-debiased by balanced permutation, transport-injectable, stdlib-only). What is not done is calibration: no rubric has yet been measured against human scores, so Verdict.calibrated is False and every verdict is marked non-production — by mechanism, not by convention. The optional entailment check (klode check --entail) pulls a small NLI model behind klode[entail] and is advisory, warn-only.

License

MIT — see LICENSE.

Metadata

Release files for klode 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for klode 0.4.1
File Size Uploaded
klode-0.4.1.tar.gz 297.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for klode 0.4.1
File Interpreter ABI Platform
klode-0.4.1-py3-none-any.whl Python 3 none any Details

Total release size: 481.1 kB

Release files / klode-0.4.1.tar.gz

Download URL klode-0.4.1.tar.gz
Size 297.6 kB
Tags Source
SHA-256 checksum
How to use checksums
d8f13f9b5c4ad19d01a720c3ac845f62e05312b131d955188ae511c78a4d1b7b
BLAKE2b-256 checksum
How to use checksums
186bf109016dc0b1bbb38e260a232769162b83cb0c63fe5557724d772abcc597
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 12, 2026.

Transparency log

Release files / klode-0.4.1-py3-none-any.whl

Download URL klode-0.4.1-py3-none-any.whl
Size 183.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
20bdeb77eb2f2304728e01e7b8d74b91cab9d4532d2b65e383f9873a8bfcd615
BLAKE2b-256 checksum
How to use checksums
cc8b18faaf140e98bc9eba3163537fa784a5cf80202258f88390a624dba25881
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 12, 2026.

Transparency log

Release history Release notifications | RSS feed

0.5.0

2 release files

0.4.3

2 release files

0.4.2

2 release files

This release

0.4.1 This release

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page