DocsGet startedQuickstart

Quickstart

Install Pretense and route your first AI tool through it, in 4 commands.

4 commands

bash
npm i -g @pretense/cli@stable
pretense --version
pretense login --key YOUR_KEY
pretense run claude

Command 2 is the cheapest possible check that the install worked. Command 3 takes a key from dashboard, settings, API keys. That is the entire setup: no config file to write, no proxy to start.

Then two ways to see what Pretense would protect, before anything runs:

bash
pretense scan .      # what would leave this directory
pretense review .    # the same, with the surrounding code

Hosted or air-gapped: one argument apart

There is no second setup for running on your own hardware. It is the same four commands, and the only thing that changes is the argument to command 4.

bash
npm i -g @pretense/cli@stable
pretense --version
pretense login --key YOUR_KEY
pretense run qwen2.5-coder

claude names a tool, so Pretense starts the proxy and launches that tool against it. qwen2.5-coder names a model, so Pretense starts the same proxy and talks to the model through it directly — a chat prompt, no extra client to install. Either way the prompt is mutated on the way out and restored on the way back, and the exchange lands in the audit log. Air-gap covers the local half in full.

The hosted path needs the tool installed as well

pretense run claude spawns claude, so that binary has to be on your PATH already; without it the command reports "claude" is not on your PATH and exits. Count that as a fifth step for the hosted path. The local path really is four — the model chat is built into the CLI, so there is nothing else to install.

Change the last word and Pretense works out the provider. These are the names it already knows.

Hosted

CommandToolBase URL set for youReads your files?
pretense run claudeClaude CodeANTHROPIC_BASE_URLyes — agent
pretense run cursorCursorOPENAI_BASE_URLyes — agent
pretense run codexCodex CLIOPENAI_BASE_URLyes — agent
pretense run geminiGemini CLIGEMINI_BASE_URLyes — agent
pretense run aiderAiderOPENAI_BASE_URLyes — agent
pretense run continueContinueOPENAI_BASE_URLyes — agent
pretense run gooseGooseOPENAI_BASE_URLyes — agent
pretense run llmllm CLIOPENAI_BASE_URLprompt in, text out

On your machine

CommandModel or runnerReads your files?
pretense run llama3.2Llamachat only
pretense run mistralMistralchat only
pretense run gemma3Gemmachat only
pretense run qwen2.5-coderQwenchat only
pretense run deepseek-r1DeepSeekchat only
pretense run ollamaOllamachat only
pretense run lmstudioLM Studiochat only
pretense run vllmvLLMchat only

Pull the model locally first.

The local path is a chat, and an agent reads your repository

Every row in the second table reaches the same built-in chat: it takes a prompt and returns text. Ask it to open a file and it will answer from the prompt alone, because it has no filesystem to reach for. That is worth knowing before you ask one to summarise a repository.

Reading files is a property of the client, and it is available with local weights too. Point an agent at a local model and you get both:

bash
unset ANTHROPIC_API_KEY
OPENAI_API_KEY=local pretense run aider -- \
  --model openai/qwen2.5-coder:latest --read src/api.ts

--model takes a flag. Passed bare, aider reads the value as a filename and creates an empty file of that name. And clear ANTHROPIC_API_KEY first: aider prefers its default Anthropic model whenever that key is present.

Which client, which model

The two questions vary independently. What the client can do is one axis; where the model runs is the other.

ClientHosted modelModel on your machine
Agent — reads your filespretense run claude · aider · codex · geminipretense run aider --model openai/qwen2.5-coder
Chat — prompt in, text outpretense run llmpretense run qwen2.5-coder · ollama
Not in the list?

Name the provider: --provider openai. Takes anthropic, openai or google. An unknown name falls back to anthropic.

What just happened

Command 3 authenticated you and installed your Enterprise licence. No file to carry, no import step. A disconnected machine imports one instead: Air-gap.

terminal
Authenticated successfully.  Key: prt****...98b5
Enterprise licence installed.  ~/.pretense/licence.jwt

scan and review listed what Pretense protects here, before anything leaves. Both exit 1 on a finding, so either can gate a commit.

What gets read

Every file the scanner can read as text, whatever its extension. Binaries and files over 5 MB are skipped, and the count of what was skipped is printed rather than hidden. If nothing could be read at all, scan exits 3 — so silence never reads as clean. Details in the CLI reference.

Command 4 started the proxy, pointed the tool at it, and stopped it when you quit.

terminal
✓ Started Pretense proxy on port 9340.
→ Routing claude through the proxy (ANTHROPIC_BASE_URL=http://localhost:9340).
You never start the proxy yourself

run starts one and stops the one it started. The default port is 9339; it was busy on the machine that produced this output, so Pretense moved up to 9340 and pointed the tool there. You never have to know which — run sets the base URL for you. Setting it yourself is Configuration.

Next

No Node on the machine? Install it this way instead.

bash
curl -fsSL https://www.pretense.ai/install.sh | sh

To move to a newer version, run the install command again.