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/PRIVATE-SEARCH.md
Private search (experimental)
Status: experimental prototype. It hides a query from the server. It is not encryption of stored data and must not be described as such. It has not been externally reviewed and has not been audited for constant-time behaviour. Do not rely on it to protect anything of value.
Code: src/core/private_query.rs, behind the Cargo feature private-search (off by default).
Measurement: src/bin/research/private-query-bench.rs, results in benchmarks/results/private_query.json.
A second layout for dense low-bit codes, which can score a chosen part of the database, is in
src/core/private_query/clustered.rs; see Clustered ranking of dense codes.
This is unrelated to src/core/mask.rs, which is a keyed permutation of index labels
(obfuscation).
What it does
A server stores sparse binary codes (EntangledHVec) in the clear. A client sends an
encrypted query code; the server computes, for every stored row, an encryption of the
intersection count |row ∩ query|; the client decrypts all N counts. The construction is
the secret-key Regev scheme with a shared public matrix, as used by SimplePIR [1], applied to a
sparse 0/1 database matrix instead of a PIR table. Tiptoe [2] uses the same idea for ranking.
With q = 2^32, Δ = floor(q / p), database X ∈ {0,1}^(N×D):
| Step | Who | Computation |
|---|---|---|
| Public | both | A ∈ Z_q^(D×n) expanded from a public 32-byte seed (ChaCha20) |
| Offline | server | hint H = X·A ∈ Z_q^(N×n); client downloads H |
| Query | client | fresh s ← Z_q^n, e ← χ^D; sends c = A·s + e + Δ·u |
| Answer | server | a = X·c (sum of c over each row's active indices) |
| Decode | client | score_i = round((a_i − H_i·s) / Δ) mod p |
A new secret is sampled for every query. QueryState is not Clone, decode takes it by
value, and its Drop wipes the secret with zeroize, so one secret cannot serve two queries.
Threat model
Hidden: the content of the query code u (which indices are active and how many), from an
honest-but-curious server that follows the protocol and sees A, the database, and any number
of queries. This rests on the hardness of LWE with the parameters below. Every query is D
words regardless of its weight.
Not hidden, not provided:
The database is fully visible to the server. Stored codes are plaintext. Nothing here protects a user's stored memories from whoever hosts them.
The client learns the score against every row, for every query. The database is not private from clients:
Dunit-vector queries reveal it entirely, and a client is not forced to send a binary query.No protection against a malicious server returning wrong answers or a wrong hint. Answers are not authenticated; a wrong answer decodes to a wrong score with no error.
No hiding of query timing, query count, client identity, or network metadata. What the client does after decoding (for example fetching the top-scoring record) is outside the scheme and can reveal the query.
The implementation is not constant-time audited. The error sampler uses a table search with data-dependent timing, and the arithmetic has not been checked for secret-dependent timing.
Not externally reviewed. No formal proof accompanies this code; the security argument is the one in [1] and holds only to the extent this code matches that scheme.
The secret is wiped on drop; the thread-local RNG state and any copies the allocator or OS made (swap, core dumps) are not.
Parameters
| Parameter | Value | Source |
|---|---|---|
LWE dimension n | 1280 | lattice estimator [5], see below ([1] uses 1024) |
Modulus q | 2^32 (wrapping u32) | [1] Section 4.2 |
Error distribution χ | discrete Gaussian, σ = 6.4 | [1] Section 4.2 |
| Secret distribution | uniform over Z_q^n | [1] Figure 2 |
Samples per query m | D (16384 by default; at most 2^21 accepted) | see below |
Plaintext modulus p | 1024 (default) | chosen here from the bound below |
| Error tail cut | ±77 = ceil(12σ) | chosen here |
| Max row weight | 1023 (default) | derived below |
q and σ are SimplePIR's [1]: Section 4.2 of its USENIX Security 2023 text states n = 2^10,
q = 2^32, discrete Gaussian with σ = 6.4, chosen "to have 128-bit security, according to
modern lattice-attack-cost estimates"; Figure 2 samples s uniformly from Z_q^n and builds
the query as A·s + e + Δ·u; Section 4.1 notes that A may be reused across many encryptions.
The dimension is raised from SimplePIR's 1024 to 1280 because the lattice estimator does not
reproduce the 128-bit figure at 1024.
Security estimate. The lattice estimator [5] (commit e4333d9, run under the
pip-installable SageMath distribution passagemath-standard) on LWE with q = 2^32, a secret
uniform mod q, a discrete Gaussian error and 2^21 samples, the most one query can publish
(MAX_DIM; a clustered probe publishes C·d, 6,400 at C = 64, d = 100). Script
benchmarks/private_search/lattice_estimate.py, output
benchmarks/results/private_query_lattice_estimate.json. Bits are log2 of the estimated
ring operations of the cheapest attack. "Default" is LWE.estimate with its default
reduction cost model (MATZOV); "core-SVP" is LWE.estimate.rough, one sieving call of cost
2^(0.292 β) for BKZ block size β, the conservative count used for Kyber-style claims.
| n | σ | Default, cheapest attack (bits) | Core-SVP (bits) | uSVP block size | Note |
|---|---|---|---|---|---|
| 1024 | 6.4 | 121.5 (bdd) | 95.2 | 326 | SimplePIR [1]; previous set |
| 1024 | 11 | 128.4 (bdd) | 102.5 | 351 | YPIR [3], s = 11·sqrt(2π) |
| 1152 | 6.4 | 137.5 (bdd) | 111.8 | 383 | |
| 1280 | 6.4 | 153.7 (bdd) | 128.8 | 441 | this crate |
| 1408 | 6.4 | 170.3 (bdd) | 146.0 | 500 | |
| 2048 | 6.4 | 257.1 (bdd) | 236.8 | 811 |
The attacks run are uSVP, BDD (primal decoding), dual and dual-hybrid; Arora-GB, BKW and the
BDD and meet-in-the-middle hybrids are skipped as slow and not competitive at this error and
modulus. n = 1280 is the smallest multiple of 128 at which both columns exceed 128 bits;
n = 1152 clears the default model but not core-SVP. As a cross-check, the Homomorphic
Encryption Standard [6] (Table 1, BKZ.sieve, σ ≈ 3.2) allows log2 q up to 29 at n = 1024
and 56 at n = 2048 for 128 bits with a uniform secret, so q = 2^32 at n = 1024 is outside
it; and the hand-written core-SVP script of the previous version
(benchmarks/private_search/lwe_core_svp.py, n = 1024 only) agrees with the estimator's
95.2 and 102.5. These are estimates of known attacks under stated cost models, not proofs, and
no quantum figure is claimed.
Not verified, stated so rather than assumed:
Tiptoe [2] ranks with different parameters:
q = 2^64,n = 2048, σ = 81,920 and a ternary secret, stated as 128-bit for encrypted vectors of dimension up to 2^27 (Appendix C). They are not used here.Deviations from the idealised scheme: the Gaussian is truncated at ±77 (tail mass below 2^-100) and its table is computed in
f64(about 2^-53 precision per entry), andAis pseudorandom (ChaCha20) rather than uniform. Their effect on the estimate was not analysed.Multiple queries reuse
Awith independent secrets. The standard hybrid argument loses a factor equal to the number of queries; no concrete query budget was derived.
Correctness bound
For row i with active set R_i:
a_i − H_i·s = Σ_{j∈R_i} (c_j − A_j·s) = Σ_{j∈R_i} (e_j + Δ·u_j) = Δ·|R_i ∩ u| + E_i (mod q)
E_i = Σ_{j∈R_i} e_j, |E_i| ≤ |R_i| · 77Rounding to the nearest multiple of Δ returns |R_i ∩ u| exactly when
|R_i| < p, so the score, at most|R_i|, does not wrap modulop; and|E_i| < Δ/2, guaranteed by2 · |R_i| · 77 < Δ.
Because every error sample is bounded, this holds with certainty, not with a failure
probability. The secret dimension n does not appear: H_i·s cancels exactly, so raising n
changes neither bound. The largest admissible row weight is
w_max(p) = min(p − 1, floor((Δ − 1) / 154)), Δ = floor(2^32 / p)p = 1024 gives Δ = 2^22 and w_max = min(1023, 27235) = 1023. p = 65536 gives
Δ = 65536 and w_max = 425, where the noise term binds. Params::new rejects a weight limit
above w_max(p) and Server::new rejects any row heavier than the limit. The query weight is
unconstrained: the error accumulates over the row's indices only. The bound is worst-case and
loose; at weight 64 the typical |E_i| is about 6.4·sqrt(64) ≈ 51 against Δ/2 = 2,097,152.
Measured cost
From benchmarks/results/private_query.json, measured at the previous n = 1024, not
re-run at 1280: hint bytes and the hint build, client encrypt and decode times scale with n
(hint 4·n bytes per row, 5,120 at n = 1280); server answer time and query and answer bytes
do not. D = 16384, row weight 64, release build, Apple M4, 10 rayon threads, crate 0.6.1. Medians of 20 queries (3 hint builds). One run on a machine that
was not idle; the per-query maxima in the JSON are 10 to 200 times the medians, so treat these
as indicative. Tested range is N = 10^3 to 10^5; nothing is claimed beyond it.
| N | Server answer (ms) | Hint build (ms) | Client encrypt (ms) | Client decode (ms) | Query (bytes) | Answer (bytes) | Hint (bytes) |
|---|---|---|---|---|---|---|---|
| 1,000 | 0.08 | 9.6 | 2.6 | 0.45 | 65,536 | 4,000 | 4,096,000 |
| 10,000 | 0.39 | 136 | 3.3 | 0.87 | 65,536 | 40,000 | 40,960,000 |
| 100,000 | 0.88 | 816 | 1.3 | 5.1 | 65,536 | 400,000 | 409,600,000 |
The hint is large: 4·n bytes per stored row (4,096 at n = 1024, 5,120 at 1280), 16 to 20
times the 256 bytes of a weight-64 row's plaintext indices, and 409.6 MB at N = 10^5 in the
table (512 MB at n = 1280). The client must hold it and must download it
again whenever the database changes. Server and client each also hold A, 64 MiB at D = 16384 and
n = 1024 (43 ms to expand), 80 MiB at 1280. The answer is 4 bytes per row, so communication and client work are linear
in N; this scheme returns all scores and does no private top-k selection.
Regenerate with:
cargo run --release --features private-search --bin private-query-benchTests
cargo test --features private-search private_query checks: decoded scores equal plaintext
intersection counts (N = 2000, D = 16384, two matrix seeds × four data seeds × two queries);
correctness at the maximum row weight for both regimes of the bound, and rejection one above
it; rejection of malformed codes, wrong lengths and mismatched hints; that decoding with a
different secret does not return the scores; that two encryptions of one code share almost no
ciphertext words and ciphertext length does not depend on query weight; that the secret buffer
is zeroed by the routine Drop calls; and the error sampler's bound and deviation.
These tests establish correctness and the stated mechanical properties. They cannot establish that the query is hidden; that rests on the LWE assumption and the parameter analysis in [1].
Clustered ranking of dense codes
Code: src/core/private_query/clustered.rs, same feature. Measurement:
src/bin/research/private-rank-bench.rs. Recall and sizes: benchmarks/results/private_rank_sweep_100k.json
and private_rank_sweep_1m.json. Protocol timings: private_rank_protocol_100k.json and
private_rank_protocol_1m.json.
The database is N codes of d small signed integers in C clusters of at most S codes,
laid out the way Tiptoe [2] lays out ranking: a matrix of S rows and C·d columns whose block
k of row i is the i-th code of cluster k (zeros past the end of the cluster). The client
keeps the C centroids, picks the P nearest clusters locally, and sends one ciphertext of
C·d words per cluster, each under its own secret, encrypting the query code in that cluster's
block and zeros elsewhere. The server multiplies the whole matrix by every ciphertext and returns
S words per probe; the client decodes the P·S scores of its clusters with the hint
H = M·A (S × n words). C = 1 scores the whole database. The LWE parameters and threat model
are those above, plus: C, P and S are public and fixed, the cluster layout is public, and
the client receives P·S scores, not ten.
Decoding. Row i has error E_i = Σ_j M_ij·e_j. A centred discrete Gaussian of parameter
σ is σ-sub-Gaussian, and symmetric truncation keeps that, so
P(|E_i| ≥ Δ/2) ≤ 2·exp(-(Δ/2)² / (2σ²·‖M_i‖²)). DenseParams takes a bound on ‖M_i‖², which
DenseServer::new checks for every row, sets p to the smallest power of two above 2·d·Bx·Bu
(Bx, Bu: database and query entry bounds), and rejects parameters whose union bound over a
probe's S scores exceeds 2^-40. SimplePIR's δ = 2^-40 is per query; here it is per probe, so a
query of P probes fails with probability at most P times the bound (2^-83 or less for every
configuration in the tables). Decoding is correct with that probability, not with certainty,
unless DenseParams::exact reports that the truncated worst case
2·77·C·d·Bx < Δ holds too (it does for the 1-bit rows below). Tests
(cargo test --features private-search clustered) compare decoded scores with plaintext dot
products for whole-database scoring, nine probes, entries at ±15 with the extreme scores
±d·Bx·Bu, and 1-bit codes; check that the error deviation over 2,048 rows at the norm bound is
within 6% of σ·‖M_i‖; and check rejection of out-of-bound entries, oversized clusters, rows
over the norm bound, bad cluster indices and mismatched hints.
Workload. glove-100-angular: the first N training rows and the first 1,000 test queries,
unit-normalised and quantized to odd-integer levels, written database bits:query bits (1 bit is
the sign, a bipolar hypervector; 4 bits is ±1 … ±15). k-means with 12 Lloyd iterations on a
100,000-row sample; cluster capacity 1.25× the mean size, each row placed in its nearest cluster
with room. Recall@10 is measured against the exhaustive plaintext ranking of the same codes and
is tie-aware: a returned code counts when its score reaches the tenth-best plaintext score. The
recall columns come from the plaintext sweep over 1,000 queries (regenerated at n = 1280; every
recall value equals the n = 1024 sweep's, since the plaintext ranking involves no LWE
parameter); the protocol runs compared every
decoded score of their 30 queries with the plaintext score and found no mismatch in any
configuration (9.4 million scores at N = 10^6, C = 64, P = 16). For context, recall@10 against
the exact f32 neighbours is also given; the 4:4 codes' own exhaustive ranking reaches 0.738 at
N = 10^6.
Timing: Intel Core Ultra 9 185H ( Linux, AVX2, 22 rayon threads), release build,
Rust 1.99.1, 2 warm-up and 30 timed queries per configuration, one run. Server time covers all
P probes of one query, batched eight to a pass over the database; nothing is batched across
queries. The tables are the n = 1280 runs. In the same locked session the n = 1024 build of
the previous version ran the same configurations (order 1024, 1280, 1280, 1024 at 10^6; files
in benchmarks/results/private_rank_n1280_ab/). Upload, download and the decoded scores are
identical; server time is within run-to-run spread (C = 64, P = 16: 24.9 and 27.4 ms at
n = 1024, 25.1 and 23.3 ms at 1280), as expected since the server never touches A or s.
What grows with n is the client side: the hint by exactly 25%, the hint build from 1.3–1.5 s
to 1.6–1.7 s, and decoding (C = 1: 57.5 and 53.1 ms to 65.7 and 66.2 ms). "Scored" is P·S/N, an upper bound on the share of rows whose scores the client
receives: S is the fullest cluster's size and smaller clusters are padded, so the mean share is
close to P/C. The server reads the whole database for every probe.
N = 10^6:
| Codes | C | P | Scored | Recall@10, same codes | Recall@10, f32 | Server ms, median [p10–p90] | Upload | Download | Hint | Client prepare / decode ms | Failure bound per probe |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 4:4 | 1 | 1 | 100% | 1.000 | 0.738 | 4.5 [3.8–5.3] | 400 B | 4.00 MB | 5,120 MB | 0.0 / 65.7 | 2^-5911 |
| 4:4 | 16 | 4 | 31% | 0.896 | 0.688 | 10.7 [10.2–11.2] | 26 KB | 1.25 MB | 400 MB | 1.2 / 26.7 | 2^-387 |
| 4:4 | 32 | 8 | 31% | 0.935 | 0.709 | 12.2 [10.3–15.9] | 102 KB | 1.25 MB | 200 MB | 2.4 / 32.5 | 2^-188 |
| 4:4 | 64 | 8 | 16% | 0.902 | 0.694 | 10.4 [9.6–13.4] | 205 KB | 0.63 MB | 100 MB | 3.3 / 21.0 | 2^-87 |
| 4:4 | 64 | 16 | 31% | 0.961 | 0.723 | 25.1 [21.8–28.1] | 410 KB | 1.25 MB | 100 MB | 5.4 / 42.2 | 2^-87 |
| 1:4 | 64 | 16 | 31% | 0.924 | 0.252 | 23.9 [20.1–25.9] | 410 KB | 1.25 MB | 100 MB | 4.3 / 40.2 | exact |
N = 10^5:
| Codes | C | P | Scored | Recall@10, same codes | Recall@10, f32 | Server ms, median [p10–p90] | Upload | Download | Hint | Client prepare / decode ms | Failure bound per probe |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 4:4 | 1 | 1 | 100% | 1.000 | 0.759 | 1.1 [0.8–1.6] | 400 B | 0.40 MB | 512 MB | 0.0 / 8.4 | 2^-6020 |
| 4:4 | 16 | 8 | 63% | 0.962 | 0.740 | 1.8 [1.6–2.0] | 51 KB | 0.25 MB | 40 MB | 1.0 / 12.0 | 2^-392 |
| 4:4 | 32 | 8 | 31% | 0.912 | 0.723 | 1.6 [1.5–1.7] | 102 KB | 0.13 MB | 20 MB | 1.5 / 9.4 | 2^-192 |
| 4:4 | 64 | 8 | 16% | 0.860 | 0.694 | 1.6 [1.4–1.7] | 205 KB | 0.06 MB | 10 MB | 2.2 / 5.6 | 2^-91 |
| 4:4 | 64 | 16 | 31% | 0.933 | 0.732 | 3.3 [3.1–3.5] | 410 KB | 0.13 MB | 10 MB | 3.3 / 11.0 | 2^-91 |
| 1:4 | 64 | 16 | 31% | 0.878 | 0.269 | 3.3 [3.1–3.5] | 410 KB | 0.13 MB | 10 MB | 3.1 / 11.0 | exact |
Offline per database version, besides the hint: the centroids (C·d floats, 25.6 KB at C = 64)
and the public matrix A (C·d × n words, 33 MB at C = 64, expanded from a 32-byte seed in
3–10 ms on the test machine). Building the hint took 1.6–1.7 s at N = 10^6 for C ≥ 16 and
2.6 s at C = 1. Client prepare (fresh secrets and A·s + e for every probe) does not depend on the
query and can run ahead; adding the query took under 0.01 ms. Results are (cluster, slot)
positions; unless records are addressed by position, the client also needs the position-to-record
map, 4 bytes per row (4 MB at N = 10^6). The sweep files cover C from 1 to
1,024 at 10^5 and 1 to 256 at 10^6, P from 1 to 64, and widths 1:4, 2:4 and 4:4; 4:4 codes
fail the 2^-40 bound from C = 128 at 10^6 and C = 256 at 10^5 (params_valid: false).
Published systems, not like-for-like. SimplePIR [1] reports 10 GB/s/core of server throughput (DoublePIR 7.4) on 1 GB databases, single-threaded on an AWS c5n.metal, with a 121 MB hint (DoublePIR 16 MB) and 242 KB per query (DoublePIR 345 KB); it retrieves a record and does not rank. Tiptoe [2] searches 364 million pages with 145 core-seconds of server compute on 45 servers, 56.9 MiB per query of which 42.2 MiB (a per-query token that replaces the hint) moves before the query, and 2.7 s end to end. It scores a single cluster of about 50,000 documents with 192-dimensional signed 4-bit embeddings, puts 20% of documents in two clusters, and reports an average rank of 7.7 on MS MARCO (non-private embedding search 2.3, tf-idf 6.7). Its corpus is 364 times larger than the one here, it keeps no client hint, and it measures end-to-end quality rather than recall against its own codes.
The claim at N = 10^6. Targets: at most 100 ms of server time per query on one node, at
most a few MB of online communication, the offline hint stated, and recall@10 of at least 0.9
against the plaintext ranking of the same codes. Kill criterion: no configuration meets all four
at N = 10^6. It did not fire. On glove-100 quantized to 4-bit codes, C = 64, P = 16 meets all
four: 25.1 ms median server time (28.1 ms at p90), 1.66 MB online (410 KB up, 1.25 MB down), a
100 MB hint per database version, recall 0.961. C = 32, P = 8 does too: 12.2 ms, 1.35 MB, a
200 MB hint, recall 0.935. C = 64, P = 8 (10.4 ms, 0.83 MB, 0.902) is within sampling error of
the recall threshold over 1,000 queries and is not counted as a pass. Exact
scoring of the whole database (C = 1) takes 4.5 ms of server time and 4 MB down but needs a
5,120 MB hint and 66 ms of client decoding. Limits of the result: one dataset, one machine, one
run, 30 timed queries per configuration; recall against the share of the database scored
depends on how well the data clusters, and on glove-100 the passing points score at most 31% of
the rows (P/C = 25%).
The query's hiding rests on LWE with n = 1280, q = 2^32, σ = 6.4: 2^153.7 by the lattice
estimator's default model and 2^128.8 by core-SVP (see Parameters). Raising n
rather than σ leaves every failure bound above unchanged. The alternative of YPIR's σ = 11 at
n = 1024 reaches only 2^128.4 by the default model and 2^102.5 by core-SVP, and would multiply
the failure-bound exponent by (6.4/11)² ≈ 0.34, which by that scaling (not measured) pushes the
4:4 rows at C = 64 past 2^-40. Not implemented: dropping low bits of the
answer words (16-bit plaintext in a 32-bit word), and removing the hint with Tiptoe's token or a
hintless scheme such as YPIR [3].
Regenerate with:
cargo run --release --features private-search,cli --bin private-rank-bench -- \
sweep --data <glove-100-angular dir> --sizes 1000000 --clusters 1,16,32,64,128,256 \
--out benchmarks/results/private_rank_sweep_1m.json
cargo run --release --features private-search,cli --bin private-rank-bench -- \
protocol --data <glove-100-angular dir> --sizes 1000000 --queries 64 --protocol-queries 30 \
--configs 1:1:4:4,16:4:4:4,32:8:4:4,64:8:4:4,64:16:4:4,64:16:1:4 \
--out benchmarks/results/private_rank_protocol_1m.jsonThe 10^5 files use --sizes 100000, the default cluster list for the sweep, and the configs
1:1:4:4,16:8:4:4,32:8:4:4,64:8:4:4,64:16:4:4,64:16:1:4. The data directory holds train.f32
and test.f32 (little-endian f32 rows of 100).
References
Henzinger, Hong, Corrigan-Gibbs, Meiklejohn, Vaikuntanathan. One Server for the Price of Two: Simple and Fast Single-Server Private Information Retrieval. USENIX Security 2023. https://eprint.iacr.org/2022/949
Henzinger, Dauterman, Corrigan-Gibbs, Zeldovich. Private Web Search with Tiptoe. SOSP 2023. https://dl.acm.org/doi/10.1145/3600006.3613134 (read: https://par.nsf.gov/servlets/purl/10530535)
Menon, Wu. YPIR: High-Throughput Single-Server PIR with Silent Preprocessing. USENIX Security
Alkim, Ducas, Pöppelmann, Schwabe. Post-quantum key exchange: a new hope. USENIX Security 2016, Section 6.
Albrecht, Player, Scott. On the concrete hardness of Learning with Errors. J. Math. Cryptol. 2015; software: https://github.com/malb/lattice-estimator
Albrecht et al. Homomorphic Encryption Security Standard, v1.1, 2018. https://homomorphicencryption.org/standard/
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