Skip to main content

hello_world/
hello_world.rs

1use antigravity_sdk_rust::agent::{Agent, AgentConfig};
2use antigravity_sdk_rust::policy;
3use antigravity_sdk_rust::types::GeminiConfig;
4use tracing_subscriber::EnvFilter;
5
6#[tokio::main]
7async fn main() -> Result<(), anyhow::Error> {
8    // Initialize tracing subscriber to print info/debug logs by default
9    tracing_subscriber::fmt()
10        .with_env_filter(EnvFilter::try_from_default_env().unwrap_or_else(|_| "info".into()))
11        .init();
12
13    // Load environment variables from .env file if present
14    dotenvy::dotenv().ok();
15
16    let mut config = AgentConfig::default();
17
18    // Check if the user specified a binary path or check the environment variable
19    if let Ok(harness_path) = std::env::var("ANTIGRAVITY_HARNESS_PATH") {
20        config.binary_path = Some(harness_path);
21    }
22
23    // Configure Gemini Configuration with API Key and explicit model name
24    let mut gemini_config = GeminiConfig::default();
25    if let Ok(api_key) = std::env::var("GEMINI_API_KEY") {
26        gemini_config.api_key = Some(api_key);
27    }
28    // Explicitly set the model to gemini-3.5-flash
29    gemini_config.models.default.name = "gemini-3.5-flash".to_string();
30    config.gemini_config = gemini_config;
31
32    config.policies = Some(vec![policy::allow_all()]);
33
34    let mut agent = Agent::new(config);
35    println!("Starting agent...");
36    agent.start().await?;
37
38    let prompt = "Say 'Hello World!'";
39    println!("  User: {}", prompt);
40
41    let response = agent.chat(prompt).await?;
42    println!("  Agent: {}", response.text);
43
44    agent.stop().await?;
45    Ok(())
46}