Guide

Getting Started

Install

git clone https://github.com/dirmacs/doltclaw && cd doltclaw
cargo install --path . --features cli

Set up NVIDIA NIM

Get a free API key from build.nvidia.com:

export NVIDIA_API_KEY=nvapi-...

Create config

# If migrating from openclaw:
doltclaw migrate ~/.openclaw/openclaw.json > doltclaw.toml

# Or create manually — see doltclaw.toml in the repo

Verify

doltclaw check

Output:

Config OK
  nvidia-nim/qwen/qwen3.5-122b-a10b -> Qwen 3.5 122B (128k ctx, 16k max, reasoning=false)
    API: https://integrate.api.nvidia.com/v1
  nvidia-nim/z-ai/glm4.7 -> GLM 4.7 (125k ctx, 16k max, reasoning=true)
    API: https://integrate.api.nvidia.com/v1

Run a prompt

doltclaw run "Hello, what models are you?"

Use as a library

use doltclaw::{Agent, Config};
use std::sync::Arc;

#[tokio::main]
async fn main() -> doltclaw::Result<()> {
    let config = Config::load("doltclaw.toml".as_ref())?;
    let mut agent = Agent::from_config(config)?;

    // Register your own tools
    // agent.register_tool(Arc::new(MyCustomTool));

    let response = agent.execute("Explain Rust's ownership model").await?;
    println!("{}", response.content);
    println!("Model: {} | Iterations: {}", response.model_used, response.iterations);
    Ok(())
}

Model fallback

If the primary model (Qwen 3.5) fails with a retryable error (429, 5xx, timeout), doltclaw automatically tries the next model in the chain. Non-retryable errors (401, 403, 404) abort immediately.

[agent]
primary = "nvidia-nim/qwen/qwen3.5-122b-a10b"
fallbacks = [
  "nvidia-nim/stepfun-ai/step-3.5-flash",
  "nvidia-nim/z-ai/glm4.7",
]

Environment variable substitution

Use ${ENV_VAR} in your TOML config:

[providers.nvidia-nim]
api_key = "${NVIDIA_API_KEY}"

Variables are substituted at load time. Missing variables become empty strings.