Provider-agnostic
One LlmProvider trait, five first-party implementations. Switch models by
swapping a config line — your tools and loop stay identical.
Kova gives you one clean, trait-based core — Agent, LlmProvider, Tool —
and lets you swap the pieces underneath. Point it at Anthropic, OpenAI, Bedrock,
Gemini, or a local Ollama model without touching your agent code.
Provider-agnostic
One LlmProvider trait, five first-party implementations. Switch models by
swapping a config line — your tools and loop stay identical.
Tool calling built in
Implement the Tool trait, register it, done. The agent runs the
call-execute-observe loop for you, with concurrent tool execution.
Stateless by design
Agent::run takes your history in and hands the new messages back — you own
persistence, sessions, and scaling. No hidden state.
Structured output
Constrain a turn’s final answer to a JSON schema and parse it straight into
your type with run_structured::<T>() — mapped natively per provider.
Streaming & thinking models
Pull-based streams of text, tool calls, and chain-of-thought — the same API across every provider.
Prompt caching & embeddings
Automatic prompt caching on Anthropic and Bedrock, with per-turn cache
accounting. Plus an EmbeddingProvider seam for host-side retrieval.
MCP integration
Connect Model Context Protocol servers over stdio, HTTP+SSE, or Streamable HTTP with OAuth — with auto-reconnect. Remote tools look like native ones.
Reliable & cancellable
Automatic retries with backoff, classified provider errors, context-budget
guards, and CancellationToken-driven turn cancellation.