Connect an AI provider

Point Bandura's AI at Anthropic, OpenAI, Groq, OpenRouter, Together, or a local Ollama / LM Studio, using your key, your endpoint, your data.

5 min read

Bandura’s AI features run on a provider you choose and pay for directly. There’s no credit meter and no middleman; requests go from your machine to the endpoint you configure, on your terms. Everything else in Bandura works without any provider at all (including self-healing, which is deterministic and needs no AI).

There are three providers. All of them work on every AI surface (chat, the agentic tool-use loop, flow generation, and ai-action nodes):

ProviderWhat it talks to
AnthropicClaude, natively. The default, and the best-tested path.
GoogleGemini, natively. A Google AI Studio key and no other setup.
OpenAI-compatibleAny /chat/completions endpoint: OpenAI, Groq, OpenRouter, Together, Ollama, LM Studio.

The Google provider needs 1.0.0-rc.4 or newer, which both current builds are: the desktop app on the download page and the @bandura/cli a plain npm i -g @bandura/cli installs. On rc.3 and earlier the Settings dropdown offered Anthropic and OpenAI-compatible only, and GEMINI_API_KEY was ignored by headless runs. Anthropic and OpenAI-compatible work on every published build.

One code path covers everything in the last row, because they all speak the same wire format. If your endpoint accepts an OpenAI-style /chat/completions request, Bandura can use it. That includes one running on your own machine, where nothing leaves it at all.

Pick a provider

  1. Open Settings from the gear icon in the activity bar, or with ⌘,.

  2. In AI provider, choose Anthropic (Claude), Google (Gemini) or OpenAI-compatible.

  3. Google needs nothing but a key: its endpoint is fixed, so no Base URL field appears. For OpenAI-compatible, fill in the Base URL that does. Common ones:

    EndpointBase URL
    Ollamahttp://localhost:11434/v1
    LM Studiohttp://localhost:1234/v1
    Groqhttps://api.groq.com/openai/v1
    OpenAIhttps://api.openai.com/v1

    If a local endpoint is the plan, local LLM API testing covers which Bandura features hold up on small models and which want a frontier one.

  4. Set the Model. It’s a free-text field with suggestions, not a fixed list; no dropdown could cover every model every endpoint serves, so anything you type is accepted. Left empty, Anthropic falls back to Claude Opus 4.8 and Google to Gemini 3.6 Flash; an OpenAI-compatible endpoint has no default, so name the model there.

Add the key

In the API key section, paste your key and click Save key.

The key is stored in your operating system’s encrypted store (Keychain on macOS, DPAPI on Windows, libsecret on Linux), not in settings.json, not in the workspace, never in Git. Remove key in the same section deletes it. Keys are held per provider, so switching from Anthropic to Groq and back doesn’t make you paste anything twice.

Anthropic keys come from the Anthropic Console and start with sk-ant-; Google keys come from Google AI Studio and start with AIza. Bandura checks those prefixes so a copy slip fails at the paste rather than mid-run. The check applies only to those two: an OpenAI-compatible endpoint mints its own key format, and a local model needs no key at all.

Which requests carry your key, what travels with them, and what never leaves the machine is written out request by request on the security page.

Test the connection

Test connection sends one tiny message to whatever you’ve configured and reports back. A wrong base URL, a stale key, or a model id the endpoint doesn’t serve shows up here in a second instead of 20 minutes later inside a chat turn or a CI run. A pass reads Connected to <model> - replied "ok".

Anything else it can say, and what each message means, is on AI provider troubleshooting. One thing to check first, because it’s the most common: the base URL needs its path prefix. Bandura appends /chat/completions, so Ollama is http://localhost:11434/v1, not http://localhost:11434.

Headless runs: CLI, CI, and MCP

The CLI and the MCP server have no Settings view, so they read the environment instead. ANTHROPIC_API_KEY keeps working exactly as it always has; the provider-neutral variables are new.

VariableMeaning
BANDURA_AI_PROVIDERanthropic, gemini (or google), or openai-compatible. Optional (see the rule below).
BANDURA_AI_BASE_URLEndpoint base URL for an OpenAI-compatible provider.
BANDURA_AI_API_KEYThe key, whichever provider. Takes precedence over the vendor names.
BANDURA_AI_MODELModel id. Empty falls back to the provider’s default.
ANTHROPIC_API_KEY / ANTHROPIC_MODELThe original Anthropic variables. Still work, unchanged.
GEMINI_API_KEY / GOOGLE_API_KEY / GEMINI_MODELGemini fallbacks. Either key name works.
OPENAI_API_KEY / OPENAI_BASE_URL / OPENAI_MODELFallbacks, so a shell already configured for OpenAI needs nothing new.

A base URL alone selects the OpenAI-compatible adapter, and a bare GEMINI_API_KEY selects Gemini, so you rarely need to set BANDURA_AI_PROVIDER explicitly. If both an Anthropic and a Gemini key are exported, Anthropic wins: a shell that already worked should not change providers the day you add a Google key for something unrelated. Pointing a CI job at Groq is two variables:

export BANDURA_AI_BASE_URL=https://api.groq.com/openai/v1
export BANDURA_AI_API_KEY=gsk_...
bandura run "flows/**/*.aether"

If nothing is configured, ai-action nodes fail with a message saying so, and every other node type runs unaffected; a suite with one AI node doesn’t become a suite that can’t run in CI.

What a provider gives you

Last updated

Looking for something else? All 37 articles are on one page in the Help Center.