Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

LLM Providers

dgov uses OpenAI-compatible endpoints for worker execution at dgov run time. Provider definitions live in .dgov/project.toml; plans and tasks can select a named provider from that registry.

dgov init scaffolds commented provider placeholders. Configure or add named providers in .dgov/project.toml before running executable worker plans.

Configuration

The [providers] registry defines endpoints. [project].provider selects the default provider for tasks that do not name one.

[project]
provider = "llm"
 
[providers.llm]
default_agent = "provider/model-name"
base_url = "https://provider.example.com/v1"
api_key_env = "PROVIDER_API_KEY"
FieldMeaning
[project].providerDefault provider name
[providers.<name>].default_agentDefault model/router for that provider
[providers.<name>].base_urlOpenAI-compatible API base URL
[providers.<name>].api_key_envEnv var that holds the API key

Task-level provider = "..." selects a provider endpoint. Task-level agent = "..." overrides only the model/router name.

Generic endpoint example

[project]
provider = "llm"
 
[providers.llm]
default_agent = "provider/model-name"
base_url = "https://provider.example.com/v1"
api_key_env = "PROVIDER_API_KEY"
export PROVIDER_API_KEY=your-key-here

OpenAI-compatible endpoint

[project]
provider = "llm"
 
[providers.llm]
default_agent = "provider/model-name"
base_url = "https://provider.example.com/v1"
api_key_env = "PROVIDER_API_KEY"
export PROVIDER_API_KEY=your-key-here

Other API-compatible clients

dgov itself uses OpenAI-compatible endpoints. For tools that call a different API shape, use that provider's matching base URL and model name outside dgov:

base_url = "https://provider.example.com/v1"
model = "provider/model-name"
api_key_env = "PROVIDER_API_KEY"
export PROVIDER_API_KEY=your-key-here

Other OpenAI-compatible endpoints

[project]
provider = "custom"
 
[providers.custom]
default_agent = "your-model-name"
base_url = "https://your-provider.example.com/v1"
api_key_env = "YOUR_PROVIDER_API_KEY"
export YOUR_PROVIDER_API_KEY=your-key-here

Plan selection

Set a plan-wide default in _root.toml:

[plan]
name = "provider-demo"
sections = ["tasks"]
default_provider = "openai"

Override one task in a task TOML:

[tasks.review]
summary = "Review with another endpoint"
provider = "openrouter"
agent = "openrouter/model-name"

Common mistakes

Wrong env var name. .dgov/project.toml might say api_key_env = "PROVIDER_API_KEY" under the selected provider, so dgov run reads that env var literally.

Confusing model name with endpoint. default_agent is the model or router identifier. The provider endpoint is selected by provider.

Assuming a task agent switches provider. Per-task agent overrides the model name only. Use task provider for endpoint selection.

Recommendation

For most repos:

  1. set default_agent
  2. set base_url
  3. set api_key_env
  4. set [project].provider
  5. export the matching env var

That is the complete provider configuration surface.