Quick start
Three environment variables are all you need for the most common case:~/.cynative/config.yaml file is needed for the simple path. Write YAML only when you need fields the env-var surface does not cover (e.g. extra_headers, multi-key load balancing, or advanced provider configs).
Provider catalog
Shared YAML reference
Every provider uses the same flatllm: block in ~/.cynative/config.yaml. Fields marked optional may be omitted; Cynative and Bifrost supply sensible defaults.
reasoning_effort maps to the provider’s native effort knob; reasoning_max_tokens sets an explicit thinking budget (Anthropic-style providers use it directly; OpenAI-style providers convert it to an estimated effort level). Gemini additionally validates an explicit budget against a per-model range at request time. Setting reasoning_effort: none together with reasoning_max_tokens is rejected at config validation.
Common environment variables
Every YAML config field is settable via aCYNATIVE_* environment variable. Maps and slices require YAML (e.g. network_config.extra_headers, keys[]). Everything else — including all identity selectors — is env-bindable.
Core selectors
Network and timeout
Reasoning
Provider-specific identity fields
Any nested Bifrost field is reachable by upper-snake-casing its JSON path:
CYNATIVE_LLM_<PATH> — for example, CYNATIVE_LLM_NETWORK_CONFIG_MAX_CONNS_PER_HOST or CYNATIVE_LLM_OPENAI_CONFIG_DISABLE_STORE.
Prompt caching
Cynative always marks the stable prefix of every request with ephemeral cache breakpoints — the tool schemas, the system prompt, and the last two conversation turns. Anthropic-family providers (anthropic, bedrock, vertex with Claude) cache that prefix and bill cached reads at a large discount. The cache window is Anthropic’s default five-minute ephemeral TTL, so back-to-back calls (e.g. --auto-approve runs) benefit most; long human-approval pauses between tool calls may let the cache expire and re-pay the write cost.
All other providers: Bifrost’s converters strip or ignore the cache markers. Providers that auto-cache server-side (OpenAI, Gemini) continue to do so regardless — Cynative’s markers don’t interfere.
There is nothing to configure. Prompt caching is on for all providers and inert where unsupported.
Bifrost exposes two additional knobs —
CYNATIVE_LLM_PROMPT_CACHE_AUTO_INJECT and CYNATIVE_LLM_PROMPT_CACHE_TTL — which synthesize breakpoints for clients that emit none. Both are off by default and do nothing for Cynative, because Bifrost skips auto-injection once the caller has already marked the request, which Cynative always does.Troubleshooting
Request timeouts
Non-streaming LLM calls default to a 300-second per-request timeout — Cynative’s default, replacing Bifrost’s 30-second default, which is too short for the long, reasoning-heavy completions a research run produces. Override the timeout with the YAML field:On a timeout, the underlying error message comes from Bifrost and references
default_request_timeout_in_seconds, network_config, and a “Providers > Provider Name > Network Config” UI. That wording is Bifrost’s internal copy (it even hard-codes “30 seconds” regardless of the effective timeout). Cynative has no such UI — the knob you want is network_config.default_request_timeout_in_seconds as shown above.
