AI Providers
The ai.providers section configures connections to AI model providers. Atmos supports API providers
(Anthropic, OpenAI, Gemini, GitHub Models, Grok, OpenRouter, DeepSeek, Z.AI, Ollama, Bedrock, Azure OpenAI) and CLI providers (Claude Code, OpenAI Codex, GitHub Copilot, opencode, Gemini CLI) that reuse your existing subscription.
Configuration
Provider Settings
Each provider in the providers map supports the following settings:
model- Model identifier to use for this provider. Defaults vary by provider (see below).
api_key- API key for the provider. Use the
!envYAML function to read from an environment variable (e.g.,api_key: !env "ANTHROPIC_API_KEY"). Not required for Ollama (local) or Bedrock (uses AWS credentials). max_tokens- Maximum tokens per response (default:
4096). OpenAI reasoning models (o3, o4-mini) usemax_completion_tokensinternally -- Atmos handles this automatically. base_url- Custom API endpoint. Required for Grok (
https://api.x.ai/v1) and Azure OpenAI (https://<resource>.openai.azure.com). For Bedrock, set to the AWS region (e.g.,us-east-1). Ollama defaults tohttp://localhost:11434/v1. api_version- API version string. Required for Azure OpenAI (e.g.,
2025-04-01-preview).
Supported Providers
- Anthropic (Claude) —
claude-sonnet-4-6 - API Key authentication. Advanced reasoning, default choice.
- OpenAI (GPT) —
gpt-4o - API Key authentication. Widely available, strong general capabilities.
- Google (Gemini) —
gemini-2.5-flash - API Key authentication. Fast responses, larger context window.
- GitHub Models —
openai/gpt-4o-mini - GitHub token authentication. OpenAI-compatible. Zero-secret option for CI — in GitHub Actions the built-in
GITHUB_TOKENworks withpermissions: models: read. - xAI (Grok) —
grok-4-latest - API Key authentication. OpenAI-compatible, real-time knowledge.
- OpenRouter —
deepseek/deepseek-chat - API Key authentication (
OPENROUTER_API_KEY). OpenAI-compatible router across hundreds of models — setmodelto a provider-prefixed slug (e.g.anthropic/claude-sonnet-4-5,openai/gpt-4o) to switch models without changing providers. - DeepSeek —
deepseek-chat - API Key authentication (
DEEPSEEK_API_KEY). OpenAI-compatible. Low-cost; usedeepseek-reasonerfor the reasoning model. - Z.AI (GLM) —
glm-5.3 - API Key authentication (
ZAI_API_KEY). OpenAI-compatible endpoint for Zhipu GLM models. - Ollama (Local) —
llama4 - No authentication (local). Privacy, offline use, zero API costs.
- AWS Bedrock —
anthropic.claude-sonnet-4-6 - AWS Credentials authentication. Enterprise security, AWS integration.
- Azure OpenAI —
gpt-4o - API Key / Azure AD authentication. Enterprise compliance, Azure integration.
CLI Providers
CLI providers invoke a locally installed AI tool as a subprocess. No API key needed — the CLI tool uses your existing subscription.
Atmos assumes you already have one of these CLI tools installed and authenticated — the same
assumption it makes about terraform or tofu. Atmos does not install claude, codex,
copilot, opencode, or gemini, or drive their login flows, on your behalf.
- Claude Code —
claude-code - Claude Pro/Max subscription. Full MCP support. Best for interactive development.
- OpenAI Codex —
codex-cli - ChatGPT Plus/Pro subscription. Full MCP support. Open source (Apache 2.0).
- GitHub Copilot —
copilot-cli - GitHub Copilot subscription. Full MCP support. Authenticates via
copilot /loginorCOPILOT_GITHUB_TOKEN/GH_TOKEN/GITHUB_TOKEN. - opencode —
opencode - Open-source terminal coding agent. Full MCP support. Uses whichever model provider you have configured and authenticated in opencode (
opencode auth login). - Gemini CLI —
gemini-cli - Google account (free tier: 1K req/day). MCP blocked for personal accounts.
Default Provider
default_provider is optional. When it's not set (and ai.enabled: true), Atmos looks for
a CLI provider's binary on PATH, in this order, and uses the first one it finds:
claude-code(claude)codex-cli(codex)copilot-cli(copilot)opencode(opencode)gemini-cli(gemini)
If none are found, Atmos falls back to anthropic, which requires an api_key. Setting
default_provider explicitly always overrides auto-detection.
Setting default_provider: "auto" does the same thing as leaving it unset, but says so
explicitly. Useful for a shared atmos.yaml (checked into git) where teammates use different
CLI tools — auto documents that everyone's Atmos picks up whatever they have installed,
rather than leaving the field blank and looking like it was never configured.
This means a minimal config works out of the box for anyone with one of these CLI tools already installed and authenticated:
Auto-detection only looks for the default binary name on PATH. If you point binary at
a custom, non-PATH location, also set default_provider explicitly so Atmos doesn't fall
through to a different provider.
CLI Provider Settings
In addition to model, CLI providers support:
binary- Path to the CLI binary. Optional — defaults to finding it on PATH.
max_turns- Maximum agentic turns per invocation (Claude Code only). When Claude reaches this limit before producing an answer,
atmos ai askreports an error with a hint to raise this value. max_budget_usd- Budget cap per invocation in USD (Claude Code only).
full_auto- Enable automatic tool approval (Codex CLI, Copilot CLI, and opencode). For Codex, this passes
--full-auto(or--dangerously-bypass-approvals-and-sandboxwhen MCP servers are configured). For Copilot, this passes--allow-all-tools(implied automatically when MCP servers are configured). For opencode, this passes--auto, which blanket-approves every permission not explicitly denied; because opencode already allows tool calls by default, this is only enabled when you setfull_auto: true(never implicitly from MCP config), so your opencodepermissionrules are respected. allowed_tools- List of tools Claude Code is allowed to use without asking (Claude Code only). Tools on this list never trigger an approval prompt, which makes it the way to pre-approve tools for non-interactive runs such as CI, for example
["Read", "Glob", "Grep", "Bash(atmos list stacks)"].
Claude Code Tool Approval
Claude Code approves some native tools itself and honors allowed_tools before asking Atmos. Those requests do not reach Atmos’s permission checker, so ai.tools.blocked does not override native or provider-side preapprovals. Use Claude Code’s own permission configuration to restrict those tools. ai.tools.enabled, ai.tools.allowed, and --no-tools control Atmos’s registered tool set; they do not disable Claude’s native tools.
With the claude-code provider, atmos ai ask is interactive. When Claude needs to run a tool that is not already allowed, for example atmos list stacks through its Bash tool, Atmos shows its own approval prompt in the terminal while Claude waits. After you answer, Claude continues in the same run. No extra flags are needed and nothing has to be re-run.
The prompt shows the tool and its parameters and offers Allow once, Always allow <scope>, Deny once, and Always deny <scope>. Always-choices are cached in .atmos/ai.settings.local.json. For Bash, the decision applies to the exact command, for example Bash(atmos list stacks). Claude Code file, search, and web tools use the request's file path, notebook path, search path or pattern, or URL, for example Read(/repo/go.mod) and Glob(**/*.go). Requests without a specifier, including MCP tools, use the bare tool name and cover later calls with different arguments. File-scoped decisions cover that path even if its contents change. The option label shows the scope being remembered. Denying lets Claude continue and explain what it could not do. Pressing Ctrl-C at the prompt aborts the run.
Requests Claude delegates to Atmos are checked against the Atmos permission system, so ai.tools.mode, allowed, restricted, and blocked all apply. Set ai.tools.mode: allow or yolo for unattended runs.
atmos ai chat, atmos ai ask, and atmos ai exec enforce these permissions for delegated requests. Chat temporarily hands the terminal to the approval prompt and resumes afterward. When approval is needed and no terminal is available, the command fails with an error that suggests running in a terminal, setting ai.tools.mode: allow or yolo, or adding the tool to ai.providers.claude-code.allowed_tools.
- Timeout
- The
ai.timeout_secondssetting (default60) counts the time the AI spends working. Time spent waiting for you at an approval prompt does not count. Timeout or cancellation terminates the provider and its child processes. - Progress
- The spinner on stderr shows the tool in progress, for example "Running atmos list stacks…", and pauses while a prompt is on screen.
Previously, when mcp.servers were configured, Atmos started Claude Code with --dangerously-skip-permissions, so every tool call was auto-approved, including Claude's built-in Bash and Edit tools. For atmos ai chat, atmos ai ask, and atmos ai exec, Atmos no longer passes that flag. MCP tool calls and built-in tool calls that Claude asks permission for now go through the Atmos permission system and prompt unless they are allowed. Existing unattended runs with no explicit permission policy can now fail when a tool needs approval. Set ai.tools.mode: allow to run without prompting while still honoring blocked tools, or pre-approve specific tools with ai.providers.claude-code.allowed_tools. Use yolo only when you intend to bypass every check. See the automation migration example.
CLI Provider Examples
MCP Pass-Through
When mcp.servers is configured, CLI providers automatically pass MCP servers to the CLI tool:
- Claude Code: Temp
.mcp.jsonvia--mcp-config - Codex CLI: Written to
~/.codex/config.toml(backup/restore after exit) - Copilot CLI: Merged into
~/.copilot/mcp-config.json(backup/restore after exit; honorsCOPILOT_HOME) - opencode: Written to a temp config passed via
OPENCODE_CONFIG(deep-merged by opencode; no user file is modified) - Gemini CLI: Written to
.gemini/settings.jsonin cwd (backup/restore, MCP blocked for personal accounts)
Auth-requiring servers are wrapped with atmos auth exec -i <identity>. Toolchain PATH and ATMOS_* env vars are injected automatically.
Provider Comparison
- Setup
- Cloud: Easy (API key). Ollama: Medium (install + download model). Enterprise: Complex (cloud config).
- Cost
- Cloud: Per-token pricing. Ollama: Free. Enterprise: Per-token + cloud costs.
- Data Privacy
- Cloud: Sent to provider. Ollama: 100% local. Enterprise: Stays in your cloud.
- Offline
- Cloud: No. Ollama: Yes. Enterprise: No.
- Rate Limits
- Cloud: Yes. Ollama: No. Enterprise: Yes (configurable).
- Compliance
- Cloud: Provider-dependent. Ollama: Your control. Enterprise: SOC2, HIPAA, ISO.
- Private Network
- Cloud: No. Ollama: Yes. Enterprise: Yes (VPC/VNet).
Performance and Cost
- Anthropic (Claude) — 200K token context
- $3-$15 per 1M tokens (input/output).
- OpenAI (GPT-4o) — 128K token context
- $2.50-$10 per 1M tokens (input/output).
- Google (Gemini) — up to 2M token context
- $0.075-$0.30 per 1M tokens (input/output).
- xAI (Grok) — 2M token context
- $3-$15 per 1M tokens (input/output).
- Ollama — 128K token context
- $0 (hardware only).
- AWS Bedrock — 200K token context
- $3-$15 + AWS costs per 1M tokens.
- Azure OpenAI — 128K token context
- $2.50-$10 + Azure costs per 1M tokens.
For budget-conscious usage, try Gemini (cheapest cloud) or Ollama (free). For balanced cost and quality, Claude Sonnet or GPT-4o work well. Enterprise providers can leverage committed-use discounts.
Privacy and Security
- Anthropic
- Data location: US (cloud). Compliance: SOC 2, GDPR.
- OpenAI
- Data location: US (cloud). Compliance: SOC 2, GDPR.
- Gemini
- Data location: US (cloud). Compliance: SOC 2, GDPR.
- Grok
- Data location: US (cloud). Compliance: Standard.
- Ollama
- Data location: Your machine. Compliance: Your control.
- Bedrock
- Data location: Your AWS region. Compliance: SOC 2, HIPAA, ISO.
- Azure OpenAI
- Data location: Your Azure region. Compliance: SOC 2, HIPAA, ISO.
For sensitive infrastructure data, consider Ollama (never leaves your machine) or enterprise providers (stays in your cloud account).
Provider Examples
- Cloud Providers
- Local (Ollama)
- Enterprise
Ollama Installation
Start the service and pull a model:
Model Selection
llama4— ~40GB, 64GB+ RAM- Production use (recommended).
llama3.3:70b— ~40GB, 64GB+ RAM- Production use (previous generation).
llama3.1:8b— ~5GB, 8GB+ RAM- Quick queries, laptops.
codellama:34b— ~19GB, 32GB+ RAM- Code generation.
codellama:13b— ~8GB, 16GB+ RAM- Code on mid-range hardware.
mixtral:8x7b— ~26GB, 32GB+ RAM- Complex reasoning.
mistral:7b— ~4GB, 8GB+ RAM- Fast responses, consumer hardware.
Performance Tips
Hardware recommendations:
- Apple Silicon (M1/M2/M3/M4): Handles
llama4well with unified memory - 16GB RAM: Use
llama3.1:8bormistral:7b - 32GB+ RAM: Use
mixtral:8x7borllama3.3:70b - 64GB+ RAM: Use
llama4 - GPU acceleration (NVIDIA/AMD/Apple Silicon) provides 10-50x faster inference; Ollama detects and uses it automatically
Remote Deployment
To enable remote access on the server, set OLLAMA_HOST=0.0.0.0:11434 before starting Ollama.
Binding to 0.0.0.0 exposes the Ollama API to all network interfaces. Ensure the server is behind a firewall or reverse proxy with authentication in production environments.
OLLAMA_HOST- Server bind address (default:
127.0.0.1:11434). OLLAMA_ORIGINS- CORS allowed origins (default:
*— allow all). OLLAMA_MODELS- Model storage path (default:
~/.ollama/models).
AWS Bedrock
Authentication uses the standard AWS SDK credential chain (IAM roles, profiles, environment variables):
Use the global. prefix for dynamic routing across regions, or the anthropic. prefix for a specific region. Cross-region inference profiles use IDs like us.anthropic.claude-sonnet-4-6-v1:0.
Azure OpenAI
The model field must be your deployment name from Azure Portal, not the OpenAI model name. Both base_url (your resource endpoint) and api_version are required. See Azure OpenAI Documentation for available API versions.
GitHub Models in GitHub Actions (Zero Secrets)
The github provider talks to GitHub Models, an OpenAI-compatible
inference API at https://models.github.ai/inference. Its headline use case is CI: in GitHub Actions the
workflow's built-in GITHUB_TOKEN authenticates when you grant the models: read permission — no API keys or
secrets to provision. Model names use the publisher/model-name format (e.g., openai/gpt-4o-mini).
Locally, any GitHub token works (e.g., export GITHUB_TOKEN=$(gh auth token)). For GitHub Enterprise, override
base_url to your instance's inference endpoint. Non-interactive commands like atmos ai ask require no TTY,
so they run cleanly in CI logs.
Token Caching
Token caching (prompt caching) reduces costs by reusing frequently-sent content like system prompts.
- Anthropic — 90% discount
- Manual markers. Configuration required (see below).
- OpenAI — 50% discount
- Automatic. No configuration required.
- Gemini — Free (included)
- Automatic. No configuration required.
- Grok — 75% discount
- Automatic. No configuration required.
- Bedrock — Up to 90% discount
- Automatic. No configuration required.
- Azure OpenAI — 50-100% discount
- Automatic. No configuration required.
- Ollama — N/A
- Local processing, caching not applicable.
Most providers implement caching automatically. Only Anthropic requires explicit configuration:
cache.enabled- Enable or disable prompt caching (default:
true). Cached tokens cost 90% less for Anthropic. cache.cache_system_prompt- Cache the skill system prompt across messages (default:
true). cache.cache_project_instructions- Cache the ATMOS.md project instructions content (default:
true).
For Anthropic, keep your ATMOS.md content stable during conversations and use named sessions for extended work on the same topic. For all other providers, caching works transparently with no action required.
Multi-Provider Configuration
Configure multiple providers and switch between them. Set default_provider for CLI commands, and press Ctrl+P during a chat session to switch mid-conversation.
Provider Isolation
Each provider maintains its own completely isolated conversation history. When you switch providers, the new provider only sees messages from its own thread. When you switch back, it picks up right where you left off. UI notifications like "Switched to..." are never sent to any provider.
Security Best Practices
- Cloud Providers (Anthropic, OpenAI, Google, xAI)
- Use environment variables for API keys (never commit to git), rotate keys regularly, and review each provider's data retention policies.
- Local Provider (Ollama)
- All processing is local. Keep Ollama updated and use disk encryption for sensitive data.
- Enterprise Providers (Bedrock, Azure OpenAI)
- Use IAM roles or managed identities instead of API keys, enable audit logging (CloudTrail or Azure Monitor), configure private endpoints, and use customer-managed encryption keys where available.
Related Documentation
- AI Configuration - Top-level AI settings
- MCP Server - Universal MCP integration
- Claude Code Integration - IDE integration with Claude Code