Skill Tracer
Skills › Scientific Agent Skills › pi-agent › providers.md

providers.md

130 lines · skills/pi-agent/references/providers.md at 5f2bc03

Open on GitHub
1# Providers
2
3Source: https://pi.dev/docs/latest/providers
4
5Reviewed against Pi 0.99.2 and the package versions listed in `../SKILL.md` on 2026-09-30.
6
7Pi supports subscription providers via OAuth and API-key providers via environment variables or `~/.pi/agent/auth.json`. Built-in catalogs ship with Pi; configured providers may refresh newer catalogs and cache them in `~/.pi/agent/models-store.json` for offline use.
8

Providers

Source: https://pi.dev/docs/latest/providers

Reviewed against Pi 0.99.2 and the package versions listed in ../SKILL.md on 2026-09-30.

Pi supports subscription providers via OAuth and API-key providers via environment variables or ~/.pi/agent/auth.json. Built-in catalogs ship with Pi; configured providers may refresh newer catalogs and cache them in ~/.pi/agent/models-store.json for offline use.

Raw lines 1 to 8
9## Subscription Providers
11Run `/login` to choose the provider and one of its supported methods. Pi 0.99 adds Sign in with ChatGPT on `openai`; `openai-codex` remains a legacy provider. Other methods include Claude, GitHub Copilot, Meta Muse, xAI, OpenRouter, and Radius. `/logout` clears credentials. Tokens live in `auth.json` and auto-refresh.
13- **OpenAI** Sign in with ChatGPT supersedes the legacy Codex login; check current account entitlements in the login flow.
14- **Claude**: use the login flow offered by the installed provider and confirm current account eligibility and billing with Anthropic; subscription entitlement is not guaranteed by a successful token exchange.
15- **GitHub Copilot**: Enter for github.com, or enter a GitHub Enterprise Server domain. "Model not supported" is fixed by enabling the model in VS Code Copilot Chat.
16- **xAI**: `/login xai` → **Use a subscription**; `XAI_API_KEY` remains available under **Use an API key**.
17- **OpenRouter**: `/login openrouter` → **Sign in with OpenRouter** runs a PKCE flow that mints a user-controlled API key billed from OpenRouter credits (it does not expire automatically). On remote/headless machines (e.g. over SSH) the browser cannot reach the loopback callback — paste the final redirect URL or the authorization code into the login prompt instead.
18- **Radius**: a dynamic `pi-messages` gateway. `/login radius` stores OAuth tokens; the catalog refreshes independently into `models-store.json`. Custom Radius gateways can be declared in `models.json` with `"oauth": "radius"` plus a gateway `baseUrl`.

Subscription Providers

Run /login to choose the provider and one of its supported methods. Pi 0.99 adds Sign in with ChatGPT on openai; openai-codex remains a legacy provider. Other methods include Claude, GitHub Copilot, Meta Muse, xAI, OpenRouter, and Radius. /logout clears credentials. Tokens live in auth.json and auto-refresh.

  • OpenAI Sign in with ChatGPT supersedes the legacy Codex login; check current account entitlements in the login flow.
  • Claude: use the login flow offered by the installed provider and confirm current account eligibility and billing with Anthropic; subscription entitlement is not guaranteed by a successful token exchange.
  • GitHub Copilot: Enter for github.com, or enter a GitHub Enterprise Server domain. "Model not supported" is fixed by enabling the model in VS Code Copilot Chat.
  • xAI: /login xai → Use a subscription; XAI_API_KEY remains available under Use an API key.
  • OpenRouter: /login openrouter → Sign in with OpenRouter runs a PKCE flow that mints a user-controlled API key billed from OpenRouter credits (it does not expire automatically). On remote/headless machines (e.g. over SSH) the browser cannot reach the loopback callback — paste the final redirect URL or the authorization code into the login prompt instead.
  • Radius: a dynamic pi-messages gateway. /login radius stores OAuth tokens; the catalog refreshes independently into models-store.json. Custom Radius gateways can be declared in models.json with "oauth": "radius" plus a gateway baseUrl.
