Skip to content

Installation

  • Windows, macOS or Linux. No administrator rights: everything installs into your user account.
  • Python 3.12 or 3.13, the versions Latet is tested on. You do not have to install it yourself: uv fetches one when needed.
  • At least one supported agent: Claude Code, Codex, OpenCode, Gemini CLI, or a tool that takes an OpenAI-, Anthropic- or Gemini-compatible address (see GitHub Copilot, JetBrains, Zed and other tools).

On macOS and Linux:

Terminal window
curl -LsSf https://raw.githubusercontent.com/Latet-AI/latet/main/scripts/install.sh | sh

On Windows (PowerShell):

Terminal window
irm https://raw.githubusercontent.com/Latet-AI/latet/main/scripts/install.ps1 | iex

The script does two things, in this order:

  1. Installs uv, the Python tool manager, if it is not on your machine yet.
  2. Installs the latest release of Latet from GitHub as an isolated command-line tool, with uv. Local name detection and text in images come with it; their models are downloaded only when you ask. Where they cannot be installed, Latet is installed without them, and the script ends by saying so; a Latet already installed with them is left as it was instead. If an older Latet is running, it stops it, and does not start it again. To upgrade, latet upgrade is the better way. After the script has upgraded a Latet, run latet start, and latet agents apply claude if Claude Code goes through Latet for good, so that it gets the new plugin.

On macOS and Linux, open a new terminal afterwards: the script adds Latet to your PATH for the terminals you open next, not for the one it ran in. If that one cannot find latet either, run uv tool update-shell and open another.

The script changes nothing else: none of your agents’ settings, nothing that starts at login. New to Latet? latet tutorial shows it at work in about 30 minutes. Then run one session through Latet with latet claude or latet codex, as the Quickstart shows, and route your agents for good with latet global-install once it fits your work.

Two environment variables change what the script does:

Variable Effect
LATET_NO_MODIFY_PATH=1 Leave your PATH and shell profile alone. If the script installs uv, set UV_NO_MODIFY_PATH=1 too, for uv’s own installer.
LATET_SOURCE What to install instead of the latest release: a wheel file, or a requirement such as latet @ <url>.
Section titled “Recommended: names and images from day one”

Patterns find what has a shape: a key, an email address, an IBAN. Two things have none, and need a model that runs on your computer:

  • Names and street addresses in free text, such as Emily Carter lives at 42 Mill Lane: the local name model finds them.
  • The text in screenshots, such as an IBAN on an invoice: text recognition reads it, and Latet covers each value on the image with its fake. Without it, images leave as they are.

The installer installs what both run on. Download their models once:

Terminal window
latet ner install # the name model, about 1.6 GB
latet ocr install # the text recognition models, about 31 MB

Or let latet global-install --ner --ocr download them with the rest of its setup. Both run on this computer only: the models come once from huggingface.co, at a pinned revision and checked against pinned SHA-256s, and nothing is sent anywhere. Name detection and Text in images below say more about each.

Terminal window
latet upgrade

It installs the latest release from GitHub as the installer does, local name detection and text in images included. It stops the daemon first (Windows cannot replace files that are in use), installs the new Claude Code plugin if you use Claude Code, and starts the daemon again. A Latet installed without name detection or text in images gets them this way. Where the new release cannot have them, a Latet that has them is left as it was, and one without them is upgraded without them. On Windows, which replaces no file of a program that runs, the upgrade goes on in a window of its own once the command has ended, and that window says how it went. A Latet 0.9.0 or 0.9.1 on Windows upgrades by running the installer again: its own latet upgrade could leave it unable to start.

Before it stops the daemon, latet upgrade copies what the new version may change as it opens it: the vault, the history and your settings (config.yaml, and the settings you approved last), into backups/before-<version>-<time> in Latet’s data folder, and says where in one line. The values in the copy stay encrypted with this computer’s key, which is not copied. The three newest copies are kept: the older ones are deleted once the next is complete, never before. An upgrade to the version already installed takes no copy. An upgrade with no room on the disk for its copy, beside the copies there, and for the install stops with nothing changed, and says how much room it needs; so does one whose copy cannot be made. The copies follow what you remove while Latet 0.9.10 or a later release runs: Forget takes a value out of them too, clearing the history clears theirs, and their history is kept no longer than yours; after latet upgrade --to an older release, a Forget made there does not reach them. Each copy keeps the form its version gave it (it is never brought to a newer one), so it can still be put back.

