First-run problems
Install failures, PATH problems, and the first-call mistakes that produce a 401 or a 404.
Everything that commonly goes wrong between "I have an account" and "my first call worked." Each section is a symptom, its cause, and a recovery you can paste.
Two things this page does not cover:
- Provider and credential errors —
503 provider_unavailable,no_upstream_credential,upstream_provider_header_invalid,404 embeddings_not_supported_for_provider. Those are diagnosed in provider errors. - Blocked tool calls. A stopped call is not an error — it returns
200with the call withheld and explained. See what you get back.
pip install sentisec-sdk fails with externally-managed-environment
Python distributions that ship the marker defined in PEP 668 — Homebrew Python on macOS, and the system Python on Debian, Ubuntu, and Fedora — refuse system-wide installs that the OS package manager does not own:
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try brew install xyz...This is pip honouring the marker, not a Sentisec fault. The recovery is
pipx, which builds a per-package virtual
environment and puts sentisec on your PATH:
brew install pipx
pipx ensurepath
pipx install sentisec-sdk
sentisec --versionsudo apt update && sudo apt install -y pipx
pipx ensurepath
pipx install sentisec-sdk
sentisec --versionIf you genuinely need pip — for example the SDK is a dependency of a larger Python app — create the virtual environment yourself first:
python3 -m venv ~/.sentisec-venv
source ~/.sentisec-venv/bin/activate
pip install sentisec-sdkThe installer reports an unsupported Python version
Releases are built per Python minor version. Supported: 3.11, 3.12,
3.13, and 3.14. Outside that range the installer stops. Its error identifies the detected
minor version and interpreter path, lists the supported versions, and
suggests installing a supported Python or setting SENTISEC_PYTHON.
The exact path and version depend on your machine.
Install a supported version alongside your existing Python and re-run:
brew install [email protected]
curl -fsSL https://get.sentisec.ch | bash
sentisec --versionsudo apt update && sudo apt install -y python3.12
curl -fsSL https://get.sentisec.ch | bash
sentisec --versionThe installer uses python3 resolved from your PATH; it does not search
for the highest installed python3.X. Set SENTISEC_PYTHON to an
executable interpreter path to select the release artifact for that
interpreter. The installed zipapp still launches with python3, so
ensure the python3 on your runtime PATH has the matching supported minor
version, or use the isolated pipx install path.
npm install -g @sentisec/sdk succeeded but sentisec is not found
Three causes, in order of frequency.
The install was local, not global
Without -g, npm installs into ./node_modules/ and the binary lands at
./node_modules/.bin/sentisec, which is not on your shell's PATH:
npm install -g @sentisec/sdk
sentisec --versionIf you are scripting the CLI inside a Node project, prefer
npx sentisec ... from within that project — npm picks up the local
entry without a global install.
The npm global bin directory is not on your PATH
Node managed by nvm, volta, or asdf puts global binaries somewhere
your shell may not search. Find the directory:
npm prefix -g
# /Users/you/.nvm/versions/node/v22.16.0Global binaries live in the bin/ beneath it. Add it to your shell
profile — for zsh:
echo 'export PATH="$(npm prefix -g)/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
sentisec --versionFor bash use ~/.bashrc; for fish,
set -Ux fish_user_paths (npm prefix -g)/bin $fish_user_paths.
The postinstall download failed
@sentisec/sdk fetches the native CLI for your platform after
installation. If that fetch fails — a network blip, or a strict corporate
proxy — npm still reports success but sentisec was never written. There
will be a warning line in the npm output.
npm install -g @sentisec/sdk --force
# or fall back to the one-line installer
curl -fsSL https://get.sentisec.ch | bash
sentisec --versionThe one-line installer ran but sentisec is not found
Your current shell has not reloaded its PATH
The installer appends a PATH line to your shell profile (~/.zshrc,
~/.bashrc, ~/.config/fish/config.fish). A shell that was already open
when you ran it has not read that line yet:
source ~/.zshrc # zsh
source ~/.bashrc # bash
sentisec --versionOpening a new terminal tab has the same effect.
The download was interrupted
The installer is idempotent — re-run it. A second run replaces a partial download with a complete one and re-checks it against the release's SHA-256 manifest before unpacking:
curl -fsSL https://get.sentisec.ch | bash
sentisec --versionBehind a corporate proxy
The installer passes HTTPS_PROXY, HTTP_PROXY, and NO_PROXY through
to curl unchanged. Export them before running it. If the download still
fails, pipx install sentisec-sdk uses your existing pip proxy
configuration instead.
My first call returns 401
Sentisec could not authenticate the key you sent. In order of frequency:
- You sent your provider key instead of your Sentisec key. The value
in
Authorization: Bearerorx-api-keymust start withsk_sentisec_. Your Anthropic or OpenAI key belongs in your workspace under Settings → Providers, in Provider keys, not in the request. - The key is from a different workspace. Keys are per workspace; one minted in workspace A cannot authenticate against workspace B. Check the workspace id in your URL matches the workspace you minted in.
- The key was revoked, or you pasted only the visible prefix. The full key is shown once, at mint time — if you no longer have it, mint a new one and revoke the old.
- Whitespace. A trailing newline from a copy-paste or a
.envfile is a surprisingly common cause.
Repeated failures from one address are rate-limited, so a script
retrying a bad key will start seeing 429 — fix the key rather than
backing off.
A 401 that names no_upstream_credential is a different problem: your
key is fine, but the workspace has no credential for the provider you
are calling. See
provider errors.
My first call returns 404
Almost always the /v1 segment, which belongs on OpenAI-shaped URLs and
not on Anthropic-shaped ones — the Anthropic SDK appends its own.
https://api.sentisec.ch/ws/<your-workspace-id> # Anthropic-shaped
https://api.sentisec.ch/ws/<your-workspace-id>/v1 # OpenAI-shapedA doubled /v1/v1/ in the final path means you set the Anthropic base
URL with the suffix already on it. If you are building the path by hand
rather than through an SDK, the full route is
/ws/<your-workspace-id>/v1/messages or
/ws/<your-workspace-id>/v1/chat/completions.
Calls succeed but nothing appears in the dashboard
Check the workspace id in your base URL against the one shown next to
your API key. A call that authenticates but shows up in no session list
is usually pointed at a different workspace than the one you are looking
at — or at no workspace at all, if the /ws/<id> segment is missing.
See your base URL.
Uninstall
Roll back whichever way you installed.
pipx uninstall sentisec-sdkRemoves both the isolated environment and the sentisec shim.
npm uninstall -g @sentisec/sdkThe installer put the binary at ~/.local/bin/sentisec (or
/usr/local/bin/sentisec if you ran it as root) and appended a PATH
line to your shell profile. Remove both:
rm -f ~/.local/bin/sentisec
# Then open ~/.zshrc (or ~/.bashrc) and delete the two lines:
# # Added by sentisec install.sh
# export PATH="$HOME/.local/bin:$PATH"If you had set up subscription mode, run
sentisec edge uninstall before removing the CLI — it unwires the
local background service and restores your agent's own configuration.
Re-open your shell. sentisec --version returning command not found is
how you know the uninstall is complete. To also remove your paired
credentials:
rm -rf ~/.sentisecStill stuck
Provider errors
503, no_upstream_credential, and the two provider 404s.
Authentication
Key format, pairing, and pinning an upstream provider.
Talk to us
None of the above matched.
Updates / contradictions
2026-09-09 — Removed an illustrative error that was presented as literal installer output and corrected Python selection: PATH supplies python3; there is no highest-version scan.