Raw lines 9 to 19
20## API Key Providers
22Set an environment variable before startup, or store a key with `/login`.
24| Provider | Environment Variable | `auth.json` key |
25|---|---|---|
26| Anthropic | `ANTHROPIC_API_KEY` | `anthropic` |
27| Ant Ling | `ANT_LING_API_KEY` | `ant-ling` |
28| Azure OpenAI Responses | `AZURE_OPENAI_API_KEY` | `azure-openai-responses` |
29| OpenAI | `OPENAI_API_KEY` | `openai` |
30| DeepSeek | `DEEPSEEK_API_KEY` | `deepseek` |
31| NVIDIA NIM | `NVIDIA_API_KEY` | `nvidia` |
32| Google Gemini | `GEMINI_API_KEY` | `google` |
33| Amazon Bedrock | `AWS_BEARER_TOKEN_BEDROCK` | `amazon-bedrock` |
34| Meta | `META_API_KEY` | `meta` |
35| TypeSafe classifiers | `TYPESAFE_API_KEY` | `typesafe` |
36| Moonshot AI | `MOONSHOT_API_KEY` | `moonshotai` / `moonshotai-cn` |
37| GitHub Copilot | `COPILOT_GITHUB_TOKEN` | `github-copilot` |
38| Mistral | `MISTRAL_API_KEY` | `mistral` |
39| Groq | `GROQ_API_KEY` | `groq` |
40| Cerebras | `CEREBRAS_API_KEY` | `cerebras` |
41| Cloudflare AI Gateway | `CLOUDFLARE_API_KEY` (+ `CLOUDFLARE_ACCOUNT_ID`, `CLOUDFLARE_GATEWAY_ID`) | `cloudflare-ai-gateway` |
42| Cloudflare Workers AI | `CLOUDFLARE_API_KEY` (+ `CLOUDFLARE_ACCOUNT_ID`) | `cloudflare-workers-ai` |
43| xAI | `XAI_API_KEY` | `xai` |
44| OpenRouter | `OPENROUTER_API_KEY` | `openrouter` |
45| Vercel AI Gateway | `AI_GATEWAY_API_KEY` | `vercel-ai-gateway` |
46| ZAI Coding Plan (Global / China) | `ZAI_API_KEY` / `ZAI_CODING_CN_API_KEY` | `zai` / `zai-coding-cn` |
47| OpenCode Zen / Go | `OPENCODE_API_KEY` | `opencode` / `opencode-go` |
48| Radius | `RADIUS_API_KEY` | `radius` |
49| Hugging Face | `HF_TOKEN` | `huggingface` |
50| Fireworks | `FIREWORKS_API_KEY` | `fireworks` |
51| Together AI | `TOGETHER_API_KEY` | `together` |
52| Baseten | `BASETEN_API_KEY` | `baseten` |
53| Kimi For Coding | `KIMI_API_KEY` | `kimi-coding` |
54| MiniMax (Global / China) | `MINIMAX_API_KEY` / `MINIMAX_CN_API_KEY` | `minimax` / `minimax-cn` |
55| Qwen Token Plan (existing catalog / Individual) | `QWEN_TOKEN_PLAN_API_KEY` | `qwen-token-plan` / `qwen-token-plan-individual` |
56| Qwen Token Plan (China) | `QWEN_TOKEN_PLAN_CN_API_KEY` | `qwen-token-plan-cn` |
57| Xiaomi MiMo | `XIAOMI_API_KEY` | `xiaomi` |
58| Xiaomi MiMo Token Plan (CN / AMS / SGP) | `XIAOMI_TOKEN_PLAN_CN_API_KEY`, `XIAOMI_TOKEN_PLAN_AMS_API_KEY`, `XIAOMI_TOKEN_PLAN_SGP_API_KEY` | `xiaomi-token-plan-cn`, `-ams`, `-sgp` |
60`qwen-token-plan-individual` uses the same international endpoint and `QWEN_TOKEN_PLAN_API_KEY` as `qwen-token-plan`, but limits the picker to models documented for Individual subscriptions; the older provider keeps its broader catalog for backward compatibility. With `auth.json`, store the credential under the provider you select — the environment variable is shared by both international providers.
62Authoritative source: `packages/ai/src/providers/` and `packages/coding-agent/docs/providers.md` in `earendil-works/pi`.

API Key Providers

Set an environment variable before startup, or store a key with /login.