To install a given release instead of the latest, to go back to the one you had for example:

Terminal window
latet upgrade --to 0.9.9

Going back to the version a copy was taken under, it offers to put that copy back. It says how many values the vault has learnt since the copy, which would be lost, and asks you at your terminal. The default keeps your data as it is: the older version still reads it where the newer one only added to it. Put back, your files as they are now are copied first, in a copy of their own; if putting the copy back fails half way, your files go back in their place, and it says so. An older release lacks the fixes of the ones after it: an agent cannot run latet upgrade --to one, you run it yourself.

Ask your AI agent to follow llms-install.md in the repository. It installs Latet, which changes nothing on its own, then tells you how you can go on: see it at work first with latet tutorial; try it one session at a time, with no setting of your agents changed; have it on for every session; set up your other tools; download the local models. It waits for your choice, and runs latet global-install with your answers only if you choose every session, for example:

Terminal window
latet global-install --yes --profile balanced --agents claude,codex --auto-mode-review block --ner --ocr

To keep Python off your computer, run the daemon as a container instead and point your agents at it: see Docker.

Names and street addresses in free text, such as Emily Carter lives at 42 Mill Lane, need a statistical model, which Latet runs on your machine. Secrets and structured data such as emails and IBANs do not need it; names do, so it is worth having from day one.

Terminal window
latet ner install # downloads the model once (about 1.6 GB)

It runs on the ner extra (ONNX Runtime and a tokenizer), which the installer installs with Latet.

  • The model is OpenAI’s Privacy Filter, Apache-2.0 licensed, in its int8 ONNX build: it reads many languages, Italian, English, French, German and Spanish included. It comes from huggingface.co at a pinned revision, and every file is checked against a pinned SHA-256 before use. While the daemon runs it takes up to about 2 GB of memory.
  • After the download it runs on your CPU. Nothing is sent anywhere, and Latet connects to huggingface.co only when you run latet ner install.
  • A running daemon starts using it at once. latet ner status shows whether it is in use; latet ner remove deletes it. To keep it installed but unused, set ner: off in the configuration.

What it looks for depends on the profile; see Detection.

Screenshots carry values too: an email address in a terminal, an IBAN on an invoice. Latet can read the text in images on your machine and mask it, covering each value on the image with its fake.

Terminal window
latet ocr install # downloads the models once (about 31 MB)

The models are PaddleOCR’s PP-OCRv6 small, Apache-2.0 licensed, from huggingface.co at a pinned revision and checked against pinned SHA-256s; they run on your CPU, on the ocr extra (ONNX Runtime and Pillow) the installer installs with Latet. See Screenshots and images.

If you run a language model on your own server (llama.cpp, Ollama, LM Studio), Latet can have it read every text before it leaves and mask what the detectors miss: names in passing, health details, a password written in a sentence. Nothing to install in Latet: turn it on in the dashboard’s Rules page, or see Local reviewer.

For contributors, or to try changes that are not in a release yet.

Terminal window
git clone https://github.com/Latet-AI/latet.git
cd latet
uv sync
uv run latet version
uv run latet serve # the daemon in the foreground on http://127.0.0.1:5283; Ctrl+C stops it

Put uv run in front of every command: uv run latet global-install, uv run latet claude, and so on. Two things differ from an installed copy:

  • Start the daemon yourself. When the daemon is not running, the Claude Code plugin starts it with the latet command, and in a checkout that command is not on your PATH. Run uv run latet start, or let uv run latet global-install start it at login. uv run latet claude starts it too.
  • Build the dashboard’s web files. In dashboard/, run npm ci and then npm run build (Node.js 22.12 or newer). Until then, latet dashboard opens a page that says the files are missing, and latet tutorial warns that its page will not show. A Latet installed from the repository’s address (git+https://...) lacks them too.

Start at login runs the daemon from the checkout’s virtual environment, so run uv run latet global-uninstall before you move or delete the checkout. See Contributing for the development workflow.