> For the complete documentation index, see [llms.txt](https://docs.telys.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.telys.ai/security/what-leaves-the-machine.md).

# What leaves the machine

The most important security fact about Telys is a negative one: **your vectors, document text, and metadata never cross the network to make search work.** The data path — embedding, indexing, searching, compaction, persistence — runs in-process against the signed native runtime. This page enumerates the only outbound traffic Telys produces.

## The only outbound traffic

Telys reaches the network for three account-and-delivery tasks, and nothing else. Each has a stable host and an environment variable you can repoint.

| Purpose                              | Host (default)      | Env var              | Triggered by                                    | Payload                                                                                                           |
| ------------------------------------ | ------------------- | -------------------- | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| Device-code sign-in                  | `accounts.thyn.ai`  | `TELYS_ACCOUNTS_URL` | `telys login`                                   | The OAuth device-code handshake (RFC 8628) — no user data.                                                        |
| Control plane: keys, device, license | `api.telys.ai`      | `TELYS_API_URL`      | `telys login`, `telys runtime install`          | API-key / device registration and license issuance; your device public key and account identity, never your data. |
| Signed-runtime download              | `packages.telys.ai` | `TELYS_PACKAGES_URL` | `telys runtime install` (skipped with `--file`) | Fetches the signed runtime bundle *down*; you send only the request.                                              |

That is the complete list. Once the runtime and license are cached under `$TELYS_HOME`, none of these hosts is contacted to use Telys — license **verification** is offline, against a key embedded in the wheel.

## What never leaves — the data path

Every operation on your data is local. None makes an outbound call:

| Operation                                                                 | Where it runs                                                          |
| ------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| `create_collection` / `open_collection` / `save`                          | The runtime, on-disk under your engine path.                           |
| `add` / `add_texts` / `upsert` / `upsert_texts` / `update_texts`          | The runtime; text is embedded on-CPU by the `telys.embedding` kernels. |
| `search` / `search_text` / `ids`                                          | The runtime; the query vector or text is embedded and matched locally. |
| `delete` / `compact` / `build_ivf` / `snapshot` / `tune` / `apply_tuning` | The runtime.                                                           |
| `telys serve`                                                             | Serves over a Unix socket or TCP; makes **no outbound network calls**. |
| `telys mcp` and the five MCP tools                                        | Runs over local stdio.                                                 |

The `AlgentaBigramEmbedder` and `AlgentaMultigramEmbedder` in `telys.embedding` turn text into vectors through the native kernel on your CPU — text is never shipped to an embedding service to be vectorized.

{% hint style="success" %}
Stated plainly: the only bytes Telys sends are the auth handshake during `telys login`, the device/license calls to the control plane, and the one request that pulls the signed runtime down. Your vectors, text, and queries are not among them.
{% endhint %}

## `serve` is inbound-only

`serve(path, ...)` opens a listening socket and answers requests; it never initiates an outbound connection. The transport is length-prefixed JSON over a socket:

* **Unix socket** — created `0o600`, treated as trusted, no token required.
* **TCP** — **requires** an `access_token`; anonymous TCP is refused. The token is compared in constant time.

A served Telys instance is reachable only by clients you allow on a socket you opened; it does not phone home. See [**Auth & network model**](/self-hosting/auth-and-network.md) for the wire format and the token handshake.

## The exception you control: remote embedders

Telys's on-device guarantee covers the engine and its local kernels, not network calls your own code makes. If you wrap a hosted embedding API in a `CallableEmbedder` — for example OpenAI or a remote BGE endpoint — embedding a document or query sends that text to the service you chose:

```python
from telys.embedding import CallableEmbedder, EmbeddingProfile

# This fn calls a REMOTE service — your text leaves the machine here,
# by your code, not by Telys. Use a local embedder to stay on-device.
def embed(texts: list[str]):
    ...  # -> [N, D] float32 from a hosted API

profile = EmbeddingProfile(provider="openai", model_id="text-embedding-3-small",
                           model_version="1", dimension=1536)
remote = CallableEmbedder(embed, profile)
```

To keep the whole path on-device, use the local `telys.embedding` kernels. This is the difference between "Telys sends nothing" (always true) and "your application sends nothing" (true only with local embedders).

## Next steps

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Data residency &#x26; privacy</strong></td><td>Where your data lives and who can read it.</td><td><a href="/pages/czd8vgdLG6PP6tkAwVVq">/pages/czd8vgdLG6PP6tkAwVVq</a></td></tr><tr><td><strong>On-device &#x26; offline-first</strong></td><td>Why the data path never needs the network.</td><td><a href="/pages/8qFzJkRN9mhP0vZqJwZv">/pages/8qFzJkRN9mhP0vZqJwZv</a></td></tr><tr><td><strong>Environment variables</strong></td><td>Every host and path you can point elsewhere.</td><td><a href="/pages/51C3pUeevJC3K2vq5RRC">/pages/51C3pUeevJC3K2vq5RRC</a></td></tr><tr><td><strong>Auth &#x26; network model</strong></td><td>How <code>serve</code> authenticates inbound clients.</td><td><a href="/pages/N6BRLlIY4N7N32k9EspF">/pages/N6BRLlIY4N7N32k9EspF</a></td></tr></tbody></table>

Next: see where your data rests in [**Data residency & privacy**](/security/data-residency-privacy.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.telys.ai/security/what-leaves-the-machine.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