ProviderEnvironment Variableauth.json key
AnthropicANTHROPIC_API_KEYanthropic
Ant LingANT_LING_API_KEYant-ling
Azure OpenAI ResponsesAZURE_OPENAI_API_KEYazure-openai-responses
OpenAIOPENAI_API_KEYopenai
DeepSeekDEEPSEEK_API_KEYdeepseek
NVIDIA NIMNVIDIA_API_KEYnvidia
Google GeminiGEMINI_API_KEYgoogle
Amazon BedrockAWS_BEARER_TOKEN_BEDROCKamazon-bedrock
MetaMETA_API_KEYmeta
TypeSafe classifiersTYPESAFE_API_KEYtypesafe
Moonshot AIMOONSHOT_API_KEYmoonshotai / moonshotai-cn
GitHub CopilotCOPILOT_GITHUB_TOKENgithub-copilot
MistralMISTRAL_API_KEYmistral
GroqGROQ_API_KEYgroq
CerebrasCEREBRAS_API_KEYcerebras
Cloudflare AI GatewayCLOUDFLARE_API_KEY (+ CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_GATEWAY_ID)cloudflare-ai-gateway
Cloudflare Workers AICLOUDFLARE_API_KEY (+ CLOUDFLARE_ACCOUNT_ID)cloudflare-workers-ai
xAIXAI_API_KEYxai
OpenRouterOPENROUTER_API_KEYopenrouter
Vercel AI GatewayAI_GATEWAY_API_KEYvercel-ai-gateway
ZAI Coding Plan (Global / China)ZAI_API_KEY / ZAI_CODING_CN_API_KEYzai / zai-coding-cn
OpenCode Zen / GoOPENCODE_API_KEYopencode / opencode-go
RadiusRADIUS_API_KEYradius
Hugging FaceHF_TOKENhuggingface
FireworksFIREWORKS_API_KEYfireworks
Together AITOGETHER_API_KEYtogether
BasetenBASETEN_API_KEYbaseten
Kimi For CodingKIMI_API_KEYkimi-coding
MiniMax (Global / China)MINIMAX_API_KEY / MINIMAX_CN_API_KEYminimax / minimax-cn
Qwen Token Plan (existing catalog / Individual)QWEN_TOKEN_PLAN_API_KEYqwen-token-plan / qwen-token-plan-individual
Qwen Token Plan (China)QWEN_TOKEN_PLAN_CN_API_KEYqwen-token-plan-cn
Xiaomi MiMoXIAOMI_API_KEYxiaomi
Xiaomi MiMo Token Plan (CN / AMS / SGP)XIAOMI_TOKEN_PLAN_CN_API_KEY, XIAOMI_TOKEN_PLAN_AMS_API_KEY, XIAOMI_TOKEN_PLAN_SGP_API_KEYxiaomi-token-plan-cn, -ams, -sgp

qwen-token-plan-individual uses the same international endpoint and QWEN_TOKEN_PLAN_API_KEY as qwen-token-plan, but limits the picker to models documented for Individual subscriptions; the older provider keeps its broader catalog for backward compatibility. With auth.json, store the credential under the provider you select — the environment variable is shared by both international providers.

Authoritative source: packages/ai/src/providers/ and packages/coding-agent/docs/providers.md in earendil-works/pi.

Raw lines 20 to 63
64## Auth File
66`~/.pi/agent/auth.json` is created with `0600` permissions and takes priority over environment variables.
68```json
70 "anthropic": { "type": "api_key", "key": "sk-ant-..." },
71 "openai": { "type": "api_key", "key": "sk-..." }
73```
75An API-key credential can carry provider-scoped environment values in an `env` object. These are used before process environment variables when resolving the credential key, provider/model headers, and provider configuration such as Cloudflare account IDs, Azure settings, Vertex project/location, Bedrock settings, `PI_CACHE_RETENTION`, and `HTTP_PROXY`/`HTTPS_PROXY`:
77```json
79 "cloudflare-ai-gateway": {
80 "type": "api_key",
81 "key": "$CLOUDFLARE_API_KEY",
82 "env": {
83 "CLOUDFLARE_API_KEY": "...",
84 "CLOUDFLARE_ACCOUNT_ID": "account-id",
85 "CLOUDFLARE_GATEWAY_ID": "gateway-id"
86 }
87 }
89```
91OAuth credentials are also stored here after `/login` and managed automatically.

Auth File

~/.pi/agent/auth.json is created with 0600 permissions and takes priority over environment variables.

{
  "anthropic": { "type": "api_key", "key": "sk-ant-..." },
  "openai": { "type": "api_key", "key": "sk-..." }
}

An API-key credential can carry provider-scoped environment values in an env object. These are used before process environment variables when resolving the credential key, provider/model headers, and provider configuration such as Cloudflare account IDs, Azure settings, Vertex project/location, Bedrock settings, PI_CACHE_RETENTION, and HTTP_PROXY/HTTPS_PROXY:

