15 KiB
LeanCTX Protocol Family & Contracts (v1)
LeanCTX is infrastructure. Contracts are the stable promises that client integrations, CI gates, proof artifacts, and future plugins rely on.
Architecture positioning
MCP = how agents call LeanCTX (external interoperability)
LCP = how LeanCTX understands, transforms, and governs context (internal semantics)
MCP is the transport. The contracts below define what flows through it.
Versioning rules (SemVer policy)
- Schema versions are integers (
schema_version/contract_version). - Breaking change => bump the corresponding version and add migration notes.
- Examples: removing fields, changing field types, changing required fields, changing error semantics/status codes.
- Non-breaking change => keep version, document additive changes.
- Examples: adding optional fields, adding new tools, adding new docs pages.
- Compatibility:
- Newer runtimes should be able to read older artifacts where possible (at least for proofs / observability).
- If multiple versions are supported concurrently, support is explicitly documented.
Release SemVer mapping
For the lean-ctx release version (MAJOR.MINOR.PATCH):
| Change | Release bump | Contract effect |
|---|---|---|
| Bugfix, perf, docs, new compression pattern | PATCH | none |
| New tool, new endpoint, new optional field | MINOR | additive — contract version unchanged |
Breaking change to a stable contract |
MAJOR | contract version bump (v1 → v2) |
Any change to a frozen contract doc |
forbidden | publish a new -v2.md file; the -v1.md file stays immutable |
Contract file rule (v1 → v2)
A versioned contract doc (docs/contracts/<name>-vN.md) is an artifact, not a living document:
- Frozen docs never change — CI (
rust/tests/contracts_frozen.rs) hashes them and fails on any edit. - A semantic revision lands as a new file (
<name>-v2.md); the old file remains for existing integrations and gains a deprecation pointer in CONTRACTS.md (not in the frozen file itself). - Typo fixes in frozen docs are deliberately treated as changes: regenerate the hash snapshot via
LEANCTX_UPDATE_FROZEN_HASHES=1 cargo test --test contracts_frozenand justify it in the PR.
Deprecation policy
- A surface (CLI command, MCP tool, HTTP endpoint, config key, contract version) is deprecated at least 2 minor releases before removal.
- Every deprecation is recorded in
DEPRECATIONS.toml(compiled into the binary; lives insiderust/socargo publishcan package it) withannounced_in,earliest_removal, and areplacement. lean-ctx doctorwarns about every active deprecation shipping in the installed build.- Every release that announces or executes a removal lists it in a dedicated Deprecations section of the CHANGELOG.
experimentalcontracts are exempt — they may change or disappear without notice.
Stability matrix
Status of every contract document (SSOT: rust/src/core/contracts.rs::contract_docs(); enforced by rust/tests/contracts_frozen.rs — no doc may stay unclassified):
| Status | Meaning |
|---|---|
frozen |
Normative surface immutable; change = new -v2.md file. CI-enforced via content hash. |
stable |
Additive evolution allowed; breaking change requires version bump + migration notes. |
experimental |
May change or disappear without notice. |
| Contract | Doc | Version | Status |
|---|---|---|---|
| HTTP MCP | docs/contracts/http-mcp-contract-v1.md |
1 | frozen |
| Team Server | docs/contracts/team-server-contract-v1.md |
1 | frozen |
| Context IR | docs/contracts/context-ir-v1.md |
1 | frozen |
| Local-Free Invariant | docs/contracts/local-free-invariant-v1.md |
1 | frozen |
| OSS Plane Separation | docs/contracts/oss-plane-separation-v1.md |
1 | frozen |
| Billing Plane | docs/contracts/billing-plane-v1.md |
1 | frozen |
| WASM ABI | docs/contracts/wasm-abi-v1.md |
1 | frozen |
| Capabilities | docs/contracts/capabilities-contract-v1.md |
1 | stable¹ |
| Billing Plane v2 | docs/contracts/billing-plane-v2.md |
2 | stable |
| A2A | docs/contracts/a2a-contract-v1.md |
1 | stable |
| Attention Layout Driver | docs/contracts/attention-layout-driver-v1.md |
1 | stable |
| Autonomy Drivers | docs/contracts/autonomy-drivers-v1.md |
1 | stable |
| CCP Session Bundle | docs/contracts/ccp-session-bundle-v1.md |
1 | stable |
| Conformance | docs/contracts/conformance-v1.md |
1 | stable |
| Degradation Policy | docs/contracts/degradation-policy-v1.md |
1 | stable |
| Extension Trust | docs/contracts/extension-trust-v1.md |
1 | stable |
| Extractors | docs/contracts/extractors-v1.md |
1 | stable |
| Gotchas/Reminders | docs/contracts/gotchas-reminders-contract-v1.md |
1 | stable |
| Graph Reproducibility | docs/contracts/graph-reproducibility-contract-v1.md |
1 | stable |
| Handoff Transfer Bundle | docs/contracts/handoff-transfer-bundle-v1.md |
1 | stable |
| Intent Route | docs/contracts/intent-route-v1.md |
1 | stable |
| Knowledge Policy | docs/contracts/knowledge-policy-contract-v1.md |
1 | stable |
| Memory Boundary | docs/contracts/memory-boundary-contract-v1.md |
1 | stable |
| Persona Spec | docs/contracts/persona-spec-v1.md |
1 | stable |
| Provider Framework | docs/contracts/provider-framework-contract-v1.md |
1 | stable |
| Tokenizer Translation Driver | docs/contracts/tokenizer-translation-driver-v1.md |
1 | stable |
| Workflow Evidence Ledger | docs/contracts/workflow-evidence-ledger-v1.md |
1 | stable |
| Wrapped Permalink | docs/contracts/wrapped-permalink-v1.md |
1 | stable |
| Hosted Personal Index | docs/contracts/hosted-personal-index-v1.md |
1 | experimental |
| Personal Cloud Encryption | docs/contracts/personal-cloud-encryption-v1.md |
1 | experimental |
| Context Snapshot | docs/contracts/context-snapshot-v1.md |
1 | experimental |
¹ The capabilities document is additive by design: its drift test binds the doc's key list to server_capabilities::TOP_LEVEL_KEYS, so the doc must grow whenever a key is added. Freezing the file would contradict its own contract; removal or mutation of existing keys remains a breaking change.
Clients can read this matrix at runtime: GET /v1/capabilities returns a contract_status map (contract-id → status) next to the existing contracts version map.
The OpenAPI document (GET /v1/openapi.json) is part of the frozen surface: rust/tests/openapi_stability.rs compares the endpoint inventory against docs/reference/openapi-v1.snapshot.json — additive diffs are allowed, removed or mutated routes fail CI.
Current contract versions (SSOT, machine-checked)
leanctx.contract.mcp_manifest.schema_version=1 leanctx.contract.context_proof_v1.schema_version=1 leanctx.contract.context_ir_v1.schema_version=1 leanctx.contract.intent_route_v1.schema_version=1 leanctx.contract.degradation_policy_v1.schema_version=1 leanctx.contract.workflow_evidence_ledger_v1.schema_version=1 leanctx.contract.autonomy_drivers_v1.schema_version=1 leanctx.contract.tokenizer_translation_driver_v1.schema_version=1 leanctx.contract.attention_layout_driver_v1.schema_version=1 leanctx.contract.verification_observability_v1.schema_version=1 leanctx.contract.handoff_ledger_v1.schema_version=1 leanctx.contract.handoff_transfer_bundle_v1.schema_version=1 leanctx.contract.ccp_session_bundle_v1.schema_version=1 leanctx.contract.knowledge_policy_v1.schema_version=1 leanctx.contract.graph_reproducibility_v1.schema_version=1 leanctx.contract.a2a_snapshot_v1.schema_version=1 leanctx.contract.memory_boundary_v1.schema_version=1 leanctx.contract.gotchas_reminders_v1.schema_version=1 leanctx.contract.provider_framework_v1.schema_version=1 leanctx.contract.http_mcp.contract_version=1 leanctx.contract.team_server.contract_version=1 leanctx.contract.context_snapshot_v1.schema_version=1
Core Context Contracts
Foundational representations that all other contracts build upon.
Context IR v1 (Intermediate Representation)
The canonical representation of all context flowing through LeanCTX. Every tool call is recorded with source, lineage, tokens, compression ratio, and safety metadata.
- Doc:
docs/contracts/context-ir-v1.md - Runtime source:
rust/src/core/context_ir.rs - Surface: Recorded in hot-path after every
call_tool; exported viactx_proof; persisted to~/.lean-ctx/context_ir_v1.json
Context Proof v1 (Verification Artifacts)
Cryptographic proofs that document what context was produced, how it was compressed, and whether it's reproducible.
- Runtime source:
rust/src/core/context_proof.rs - Surface:
ctx_prooftool; exports toproject/.lean-ctx/proofs/
Verification Observability v1
Runtime observability for output verification (compression safety checks).
- Runtime source:
rust/src/core/verification_observability.rs - Surface: Verify footer in tool outputs when profile-enabled
Context Snapshot v1 (Context Time Machine)
A git-anchored, signed, point-in-time record of the context-layer state — lineage (from IR), ledger Φ-scores + item states, token ROI, and session slice. Snapshots chain into an append-only timeline you can rewind, reproduce, resume, or share. Distilled-by-default (never raw transcripts), content-addressed id (BLAKE3), ed25519-signed.
- Doc:
docs/contracts/context-snapshot-v1.md - Runtime source:
rust/src/core/context_snapshot/ - Surface: Phase 0 contract (#1023); builder +
snapshot/timelineCLI land in Phase 1 (#1024)
Runtime Contracts
Govern how the runtime processes, budgets, and degrades context.
Degradation Policy v1 (Budgets/SLOs)
- Doc:
docs/contracts/degradation-policy-v1.md - Runtime source:
rust/src/core/degradation_policy.rs - Surface: Enforced at tool-call boundary when enabled
Workflow Evidence Ledger v1
- Doc:
docs/contracts/workflow-evidence-ledger-v1.md - Runtime source:
rust/src/core/evidence_ledger.rs - Surface:
ctx_workflowevidence-gated transitions + automatic tool receipts
Autonomy Drivers v1
- Doc:
docs/contracts/autonomy-drivers-v1.md - Runtime source:
rust/src/core/autonomy_drivers.rs+rust/src/tools/autonomy.rs - Surface: Deterministic driver planner + bounded driver reports; proof export via
ctx_proof
Intent Route v1 (Orchestration Routing)
- Doc:
docs/contracts/intent-route-v1.md - Runtime source:
rust/src/core/intent_router.rs - Surface:
ctx_intentwithformat=jsonreturnsIntentRouteV1
Tokenizer-aware Translation Driver v1
- Doc:
docs/contracts/tokenizer-translation-driver-v1.md - Runtime source:
rust/src/core/tokenizer_translation_driver.rs - Surface: Deterministic ruleset selection (model_key -> ruleset) + bounded translation
Attention-aware Layout Driver v1
- Doc:
docs/contracts/attention-layout-driver-v1.md - Runtime source:
rust/src/core/attention_layout_driver.rs - Surface: Deterministic reorder for delivery surfaces when profile-enabled
Memory & Collaboration Contracts
Define how context persists, transfers between agents, and crosses boundaries.
CCP Session Bundle v1
- Doc:
docs/contracts/ccp-session-bundle-v1.md - Runtime source:
rust/src/core/ccp_session_bundle.rs+rust/src/core/session.rs - Surface:
ctx_session action=export|import(redacted-by-default, bounded, replayable)
Knowledge Policy v1
- Doc:
docs/contracts/knowledge-policy-contract-v1.md - Runtime source:
rust/src/core/memory_policy.rs+rust/src/core/knowledge.rs - Surface:
ctx_knowledge action=policy value=show|validate
Graph Reproducibility v1
- Doc:
docs/contracts/graph-reproducibility-contract-v1.md - Runtime source:
rust/src/core/property_graph/* - Surface:
ctx_impact/ctx_architecturewithformat=json
A2A Contract v1 (Multi-Agent)
- Doc:
docs/contracts/a2a-contract-v1.md - Runtime source:
rust/src/core/agents.rs+rust/src/core/a2a/* - Surface:
ctx_agent,ctx_task, rate limiting, cost attribution
Handoff Transfer Bundle v1
- Doc:
docs/contracts/handoff-transfer-bundle-v1.md - Runtime source:
rust/src/core/handoff_transfer_bundle.rs - Surface:
ctx_handoff action=export|import(redacted-by-default, bounded, identity-aware)
Memory Boundary v1
- Doc:
docs/contracts/memory-boundary-contract-v1.md - Runtime source:
rust/src/core/memory_boundary.rs - Surface:
FactPrivacyscoping, cross-project gates, audit events
Gotchas/Reminders v1
- Doc:
docs/contracts/gotchas-reminders-contract-v1.md - Runtime source:
rust/src/core/gotcha_tracker/model.rs - Surface: Time-bounded reminders with provenance and decay
Extension Contracts
Interfaces for external integrations and future plugin system.
Provider Framework v1 (Context I/O)
- Doc:
docs/contracts/provider-framework-contract-v1.md - Runtime source:
rust/src/core/providers/+rust/src/tools/ctx_provider.rs - Surface:
ctx_providertool (GitLab issues, MRs, pipelines); TTL-based cache; redaction on all outputs - Future: This contract defines the shape for third-party Context Provider plugins
CompressionPattern (planned v1)
- Status: Interface extracted from
rust/src/core/patterns/mod.rs - Future: Plugin-loadable compression patterns for proprietary CLI tools
LcpTool (planned v1)
- Status: Mirrors existing
McpTooltrait inrust/src/server/tool_trait.rs - Future: Plugin-registered tools that inherit the full runtime pipeline
Transport Contracts
Define how LeanCTX communicates with the outside world.
MCP Manifest v1 (Tool Inventory)
- Artifact:
website/generated/mcp-tools.json - Schema:
schema_version+ normalized tool entries (name,description,input_schema,schema_md5) - Runtime source:
rust/src/core/mcp_manifest.rs
HTTP MCP v1
- Doc:
docs/contracts/http-mcp-contract-v1.md - Stable endpoints:
/health,/v1/manifest,/v1/tools,/v1/tools/call,/v1/events,/v1/context/summary - Event schema:
ContextEventV1withversion,parentId,consistencyLevel - Typed errors: JSON
error_code+error
Team Server v1
- Doc:
docs/contracts/team-server-contract-v1.md - Workspaces:
x-leanctx-workspaceheader +workspaceIdbody + deterministic fallback - Audit log: JSONL with
argumentsMd5only (no raw args)
Compatibility matrix
| Integration | Transport | Contracts relied on | Setup |
|---|---|---|---|
| Cursor | MCP (stdio) + Shell Hook | MCP manifest v1 + tool schemas + shell patterns | lean-ctx setup |
| Claude Code | MCP (stdio) + Shell Hook | MCP manifest v1 + tool schemas + shell patterns | lean-ctx init --agent claude |
| CodeBuddy | MCP (stdio) + Shell Hook | MCP manifest v1 + tool schemas + shell patterns | lean-ctx init --agent codebuddy |
| GitHub Copilot | MCP (stdio) + Shell Hook | MCP manifest v1 + tool schemas | lean-ctx init --agent copilot |
| Remote agents | HTTP | HTTP MCP v1 + typed errors | lean-ctx serve |
| Teams | HTTP | Team Server v1 + audit log | lean-ctx team serve |
| Future plugins | In-process / Subprocess | Provider v1 + CompressionPattern v1 + LcpTool v1 | ~/.config/lean-ctx/plugins/ |