Vollständig native ADK-Rust-Implementierung

Lerne Ralph

Eine autonome Agentenschleife, die läuft, bis alle PRD-Einträge abgeschlossen sind. Keine Bash-Skripte erforderlich – alles läuft in ADK-Rust.

Live ADK-Ralph v2 Demo

Gib Ralph ein kleines Produkt zum Bauen.

Dies führt die echte Rust-Binärdatei aus. Der PRD-Agent definiert eine User Story, der Architect-Agent erstellt Design und Aufgabenplan, und der Ralph Loop-Agent schreibt und verifiziert das Projekt in einem isolierten Arbeitsbereich.

01 · PRD Agent

Definieren Sie das Produkt

1

02 · Architect Agent

Entwerfen Sie das System

2

03 · Ralph Loop Agent

Bauen und verifizieren

3

Ein Projekt · drei Implementierungsiterationen · acht Minuten Limit · temporäre Dateien nach Lieferung gelöscht

Ralph-Ausführung
echter Prozess · gestreamt

Der echte Lauf wird hier erscheinen.

Sie sehen Agentenphasen, Werkzeugaktivitäten, Qualitätsprüfungen und die von Ralph zurückgegebenen Dateien.

Architektur im Überblick

Vollständig in Rust mit den nativen Schleifenfunktionen von ADK-Rust entwickelt

Loop-Agent
Orchestrator
Worker-Agent
Aufgabenausführung
PRD-Werkzeug
Aufgabenverwaltung
Git-Werkzeug
Versionskontrolle
Testwerkzeug
Qualitätsprüfung
1

Loop-Agent

Der zentrale Orchestrator durchläuft Aufgaben, delegiert Arbeit und verfolgt den Gesamtfortschritt.

2

Worker-Agent

Führt einzelne Aufgaben mit fokussiertem Kontext aus. Implementiert, testet und committet Änderungen.

3

Eigene Werkzeuge

Native ADK-Rust-Werkzeuge für Git, Dateioperationen, Qualitätsprüfungen und PRD-Verwaltung.

Wichtige Funktionen

Ralph zeigt die Fähigkeiten von ADK-Rust für die Entwicklung autonomer Agenten

🔄

Autonome Schleife

Kontinuierliche Ausführung bis alle PRD-Einträge abgeschlossen sind. Native Schleifenwerkzeuge ohne Bash-Skripte.

🤖

Multi-Agenten-Koordination

Der Loop-Agent koordiniert Worker-Agenten. Jeder Agent spezialisiert sich auf seine Aufgabe und arbeitet dadurch effektiver.

🛠️

Eigene Werkzeuge

Git, Dateioperationen, Qualitätsprüfungen und PRD-Verwaltung – alles als native ADK-Rust-Werkzeuge umgesetzt.

📋

PRD-gesteuert

JSON-basierte Aufgabenverwaltung mit User Stories, Akzeptanzkriterien und Ergebnisverfolgung.

Qualitätsprüfungen

Automatische Prüfung mit cargo check, test, clippy und fmt vor jedem Commit.

💾

Dauerhafter Zustand

Git-Commits, Fortschrittsprotokolle und AGENTS.md-Aktualisierungen schaffen vollständigen Kontext und Nachvollziehbarkeit.

Implementierung im Detail

Sauberer, idiomatischer Rust-Code, der den vollständigen Funktionsumfang von ADK-Rust nutzt

use serde::{Deserialize, Serialize};
use std::fs;
use anyhow::Result;

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Prd {
    pub project: String,
    pub branch_name: String,
    pub description: String,
    pub user_stories: Vec<UserStory>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UserStory {
    pub id: String,
    pub title: String,
    pub description: String,
    pub acceptance_criteria: Vec<String>,
    pub priority: u32,
    pub passes: bool,
    #[serde(default)]
    pub notes: String,
}

impl Prd {
    pub fn load(path: &str) -> Result<Self> {
        let content = fs::read_to_string(path)?;
        let prd: Prd = serde_json::from_str(&content)?;
        Ok(prd)
    }
    
    pub fn save(&self, path: &str) -> Result<()> {
        let content = serde_json::to_string_pretty(self)?;
        fs::write(path, content)?;
        Ok(())
    }
    
    pub fn get_next_task(&self) -> Option<&UserStory> {
        self.user_stories
            .iter()
            .filter(|story| !story.passes)
            .min_by_key(|story| story.priority)
    }
    
    pub fn mark_complete(&mut self, task_id: &str) -> Result<()> {
        if let Some(story) = self.user_stories
            .iter_mut()
            .find(|s| s.id == task_id) 
        {
            story.passes = true;
        }
        Ok(())
    }
    
    pub fn is_complete(&self) -> bool {
        self.user_stories.iter().all(|story| story.passes)
    }
    
    pub fn stats(&self) -> (usize, usize) {
        let complete = self.user_stories
            .iter()
            .filter(|s| s.passes)
            .count();
        let total = self.user_stories.len();
        (complete, total)
    }
}

Projekt- struktur

Eine klare, modulare Organisation trennt Agenten, Werkzeuge und Modelle und erleichtert Wartung und Erweiterung.

ralph/
├── Cargo.toml                # Ralph agent config
├── src/
│   ├── main.rs               # Entry point
│   ├── agents/
│   │   ├── mod.rs
│   │   ├── loop_agent.rs     # Main orchestrator
│   │   └── worker_agent.rs   # Task executor
│   ├── tools/
│   │   ├── mod.rs
│   │   ├── git_tool.rs       # Git operations
│   │   ├── file_tool.rs      # File manipulation
│   │   ├── test_tool.rs      # Quality checks
│   │   └── prd_tool.rs       # PRD management
│   └── models/
│       ├── prd.rs            # PRD data structures
│       └── config.rs         # Configuration
├── prd.json                  # Task list
└── progress.txt              # Learnings log

Nativ gegenüber Bash

Warum autonome Agenten direkt in Rust bauen, statt sie mit Shell-Skripten zu orchestrieren?

AspektBashNativ
ImplementierungShell-Skript + ADK-RustReines Rust
TypsicherheitLaufzeitKompilierzeit
FehlerbehandlungExit-CodesResult<T, E>
NebenläufigkeitSequenziellAsync/await
WerkzeugintegrationShell-BefehleNative ADK-Rust-Werkzeuge
DebuggingProtokolldateienTracing + strukturierte Protokolle
LeistungAufwand für neue ProzesseAbstraktionen ohne Laufzeitkosten
SpeichersicherheitManuelle VerwaltungVom Compiler garantiert
TestsNur IntegrationstestsUnit- und Integrationstests

Bereit, deinen eigenen Ralph zu bauen?

Erkunde den vollständigen Quellcode, passe ihn an deinen Anwendungsfall an oder nutze ihn als Grundlage für eigene autonome Agentensysteme.