Security · on-device · 0.1.0b4

Agent memory that never phones home.

Telys links into your process and answers queries from a local directory. There is no service to call, no daemon to trust, and no code path — in the SDK or the runtime — that transmits your data anywhere.

01 Locality guarantees

Everything executes where the data lives.

Zero roundtrips

No network at query time

Import the SDK, unplug the network, and queries still answer. Retrieval is a function call against local segments — there is no endpoint to reach, and no failure mode that involves DNS.

In-process

Data stays in your process

No service, no daemon, no external API. The engine runs inside your Python process and reads a local directory. Vectors, metadata, queries, and results never cross a process boundary you did not create.

On-device embedding

Zero model downloads

Bring your own vectors — the engine is embedding-agnostic — or use the on-device embedder: lexical, in-process, no model download, no third-party inference call.

python
from telys import Telys
db  = Telys("./memory")          # a directory, not a connection string
col = db.open_collection("docs")
hits = col.search(qvec, where={"tenant_id": "acme"}, top_k=10)
# no socket, no daemon, no DNS lookup — a function call in your process
02 The signed runtime

One sign-in. Offline after.

telys login runs once: an OAuth device-code sign-in returns an RS256-signed device license and a runtime bundle whose artifacts verify against a SHA-256 manifest — locally, using public keys embedded in the SDK. After that, Telys is fully offline.

shell
telys login           # once: OAuth → RS256 device license + signed runtime
telys runtime verify  # offline: manifest signature + artifact SHA-256 + license
air-gapped
telys runtime install --file telys-runtime.bundle \
                      --license license.jwt
# verified locally against embedded public keys — no network at all

If you run local-first because you distrust vendors, this is the paragraph to audit: license checks never happen at query time. Verification is a local signature check at install — and on demand, via telys runtime verify — against embedded public keys, with no callback. And nothing about your data — vectors, metadata, queries, results — ever leaves the device: not on any tier.

Air-gapped activation is first-class, not a support ticket: install from a signed bundle file plus an offline license.jwt. That path never touches the network at all.

StepNetworkWhat moves
telys loginOnceOAuth sign-in; a signed license and the runtime bundle come down. Nothing about your data goes up.
telys runtime install --fileNeverOffline install: a signed bundle plus license.jwt, verified locally against embedded public keys.
telys runtime verifyNeverRe-checks the manifest signature, per-artifact SHA-256, and the license — entirely offline.
add / search / every queryNeverLicense checks do not happen at query time. There is no code path from a query to a socket.

The SDK is Apache-2.0 and on public PyPI (pip install telys). The signed runtime installs via telys login; offline bundles are available for air-gapped environments on request.

03 Governance

Deletion you can prove. Answers you can audit.

Trust is not only where the data sits — it is what the engine will admit about its own answers. Every mechanism below is shipped surface, not roadmap.

Provenance

Every fact carries its origin

Metadata routes with every vector, and every hit returns it. A recalled memory arrives with the record of where it came from — not a bare ID you have to re-join against another store.

Supersession

Never a silent overwrite

Updates supersede under MVCC: the new version wins, the prior version is marked superseded, and open snapshots keep reading a consistent view. History is a chain, not a mutation.

Hard erasure

Tombstone, then gone

delete() writes a tombstone — the row disappears from every subsequent search. compact() rewrites the segment without it: after compaction, the bytes are physically gone, including from index sidecars — not merely hidden from queries. That is what a real erasure request needs.

Explainability

A plan on every query

search(..., explain=True) names the physical path that produced each result — exact partition scan, IVF with exact rerank, or the scatter-gather fallback, which says so. No answer arrives without its reasoning.

python
col.delete(["doc-041"])  # tombstone — gone from every subsequent search
col.compact()             # segment rewrite — the bytes are physically gone
col.save()
04 Spec sheet

The claims, in writing.

SurfaceStatus
License verificationOffline. RS256 manifest signature, per-artifact SHA-256, RS256 license token — all verified against public keys embedded in the SDK. No network at verify time; none at query time.
Network at query timeNone. add, upsert, search, search_text, delete, compact, and save execute in-process against local segments.
Telemetry in the engineNone. The SDK and runtime transmit nothing off the device. Analytics on telys.ai stay on telys.ai — they have no path into your process.
EmbeddingBring your own vectors, or use the on-device embedder — no model downloads, no third-party inference.
SBOM & attestationSoftware bill of materials and build attestation per release — under Enterprise licensing.
CertificationsNo SOC 2 or ISO 27001 certification yet. The no-network design narrows the audit surface; formal certification tracks the Enterprise roadmap.
PlatformsmacOS arm64 · Linux x86_64 / arm64 · Windows via WSL2.
Source modelSDK: Apache-2.0, contains no engine code. Runtime: closed, signed, on-device.
05 Verify it yourself

Audit it yourself.

Install, unplug the network, and watch queries answer — then read the verification code, because it ships in the Apache-2.0 SDK.

Talk to us about Enterprise