pub struct KodaConfig {Show 13 fields
pub agent_name: String,
pub system_prompt: String,
pub allowed_tools: Vec<String>,
pub disallowed_tools: Vec<String>,
pub provider_type: ProviderType,
pub base_url: String,
pub model: String,
pub max_context_tokens: usize,
pub agents_dir: PathBuf,
pub model_settings: ModelSettings,
pub max_iterations: u32,
pub skip_memory: bool,
pub trust: TrustMode,
}Expand description
Runtime configuration assembled from CLI args, env vars, and agent JSON.
Fields§
§agent_name: StringAgent name (e.g. "koda", "scout").
system_prompt: StringAssembled system prompt.
allowed_tools: Vec<String>Allowlisted tool names (empty = all tools).
disallowed_tools: Vec<String>Denylisted tool names.
provider_type: ProviderTypeActive provider type.
base_url: StringAPI base URL.
model: StringModel identifier.
max_context_tokens: usizeMax context window tokens.
agents_dir: PathBufDirectory containing agent JSON configs.
model_settings: ModelSettingsModel-specific settings (max_tokens, temperature, etc.).
max_iterations: u32Max inference iterations per turn.
skip_memory: boolSkip injecting project/global memory into the system prompt.
Set by skip_memory: true in agent JSON. Default: false.
trust: TrustModeTrust mode for this session. Default: TrustMode::Safe.
Implementations§
Source§impl KodaConfig
impl KodaConfig
Sourcepub fn load(project_root: &Path, agent_name: &str) -> Result<Self>
pub fn load(project_root: &Path, agent_name: &str) -> Result<Self>
Load config from the agent JSON file. Search order: project agents/ → user ~/.config/koda/agents/ → built-in (embedded).
Sourcepub fn with_overrides(
self,
base_url: Option<String>,
model: Option<String>,
provider: Option<String>,
) -> Self
pub fn with_overrides( self, base_url: Option<String>, model: Option<String>, provider: Option<String>, ) -> Self
Apply CLI/env overrides on top of the loaded config.
Sourcepub fn with_model_overrides(
self,
max_tokens: Option<u32>,
temperature: Option<f64>,
thinking_budget: Option<u32>,
reasoning_effort: Option<String>,
) -> Self
pub fn with_model_overrides( self, max_tokens: Option<u32>, temperature: Option<f64>, thinking_budget: Option<u32>, reasoning_effort: Option<String>, ) -> Self
Apply model-specific setting overrides from CLI.
Sourcepub fn with_trust(self, mode: TrustMode) -> Self
pub fn with_trust(self, mode: TrustMode) -> Self
Override the trust mode (e.g. from --mode safe on the CLI).
Sourcepub fn recalculate_model_derived(&mut self)
pub fn recalculate_model_derived(&mut self)
Recalculate model-derived settings (context window, tier, iteration limits).
Call this whenever self.model or self.provider_type changes to keep
context window, tier, and iteration defaults in sync with the new model.
Uses the hardcoded lookup table as a synchronous fallback.
For API-sourced values, call apply_provider_capabilities after this.
Sourcepub fn apply_provider_capabilities(&mut self, caps: &ModelCapabilities)
pub fn apply_provider_capabilities(&mut self, caps: &ModelCapabilities)
Apply capabilities queried from the provider API.
Overrides the hardcoded context window and max output tokens with
values reported by the provider. Call this after recalculate_model_derived
when you have access to the provider.
Sourcepub async fn query_and_apply_capabilities(&mut self, provider: &dyn LlmProvider)
pub async fn query_and_apply_capabilities(&mut self, provider: &dyn LlmProvider)
Query the provider API for model capabilities and apply them.
Convenience wrapper: queries model_capabilities() on the provider
and applies the result. Logs a debug message if the API doesn’t
report capabilities (falls back to hardcoded lookup).
Sourcepub fn load_agent_json(
project_root: &Path,
agent_name: &str,
) -> Result<AgentConfig>
pub fn load_agent_json( project_root: &Path, agent_name: &str, ) -> Result<AgentConfig>
Load the raw AgentConfig for an agent without resolving it into a
full KodaConfig. Preserves Option<String> fields so callers can
distinguish “explicitly set” from “not set” — used by sub-agent
dispatch to decide which parent fields to inherit.
Search order mirrors load: project agents/ → built-in.
Sourcepub fn load_builtin(name: &str) -> Option<AgentConfig>
pub fn load_builtin(name: &str) -> Option<AgentConfig>
Try to load a built-in (embedded) agent by name.
Sourcepub fn builtin_agents() -> Vec<(String, AgentConfig)>
pub fn builtin_agents() -> Vec<(String, AgentConfig)>
Return all built-in agent configs (name, parsed config).
Sourcepub fn default_for_testing(provider_type: ProviderType) -> Self
pub fn default_for_testing(provider_type: ProviderType) -> Self
Create a minimal config for testing. Available in both koda-core and downstream crate tests.
Trait Implementations§
Source§impl Clone for KodaConfig
impl Clone for KodaConfig
Source§fn clone(&self) -> KodaConfig
fn clone(&self) -> KodaConfig
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for KodaConfig
impl RefUnwindSafe for KodaConfig
impl Send for KodaConfig
impl Sync for KodaConfig
impl Unpin for KodaConfig
impl UnsafeUnpin for KodaConfig
impl UnwindSafe for KodaConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more