{
  "cloudflare-ai-gateway": {
    "type": "api_key",
    "key": "$CLOUDFLARE_API_KEY",
    "env": {
      "CLOUDFLARE_API_KEY": "...",
      "CLOUDFLARE_ACCOUNT_ID": "account-id",
      "CLOUDFLARE_GATEWAY_ID": "gateway-id"
    }
  }
}

OAuth credentials are also stored here after /login and managed automatically.

Raw lines 64 to 92
93## Key Resolution Syntax
95```json
96{ "type": "api_key", "key": "!op read 'op://vault/item/credential'" }
97{ "type": "api_key", "key": "$MY_API_KEY" }
98{ "type": "api_key", "key": "${KEY_PREFIX}_${KEY_SUFFIX}" }
99{ "type": "api_key", "key": "$$literal-dollar" }
100{ "type": "api_key", "key": "$!literal-bang" }
101```
103A leading `!` executes the whole value as a command and uses stdout (cached for the process lifetime). `$VAR`/`${VAR}` interpolate, including inside larger literals; `$FOO_BAR` is the variable `FOO_BAR`, so use `${FOO}_BAR` when `BAR` is literal. Missing variables leave the value unresolved. Plain uppercase strings such as `MY_API_KEY` are literals.

Key Resolution Syntax

{ "type": "api_key", "key": "!op read 'op://vault/item/credential'" }
{ "type": "api_key", "key": "$MY_API_KEY" }
{ "type": "api_key", "key": "${KEY_PREFIX}_${KEY_SUFFIX}" }
{ "type": "api_key", "key": "$$literal-dollar" }
{ "type": "api_key", "key": "$!literal-bang" }

A leading ! executes the whole value as a command and uses stdout (cached for the process lifetime). $VAR/${VAR} interpolate, including inside larger literals; $FOO_BAR is the variable FOO_BAR, so use ${FOO}_BAR when BAR is literal. Missing variables leave the value unresolved. Plain uppercase strings such as MY_API_KEY are literals.

Raw lines 93 to 104
105## Cloud Providers
107**Azure OpenAI**: `AZURE_OPENAI_API_KEY` plus `AZURE_OPENAI_BASE_URL` (`*.ai.azure.com`, `*.cognitiveservices.azure.com`, or `*.openai.azure.com`; root endpoints auto-normalize to `/openai/v1`) or `AZURE_OPENAI_RESOURCE_NAME`. Optional `AZURE_OPENAI_API_VERSION` and `AZURE_OPENAI_DEPLOYMENT_NAME_MAP=gpt-4=my-gpt4,...`.
109**Amazon Bedrock**: `/login amazon-bedrock` for an API key, or ambient AWS credentials — `AWS_PROFILE`, IAM keys (`AWS_ACCESS_KEY_ID`/`AWS_SECRET_ACCESS_KEY`), or `AWS_BEARER_TOKEN_BEDROCK`. Region resolves from `AWS_REGION`, `AWS_DEFAULT_REGION`, AWS profile/SDK configuration, then the provider fallback; set it explicitly for reproducibility. ECS task roles (`AWS_CONTAINER_CREDENTIALS_*`) and IRSA (`AWS_WEB_IDENTITY_TOKEN_FILE`) are supported. Prompt caching is automatic for Claude models whose ID contains a recognizable model name; for application inference profiles set `AWS_BEDROCK_FORCE_CACHE=1`. Proxy support: `AWS_ENDPOINT_URL_BEDROCK_RUNTIME`, `AWS_BEDROCK_SKIP_AUTH=1`, `AWS_BEDROCK_FORCE_HTTP1=1`.
111**Cloudflare AI Gateway**: `CLOUDFLARE_API_KEY`, `CLOUDFLARE_ACCOUNT_ID`, `CLOUDFLARE_GATEWAY_ID`. Routes to OpenAI (`/openai`, native IDs), Anthropic (`/anthropic`, native IDs), and Workers AI (Unified API `/compat`, `workers-ai/@cf/...` IDs). The Cloudflare token is sent as `cf-aig-authorization`. Upstream auth modes: Workers AI, unified billing, stored BYOK, or inline BYOK (needs an extra upstream `Authorization` header). Prefer unified billing or stored BYOK.
113**Cloudflare Workers AI**: `CLOUDFLARE_API_KEY` + `CLOUDFLARE_ACCOUNT_ID`. Pi sets `x-session-affinity` for prefix-caching discounts.
115**Google Vertex AI**: `GOOGLE_CLOUD_API_KEY` or Application Default Credentials (`gcloud auth application-default login`) plus `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION`, or `GOOGLE_APPLICATION_CREDENTIALS` pointing at a service-account key.
117**llama.cpp**: `/login llama.cpp`, manage models with `/llama`, select with `/model` — see `references/llama-cpp.md`.

