Install
A single static binary with no runtime dependencies. Pick whichever of these you trust most.
One line
Detects your platform, downloads the matching release, installs the binary and both aliases:
curl -sL https://github.com/thevibeworks/deepseek-cli/raw/main/install.sh | sh
Installs to /usr/local/bin; set
PREFIX=$HOME/.local to install without sudo. If you
would rather read it first — and you should, for anything piped to a
shell — it is forty lines.
Release binaries
From Releases, for macOS, Linux and Windows on both amd64 and arm64:
# macOS (Apple Silicon)
curl -sL https://github.com/thevibeworks/deepseek-cli/releases/latest/download/deepseek_darwin_arm64.tar.gz | tar xz
sudo mv deepseek /usr/local/bin/
# Linux (x86_64)
curl -sL https://github.com/thevibeworks/deepseek-cli/releases/latest/download/deepseek_linux_amd64.tar.gz | tar xz
sudo mv deepseek /usr/local/bin/
Every release ships a checksums.txt.
Go
go install github.com/thevibeworks/deepseek-cli/cmd/deepseek@latest
Requires Go 1.25 or later. The binary lands in $(go env GOPATH)/bin.
ds and dscli
deepseek is eight characters to type many times a day. The
binary answers to ds and dscli as well.
These are symlinks to the same binary, not shell aliases,
so they work in scripts, cron, Makefiles and anywhere
else a shell alias would not exist. The binary notices which name invoked it,
so ds --help says ds.
ds chat "why is the sky blue"
ds usage --since 7d
The installer and make install create them. By hand:
sudo ln -sf deepseek /usr/local/bin/ds
sudo ln -sf deepseek /usr/local/bin/dscli
The API key
Get one from platform.deepseek.com, then either put it in the environment:
export DEEPSEEK_API_KEY=sk-...
or, to keep it out of the environment entirely, in a file:
mkdir -p ~/.config/deepseek && chmod 700 ~/.config/deepseek
printf 'sk-...' > ~/.config/deepseek/api_key
chmod 600 ~/.config/deepseek/api_key
Precedence is --api-key, then $DEEPSEEK_API_KEY,
then the file.
Configuration
| Variable | Purpose | Default |
|---|---|---|
DEEPSEEK_API_KEY | API key | — |
DEEPSEEK_BASE_URL | Override the base URL for proxies and gateways | https://api.deepseek.com |
DEEPSEEK_CONFIG_DIR | Where the key file lives | ~/.config/deepseek |
DEEPSEEK_STATE_DIR | Usage ledger and saved conversations | ~/.local/state/deepseek |
Both directories respect XDG_CONFIG_HOME and
XDG_STATE_HOME.
Setting --base-url sends your API key and your prompts to that
host instead of DeepSeek. Only point it at a gateway you control.
Verify
ds check
Calls all six endpoints once with a one-token cap — the whole check costs a fraction of a cent. Exit code 2 means the key is missing or rejected, 3 means the balance is exhausted.
Shell completion
ds completion zsh > "${fpath[1]}/_deepseek" # zsh
ds completion bash > /etc/bash_completion.d/deepseek
ds completion fish > ~/.config/fish/completions/deepseek.fish