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
02 · Architect Agent
Entwerfen Sie das System
03 · Ralph Loop Agent
Bauen und verifizieren
Ein Projekt · drei Implementierungsiterationen · acht Minuten Limit · temporäre Dateien nach Lieferung gelöscht
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
Der zentrale Orchestrator durchläuft Aufgaben, delegiert Arbeit und verfolgt den Gesamtfortschritt.
Worker-Agent
Führt einzelne Aufgaben mit fokussiertem Kontext aus. Implementiert, testet und committet Änderungen.
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?
| Aspekt | Bash | Nativ |
|---|---|---|
| Implementierung | Shell-Skript + ADK-Rust | Reines Rust |
| Typsicherheit | Laufzeit | Kompilierzeit |
| Fehlerbehandlung | Exit-Codes | Result<T, E> |
| Nebenläufigkeit | Sequenziell | Async/await |
| Werkzeugintegration | Shell-Befehle | Native ADK-Rust-Werkzeuge |
| Debugging | Protokolldateien | Tracing + strukturierte Protokolle |
| Leistung | Aufwand für neue Prozesse | Abstraktionen ohne Laufzeitkosten |
| Speichersicherheit | Manuelle Verwaltung | Vom Compiler garantiert |
| Tests | Nur Integrationstests | Unit- 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.