Cloud Providers

Azure OpenAI: AZURE_OPENAI_API_KEY plus AZURE_OPENAI_BASE_URL (*.ai.azure.com, *.cognitiveservices.azure.com, or *.openai.azure.com; root endpoints auto-normalize to /openai/v1) or AZURE_OPENAI_RESOURCE_NAME. Optional AZURE_OPENAI_API_VERSION and AZURE_OPENAI_DEPLOYMENT_NAME_MAP=gpt-4=my-gpt4,....

Amazon Bedrock: /login amazon-bedrock for an API key, or ambient AWS credentials — AWS_PROFILE, IAM keys (AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY), or AWS_BEARER_TOKEN_BEDROCK. Region resolves from AWS_REGION, AWS_DEFAULT_REGION, AWS profile/SDK configuration, then the provider fallback; set it explicitly for reproducibility. ECS task roles (AWS_CONTAINER_CREDENTIALS_*) and IRSA (AWS_WEB_IDENTITY_TOKEN_FILE) are supported. Prompt caching is automatic for Claude models whose ID contains a recognizable model name; for application inference profiles set AWS_BEDROCK_FORCE_CACHE=1. Proxy support: AWS_ENDPOINT_URL_BEDROCK_RUNTIME, AWS_BEDROCK_SKIP_AUTH=1, AWS_BEDROCK_FORCE_HTTP1=1.

Cloudflare AI Gateway: CLOUDFLARE_API_KEY, CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_GATEWAY_ID. Routes to OpenAI (/openai, native IDs), Anthropic (/anthropic, native IDs), and Workers AI (Unified API /compat, workers-ai/@cf/... IDs). The Cloudflare token is sent as cf-aig-authorization. Upstream auth modes: Workers AI, unified billing, stored BYOK, or inline BYOK (needs an extra upstream Authorization header). Prefer unified billing or stored BYOK.

Cloudflare Workers AI: CLOUDFLARE_API_KEY + CLOUDFLARE_ACCOUNT_ID. Pi sets x-session-affinity for prefix-caching discounts.

Google Vertex AI: GOOGLE_CLOUD_API_KEY or Application Default Credentials (gcloud auth application-default login) plus GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_LOCATION, or GOOGLE_APPLICATION_CREDENTIALS pointing at a service-account key.

llama.cpp: /login llama.cpp, manage models with /llama, select with /model — see references/llama-cpp.md.

Raw lines 105 to 118
119## Custom Providers
121Via `models.json` for anything speaking a supported API (`references/models.md`); via extensions for custom APIs or OAuth flows (`references/custom-provider.md`).

Custom Providers

Via models.json for anything speaking a supported API (references/models.md); via extensions for custom APIs or OAuth flows (references/custom-provider.md).

Raw lines 119 to 122
123## Resolution Order
1251. CLI `--api-key`
1262. `auth.json` entry (API key or OAuth token)
1273. Configured API key from `models.json`
1284. Provider environment variables or ambient cloud credentials
130Native provider extensions can supply their own auth resolution. Anthropic also supports `ANTHROPIC_OAUTH_TOKEN`, `ANTHROPIC_AUTH_TOKEN`, and (without a key/token) workload identity federation through `ANTHROPIC_FEDERATION_RULE_ID`, `ANTHROPIC_ORGANIZATION_ID`, and `ANTHROPIC_IDENTITY_TOKEN_FILE`; optional service-account/workspace IDs pass through. Keep identity-token files refreshed.

Resolution Order

  1. CLI --api-key
  2. auth.json entry (API key or OAuth token)
  3. Configured API key from models.json
  4. Provider environment variables or ambient cloud credentials

Native provider extensions can supply their own auth resolution. Anthropic also supports ANTHROPIC_OAUTH_TOKEN, ANTHROPIC_AUTH_TOKEN, and (without a key/token) workload identity federation through ANTHROPIC_FEDERATION_RULE_ID, ANTHROPIC_ORGANIZATION_ID, and ANTHROPIC_IDENTITY_TOKEN_FILE; optional service-account/workspace IDs pass through. Keep identity-token files refreshed.

Raw lines 123 to 130