Providers and credentials
Salaam uses the provider registry shipped with its pinned Pi runtime. The default is offline. List provider IDs, authentication methods, and chat models without making a network request:
sal providers listsal models list openaisal models list googleThe registry contains 42 providers. All 41 providers with chat models can run interactive sessions. Typesafe is classifier-only and has no chat route. Image and classifier operations are outside the session chat interface. A catalog entry does not establish availability, pricing, or access for your account.
| Family | Provider IDs |
|---|---|
| Anthropic | anthropic |
| OpenAI and Azure | openai, openai-codex, azure |
| Google and AWS | google, google-vertex, amazon-bedrock |
| Gateways | openrouter, vercel-ai-gateway, cloudflare-ai-gateway, cloudflare-workers-ai, github-copilot, radius |
| Hosted inference | ant-ling, baseten, cerebras, deepseek, fireworks, groq, huggingface, meta, mistral, nvidia, together, xai |
| Regional and coding plans | kimi-coding, minimax, minimax-cn, moonshotai, moonshotai-cn, opencode, opencode-go, qwen-token-plan, qwen-token-plan-cn, qwen-token-plan-individual, xiaomi, xiaomi-token-plan-ams, xiaomi-token-plan-cn, xiaomi-token-plan-sgp, zai, zai-coding-cn |
| Classifier only | typesafe |
Choose a model in the terminal
Section titled “Choose a model in the terminal”Use /model in sal to choose a provider and a model from the pinned catalog, then create a local session. The selection is saved with that session. Changing it creates a new session and leaves existing sessions on their original routes; multiple local sessions can use different providers on one daemon. /status shows the current route. Credentials remain managed by sal auth.
For a scriptable local session:
sal session create --local --cwd "$PWD" --provider anthropic --model claude-sonnet-5-5The service must already be running. Managed sessions without --local retain the service-configured route.
API keys
Section titled “API keys”Use the hidden prompt to keep a key out of shell history and process arguments:
sal auth set openaisal service start --provider openai --model MODEL_ID --state "$HOME/.local/state/salaam-openai"sal session create --cwd "$PWD" --state "$HOME/.local/state/salaam-openai"sal attach SESSION_ID --state "$HOME/.local/state/salaam-openai"Choose MODEL_ID from sal models list openai. Replace SESSION_ID with the ID
returned by creation. Provider prompts may be billable. Readiness makes no model
request and does not validate your account’s billing or model access.
For Anthropic, sal auth set anthropic remains compatible. Its default model is
claude-sonnet-5-5; other providers require an explicit --model. All chat models
in the pinned catalog are selectable. --max-output-tokens N accepts 128–8,192,
subject to the model’s smaller limit. The default is 4,096 or the model’s smaller
maximum. Requests use low reasoning when at least 2,048 output tokens fit; smaller
limits disable optional reasoning so a thinking budget cannot exceed the ceiling. --workspace-id is specific to Anthropic.
Credentials are plaintext files protected by OS permissions under
~/.config/salaam/credentials, with directory mode 700 and file mode 600. New
credentials use PROVIDER.json; existing credentials/anthropic files still
work. ANTHROPIC_API_KEY takes precedence over stored Anthropic credentials.
Other API-key providers follow Pi’s stored-key-first resolution and provider
specific environment variables, such as OPENAI_API_KEY, GEMINI_API_KEY, and
OPENROUTER_API_KEY. Salaam does not load .env files or Pi’s credential store.
OAuth and cloud setup
Section titled “OAuth and cloud setup”Provider-owned setup prompts collect additional configuration and support browser or device-code authentication when Pi supplies it:
sal auth login cloudflare-ai-gatewaysal auth login amazon-bedrocksal auth login google-vertexsal auth login openai --oauthsal auth login github-copilot --oauthsal auth statussal auth logout openaiOAuth is available for Anthropic, OpenAI, legacy OpenAI Codex, GitHub Copilot,
Kimi Coding, Meta, OpenRouter, Radius, and xAI. sal providers list reports the
methods actually present in the pinned runtime. OAuth refresh uses private,
process-shared locks so concurrent workers and CLI commands cannot reuse a
rotating refresh token. A failed refresh preserves the prior credential.
Azure needs AZURE_OPENAI_RESOURCE_NAME or AZURE_OPENAI_BASE_URL, in addition
to its key. AZURE_OPENAI_DEPLOYMENT_NAME_MAP can map catalog model IDs to your
deployment names. Cloudflare setup stores account and gateway identifiers. Bedrock
supports a bearer token, configured AWS profile, or Pi’s detected AWS credential
chain; set AWS_PROFILE=default to select an existing default profile. Vertex
setup supports a Cloud API key, ADC, or a service-account file with project and
location. Cloud credential files stay on the execution host.
ChatGPT subscription routes have no provider-enforced output-token cap.
Salaam permits them for interactive sessions and displays the limitation in service
health, startup output, and the TUI. Omit --max-output-tokens on these routes; supplying it reports an error.
For durable tasks, explicitly set limits.token_units to null in the plan and
omit output_token_bound (or set it to null). This disables the aggregate token
budget and its default per-request output bound. A numeric output bound is still
an explicit cap and is rejected on these routes. Omitted task limits retain the
capped defaults, so Salaam never silently removes a requested token budget.
Scheduled runs preserve the plan’s choice, and children share its remaining request
allowance. Request counts, runtime, concurrency, verification limits, cancellation,
and approval controls remain active. The same capability check applies to any
catalog route that cannot enforce an output cap. A token or request budget is
never a currency spending cap. See task limits.
Routing and recovery
Section titled “Routing and recovery”Provider, model, output setting, workspace ID, and resolved non-secret endpoint configuration bind durably to each session. Restart with the same configuration to resume it. Local sessions select their saved route automatically; managed sessions require the matching service configuration. Create a new session to change providers or models. Changes to Azure deployments, cloud project/region, gateway IDs, or OAuth endpoints cannot silently move an existing session to another route.
Workers obtain only the selected provider’s resolved authentication over the private bridge before a request. Keys and refresh tokens are absent from worker configuration JSON, arguments, journal events, and operator responses. Global Pi settings and unrelated credentials remain excluded. Updated credentials are resolved for subsequent requests; change credentials at an idle work boundary. Switching between capped and uncapped authentication requires a new local session, or a service restart for service-routed sessions, so the visible capability warning cannot become stale. Logout removes stored credentials; external environment credentials remain active.
Salaam validates the serialized model, output controls, tool inventory and actual task-context frame before durable request admission and network dispatch. SDK retries, WebSocket fallback, provider-side tools, automatic model fallback, and unadmitted catalog fetches are disabled. Interrupted requests retain unknown usage and require explicit continuation. Local fixtures verify integration behavior; they do not establish live access to every provider or reproduce a provider’s billing system.
This interface exposes Pi’s built-in chat registry. Arbitrary models.json
providers, custom proxy URLs, and local OpenAI-compatible servers are not imported
implicitly. Coding requires separate setup. See the
service reference for admission and failure handling.