Install and first run
Installing the binary, fetching a model, and having a first conversation. Two separate steps: nothing is downloaded until you ask for it.
One line, macOS and Linux
The script installs rustup if cargo is missing, builds Tacet with the feature that matches your machine (metal on macOS, candle elsewhere), then downloads the model and opens the first chat. It reports available memory before the 2 GB download rather than after: a machine that cannot hold the model should learn that before spending the bandwidth, not when the kernel kills the first chat with a bare "Killed".
curl -fsSL https://usetacet.com/install.sh | shOne line, Windows
The PowerShell installer does the same on Windows, with the candle feature.
powershell -c "irm https://usetacet.com/install.ps1 | iex"With a Rust toolchain
If you already have cargo, install from crates.io. Pick the feature that matches your hardware.
cargo install tacet-cli --features metal # Apple GPU
cargo install tacet-cli --features candle # CPU
cargo install tacet-cli # no inference; eval, tools and addons still workUpgrade without the flag and you get a binary that cannot run a model. It refuses to answer rather than making something up: it names the missing feature, tells you how to reinstall, and exits non-zero. It used to fall back to a scripted engine and keep answering, which meant the failure looked like a working product giving bad replies and nobody reported it.
Or take a prebuilt binary
If you would rather not compile anything, every release carries binaries for macOS on Apple silicon and Intel, Linux on x86_64 and arm64, and Windows x86_64, with a SHA256SUMS file beside them. The arm64 Linux build was listed for a while before it was actually produced; since 0.1.27 it is built on a native arm runner and is really there.
# https://github.com/farukciftler/tacet-cli/releases
curl -fsSLO https://github.com/farukciftler/tacet-cli/releases/latest/download/SHA256SUMSGet a model
Tacet never downloads a model behind your back. Two are in the built-in catalog, and every download goes over HTTPS to an address printed on screen first, then is rejected unless its sha256 matches the one compiled into the binary.
tacet models list # what is on disk, and which roots were searched
tacet models download qwen3-4b # about 2 GB| Name | What it is |
|---|---|
| qwen3-4b | Qwen3-4B-Instruct-2507 at Q4_K_M. The default, and the weights every number in these docs was measured on. |
| qwen2.5-3b | Smaller, for machines with less to spare. |
Read the first name closely. Qwen3-4B and Qwen3-4B-Instruct-2507 are two different models of the same size, and the catalog pins the second. On a rented RTX 3090 the other one spent a median of 237 generated tokens per turn against 19, and took 53.7 minutes on a suite the pinned weights finished in 6.2.
Weights you already have
Point at a GGUF file and skip the download. There is no separate tokenizer file to find: Tacet reads the vocabulary, merges and token types out of the GGUF itself, so a file from Ollama or LM Studio works unchanged.
export TACET_MODEL=/path/to/model.gguf
export TACET_TOKENIZER=/path/to/tokenizer.json # only for a GGUF with no tokenizer insideWithout TACET_MODEL, a <name>/*.gguf pair is looked for in the platform model roots: ~/models and $XDG_DATA_HOME/tacet/models on Unix, %USERPROFILE%\models and %LOCALAPPDATA%\Tacet\models on Windows.
First session
tacet # the interactive shell
tacet chat --message "what's 125 * 8" # one shot
tacet tools --schema # the exact schema the model is shown
tacet eval # the behavioural suite, no model neededUpdates
Nothing checks on its own. tacet update is the only command that talks to GitHub, and only when you run it.
tacet update # says what is available
tacet update --install # downloads and replaces the binary, with your confirmationA few turns into your first session the shell asks once whether it may look for a new version daily, and writes the answer down. Set it directly with tacet config set update.check on or off. The check is throttled to once every 24 hours, prints a single line when a newer version exists, stays silent when it fails, and never runs when output is piped.