WARM
Memory serverOfficial Writerslogic project
Created by Writerslogic
Published in writerslogic/warm. Publisher page
27 GitHub stars
What it is
WritersLogic Adaptive Retention & Memory (WARM): local document search (BM25 + embedding cosine) and vector-symbolic associative memory.
AutoGineer overview, from the brain’s own files
WARM (WritersLogic Adaptive Retention & Memory) is a local-first memory engine designed to provide AI agents and applications with persistent storage and retrieval. It combines traditional document search—using stemmed BM25 and vector-based cosine similarity—with a vector-symbolic layer for associative memory and multi-hop queries. The system is built in Rust and can be deployed as an embedded library, an HTTP server, or an MCP server, allowing it to integrate with various agent hosts and development environments. It emphasizes local control, offering optional encryption and provenance features while avoiding external service calls or telemetry.
How it works
Memory model: Hybrid
AutoGineer overview, from the brain’s own files
The system stores text, vectors, and facts in a local directory. It uses a hybrid approach where document search combines chunking and BM25 with vector embeddings. The vector-symbolic layer utilizes sparse hypervectors to support associative memory, triples, and multi-hop queries. It provides an API for memory management including remember, recall, and forget operations, with support for source provenance and atomic storage updates.
| Folder | Role | Files |
|---|---|---|
| .github | agent-config | 37 |
| assets | attachments | 10 |
| docs | docs | 1850 |
| examples | examples | 47 |
| scripts | scripts | 77 |
| src | source-code | 327 |
| tests | tests | 362 |
| benches | folder | 7 |
| benchmarks | folder | 2898 |
| bindings | folder | 273 |
| deploy | folder | 18 |
| figures | folder | 6 |
| fuzz | folder | 54 |
| integrations | folder | 225 |
| interop | folder | 3 |
| notebooks | folder | 3 |
| npm | folder | 1 |
| proptest-regressions | folder | 1 |
| schemas | folder | 9 |
The agent reads
- query_batch evidence: README.md
- get_document evidence: README.md
- list_documents evidence: README.md
- get_document_info evidence: README.md
- list_document_info evidence: README.md
Requirements
Runtimes: Node.js, Python >=3.9, Rust
Databases: SQLite
API keys (by name): WARM_API_KEY
Works with: Gemini CLI
Set it up
This brain runs code automatically: 1 hook (claude-code), 1 script. Review benchmarks/results/sbg_positions_development/setup.sh, integrations/editors/claude-code/plugin/hooks/hooks.json before opening the folder in Claude Code. No step below turns a hook on for you.
benchmarks/results/sbg_positions_development/setup.sh:sh benchmarks/results/sbg_positions_development/setup.shintegrations/editors/claude-code/plugin/hooks/hooks.json:node
- Not scanned by AutoGineerThe author’s README also describes installing it from a clone of its repository. Read its install section: AutoGineer did not scan that path. https://github.com/writerslogic/warm/blob/e176d5572dd86bf2233bcb120e3a485dc109ea3a/README.md#get-started
- Not scanned by AutoGineerThe author’s README also describes installing it as the npm package writerslogic-warm. Read its install section: AutoGineer did not scan that path. https://github.com/writerslogic/warm/blob/e176d5572dd86bf2233bcb120e3a485dc109ea3a/README.md#get-started
Created by Writerslogic. Published in writerslogic/warm. Licence: Apache License 2.0.
Usage
AutoGineer overview, from the brain’s own files
- Integrating memory into an AI agent via the MCP server.
- Building local-first applications that require embedded search and storage.
- Providing a multi-tenant memory service via the HTTP server.
- Using the Rust library for in-process memory management.
- “Remember that the project deadline is Friday.”
- The agent stores the fact with associated metadata, making it available for future retrieval.
- “Recall information about the project deadline.”
- The agent retrieves the stored fact using hybrid search and provides the information with source provenance.
Documentation by Writerslogic
<img src="https://raw.githubusercontent.com/writerslogic/warm/main/assets/crystal-halo/crystal-detailed-static.png" alt="WARM logo" width="96" align="left">
WARM
Local memory for AI agents and applications.
WARM (WritersLogic Adaptive Retention & Memory) gives agents persistent memory, full-text and vector search, and source provenance in one embeddable Rust engine. Use it inside your application, through HTTP, or from an MCP client, with storage on infrastructure you control.
Image: CI Image: MSRV 1.89 Image: OpenSSF Scorecard Image: OpenSSF Best Practices Image: License: Apache-2.0 Image: WARM MCP server: quality and maintenance score on Glama
Website · Docs · Get started · Standards and provenance · Evaluation · Capabilities · Limits · Contribute
<br clear="left">
What it is
WARM is a Rust library that stores text, vectors and facts in a directory on your machine and finds them again. It ships with optional Node.js, C, WASM and UniFFI bindings, an HTTP server with portable JavaScript and Python clients, and an MCP server. The embedded engine makes no service calls or telemetry requests. HTTP clients connect to the server you configure; model stages are opt-in.
| Capability | What you get |
|---|---|
| Document search | Chunking, stemmed BM25 over blocked postings, Boolean and phrase queries, hybrid fusion with embeddings you supply, metadata filters, byte offsets |
| Vector index | Graph index with a memory-mapped vertex file, an updatable delta for inserts and deletes, optional query-aware routing trained on sample queries |
| Memory API | remember, recall, forget and explain with time validity and supersession; conversation memory with source provenance |
| Storage | Atomic replace and delete, crash-safe journal and checkpoints, verified compaction, one writer per store |
| Security | Optional AES-256-GCM storage encryption with documented coverage and limits, signed audit log, COSE/SCITT provenance |
| Vector-symbolic layer | Sparse hypervectors with bind, bundle and permute, triples with multi-hop queries, Hopfield cleanup |
Who it's for
| You are building | What you get |
|---|---|
| An agent or assistant that needs memory | A memory API with forgetting that removes facts from the store, and an MCP server for editors and agent hosts |
| A local-first or offline app | Embedded search and storage in one directory, with no server process and optional encryption |
| A service that needs vector or text search | warm-server over HTTP with tenants and scoped keys, or the library in-process |
Get started
For an editor or agent host, start with the MCP integration. For an application, choose the Rust library or HTTP server below. WARM runs locally or on your own infrastructure; this repository does not provide a managed cloud service.
To try the offline memory demo from source:
git clone https://github.com/writerslogic/warm
cd warm
cargo run --release --example demo-offline-agent<details open> <summary><strong>Rust</strong></summary>
From your own Rust project, add the current Apache-2.0 source. The crate is warm-rust; the library is imported as writerslogic_warm. The MSRV is Rust 1.89; local-models and --all-features need Rust 1.94 or newer.
cargo add warm-rustThe historical v0.6.1 source
remains AGPL-3.0-or-later; it is available from that Git tag, not as a
warm-rust 0.6.1 release on crates.io.
use writerslogic_warm::{DocumentInput, WarmCore, SearchOptions};
let dir = tempfile::tempdir()?;
let warm = WarmCore::new(4096, Some(dir.path().display().to_string()), None)?;
warm.memorize_document(DocumentInput {
id: "backups".into(),
text: "Restore deleted documents from verified backups.".into(),
source_uri: Some("operations.md".into()),
version: Some("1".into()),
metadata: Some(serde_json::json!({ "project": "alpha" })),
chunk_words: None, overlap_words: None, store_text: None, embeddings: None, title_weight: None,
})?;
let hits = warm.search_documents("restore backups", &SearchOptions::default())?;
println!("{} {:?}", hits[0].document_id, hits[0].source_uri);Rust API change in 0.6.6 (0.6.5 returns these values directly): WarmCore::query, query_batch, and
analyze_components return Result. Handle the result with ? or an explicit
error branch; deferred-encoding failures no longer become successful partial
query results. get_document, list_documents, get_document_info, and list_document_info
also return Result; retained-text and checkpoint decoding failures propagate
instead of panicking, and reads no longer hydrate the
entire checkpoint or hold store locks during text I/O.
</details>
<details> <summary><strong>JavaScript and TypeScript: portable client</strong></summary>
warm-sdk 0.2.1 is the portable HTTP client for a separately running warm-server.
It has no native binaries or runtime dependencies and uses standard Fetch and Web Streams APIs
(Node 18 or newer). Installing or importing it does not load the embedded engine or download models.
For a published release, install the client in your application:
npm install [email protected]Check the available npm versions. To build the client from this checkout:
npm ci --prefix bindings/js/warm-sdk
npm run build --prefix bindings/js/warm-sdkIn your application, install that directory with
npm install /absolute/path/to/warm/bindings/js/warm-sdk.
Start the server in a separate terminal:
cargo build --release --features server --bin warm-server
WARM_API_KEY=change-me target/release/warm-server --input-dim 384import { WarmClient } from 'warm-sdk'
const warm = new WarmClient({
url: process.env.WARM_URL ?? 'http://127.0.0.1:8080',
apiKey: process.env.WARM_API_KEY, tenantId: 'demo',
})
await warm.memory.remember('Restore deleted documents from verified backups.', {
id: 'backups', metadata: { project: 'alpha' },
})
const hits = await warm.memory.recall('restore backups', { filter: { project: 'alpha' } })
console.log(hits[0]?.text)Set WARM_API_KEY to the server's key before running the client. This memory example uses
lexical retrieval and needs no embedding model. A runnable source example also checks retrieval
and deletion in an isolated namespace:
WARM_URL=http://127.0.0.1:8080 WARM_API_KEY=change-me \
node examples/quickstart/js-client/quickstart.mjsSee the client API and release availability. Browser deployments must permit the application's origin at the HTTP service boundary.
</details>
<details> <summary><strong>Node.js: optional embedded engine</strong></summary>
writerslogic-warm embeds the Rust engine in Node. For a published engine release,
install it explicitly with npm's optional dependencies enabled:
npm install [email protected]Check the available npm versions. To build from the cloned repository, with Rust installed:
npm ci --omit=optional
npm run buildThe portable client and embedded engine are separate packages with different APIs.
listDocuments supports scoped pruning. See the
integration guide for source
provenance, namespace isolation, dry runs and deletion limits.
const { WarmMemorySystem } = require('writerslogic-warm')
const { DocumentMemory } = require('writerslogic-warm/semantic')
async function main() {
const dir = require('node:fs').mkdtempSync(require('node:path').join(require('node:os').tmpdir(), 'warm-readme-'))
const memory = new DocumentMemory(new WarmMemorySystem(4096, dir))
await memory.memorize({
id: 'backups', text: 'Restore deleted documents from verified backups.',
sourceUri: 'operations.md', version: '1', metadata: { project: 'alpha' },
})
const [hit] = await memory.search('restore backups', { filter: { project: 'alpha' } })
console.log(hit.documentId, hit.sourceUri, hit.text)
await memory.flush()
}
main().catch(error => { console.error(error); process.exit(1) })</details>
<details> <summary><strong>Server and Python</strong></summary>
The Python package warm-sdk is an HTTP client for warm-server, which stores vectors you
supply. (warm-python, imported as writerslogic_warm, provides native vector indexes and phase vectors, but no document search.)
cargo build --release --features server --bin warm-server
WARM_API_KEY=change-me target/release/warm-server --input-dim 384 &
uv pip install warm-sdkfrom writerslogic_warm_sdk import WarmClient
client = WarmClient(url="http://127.0.0.1:8080", api_key="change-me", tenant_id="demo")
client.add_documents([{"id": "a", "vector": [0.1] * 384, "text": "hello", "metadata": {}}])
print(client.query([0.1] * 384, top_k=1)["matches"][0]["id"])Endpoints, flags, tenants and limits are in the
server docs. A runnable Python quickstart
with a toy embedder is in examples/quickstart/python.
</details>
<details> <summary><strong>MCP</strong></summary>
warm-mcp serves a store to any Model Context Protocol client over stdio or HTTP:
npx -y writerslogic-warm-mcp # stdio; downloads a verified binary on first run
npx -y writerslogic-warm-mcp --transport http # http://127.0.0.1:8765/mcpThe MCP package is a separate launcher. To build the server from source:
cargo build --release --features mcp,security --bin warm-mcp # add local-models for semantic recall
./target/release/warm-mcp # stdio
./target/release/warm-mcp --transport http # http://127.0.0.1:8765/mcpClient setup, data directory and the one-writer rule: MCP integration.
For normalized content from multiple applications, see the organizational knowledge adapter.
</details>
The five-minute quickstart
walks through ingest, search, a SQLite FTS5 comparison and encryption in Rust, Python and Node,
and CI runs that code on every pull request. For a whole agent memory with no embeddings and no
network, run cargo run --example demo-offline-agent.
<a id="headline-results"></a> <a id="where-its-behind"></a>
Evaluation
Recorded results and limitations cover memory quality, text retrieval and vector search. Each result retains its workload, hardware, model, source revision and known losses. The full comparison and reproduction protocol provide the evidence for evaluating WARM on your own workload.
What ships today
| Capability | Status | Documented limit |
|---|---|---|
| Hybrid document search (BM25 + exact cosine, filters, byte offsets) | Ships | Exact scan of eligible chunks; benchmark your corpus before assuming capacity (guide) |
Boolean lexical search (+required, -excluded, quoted phrases) | Ships | Flat queries only, no nesting; an empty or only-excluded query matches nothing (design) |
| Atomic replace/delete, crash-safe journal, verified compaction, process lock | Ships | One writer per store; compaction is not secure erasure |
Vector index (qgraph vertex graph, memory-mapped) | Ships | Build time and serving RSS behind hnswlib on SIFT-1M (gaps) |
| Updatable vector index (durable delta for inserts and deletes) | Ships | Single writer; format in VECTOR-UPDATES.md |
| Query-aware graph routing (trained on sample queries) | Ships (opt-in) | Needs representative training queries; tested on VIBE llama and yi (report) |
| Memory API: remember, recall, forget, explain | Ships | Forgetting removes a fact from the store; it does not cover what a model inferred (docs) |
Conversation memory (conversation-memory) | Ships | Bounded context with exact source provenance; native recall not yet benchmarked on LongMemEval end to end |
| Meaning memory: triples, multi-hop, Hopfield cleanup | Ships (runtime opt-in) | Tested on synthetic and 2,120-fact sets (research_bench_16384_256.json) |
Union-bundle membership (experimental) | Research | At D = 16,384: positive gap to N = 500 (4% false positives), tested to 2,500 (benchmark_scaling_results.json) |
Sparse vector index (memorize_vector) | Experimental | Not competitive with HNSW (results) |
Encrypted stores (security) | Ships | AES-256-GCM, Argon2id; covers the log, index caches and the text segment. Metadata, file names and sizes are not encrypted |
Signed audit log, credential-gated access, COSE/SCITT/C2PA (provenance) | Ships | Host must authenticate DIDs; PoSME, RATS, did:web not implemented |
On-device models (local-models: Qwen3 embed/rerank/LLM) | Ships | Local weights only; never downloads |
warm-server HTTP API, multi-tenant (server) | Ships | Single node; TLS, per-tenant scoped keys (guide) |
MCP server (mcp: warm-mcp, stdio and HTTP) | Ships | Encryption needs security; semantic recall needs local-models |
JavaScript/TypeScript client (warm-sdk 0.2.1) | Source and release builds | Portable HTTP client; requires a separately running server |
Embedded Node.js (writerslogic-warm 0.6.8) | Source and release builds | Eight optional native platform packages; separate from the client |
| C, Go, .NET, Java, Kotlin, Swift and WebAssembly bindings | Source available | Require local builds; the language packages and native bundles are not yet published (runtime guides) |
| Python | HTTP client (warm-sdk); native vector indexes and phase vectors (warm-python) | No in-process document search |
Query-private search (private-search) | Experimental | For searching an index someone else holds; hides the query vector from the scorer only (notes) |
Optional engine capabilities use Cargo features or runtime configuration; Cargo features lists the build choices.
The compatibility policy defines API stability, deprecation windows and storage-format migration rules.
Architecture
flowchart TB
subgraph bindings["Bindings and servers"]
rust["Rust crate"]
node["Node: writerslogic-warm (napi)"]
ffi["C, WASM, UniFFI"]
clients["JavaScript and Python: warm-sdk"]
server["warm-server (HTTP)"]
mcp["warm-mcp (stdio, HTTP)"]
end
subgraph engine["Engine API"]
core["WarmCore: documents, vectors, facts, mutation gate"]
prov["Security and provenance: signed audit log, COSE/SCITT"]
end
subgraph indexes["Indexes and memory"]
text["Text index: blocked postings, BM25, Boolean and phrase"]
vector["Vector index (qgraph): vertex file, updatable delta, query-aware projection"]
memory["Memory API: remember, recall, forget, conversation memory"]
vsa["Vector-symbolic layer: bind, bundle, Hopfield cleanup"]
end
subgraph storage["Storage"]
journal["Journal and checkpoints"]
segments["Append-only segments (CRC32, LZ4)"]
mapped["Memory-mapped files"]
crypto["AES-256-GCM encryption (optional)"]
end
clients --> server
rust --> core
node --> core
ffi --> core
server --> core
mcp --> core
core --> text
core --> vector
core --> memory
core --> vsa
core --> prov
memory --> text
text --> journal
vector --> journal
memory --> journal
journal --> segments
segments --> mapped
segments --> cryptoModule map: docs/ARCHITECTURE.md.
Limits
Not anonymous. Hypervector sketches and term counts are not encryption; anyone with a store can encode candidate text and compare.
storeText: falsekeeps term counts, IDs and embeddings, so it is not a privacy control.Document search is conventional. It does not use the hypervectors; the holographic parts are the algebra and the meaning memory.
One writer per store. A second writing process fails at open with a lock error.
Capacity numbers are points, not guarantees, and are stated only over the tested range (capacity).
Benchmark results are single machines. Conditions are in each results file; the single-core ann-benchmarks run and the VIBE high-recall points are losses (see Where it's behind).
Masking is obfuscation. Client-side vector masking preserves every pairwise similarity.
A store is a directory and
WarmCore::new(.., None, ..)uses the current directory.
Full statement: docs/PRIVACY.md. Report vulnerabilities privately via SECURITY.md.
Contributing
CONTRIBUTING.md: setup, the checks CI runs, DCO sign-off (git commit -s, no
CLA). Start with a good first issue
or Discussions. See the
Code of Conduct. Benchmark changes regenerate the results file they touch;
the README cites files, not remembered figures.
License
Apache-2.0. See LICENSE. Use, modify and embed it in open-source or proprietary software, including network services, with no copyleft obligation. The historical v0.6.1 source remains available under its AGPL-3.0-or-later license.
docs/production-readiness.md
Production readiness
Supported surfaces
Rust WarmCore and Node WarmMemorySystem expose persistent vector, document, and
structured knowledge operations. writerslogic-warm/semantic adds bounded ingestion, local
ONNX embeddings, hybrid retrieval, and optional local cross-encoder reranking. Python currently
exposes the quantized-phase substrate, not the document engine. The Rust MSRV is 1.89.
Compatibility and migration
New stores use storage format 4. On Unix, 1 GiB logical segments start with 64 MiB of mapped file capacity and grow in 64 MiB increments before appending a frame. Frame packing, logical offsets, transaction encoding and the 50 MiB raw-frame limit match the 1 GiB layout. Growth flushes the old mapping, extends and fully syncs the file, then remaps under the existing writer guard. Other platforms retain full-size allocation before mapping. Windows requires closing mapped views before extending a file; its allocation path stays fixed. Writes crossing a capacity boundary on Unix pay that allocation cost; this does not establish an unconditional latency improvement.
Existing supported formats 1–3 retain their recorded geometry through writes and compaction
(formats 1/2 use fixed 1 GiB segments; format 3 uses fixed 64 MiB segments). Opening them
does not upgrade their layout. Older binaries reject format 4 before changing persistent
data (opening still updates the ownership-lock PID). Storage health reports the current
layout version and mapped file capacity (not RSS). warm-admin migrate copies the source format;
re-encoding original documents into a new destination creates format 4.
Embedding schema 2 is unchanged. store.json binds
a store to its dimensions, text encoder (multiscale-words-v1 by default), signed dense projection
(signed-projection-v2), similarity metric, meaning-memory mode, encryption mode, and optional
embedding model/revision/dimensions/normalization/metric. A mismatch fails at construction.
Configure the same embedding space and security settings on every reopen.
Existing stores without an embedding schema cannot be opened by this engine. Old unsigned projections discarded information; a bit-level conversion cannot recover it. Keep the old store and its original application version. Re-encode the original source documents into a new path:
cargo run --release --features cli --bin warm-admin -- reencode sources.jsonl ./store-v2 --dimensions 16384
cargo run --release --features cli --bin warm-admin -- verify ./store-v2Each UTF-8 JSONL line is a DocumentInput, for example:
{"id":"guide","text":"Restore a verified backup.","sourceUri":"guide.md","version":"2","metadata":{"project":"alpha"}}The CLI streams bounded lines, builds a temporary store, verifies its frames, and publishes the
new destination by rename. An invalid line leaves the destination absent and the source intact.
It refuses an existing destination. This command migrates source documents; reingest graph
relations, triples, and rules through their public APIs from your original source of truth.
For externally generated embeddings, use Rust reencode_documents with an EmbeddingSpace
configuration or Node DocumentMemory.ingest into a new store. Changing models requires new
embeddings, not relabeling the old vectors.
The experimental multiscale-capped-union-v1 encoder unions primitive vectors within each
text feature level before applying the existing cross-level frequency cap. It requires the
experimental feature and explicit selection; enabling that feature preserves the default
encoder. To evaluate it with original source documents in a separate store:
cargo run --release --features experimental,cli --bin warm-admin -- reencode sources.jsonl ./union-store --dimensions 16384 --text-encoder multiscale-capped-union-v1In Rust, select WarmConfig.text_encoder = TextEncoder::MultiscaleCappedUnionV1, importing
TextEncoder from writerslogic_warm::core::encoding. Reopen with the same encoder;
the schema rejects a different encoder before loading arena data. Both text encoding and
document chunk encoding use the configured version. The lexical document search API and
supplied dense embeddings retain their existing scoring. Capped union remains a research
option; synthetic gains do not establish document relevance or a speed improvement.
warm-admin migrate SOURCE DESTINATION makes a verified copy of an arena and its sidecars;
it does not change its text/vector encoding or upgrade an old embedding schema. Inspection
and verification understand legacy frames and the active CURRENT generation:
cargo run --release --features cli --bin warm-admin -- inspect ./store-v2
cargo run --release --features cli --bin warm-admin -- verify ./store-v2
cargo run --release --features cli --bin warm-admin -- migrate ./store-v2 ./store-copyDurability and concurrency
Every engine holds an exclusive .hms.lock for its lifetime. Use one instance per store and
share it across tasks; a second process or instance cannot open it. Persistent mutations validate
and serialize their operations, reserve an exclusive writer lease, stage retained text, then
synchronously append one CRC-framed transaction. A failed text preparation or rejected append
discards the staged cache tail without publishing the business mutations. The writer queue holds its state mutex only for reservation and
release; queries can capture the prior live revision during the append. Reader exclusion covers
publication of the whole live batch and its revision, before acknowledgment. Compaction
checkpoints and other writers wait for the same lease, so they cannot pair an unpublished
journal tail with an older live snapshot. Batches and a document replacement commit as a unit.
An unacknowledged durable frame may replay after process interruption; successful acknowledgment
still follows both durable append and live publication.
Relations, relation removals, relation types, triples, composition rules, and derived-fact
ownership are replayed alongside vectors and documents.
Compaction writes and verifies a new arena generation, flushes its files, then atomically
publishes a CURRENT pointer. Old segments are removed only after publication. Interruption
tests terminate child processes before publication, after publication, and after mapping;
reopening must see a complete generation. Compaction captures a coherent snapshot while
excluding mutations, then rebuilds and verifies staging while mutations and readers proceed.
It shares immutable document owners and copies sparse vectors and other snapshot records.
Concurrent compactors serialize. Two catch-up passes copy the acknowledged journal outside
the mutation gate, retaining each original transaction and encrypted payload. Final tail replay,
flush, publication and index persistence exclude mutations; readers can proceed. This final
pause depends on outstanding writes and filesystem costs and has no fixed latency bound.
Snapshot memory and rebuild costs can still affect serving latency; no throughput improvement
has been measured for this implementation.
A mutation returns only after its journal frame is synced: msync(MS_SYNC) on Linux,
msync followed by fcntl(F_FULLFSYNC) on macOS (plain msync/fsync there leaves data in
the drive cache), FlushViewOfFile and FlushFileBuffers on Windows. The per-platform
guarantee is in file-format/CRASH-CONSISTENCY.md.
On macOS the drive-cache flush dominates a single-document commit: a replace took 4.6 ms and a
delete 4.0 ms (median of 7 runs, Apple M4 internal SSD) against 0.51 and 0.23 ms without it
(benchmarks/results/durable_commit_macos_v1.json). Batch APIs commit many documents in one
transaction and pay the flush once.
Files are flushed before publication; directory entries are synced on Unix. Windows uses file
flushes and atomic replacement without directory fsync. Power-loss guarantees still depend on
the filesystem and hardware. The tests exercise process interruption, not a simulated disk
controller or power failure. Call flush() before controlled shutdown and measure recovery
with representative stores. Audit/provenance sidecars are separate from the arena transaction;
an error in those sidecars can be returned after the main data mutation has committed.
Those failures, publication failures after a durable append, and failed post-publication
compaction cleanup carry CommittedMutationError. HTTP reports mutation_committed;
Node errors carry the same code prefix. Inspect the resulting state and reopen or reconcile
it before retrying. Retained-text cache writes are prepared before the journal append, so
their failure leaves live documents, vectors and the revision unchanged. Deleted text is
hidden during publication; physical cleanup runs afterwards. A cleanup failure reports a
committed outcome and retains pending spans. After the I/O fault clears, flush() retries
that cleanup without replaying the business mutation; new writes also drain pending cleanup
before committing. Canonical compaction drains and syncs the old segment before replacing
its cleanup owner. Other publication failures can still require reopen or reconciliation
before relying on that state. A reported cache-scrub failure does not mean the old bytes
were erased. This contract distinguishes durable data from completed auxiliary effects;
it does not supply an automatic sidecar repair service or exactly-once external delivery.
Schema 6 journals audit intents with the audited vector memorize/delete operation and with
compaction publication. Reopen and flush_audit() deliver pending records without repeating
business mutations; flush() also drains them. Delivery identities deduplicate an audit write
whose acknowledgement did not commit. The bounded queue holds at most 1024 intents and
rejects further audited mutations before commit when full. Monitor
warm_tenant_audit_pending and warm_tenant_audit_recoverable; the latter distinguishes
legacy schemas with no delivery queue. Existing schemas require explicit format upgrade.
This does not reconstruct missing historical audit records or provenance effects, expand
which operations are audited, or prove history completeness against deletion of whole records.
Do not repeat a committed mutation merely to obtain an auxiliary record. HTTP replays a
retained idempotency key's committed failure within
its retention window. Capacity pressure rejects new keys instead of evicting protected ones;
if the response cannot fit the replay byte budget, its key requires reconciliation without
reexecuting the operation. Worker panics retain the same protection. Durable receipts survive
restart, which conservatively starts a fresh retention window. Interrupted reservations
require reconciliation instead of automatic reexecution; forgetting and restore scrub old
response bodies while retaining protected keys. Receipts are separate from business commits
and require encrypted-volume protection for encryption at rest. Reconciliation after an
ambiguous outcome or receipt expiry must compare application-owned IDs, versions and resulting
state. See HTTP retry boundaries.
Any external repair/delivery workflow must persist its own stable effect IDs and deduplicate
delivery; the core audit queue does not provide a general external-effect retry worker.
Memory policy writes compare the planned core revision inside the journal writer lease.
Independent wrappers and raw document writers therefore cannot commit stale conflict or
supersession decisions. Snapshot reads and policy operations have bounded retries and may
return MemoryError::Concurrent (concurrent_mutation over HTTP/Node). Retrying the same
fact ID/content is idempotent. Multi-batch forgetting can commit a prefix before contention;
retry the same scope to finish it.
Tenant restore publishes a durable intent before moving directories. A lifetime parent lock survives the move; recovery processes the intent before a missing tenant directory can be created. An interrupted uncommitted restore rolls back to the complete old store. These are process-interruption guarantees, subject to the filesystem/hardware limits above.
Index maintenance
Vector updates and deletes modify affected postings and reuse slots. They invalidate trained ANN caches when necessary. Inserts update a trained index when supported. Persisted ANN files have checksums, shard topology, and an arena generation/offset checkpoint. Stale or damaged caches are discarded; retrieval falls back to indices rebuilt from durable records.
Ingestion no longer trains indices inside the write call. indexStatus() reports recommendations.
Call maintainIndices() between ingestion batches or from a scheduled job. Native Node methods
run off the JavaScript event loop. Rust callers can use
Arc<WarmCore>::maintain_indices_background(). Training uses a snapshot outside the transaction
gate and publishes only if the data revision still matches. If concurrent writes changed the
store, the call returns a retryable maintenance error; ingestion remains committed.
Documents and resource limits
memorizeDocument chunks UTF-8 text and atomically replaces any document with the same ID.
searchDocuments returns document IDs, versions, source URIs, metadata, passages, and byte
offsets. Metadata equality, source URI, and document-ID filters apply before ranking.
deleteDocument removes every owned chunk, including on restart. memorizeFile now reads a
bounded UTF-8 file as a document; use these document search/delete APIs for its output.
Document text: 8 MiB; ID: 4,096 bytes; up to 4,096 chunks.
Default chunking: 256 whitespace-delimited words, with 32 words of overlap.
Each chunk: at most 64 KiB; chunkWords: 1–4,096; overlap must be smaller.
Metadata: JSON object up to 64 KiB; source URI: 8,192 bytes; version: 1–1,024 bytes.
Dense embeddings: finite, nonzero, schema-matching dimensions; at most 1,048,576 values per document.
memorizeBatch: 1–4,096 items and 8 MiB of combined IDs/text, committed atomically.Serialized arena transaction: at most 50 MiB; overlap and JSON encoding count toward this limit.
Native document results: k 1–1,000, candidate limit k–4,096. The JS adapter caps candidates at 1,000.
DocumentMemoryaccepts at most 32 pending operations by default; a full queue rejects explicitly. Its async-iterableingestwaits for each document and applies backpressure.
Raw passages are stored by default. storeText: false omits passages but retains lexical terms,
metadata, source identifiers, and embeddings; it is not an anonymization control. Reranking
requires stored passages. memorizeFile uses the default text-storage policy; use explicit
DocumentInput settings when a different policy is needed.
Hybrid document retrieval currently scores eligible chunks with BM25 and exact dense cosine,
combines ranked candidates by a weighted blend of min-max normalized BM25 and cosine scores (reciprocal-rank fusion on request), then optionally reranks them.
Unfiltered lexical queries use exact matching postings and cached collection statistics.
Filtered queries retain adaptive scan/postings scoring with exact filtered statistics.
Untrained dense retrieval scans eligible chunks and keeps embeddings in memory. Explicit
train_document_index() builds a separate exact f64 box tree for document semantic
and hybrid queries, including broad filtered searches; conservative bounds can skip vector dot products while preserving scores,
ordering and source fields. Rust maintain_indices() also builds an eligible document index;
Node exposes trainDocumentIndex() and documentIndexTrained. The server/SDK maintenance
route is documented in SERVER.md. NSG/IVF remain separate sparse-vector strategies.
Measure corpus size, memory, and latency before selecting a deployment capacity.
See retrieval contracts for exact versus approximate routing, filter/phrase composition and explicit reasoning budgets, and upgrade notes for model and importer compatibility.
Document search prepares queries before acquiring the read gate, captures immutable document owners and relevant postings/statistics under the gate, then scores and builds results after releasing it. Model query variants share one capture, preventing revision mixing during fusion. An overlapping query can return its captured revision after replacement or deletion; a query captured after the acknowledged mutation sees the new state. Captures share source and embedding buffers and retain their owners until scoring completes. They still allocate candidate and posting references. A trained unfiltered semantic query pins the index without capturing every dense row; hybrid capture also follows requested lexical postings. Filtered and fallback dense capture remains linear in eligible chunks. This has correctness and mutation-progress regressions, but no new end-to-end performance measurement.
The dense cache supports 128–250,000 embedded chunks and 1–4,096 dimensions, bounded by 64 Mi embedding coordinates, 64 MiB of box bounds and 80 MiB of estimated auxiliary memory. It shares source/embedding buffers. Smaller, unsupported, stale and filtered cases use exact scanning; equal-vector data can require an exhaustive leaf. Updates invalidate the cache; restart rebuilds it explicitly. Training runs outside locks and publishes only a current document generation, with idempotent concurrent publication. Worst-case search remains a full scan. JSON float decoding uses the lossless roundtrip option so persisted f64 embeddings and numeric metadata retain their values across restart.
memorize_documents() / Node memorizeDocuments() validates a bounded batch before one journal
transaction. Native batches require unique IDs and at most 4,096 documents/chunks, 8 MiB of
aggregate source fields, 8 MiB of metadata, 1,048,576 supplied or inferred embedding values,
and 32 MiB of prepared transaction JSON. HTTP batches preserve ordered last-write-wins IDs.
Validation failures leave existing documents untouched; durable replay uses the existing
transaction recovery protocol.
Model-stage installation and direct model search reject invalid weights and native result limits. Fusion rejects duplicate chunk identities, conflicting source versions and nonfinite scores; query-dependent ranking scores do not define source identity.
The experimental angular qgraph::ivf::QuantizedIvf is a separate index for supplied
unit/zero vectors and trained unit centroids, with 4/8-bit coarse codes and optional
4/5/8-bit residual codes. It validates serialized shape, checksum, offsets, ids and
codes before use. It is not connected to document semantic retrieval or the default
sparse index. Competitive development evidence lives in
benchmarks/results/superiority_v3/ann_competition/; local timings are ineligible
for superiority claims.
IVF now has conservative runtime code envelopes that can skip complete coarse-code evaluations
without changing selected lists, rankings or serialization. scanned() remains selected-list
population; evaluated() counts actual coarse-code row evaluations. The CLI reports both plus
auxiliary_index_bytes, which is separate from serialized index_bytes; per-worker query
mask buffers add two padded byte arrays. The combined serialized/cache budget remains bounded,
with unpruned fallback when cache allocation would exceed it. Synthetic parity and work-count
evidence is in superiority_v3/ivf_routing_v1/; public workload latency is unmeasured.
Security
The standard npm build includes the Rust security feature. Custom builds reject requested
security/provenance capabilities they cannot provide. securityStatus() reports active
capabilities and the configured embedding space. An encrypted store cannot silently reopen
as plaintext, and wrong-key errors are surfaced. See PRIVACY.md for the precise
scope of encryption and differential privacy. Lossy encoding alone does not protect secrets.
Reproducible validation
cargo test --locked --no-default-features
cargo test --locked --all-features
cargo clippy --all-targets --all-features -- -D warnings
cargo +1.89.0 check --locked --no-default-features
cargo bench --no-run --no-default-features
npm run build
npm test
npm run test:types
npm run test:package
cargo run --release --bin warm-eval -- --dataset tests/fixtures/relevance.json --dimensions 4096 --k 3 --assert-min-recall 0.90
cargo run --release --features cli --bin warm-workload -- --vectors 1200 --operations 300 --dimensions 4096warm-eval emits relevance, rank, and latency metrics; warm-workload measures concurrent query
and update p95/p99. scripts/evaluate-local-model.mjs compares lexical and hybrid search with
actual local models, records model revisions and a dataset digest, and measures sparse
projection fidelity against dense-cosine neighbors. See evaluation.md.
Small curated fixtures and synthetic self-recall are regression signals, not general quality
or capacity guarantees. CI runs default/all-feature Rust tests, a Rust MSRV check, deterministic
retrieval floors, and native/packed Node tests on Linux, macOS, and Windows.
Measure durable audit write cost on the deployment filesystem with
cargo bench --locked --features security --bench audit_delivery. Set TMPDIR to an
owned directory on that filesystem. The benchmark compares disabled, unsigned and signed
auditing for 16 individually committed 256-dimensional vectors per iteration. Initialization,
input generation, reopening, result checks and signature verification are outside the timed
region; each timed write includes the actual journal and audit delivery/acknowledgement work.
Every iteration uses a fresh store, checks an empty pending queue, and verifies the persisted
vectors and expected audit count after reopening. cargo test --locked --features security --bench audit_delivery -- --test runs its correctness checks without collecting timings.
These measurements cover single-writer commits, not concurrent saturation, pending-backlog
recovery, large vectors, hardware power loss or production tail-latency guarantees. Retain
the revision, build profile, filesystem, host load and Criterion output with any reported result.
512 files · 481 not served here
- .bestpractices.json (not served here)
- .dockerignore (not served here)
- .editorconfig (not served here)
- .gitattributes (not served here)
- .github/CODEOWNERS (not served here)
- .github/FUNDING.yml (not served here)
- .github/ISSUE_TEMPLATE/bug_report.yml (not served here)
- .github/ISSUE_TEMPLATE/config.yml (not served here)
- .github/ISSUE_TEMPLATE/feature_request.yml (not served here)
- .github/SECURITY.md (not served here)
- .github/SUPPORT.md (not served here)
- .github/badges/coverage.json (not served here)
- .github/dependabot.yml (not served here)
- .github/pull_request_template.md (not served here)
- .github/workflows/bench-refresh.yml (not served here)
- .github/workflows/bindings.yml (not served here)
- .github/workflows/changelog.yml (not served here)
- .github/workflows/ci.yml (not served here)
- .github/workflows/coverage.yml (not served here)
- .github/workflows/dco.yml (not served here)
- .github/workflows/dependency-review.yml (not served here)
- .github/workflows/docs.yml (not served here)
- .github/workflows/examples.yml (not served here)
- .github/workflows/format.yml (not served here)
- .github/workflows/fuzz.yml (not served here)
- .github/workflows/importers.yml (not served here)
- .github/workflows/js-sdk.yml (not served here)
- .github/workflows/links.yml (not served here)
- .github/workflows/mcp-container.yml (not served here)
- .github/workflows/npm-packages.yml (not served here)
- .github/workflows/python-wheels.yml (not served here)
- .github/workflows/release.yml (not served here)
- .github/workflows/reproducible.yml (not served here)
- .github/workflows/retire-legacy-npm.yml (not served here)
- .github/workflows/scorecard.yml (not served here)
- .github/workflows/standards-interop.yml (not served here)
- .github/workflows/warm-js-sdk-release.yml (not served here)
- .github/workflows/warm-mcp-release.yml (not served here)
- .github/workflows/warm-models-release.yml (not served here)
- .github/workflows/warm-py-release.yml (not served here)
- .github/workflows/warm-sdk-release.yml (not served here)
- .gitignore (not served here)
- .lychee.toml (not served here)
- .npmignore (not served here)
- ATTRIBUTION.md
- AUTOGINEER-RUNS.md
- CHANGELOG.md
- CITATION.cff (not served here)
- CODE_OF_CONDUCT.md
- CONTRIBUTING.md
- Cargo.lock (not served here)
- Cargo.toml (not served here)
- Dockerfile (not served here)
- LICENSE
- README.md
- SECURITY.md
- assets/crystal-halo/README.txt (not served here)
- assets/crystal-halo/crystal-detailed-loop.apng (not served here)
- assets/crystal-halo/crystal-detailed-loop.svg (not served here)
- assets/crystal-halo/crystal-detailed-loop.webp (not served here)
- assets/crystal-halo/crystal-detailed-static.png (not served here)
- assets/crystal-halo/crystal-detailed-static.svg (not served here)
- assets/crystal-halo/source/build_additional_exports.py (not served here)
- assets/crystal-halo/source/build_crystal_halo.py (not served here)
- assets/crystal-halo/source/crystal-halo-geometry.json (not served here)
- assets/social-preview.png (not served here)
- benches/audit_delivery.rs (not served here)
- benches/ingest_alloc.rs (not served here)
- benches/intersection_kernels.rs (not served here)
- benches/query_alloc.rs (not served here)
- benches/vector_record_query.rs (not served here)
- benches/vector_updates.rs (not served here)
- benches/warm_benchmark.rs (not served here)
- benchmarks/ann-benchmarks/campaign/ga.py (not served here)
- benchmarks/ann-benchmarks/campaign/gen_heldout.py (not served here)
- benchmarks/ann-benchmarks/campaign/mkdefs.py (not served here)
- benchmarks/ann-benchmarks/campaign/mkdefs_ivf.py (not served here)
- benchmarks/ann-benchmarks/campaign/mkreport.py (not served here)
- benchmarks/ann-benchmarks/campaign/plans/b1-sift.json (not served here)
- benchmarks/ann-benchmarks/campaign/plans/b2-glove.json (not served here)
- benchmarks/ann-benchmarks/campaign/plans/g1-sift.json (not served here)
- benchmarks/ann-benchmarks/campaign/prebuild.py (not served here)
- benchmarks/ann-benchmarks/campaign/prof.sh (not served here)
- benchmarks/ann-benchmarks/campaign/profq.py (not served here)
- benchmarks/ann-benchmarks/campaign/run_gen.py (not served here)
- benchmarks/ann-benchmarks/campaign/summ.py (not served here)
- benchmarks/ann-benchmarks/campaign/test_campaign_integrity.py (not served here)
- benchmarks/ann-benchmarks/campaign/warm_module_campaign.py (not served here)
- benchmarks/ann-benchmarks/campaign/warmivf_module.py (not served here)
- benchmarks/ann-benchmarks/warm/Dockerfile (not served here)
- benchmarks/ann-benchmarks/warm/config.yml (not served here)
- benchmarks/ann-benchmarks/warm/module.py (not served here)
- benchmarks/competitive/GAPS.json (not served here)
- benchmarks/competitive/README-block.md (not served here)
- benchmarks/competitive/ann_updatable_measure.py (not served here)
- benchmarks/competitive/lucene/LuceneBm25.java (not served here)
- benchmarks/competitive/modal_run.py (not served here)
- benchmarks/competitive/predictions/heavy-20261021T093821.json (not served here)
- benchmarks/competitive/repin_compare.py (not served here)
- benchmarks/competitive/requirements/annoy.footprint.in (not served here)
- benchmarks/competitive/requirements/annoy.footprint.txt (not served here)
- benchmarks/competitive/requirements/annoy.in (not served here)
- benchmarks/competitive/requirements/annoy.txt (not served here)
- benchmarks/competitive/requirements/bm25s.footprint.in (not served here)
- benchmarks/competitive/requirements/bm25s.footprint.txt (not served here)
- benchmarks/competitive/requirements/bm25s.in (not served here)
- benchmarks/competitive/requirements/bm25s.txt (not served here)
- benchmarks/competitive/requirements/chroma.footprint.in (not served here)
- benchmarks/competitive/requirements/chroma.footprint.txt (not served here)
- benchmarks/competitive/requirements/chroma.in (not served here)
- benchmarks/competitive/requirements/chroma.txt (not served here)
- benchmarks/competitive/requirements/diskann.footprint.in (not served here)
- benchmarks/competitive/requirements/diskann.footprint.txt (not served here)
- benchmarks/competitive/requirements/diskann.in (not served here)
- benchmarks/competitive/requirements/diskann.txt (not served here)
- benchmarks/competitive/requirements/duckdb.footprint.in (not served here)
- benchmarks/competitive/requirements/duckdb.footprint.txt (not served here)
- benchmarks/competitive/requirements/duckdb.in (not served here)
- benchmarks/competitive/requirements/duckdb.txt (not served here)
- benchmarks/competitive/requirements/faiss.footprint.in (not served here)
- benchmarks/competitive/requirements/faiss.footprint.txt (not served here)
- benchmarks/competitive/requirements/faiss.in (not served here)
- benchmarks/competitive/requirements/faiss.txt (not served here)
- benchmarks/competitive/requirements/hnswlib.footprint.in (not served here)
- benchmarks/competitive/requirements/hnswlib.footprint.txt (not served here)
- benchmarks/competitive/requirements/hnswlib.in (not served here)
- benchmarks/competitive/requirements/hnswlib.txt (not served here)
- benchmarks/competitive/requirements/lancedb.footprint.in (not served here)
- benchmarks/competitive/requirements/lancedb.footprint.txt (not served here)
- benchmarks/competitive/requirements/lancedb.in (not served here)
- benchmarks/competitive/requirements/lancedb.txt (not served here)
- benchmarks/competitive/requirements/milvus.footprint.in (not served here)
- benchmarks/competitive/requirements/milvus.footprint.txt (not served here)
- benchmarks/competitive/requirements/milvus.in (not served here)
- benchmarks/competitive/requirements/milvus.txt (not served here)
- benchmarks/competitive/requirements/ngt.footprint.in (not served here)
- benchmarks/competitive/requirements/ngt.footprint.txt (not served here)
- benchmarks/competitive/requirements/ngt.in (not served here)
- benchmarks/competitive/requirements/ngt.txt (not served here)
- benchmarks/competitive/requirements/pynndescent.footprint.in (not served here)
- benchmarks/competitive/requirements/pynndescent.footprint.txt (not served here)
- benchmarks/competitive/requirements/pynndescent.in (not served here)
- benchmarks/competitive/requirements/pynndescent.txt (not served here)
- benchmarks/competitive/requirements/qdrant.footprint.in (not served here)
- benchmarks/competitive/requirements/qdrant.footprint.txt (not served here)
- benchmarks/competitive/requirements/qdrant.in (not served here)
- benchmarks/competitive/requirements/qdrant.txt (not served here)
- benchmarks/competitive/requirements/scann.footprint.in (not served here)
- benchmarks/competitive/requirements/scann.footprint.txt (not served here)
- benchmarks/competitive/requirements/scann.in (not served here)
- benchmarks/competitive/requirements/scann.txt (not served here)
- benchmarks/competitive/requirements/server-clients.footprint.in (not served here)
- benchmarks/competitive/requirements/server-clients.footprint.txt (not served here)
- benchmarks/competitive/requirements/server-clients.in (not served here)
- benchmarks/competitive/requirements/server-clients.txt (not served here)
- benchmarks/competitive/requirements/sqlite-vec.footprint.in (not served here)
- benchmarks/competitive/requirements/sqlite-vec.footprint.txt (not served here)
- benchmarks/competitive/requirements/sqlite-vec.in (not served here)
- benchmarks/competitive/requirements/sqlite-vec.txt (not served here)
- benchmarks/competitive/requirements/stdlib-prev.footprint.in (not served here)
- benchmarks/competitive/requirements/stdlib-prev.footprint.txt (not served here)
- benchmarks/competitive/requirements/stdlib-prev.in (not served here)
- benchmarks/competitive/requirements/stdlib-prev.txt (not served here)
- benchmarks/competitive/requirements/stdlib.footprint.in (not served here)
- benchmarks/competitive/requirements/stdlib.footprint.txt (not served here)
- benchmarks/competitive/requirements/stdlib.in (not served here)
- benchmarks/competitive/requirements/stdlib.txt (not served here)
- benchmarks/competitive/requirements/tantivy-prev.footprint.in (not served here)
- benchmarks/competitive/requirements/tantivy-prev.footprint.txt (not served here)
- benchmarks/competitive/requirements/tantivy-prev.in (not served here)
- benchmarks/competitive/requirements/tantivy-prev.txt (not served here)
- benchmarks/competitive/requirements/tantivy.footprint.in (not served here)
- benchmarks/competitive/requirements/tantivy.footprint.txt (not served here)
- benchmarks/competitive/requirements/tantivy.in (not served here)
- benchmarks/competitive/requirements/tantivy.txt (not served here)
- benchmarks/competitive/requirements/usearch.footprint.in (not served here)
- benchmarks/competitive/requirements/usearch.footprint.txt (not served here)
- benchmarks/competitive/requirements/usearch.in (not served here)
- benchmarks/competitive/requirements/usearch.txt (not served here)
- benchmarks/competitive/requirements/voyager.footprint.in (not served here)
- benchmarks/competitive/requirements/voyager.footprint.txt (not served here)
- benchmarks/competitive/requirements/voyager.in (not served here)
- benchmarks/competitive/requirements/voyager.txt (not served here)
- benchmarks/competitive/requirements/whoosh.footprint.in (not served here)
- benchmarks/competitive/requirements/whoosh.footprint.txt (not served here)
- benchmarks/competitive/requirements/whoosh.in (not served here)
- benchmarks/competitive/requirements/whoosh.txt (not served here)
- benchmarks/competitive/tests/test_ann_systems.py (not served here)
- benchmarks/competitive/tests/test_common.py (not served here)
- benchmarks/competitive/tests/test_server.py (not served here)
- benchmarks/competitive/tests/test_table.py (not served here)
- benchmarks/competitive/tests/test_text_systems.py (not served here)
- benchmarks/competitive/tests/test_warm_ann_build.py (not served here)
- benchmarks/competitive/warm-bench (not served here)
- benchmarks/competitive/warmbench/__init__.py (not served here)
- benchmarks/competitive/warmbench/_spawner.py (not served here)
- benchmarks/competitive/warmbench/analyze.py (not served here)
- benchmarks/competitive/warmbench/analyzer_latency.py (not served here)
- benchmarks/competitive/warmbench/ann_worker.py (not served here)
- benchmarks/competitive/warmbench/cli.py (not served here)
- benchmarks/competitive/warmbench/common.py (not served here)
- benchmarks/competitive/warmbench/data.py (not served here)
- benchmarks/competitive/warmbench/envs.py (not served here)
- benchmarks/competitive/warmbench/h5_convert.py (not served here)
- benchmarks/competitive/warmbench/jars.py (not served here)
- benchmarks/competitive/warmbench/land.py (not served here)
- benchmarks/competitive/warmbench/multilingual.py (not served here)
- benchmarks/competitive/warmbench/registry.py (not served here)
- benchmarks/competitive/warmbench/runner.py (not served here)
- benchmarks/competitive/warmbench/server_proc.py (not served here)
- benchmarks/competitive/warmbench/server_registry.py (not served here)
- benchmarks/competitive/warmbench/server_runner.py (not served here)
- benchmarks/competitive/warmbench/server_worker.py (not served here)
- benchmarks/competitive/warmbench/servers.py (not served here)
- benchmarks/competitive/warmbench/table.py (not served here)
- benchmarks/competitive/warmbench/text_worker.py (not served here)
- benchmarks/competitive/warmbench/textdata.py (not served here)
- benchmarks/cue_tags/cue_tagger.py (not served here)
- benchmarks/cue_tags/labels.csv (not served here)
- benchmarks/cue_tags/measure.py (not served here)
- benchmarks/cue_tags/sample.py (not served here)
- benchmarks/cue_tags/stale_arms.py (not served here)
- benchmarks/embedding/agreement.py (not served here)
- benchmarks/embedding/agreement_sample.json (not served here)
- benchmarks/embedding/assemble_selection.py (not served here)
- benchmarks/embedding/bench_torch_cpu.py (not served here)
- benchmarks/embedding/embed_store_bench.rs (not served here)
- benchmarks/embedding/pin_model.py (not served here)
- benchmarks/embedding/reference_granite-embedding-30m-english.json (not served here)
- benchmarks/embedding/run_engine_eval.py (not served here)
- benchmarks/embedding/run_store_eval.py (not served here)
- benchmarks/embedding/select_model.py (not served here)
- benchmarks/evidence/MANIFEST.json (not served here)
- benchmarks/evidence/README.md (not served here)
- benchmarks/evidence/retired-inputs.json (not served here)
- benchmarks/modal_benchmark.py (not served here)
- benchmarks/private_search/lattice_estimate.py (not served here)
- benchmarks/private_search/lwe_core_svp.py (not served here)
- benchmarks/public/accuracy_qualification/PLAN.json (not served here)
- benchmarks/public/accuracy_qualification/analyze.mjs (not served here)
- benchmarks/public/accuracy_qualification/prepare.py (not served here)
- benchmarks/public/accuracy_qualification/pyproject.toml (not served here)
- benchmarks/public/accuracy_qualification/run.mjs (not served here)
- benchmarks/public/accuracy_qualification/test-analyze.mjs (not served here)
- benchmarks/public/accuracy_qualification/test_prepare.py (not served here)
- benchmarks/public/accuracy_qualification/uv.lock (not served here)
- benchmarks/public/aml_cycle2/README.md (not served here)
- benchmarks/public/aml_cycle2/adapter.py (not served here)
- benchmarks/public/aml_cycle2/experimental/__init__.py (not served here)
- benchmarks/public/aml_cycle2/experimental/citation_matches.csv (not served here)
- benchmarks/public/aml_cycle2/experimental/evidence_selection.py (not served here)
- benchmarks/public/aml_cycle2/experimental/findings.json (not served here)
- benchmarks/public/aml_cycle2/experimental/semantic_cases.json (not served here)
- benchmarks/public/aml_cycle2/experimental/test_evidence_selection.py (not served here)
- benchmarks/public/aml_cycle2/gce_install.sh (not served here)
- benchmarks/public/aml_cycle2/local_host.py (not served here)
- benchmarks/public/aml_cycle2/modal_deploy.py (not served here)
- benchmarks/public/aml_cycle2/runtime-requirements.in (not served here)
- benchmarks/public/aml_cycle2/runtime-requirements.txt (not served here)
- benchmarks/public/aml_cycle2/test_adapter.py (not served here)
- benchmarks/public/aml_cycle2/test_local_host.py (not served here)
- benchmarks/public/aml_cycle2/test_query.py (not served here)
- benchmarks/public/analyze_glove_batch_pool.py (not served here)
- benchmarks/public/analyze_glove_batch_pool_feature.py (not served here)
- benchmarks/public/analyze_glove_batch_pool_isolation.py (not served here)
- benchmarks/public/analyze_glove_development.py (not served here)
- benchmarks/public/ann_extra.py (not served here)
- benchmarks/public/ann_failure_map.py (not served here)
- benchmarks/public/ann_modal_confirm.py (not served here)
- benchmarks/public/ann_modal_graph.py (not served here)
- benchmarks/public/ann_modal_repair.py (not served here)
- benchmarks/public/audit_calibration.py (not served here)
- benchmarks/public/audit_serving_job.py (not served here)
- benchmarks/public/batching_assemble.py (not served here)
- benchmarks/public/batching_compare.py (not served here)
- benchmarks/public/batching_inputs.py (not served here)
- benchmarks/public/batching_timing.py (not served here)
- benchmarks/public/bemula/README.md (not served here)
- benchmarks/public/bemula/run_warm.py (not served here)
- benchmarks/public/bemula/summarize.py (not served here)
- benchmarks/public/bemula/warm_adapter.py (not served here)
- benchmarks/public/build_native_bridge.py (not served here)
- benchmarks/public/check_algebraic_codebook_report.py (not served here)
- benchmarks/public/check_compaction_updates.py (not served here)
- benchmarks/public/check_competitive_ann.py (not served here)
- benchmarks/public/check_document_competition.py (not served here)
- benchmarks/public/check_document_operations.py (not served here)
- benchmarks/public/check_document_search_compare.py (not served here)
- benchmarks/public/check_document_sqlite_rank_control.py (not served here)
- benchmarks/public/check_encoder_version_diagnostic.py (not served here)
- benchmarks/public/check_evidence_budget.py (not served here)
- benchmarks/public/check_evidence_completeness.py (not served here)
- benchmarks/public/check_factored_evidence.py (not served here)
- benchmarks/public/check_geometry_report.py (not served here)
- benchmarks/public/check_learned_sparse.py (not served here)
- benchmarks/public/check_lexical_relevance.py (not served here)
- benchmarks/public/check_longmemeval_answers.py (not served here)
- benchmarks/public/check_longmemeval_complete_history.py (not served here)
- benchmarks/public/check_longmemeval_full_history.py (not served here)
- benchmarks/public/check_longmemeval_production.py (not served here)
- benchmarks/public/check_longmemeval_role_reader.py (not served here)
- benchmarks/public/check_longmemeval_user_first.py (not served here)
- benchmarks/public/check_longmemeval_verifier.py (not served here)
- benchmarks/public/check_manifold_report.py (not served here)
- benchmarks/public/check_manifold_schema_report.py (not served here)
- benchmarks/public/check_native_harness.py (not served here)
- benchmarks/public/check_operand_report.py (not served here)
- benchmarks/public/check_operand_tampering.py (not served here)
- benchmarks/public/check_phase_path_report.py (not served here)
- benchmarks/public/check_publication_serving.py (not served here)
- benchmarks/public/check_reader_suspensions.py (not served here)
- benchmarks/public/check_sparse_composition.py (not served here)
- benchmarks/public/check_superiority_checkpoint.py (not served here)
- benchmarks/public/check_weak_reader_evidence.py (not served here)
- benchmarks/public/compact_owned_publication.py (not served here)
- benchmarks/public/compaction_updates.py (not served here)
- benchmarks/public/compare_fact_caches.py (not served here)
- benchmarks/public/competitive_ann.py (not served here)
- benchmarks/public/direct_commit_publication.py (not served here)
- benchmarks/public/document_competition.py (not served here)
- benchmarks/public/document_search_compare.py (not served here)
- benchmarks/public/document_sqlite_rank_control.py (not served here)
- benchmarks/public/durability_matrix.py (not served here)
- benchmarks/public/encoder_version_diagnostic.py (not served here)
- benchmarks/public/evaluate.py (not served here)
- benchmarks/public/evidence_budget_diagnostic.py (not served here)
- benchmarks/public/evidence_completeness.py (not served here)
- benchmarks/public/factored_evidence_diagnostic.py (not served here)
- benchmarks/public/geometry_experiments.py (not served here)
- benchmarks/public/instrument_publication.py (not served here)
- benchmarks/public/learned_sparse_dense_tune.py (not served here)
- benchmarks/public/learned_sparse_encode.py (not served here)
- benchmarks/public/learned_sparse_results.py (not served here)
- benchmarks/public/lexical_relevance_tune.py (not served here)
- benchmarks/public/lme_context/README.md (not served here)
- benchmarks/public/lme_context/breakdown.py (not served here)
- benchmarks/public/lme_context/extract_modal.py (not served here)
- benchmarks/public/lme_context/prep_extract.py (not served here)
- benchmarks/public/lme_context/render.py (not served here)
- benchmarks/public/lme_context/run_arm.py (not served here)
- benchmarks/public/locomo/assemble_results.py (not served here)
- benchmarks/public/locomo/locomo_bench.py (not served here)
- benchmarks/public/locomo/mem0_prompts.py (not served here)
- benchmarks/public/locomo/test_locomo_bench.py (not served here)
- benchmarks/public/locomo_comparison.py (not served here)
- benchmarks/public/longmemeval_500_frozen_config.json (not served here)
- benchmarks/public/longmemeval_answer_evidence.py (not served here)
- benchmarks/public/longmemeval_compact_context.py (not served here)
- benchmarks/public/longmemeval_complete_history.py (not served here)
- benchmarks/public/longmemeval_config.json (not served here)
- benchmarks/public/longmemeval_dev_conversations.py (not served here)
- benchmarks/public/longmemeval_dev_sources.py (not served here)
- benchmarks/public/longmemeval_full_history.py (not served here)
- benchmarks/public/longmemeval_history_budget.py (not served here)
- benchmarks/public/longmemeval_incremental_judges.py (not served here)
- benchmarks/public/longmemeval_local_modal.py (not served here)
- benchmarks/public/longmemeval_local_reader.py (not served here)
- benchmarks/public/longmemeval_memory_recall.py (not served here)
- benchmarks/public/longmemeval_modal.py (not served here)
- benchmarks/public/longmemeval_obligations.py (not served here)
- benchmarks/public/longmemeval_official_qa.py (not served here)
- benchmarks/public/longmemeval_official_qa_500.py (not served here)
- benchmarks/public/longmemeval_pipeline.py (not served here)
- benchmarks/public/longmemeval_production.py (not served here)
- benchmarks/public/longmemeval_qa_l01.py (not served here)
- benchmarks/public/longmemeval_quality.py (not served here)
- benchmarks/public/longmemeval_quota.py (not served here)
- benchmarks/public/longmemeval_reader_api.py (not served here)
- benchmarks/public/longmemeval_reader_api_v2.py (not served here)
- benchmarks/public/longmemeval_reader_budget.py (not served here)
- benchmarks/public/longmemeval_retrieval.py (not served here)
- benchmarks/public/longmemeval_retrieval_limits.py (not served here)
- benchmarks/public/longmemeval_role_reader.py (not served here)
- benchmarks/public/longmemeval_role_retrieval.py (not served here)
- benchmarks/public/longmemeval_run_preopen.sh (not served here)
- benchmarks/public/longmemeval_run_preopen_r3.sh (not served here)
- benchmarks/public/longmemeval_session_closure.py (not served here)
- benchmarks/public/longmemeval_sota.py (not served here)
- benchmarks/public/longmemeval_sota_closure.py (not served here)
- benchmarks/public/longmemeval_sota_context.py (not served here)
- benchmarks/public/longmemeval_sota_expand.py (not served here)
- benchmarks/public/longmemeval_sota_hybrid.py (not served here)
- benchmarks/public/longmemeval_sota_receipts.py (not served here)
- benchmarks/public/longmemeval_sota_replay.py (not served here)
- benchmarks/public/longmemeval_sota_report.py (not served here)
- benchmarks/public/longmemeval_split.json (not served here)
- benchmarks/public/longmemeval_split.py (not served here)
- benchmarks/public/longmemeval_sweep.py (not served here)
- benchmarks/public/longmemeval_user_first.py (not served here)
- benchmarks/public/longmemeval_verifier.py (not served here)
- benchmarks/public/longmemeval_verifier_sources.py (not served here)
- benchmarks/public/longmemeval_weak_reader.py (not served here)
- benchmarks/public/lucene_hnsw/LuceneHnsw.java (not served here)
- benchmarks/public/matched_server/PLAN.json (not served here)
- benchmarks/public/matched_server/adapters.py (not served here)
- benchmarks/public/matched_server/calibrate.py (not served here)
- benchmarks/public/matched_server/check_adapters.py (not served here)
- benchmarks/public/matched_server/check_measure.py (not served here)
- benchmarks/public/matched_server/check_qualification.py (not served here)
- benchmarks/public/matched_server/claim_gate.py (not served here)
- benchmarks/public/matched_server/diagnose_search.py (not served here)
- benchmarks/public/matched_server/distribution.py (not served here)
- benchmarks/public/matched_server/measure.py (not served here)
- benchmarks/public/matched_server/oracle.py (not served here)
- benchmarks/public/matched_server/prepare_inputs.py (not served here)
- benchmarks/public/matched_server/pyproject.toml (not served here)
- benchmarks/public/matched_server/qualify.py (not served here)
- benchmarks/public/matched_server/seal_qualification.py (not served here)
- benchmarks/public/matched_server/test_claim_gate.py (not served here)
- benchmarks/public/matched_server/test_distribution.py (not served here)
- benchmarks/public/matched_server/test_measure.py (not served here)
- benchmarks/public/matched_server/test_prepare_inputs.py (not served here)
- benchmarks/public/matched_server/test_protocol.py (not served here)
- benchmarks/public/matched_server/test_qualify.py (not served here)
- benchmarks/public/matched_server/test_seal_qualification.py (not served here)
- benchmarks/public/matched_server/uv.lock (not served here)
- benchmarks/public/matched_server/verify_evidence.py (not served here)
- benchmarks/public/mem0_protocol/README.md (not served here)
- benchmarks/public/mem0_protocol/budget_ledger.py (not served here)
- benchmarks/public/mem0_protocol/clear_failed.py (not served here)
- benchmarks/public/mem0_protocol/grade_validation.py (not served here)
- benchmarks/public/mem0_protocol/live_smoke.py (not served here)
- benchmarks/public/mem0_protocol/manifest_template.json (not served here)
- benchmarks/public/mem0_protocol/openai_proxy.py (not served here)
- benchmarks/public/mem0_protocol/price.py (not served here)
- benchmarks/public/mem0_protocol/protocol_scope.py (not served here)
- benchmarks/public/mem0_protocol/quota_resume.py (not served here)
- benchmarks/public/mem0_protocol/retrieval_config.json (not served here)
- benchmarks/public/mem0_protocol/retrieval_config_count_matched.json (not served here)
- benchmarks/public/mem0_protocol/retrieval_config_hybrid_dev.json (not served here)
- benchmarks/public/mem0_protocol/retrieval_config_ordered_dev.json (not served here)
- benchmarks/public/mem0_protocol/reuse_locomo_dev.py (not served here)
- benchmarks/public/mem0_protocol/run_mem0_protocol.py (not served here)
- benchmarks/public/mem0_protocol/shim.py (not served here)
- benchmarks/public/mem0_protocol/test_budget_ledger.py (not served here)
- benchmarks/public/mem0_protocol/test_clear_failed.py (not served here)
- benchmarks/public/mem0_protocol/test_openai_proxy.py (not served here)
- benchmarks/public/mem0_protocol/test_quota_resume.py (not served here)
- benchmarks/public/mem0_protocol/test_reuse_locomo_dev.py (not served here)
- benchmarks/public/mem0_protocol/test_run_mem0_protocol.py (not served here)
- benchmarks/public/mem0_protocol/test_shim.py (not served here)
- benchmarks/public/mobile_qualification/ANDROID-PLAN.json (not served here)
- benchmarks/public/mobile_qualification/IOS-PLAN.json (not served here)
- benchmarks/public/mobile_qualification/PLAN.json (not served here)
- benchmarks/public/mobile_qualification/RecoveryConsumerTest.kt (not served here)
- benchmarks/public/native_bridge/Cargo.toml (not served here)
- benchmarks/public/native_bridge/build.rs (not served here)
- benchmarks/public/native_bridge/src/lib.rs (not served here)
- benchmarks/public/native_bridge/src/vertex_support.rs (not served here)
- benchmarks/public/native_harness.py (not served here)
- benchmarks/public/native_recovery/PLAN.json (not served here)
- benchmarks/public/native_recovery/Program.cs (not served here)
- benchmarks/public/native_recovery/RecoveryConsumer.java (not served here)
- benchmarks/public/native_recovery/recovery.c (not served here)
- benchmarks/public/native_recovery/recovery.go (not served here)
- benchmarks/public/native_recovery/run.py (not served here)
- benchmarks/public/native_recovery/test_protocol.py (not served here)
- benchmarks/public/node_recovery.cjs (not served here)
- benchmarks/public/operand_experiment.py (not served here)
- benchmarks/public/platform_microbench_aggregate.py (not served here)
- benchmarks/public/platform_modal_avx512.py (not served here)
- benchmarks/public/platform_modal_e2e.py (not served here)
- benchmarks/public/platform_paired.py (not served here)
- benchmarks/public/prepare.py (not served here)
- benchmarks/public/prepare_ann_scale.py (not served here)
- benchmarks/public/proxies/ann_proxies.py (not served here)
- benchmarks/public/proxies/beir_proxies.py (not served here)
- benchmarks/public/proxies/lme_proxies.py (not served here)
- benchmarks/public/proxies/qgraph_sim.py (not served here)
- benchmarks/public/proxies/stop_screen_report.py (not served here)
- benchmarks/public/publication_serving.py (not served here)
- benchmarks/public/publication_serving.rs (not served here)
- benchmarks/public/publication_trace.rs (not served here)
- benchmarks/public/python_sdk_recovery.py (not served here)
- benchmarks/public/qag_serving_execute.py (not served here)
- benchmarks/public/qag_serving_module.py (not served here)
- benchmarks/public/qgraph_paired.py (not served here)
- benchmarks/public/qgraph_table.py (not served here)
- benchmarks/public/reader_protocol_v1.json (not served here)
- benchmarks/public/remote_document_pilot.py (not served here)
- benchmarks/public/replay_capacity_publication.py (not served here)
- benchmarks/public/report_sparse_composition.py (not served here)
- benchmarks/public/restore_ann_checkpoint.py (not served here)
- benchmarks/public/resume_longmemeval_readers.py (not served here)
- benchmarks/public/run_glove_batch_pool_ablation.py (not served here)
- benchmarks/public/run_glove_batch_pool_feature.py (not served here)
- benchmarks/public/run_glove_batch_pool_isolation.py (not served here)
- benchmarks/public/run_glove_candidate_checks.py (not served here)
- benchmarks/public/run_glove_development.py (not served here)
- bindings/js/warm-sdk/LICENSE
- docs/ARCHITECTURE.md
- docs/COMPARISON.md
- docs/DETERMINISTIC-RESONATOR.md
- docs/GOVERNANCE.md
- docs/INTEGRATION.md
- docs/PREREGISTRATION-binding-readout.md
- docs/PRIVACY.md
- docs/PRIVATE-SEARCH.md
- docs/PUBLIC-BENCHMARKS.md
- docs/RELEASING.md
- docs/RESEARCH.md
- docs/SECURITY.md
- docs/SERVER.md
- docs/STABILITY.md
- docs/SUPERPOSITION-FLOOR.md
- docs/assets/fonts/LICENSE-OFL.txt
- docs/evaluation.md
- docs/index.md
- docs/production-readiness.md
- integrations/mcp/npm/LICENSE
- integrations/mcp/pypi/LICENSE
- tests/fixtures/vectra-0.15/LICENSE
Advantages
- Supports local-first operation with no external service calls or telemetry. evidence: README.md
- Provides a memory API that allows for explicit fact removal via a forget operation. evidence: README.md
Limitations
- The system supports only one writer per store. evidence: README.md
- The vector index build time and serving RSS are currently behind hnswlib on SIFT-1M benchmarks. evidence: README.md
Security
Risk level: Medium risk
This brain runs
Install scripts (1)
benchmarks/results/sbg_positions_development/setup.sh:sh benchmarks/results/sbg_positions_development/setup.sh
MCP servers (3)
integrations/editors/claude-code/plugin/.mcp.json(writerslogic-warm):npx -y writerslogic-warm-mcpintegrations/editors/claude-desktop/claude_desktop_config.json(writerslogic-warm):npx -y writerslogic-warm-mcpintegrations/editors/gemini-cli/gemini-extension.json(writerslogic-warm):npx -y writerslogic-warm-mcp
Hooks (1)
integrations/editors/claude-code/plugin/hooks/hooks.json(SessionStart):node
- Medium risk: runs-mcp-server-unpinned-runner (integrations/editors/claude-code/plugin/.mcp.json)
- Medium risk: runs-mcp-server-unpinned-runner (integrations/editors/claude-desktop/claude_desktop_config.json)
- Medium risk: runs-mcp-server-unpinned-runner (integrations/editors/gemini-cli/gemini-extension.json)
- Low risk: scripts-present (benchmarks/results/sbg_positions_development/setup.sh)
Attribution and licence
- Created by
- Writerslogic
- Declared authors
- WritersLogic, Inc. (declared in package.json)
- WritersLogic, Inc. (declared in pyproject.toml)
- WritersLogic Contributors (declared in CITATION.cff)
- Publisher
- Writerslogic (Official Writerslogic project)
- Source
- writerslogic/warm · commit e176d55
- Licence
- Apache License 2.0 (files served here)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Writerslogic.
Install from source
481 of its files are not served here, so there is no ZIP. writerslogic/warm at e176d55