Installing & Authenticating Agent Providers¶
SASE normally orchestrates an existing coding-agent CLI; the exception is the bundled
fakey testing provider. You need at least one supported real provider CLI
installed and authenticated for production work. This page collects the install
command, the authentication command, and a link to each vendor's canonical documentation
for every provider SASE currently supports. Claude Code, Codex CLI, Qwen Code, and Grok
Build install via npm (so they need node and npm on your PATH); OpenCode, the
Antigravity CLI, and Muse Code use their own install methods, shown in their sections
below. Muse Code is the one provider SASE can install for you, with
sase agent-cli install muse.
sase doctor — specifically sase doctor -C llm.auth -v — is the authoritative
readiness check. It prints the same per-provider install and auth hints documented here,
so if this page and sase doctor ever disagree, trust the doctor output and open an
issue. Vendor docs may list additional installer and account options; the snippets below
intentionally match SASE's doctor hints.
Installed provider CLIs are also launchable interactively with
sase tmux-agent (or t in Launch Control). Those windows are
unmanaged agent CLIs, not SASE agents — they do not appear in sase agent list.
If Launch Control or sase doctor reports a provider as disabled, that is routing
policy, not a missing install. A hard disable blocks SASE automatic routing and
explicit %model requests for that provider until expiry or clearing; a soft
disable only steers pools away from it. Usage-limit detection can hard-disable Claude
for a week and Grok Build for 48 hours automatically. Interactive tmux Agent windows
still launch a hard-disabled CLI. See
Provider routing and
Usage-Limit Auto-Disable.
Claude Code¶
Anthropic's Claude Code CLI (claude). This is SASE's highest-priority autodetect
provider.
Install¶
npm install -g @anthropic-ai/claude-code
Authenticate¶
SASE doctor hint: run claude and complete the login flow.
Alternatively, Claude Code honors API-key / token variables such as ANTHROPIC_API_KEY,
ANTHROPIC_AUTH_TOKEN, and CLAUDE_CODE_OAUTH_TOKEN — see the canonical docs for the
full, current list.
Canonical docs: https://code.claude.com/docs
Codex CLI¶
OpenAI's Codex CLI (codex).
Install¶
npm install -g @openai/codex
Authenticate¶
SASE doctor hint: run codex login.
Alternatively, Codex honors OPENAI_API_KEY — see the canonical docs for details.
Canonical docs: https://developers.openai.com/codex/cli
OpenCode¶
The open-source OpenCode CLI (opencode).
Install¶
install from https://opencode.ai/docs
Authenticate¶
SASE doctor hint: run opencode auth login.
OpenCode can also read provider API keys from the environment (for example
ANTHROPIC_API_KEY, OPENAI_API_KEY, OPENROUTER_API_KEY, ZHIPU_API_KEY, and other
*_API_KEY variables) — its canonical docs list the current set.
Canonical docs: https://opencode.ai/docs
Qwen Code¶
Alibaba's Qwen Code CLI (qwen).
Install¶
npm install -g @qwen-code/qwen-code
Authenticate¶
SASE doctor hint: run qwen and complete the login flow.
Qwen Code can also use API-key access through variables such as DASHSCOPE_API_KEY,
QWEN_API_KEY, or OPENROUTER_API_KEY — see the canonical docs for the current list.
Canonical docs: https://github.com/QwenLM/qwen-code
Muse Code¶
Meta's Muse Code CLI (muse). Muse is explicit-only: SASE never auto-detects it,
because muse is a generic executable name. Select it with
llm_provider.provider: muse, %model:muse/<model>, or SASE_MUSE_PATH.
Install¶
sase agent-cli install muse
SASE downloads https://dev.meta.ai/install.sh itself over HTTPS, shows the URL, the
SHA-256 digest of exactly what it downloaded, the exact shell-free command, and the
target directory ($MUSE_INSTALL_DIR, default ~/.local/bin), and only then runs it
after your confirmation. It passes MUSE_UPGRADE_MODE=1, which suppresses the
installer's export PATH=... appends — SASE never edits your shell startup files.
If the install directory is not on your PATH, SASE prints the exact export line to add
yourself. Use -n/--dry-run to see the whole plan, digest included, without executing
anything.
Authenticate¶
SASE doctor hint: run muse login, or set META_API_KEY.
Update¶
Muse is self-updating through its own launcher, so sase agent-cli update muse runs
MUSE_SYNC_UPDATE=1 muse --version, which updates the launcher and the binary and then
reports the resulting version. Latest versions come from Muse's channel endpoint rather
than npm, and versions compare exactly rather than by PEP 440 — Muse's release ids
(0.1.0-R708.1) are not PEP 440 versions, and a semver comparison would report "no
known updates" forever.
SASE always launches agent runs with MUSE_NO_AUTO_UPDATE=1 so Muse cannot swap its own
binary mid-run; update it through sase agent-cli instead.
Canonical docs: https://developer.meta.com/ai/resources/blog/build-with-muse-code/
Grok Build¶
xAI's Grok Build CLI (grok). SASE never auto-detects it, because the executable name
grok collides with grok-dev (a stale community CLI that also uses ~/.grok/) and
with Homebrew's deprecated, unrelated grok regex tool. Select it explicitly with
llm_provider.provider: grok, %model:grok/grok-4.6, or SASE_GROK_PATH, or reach it
automatically whenever the grok CLI is installed: through the shipped
@xsmall/@small/@medium load-balanced pools, or as the last candidate in
@xlarge's ordered fallback (behind Claude and Codex). If a grok on PATH does not
identify itself as Grok Build, sase doctor reports it as a distinct, actionable
finding rather than silently launching the wrong binary.
Install¶
npm install -g @xai-official/grok
@xai-official/grok is an npm trampoline: npm install -g places a shim on PATH, but
the real Grok Build binary it downloads on first run lives under ~/.grok/bin/, not
node_modules.
Authenticate¶
SASE doctor hint: run grok login (or grok login --device-code on a headless host),
or set XAI_API_KEY.
Update¶
sase agent-cli update grok runs Grok Build's own self-update (grok update).
SASE always launches agent runs with --no-auto-update so Grok cannot swap its own
binary mid-run; update it through sase agent-cli instead.
Execution posture¶
SASE runs Grok with --permission-mode bypassPermissions and no sandbox profile — the
same posture SASE already uses for Codex and OpenCode. This is powerful local execution:
Grok can read, write, and run shell commands anywhere the SASE process can, without
per-action approval prompts.
Effort ceiling¶
The grok-4.6 model — the only model in the authenticated catalog — accepts only low,
medium, high, and xhigh for --effort. %effort:none, %effort:minimal, and
%effort:max raise a clean SASE error rather than a Grok process crash. The shipped
Grok @xlarge candidate is grok/grok-4.6@xhigh, so a Grok-selected xlarge launch
passes --effort xhigh. Codex's @xlarge candidate remains @max; that alias-borne
effort is best-effort, not explicit, so when the fallback selects Codex, max is logged
and skipped and the CLI runs at its own default effort instead of erroring.
Usage is best-effort¶
Grok's streaming-messages-json output is a projection of its own internal usage
ledger. Subagent turns can set an internal "usage incomplete" flag that the projection
drops silently, and an interrupted turn can under-count. Text and tool records are
unaffected, and cost reporting (total_cost_usd) does work on the OAuth login path.
Instruction double-load¶
Grok reads AGENTS.md natively, so SASE generates no GROK.md shim. Grok also
recognizes SASE's generated CLAUDE.md as project instructions and loads both files —
duplicating the same content. [compat.claude] agents = false does not suppress this.
SASE accepts the duplication for now rather than suppressing CLAUDE.md generation
under a Grok provider, which would break any human running claude in the same tree.
Privacy¶
Prompts, workspace context, and tool results are sent to xAI. Non-enterprise Grok Build
sessions are not zero-data-retention by default; review Grok Build's own privacy and
telemetry controls (including /privacy, [telemetry] settings, and Zero Data
Retention for enterprise accounts) before pointing SASE at Grok Build on a workspace
with sensitive contents. See https://docs.x.ai/build/settings for the current
controls. SASE does not set or manage any of these settings on your behalf.
Canonical docs: https://docs.x.ai/build/overview
Antigravity CLI¶
Google's Antigravity CLI (agy). There is no separate "Gemini CLI" provider in SASE;
GEMINI.md exists only because Antigravity reads it for workspace context.
Install¶
curl -fsSL https://antigravity.google/cli/install.sh | bash
Authenticate¶
SASE doctor hint: run agy and complete the login/trust onboarding.
Alternatively, Antigravity honors GEMINI_API_KEY and GOOGLE_API_KEY — see the
canonical docs for details.
Canonical docs: https://antigravity.google/docs/cli-install
Fakey Testing Provider¶
The deterministic fakey CLI is bundled with SASE for launch, failure, retry, and UI
testing. It requires no separate installation or authentication and is deliberately
placed last in provider autodetection. It is also hidden from the ACE model picker and
%model completion menu, so select it explicitly with a model such as
%model:fakey-large or llm_provider.provider: fakey; do not use it for production
coding work.
Because Fakey is bundled and internal, it is also absent from sase agent-cli
inventories and the Admin Center's Updates → Agent CLIs list. That management
visibility is separate from routing and diagnostics: explicit fakey selection, the
fakey console script, provider autodetection metadata, and sase doctor checks remain
supported.
For demos and hermetic end-to-end tests, SASE_LLM_EXEC_PROVIDER=fakey dispatches
through fakey while preserving the requested provider/model in display metadata. Run
artifacts record the dispatched provider as exec_llm_provider.
See the fakey reference for scenarios and environment controls.
Verify¶
After installing and authenticating at least one provider, confirm SASE can find and use it:
sase doctor -C llm.auth -v
Expect the provider to report ready. sase doctor is read-only and does not call
provider APIs, so it verifies that the CLI is on your PATH and that local auth
evidence exists — it cannot confirm your token is still valid. If the check reports a
missing executable or an authentication gap, re-run the relevant install/auth step above
and check again.
If a provider CLI lives at a non-standard path, point SASE at it with the provider's
SASE_<PROVIDER>_PATH override environment variable — SASE_CLAUDE_PATH,
SASE_CODEX_PATH, SASE_OPENCODE_PATH, SASE_QWEN_PATH, SASE_AGY_PATH,
SASE_MUSE_PATH, SASE_GROK_PATH, or SASE_FAKEY_PATH. For deeper integration details
(model mapping, per-provider environment variables, retry/fallback behavior), see the
LLM provider reference.
Inventory and Updates¶
sase agent-cli is the inventory, install, and update surface for independently
manageable provider CLIs on this machine. Internal or bundled providers can opt out when
they are not separately installed or updated. A bare sase agent-cli means
sase agent-cli list.
sase agent-cli list # manageable provider CLIs, versions, and install methods
sase agent-cli list -v # add resolved executable paths, docs URLs, and probe errors
sase agent-cli update codex # update one CLI
sase agent-cli update -a -n # preview every planned command without running anything
sase agent-cli install muse # install a CLI from the install script its provider declares
sase agent-cli install muse -n # show the URL, digest, command, and target; execute nothing
list shows each CLI's resolved binary, installed version, latest known version,
install method, and an ↑ marker when an update is available. A CLI that is not
installed shows its install hint instead. The footer summarizes how many of the
supported CLIs are installed and whether any updates are known. Latest versions come
from the npm registry — or, for a channel-versioned CLI such as Muse Code, from the
provider-declared JSON endpoint — and are cached: -o/--offline uses only the cache and
never contacts the network, while -r/--refresh bypasses the cache. -j/--json emits a
stable machine-readable envelope. Most CLIs compare versions with PEP 440 semantics; a
provider whose release ids are not PEP 440 (Muse Code) declares exact comparison
instead, so "different from what I have" is precisely "there is an update".
update takes CLI names (provider, binary, or display name) or -a/--all for every
installed CLI; a bare sase agent-cli update with neither is a usage error. Commands
run sequentially and without a shell. -n/--dry-run prints the exact command or skip
reason for each CLI and changes nothing.
SASE only automates updates it can identify safely, and it never uses sudo and never
guesses an update command:
| Install method | Behavior |
|---|---|
| npm, writable global root | Runs npm install -g <package>@latest. |
| npm, non-writable global root | Skipped as manual, with the exact command to run under an npm setup owned by your user. |
| Self-managed with a self-update | Runs the provider's own declared update command, with any env overlay it declares. |
| Homebrew | Skipped as manual, with the brew upgrade <package> command to run. |
| Bundled visible provider | Skipped; update it with the package that ships that provider. |
| Not installed, or method unknown | Skipped, with the install hint or a note that SASE will not guess an update command. |
Anything already at its latest known version is reported as an explicit
already up to date skip rather than being reinstalled. Skips carry the provider's
canonical docs URL where one is known.
install takes CLI names and installs each from the install script its provider
declares. SASE fetches the script itself over HTTPS into a 0o600 temp file with a
timeout and a size cap, refuses non-HTTPS URLs and redirects off HTTPS, computes its
SHA-256, and shows the URL, digest, byte count, env overlay, target directory, and the
exact bash <tmpfile> command before running it — never curl | bash, and never
through a shell. Running a remote script always needs confirmation: pass -y/--yes or
answer the interactive prompt. -n/--dry-run prints the plan, digest included, and
executes nothing. An already-installed CLI is skipped unless you pass -f/--force, and
a CLI whose provider declares no install script is skipped with the manual command to
run instead. After a successful install SASE re-probes the version, reports where the
binary landed and whether that directory is on PATH, and prints the exact export line
to add when it is not. SASE never edits your shell startup files.
Runs from sase agent-cli install and sase agent-cli update are journaled with the
same bounded history used by ACE and ,U at ~/.sase/logs/agent_cli_updates.jsonl. Set
SASE_AGENT_CLI_UPDATE_JOURNAL_MAX_BYTES to override that file's maximum size; runs
where no command reaches a terminal outcome are not recorded.
This command manages the provider CLIs only. Use sase update to upgrade SASE
itself and its plugins.
The same inventory is available inside ACE on the SASE Admin Center's Updates → Agent CLIs sub-tab, which adds marked multi-select updates and confirmation previews. See the Updates tab for that surface.