AI providers
Windrunner uses one configured provider for chat AI requests. Set
WINDRUNNER_LLM_PROVIDER to openai, openrouter, ollama, groq,
gemini, claude, or none.
The provider is none by default in the application. The local startup script
selects openai unless you override it. Voice transcription is configured
independently; see Voice transcription.
Provider selection
| Variable | Default | Description |
|---|---|---|
WINDRUNNER_LLM_PROVIDER | none in the application; openai in start-local.sh | Selects the active chat AI provider. |
OpenAI
| Variable | Default | Description |
|---|---|---|
OPENAI_API_KEY | — | API key. Required when OpenAI is selected. |
OPENAI_BASE_URL | https://api.openai.com/v1 | OpenAI-compatible API base URL. |
OPENAI_MODEL | gpt-5.6-luna | Model name. |
OPENAI_MAX_OUTPUT_TOKENS | 2048 | Maximum output tokens. |
OPENAI_REASONING_EFFORT | low | Reasoning effort sent to the provider. |
OPENAI_MAX_TOOL_ROUNDS | 8 | Maximum tool-call rounds for one request. |
WINDRUNNER_LLM_OPENAI_CONNECT_TIMEOUT | 10s | Connection timeout. |
WINDRUNNER_LLM_OPENAI_READ_TIMEOUT | 2m | Response read timeout. |
OpenRouter
OpenRouter uses its OpenAI-compatible Chat Completions API. Select
openrouter and choose an OpenRouter model slug that supports tool calling,
such as the model shown in OpenRouter's model catalog. Model capabilities vary,
so a model must support the parameters used by Windrunner's tool loop.
| Variable | Default | Description |
|---|---|---|
OPENROUTER_API_KEY | — | API key. Required when OpenRouter is selected. |
OPENROUTER_BASE_URL | https://openrouter.ai/api/v1 | OpenRouter API base URL. |
OPENROUTER_MODEL | — | OpenRouter model slug, for example openai/gpt-4o. |
OPENROUTER_SITE_URL | — | Optional site URL sent as HTTP-Referer. |
OPENROUTER_SITE_NAME | — | Optional application name sent as X-OpenRouter-Title. |
OPENROUTER_MAX_OUTPUT_TOKENS | 2048 | Maximum output tokens. |
OPENROUTER_REASONING_EFFORT | — | Optional reasoning effort; use only when the selected model supports it. |
OPENROUTER_MAX_TOOL_ROUNDS | 8 | Maximum tool-call rounds for one request. |
WINDRUNNER_LLM_OPENROUTER_CONNECT_TIMEOUT | 10s | Connection timeout. |
WINDRUNNER_LLM_OPENROUTER_READ_TIMEOUT | 2m | Response read timeout. |
Groq
Groq uses its OpenAI-compatible Chat Completions API. Select groq and choose
a model available to your GroqCloud account. The default model is
openai/gpt-oss-20b, which is suitable for testing tool calls on the free
plan. Model availability and rate limits can change by account and model.
| Variable | Default | Description |
|---|---|---|
GROQ_API_KEY | — | API key. Required when Groq is selected. |
GROQ_BASE_URL | https://api.groq.com/openai/v1 | Groq API base URL. |
GROQ_MODEL | openai/gpt-oss-20b | Groq model name. |
GROQ_MAX_OUTPUT_TOKENS | 2048 | Maximum output tokens. |
GROQ_REASONING_EFFORT | — | Optional reasoning effort; use only when the selected model supports it. |
GROQ_MAX_TOOL_ROUNDS | 8 | Maximum tool-call rounds for one request. |
WINDRUNNER_LLM_GROQ_CONNECT_TIMEOUT | 10s | Connection timeout. |
WINDRUNNER_LLM_GROQ_READ_TIMEOUT | 2m | Response read timeout. |
Ollama
Ollama connects to local models through its OpenAI-compatible Chat Completions
API. Start Ollama, pull the model locally, then select ollama. The default
base URL is suitable when Windrunner runs directly on the same machine as
Ollama.
| Variable | Default | Description |
|---|---|---|
OLLAMA_BASE_URL | http://localhost:11434/v1 | Ollama OpenAI-compatible API base URL. |
OLLAMA_MODEL | — | Local model name, such as llama3.2; it must already be pulled. |
OLLAMA_API_KEY | — | Optional API key for a secured or hosted Ollama endpoint. |
OLLAMA_MAX_OUTPUT_TOKENS | 2048 | Maximum output tokens. |
OLLAMA_REASONING_EFFORT | — | Optional reasoning effort; use only when the selected model supports it. |
OLLAMA_MAX_TOOL_ROUNDS | 8 | Maximum tool-call rounds for one request. |
WINDRUNNER_LLM_OLLAMA_CONNECT_TIMEOUT | 10s | Connection timeout. |
WINDRUNNER_LLM_OLLAMA_READ_TIMEOUT | 2m | Response read timeout. |
When Windrunner runs in Docker and Ollama runs on the host, set
OLLAMA_BASE_URL to an address reachable from the container. On Docker
Desktop, http://host.docker.internal:11434/v1 is commonly used.
Gemini
| Variable | Default | Description |
|---|---|---|
GEMINI_API_KEY | — | API key. Required when Gemini is selected. |
GEMINI_BASE_URL | https://generativelanguage.googleapis.com/v1beta | Gemini API base URL. |
GEMINI_MODEL | gemini-3.1-flash-lite | Model name. |
GEMINI_MAX_OUTPUT_TOKENS | 2048 | Maximum output tokens. |
GEMINI_TEMPERATURE | 1.0 | Sampling temperature. |
GEMINI_MAX_TOOL_ROUNDS | 8 | Maximum tool-call rounds for one request. |
WINDRUNNER_LLM_GEMINI_CONNECT_TIMEOUT | 10s | Connection timeout. |
WINDRUNNER_LLM_GEMINI_READ_TIMEOUT | 2m | Response read timeout. |
Claude
| Variable | Default | Description |
|---|---|---|
CLAUDE_API_KEY | — | API key. Required when Claude is selected. |
CLAUDE_BASE_URL | https://api.anthropic.com/v1 | Anthropic API base URL. |
CLAUDE_MODEL | claude-sonnet-5 | Model name. |
CLAUDE_MAX_OUTPUT_TOKENS | 2048 | Maximum output tokens. |
CLAUDE_TEMPERATURE | 1.0 | Sampling temperature. |
CLAUDE_MAX_TOOL_ROUNDS | 8 | Maximum tool-call rounds for one request. |
WINDRUNNER_LLM_CLAUDE_ANTHROPIC_VERSION | 2023-06-01 | Anthropic API version header. |
WINDRUNNER_LLM_CLAUDE_CONNECT_TIMEOUT | 10s | Connection timeout. |
WINDRUNNER_LLM_CLAUDE_READ_TIMEOUT | 2m | Response read timeout. |
The short provider variables are the recommended form. The longer timeout
variables use Spring's windrunner.llm.<provider> configuration namespace.