All skills
Skillintermediate

Configuration API Reference

Configuration is defined by `ralph_core::RalphConfig`. The YAML file supports both: - **v2 nested format** (preferred): `cli`, `event_loop`, `core`, `hats`, `events` - **v1 flat format** (legacy): `agent`, `max_iterations`, `prompt_file`, etc.

Claude Code Knowledge Pack7/10/2026

Overview

Configuration API Reference

Overview

Configuration is defined by ralph_core::RalphConfig. The YAML file supports both:

  • v2 nested format (preferred): cli, event_loop, core, hats, events
  • v1 flat format (legacy): agent, max_iterations, prompt_file, etc.

Use RalphConfig::parse_yaml / RalphConfig::from_file and call normalize() to map legacy fields into the v2 nested structure.

Load Configuration From YAML

use ralph_core::RalphConfig;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut config = RalphConfig::from_file("ralph.yml")?;
    config.normalize();

    println!("Backend: {}", config.cli.backend);
    println!("Max iterations: {}", config.event_loop.max_iterations);

    Ok(())
}

Parse YAML In Memory

use ralph_core::RalphConfig;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let yaml = r#"
cli:
  backend: claude
event_loop:
  max_iterations: 50
  max_runtime_seconds: 3600
hats:
  planner:
    name: "Planner"
    triggers: ["task.create"]
    publishes: ["plan.done"]
"#;

    let mut config = RalphConfig::parse_yaml(yaml)?;
    config.normalize();

    assert_eq!(config.cli.backend, "claude");
    assert_eq!(config.event_loop.max_iterations, 50);

    Ok(())
}

Programmatic Overrides

You can override specific fields after loading:

use ralph_core::RalphConfig;

fn main() {
    let mut config = RalphConfig::default();

    config.cli.backend = "gemini".to_string();
    config.event_loop.max_iterations = 25;
    config.event_loop.max_runtime_seconds = 900;

    // Optional: update workspace root for path resolution
    config.core = config.core.with_workspace_root("/tmp/ralph-run");
}

Hat Backends in YAML

Backend selection is controlled via HatBackend inside hats.

hats:
  builder:
    name: "Builder"
    triggers: ["plan.done"]
    publishes: ["build.done"]
    backend:
      type: "kiro"
      agent: "builder"
      args: ["--verbose"]

  reviewer:
    name: "Reviewer"
    triggers: ["build.done"]
    publishes: ["review.done"]
    backend:
      type: "claude"
      args: ["--model", "claude-sonnet-4"]

  custom:
    name: "Custom"
    triggers: ["review.done"]
    backend:
      command: "/usr/local/bin/my-llm"
      args: ["--safe"]