Skip to content

Providers and what is sent

The model providers Outbound can use, where keys are kept, and what each request contains.

Outbound 1.3.0 · Updated

Outbound works with no model provider at all: Apple Intelligence on the Mac answers the Assistant and explains connections. Two further options exist, both yours to switch on. A coding agent you already pay for can answer on its own subscription, and a cloud provider can write the Analytics overview and explain a connection alert. This page is about the cloud providers.

Settings › Intelligence lists them under “API Keys” in the “Answered by” picker:

Provider Default model Key from
OpenAI gpt-6.1-sol OPENAI_API_KEY
Anthropic claude-sonnet-5-5 ANTHROPIC_API_KEY
Google Gemini gemini-3.8-flash GEMINI_API_KEY
OpenRouter ~openai/gpt-sol-latest OPENROUTER_API_KEY
OpenAI-Compatible (you choose) OUTBOUND_AI_KEY

The last one points at any OpenAI-compatible server: Ollama, LM Studio, vLLM, or a company gateway. For it you enter the server’s address in the “Server” field, for example http://127.0.0.1:11434/v1. A server on this Mac (localhost, 127.0.0.1 or ::1) can use http:// and needs no key. Any other server needs HTTPS: Outbound refuses unencrypted AI connections to another device, and refuses a redirect to a different address or transport, so your key and figures reach only the server you entered. The environment variables are what outboundctl ai reads; the app itself keeps keys in the Keychain.

For the built-in cloud providers, “Get a Key” links to platform.openai.com, console.anthropic.com, aistudio.google.com or openrouter.ai. You can type a different model name in the “Model” field; the placeholder shows the default.

Keys are stored in the login Keychain on this Mac, under Outbound’s own service, one key per provider. For an OpenAI-compatible server the key is kept per server address, so a key saved for one server is never sent to another after the address changes. Keychain Access shows the item labelled with the provider’s name.

Paste a key into “API Key” and click “Save”. The settings show “Saved in your keychain” once a key is stored, with a “Remove” button that deletes it. If the Keychain refuses to delete, the entry stays on screen with the reason rather than pretending.

In the app, API-key providers write Analytics overviews, explain connection alerts when you click “Send”, and can receive a connection test. The separate outboundctl ai ask command can also send a question. Each Analytics overview request contains fixed instructions, then the figures for the range you are viewing as JSON, then a request for a JSON reply: a one-sentence headline and up to three observations. The reply is capped at 700 output tokens.

The figures are totals, app names, website domains and countries for that range. Never addresses, full host names, file paths, rules or what was sent. Your key travels only to the provider you chose.

An alert explanation sends the alert’s facts: the app and its signer, the website domain rather than the full host name, the port, transport and direction, how often the app reached it before, and what blocking it may affect. The alert shows the exact request under “What will be sent”, and nothing goes until you click “Send”.

Enable “Send figures to (provider)” to permit Analytics overview requests. “Show What’s Sent…” opens “What’s Sent to (provider)”: the exact request for the range you’re viewing in Analytics, with your key hidden. If Analytics isn’t showing a range, it asks you to choose one first. Opening the preview is optional. Changing the custom server address requires separate consent for that address.

“Test Connection” can send a request even when “Send figures to (provider)” is off. It sends one small request (“Say OK.”) and reports “Connected to (provider)” or the provider’s own error: a bad key (401 or 403), an unknown model (404), rate limiting (429), or a provider problem (5xx).

The overview passes only if its numeric values appear in the supplied figures or match the lengths of the supplied lists. A failed check discards that draft and falls back to Apple Intelligence or a plain summary. This checks numeric values, not whether every sentence is correct. Counts of 1,000 or more are re-formatted with thousands separators, and years from 1900 to 2100 and numbers immediately after “port “ are left alone.

From the command line, outboundctl ai ask --preview prints the exact request, with the key hidden, and sends nothing. See the CLI page for the flags.