Découvrez Ralph
Une boucle d'agents autonome qui s'exécute jusqu'à ce que tous les éléments du PRD soient terminés. Aucun script Bash n'est nécessaire : tout s'exécute dans ADK-Rust.

Démo en direct ADK-Ralph v2
Donner à Ralph un petit produit à construire.
Cela exécute le vrai binaire Rust. L'agent PRD définit une user story, l'agent Architect crée le design et le plan de tâches, et l'agent Ralph Loop écrit et vérifie le projet dans un espace de travail isolé.
01 · PRD Agent
Définir le produit
02 · Architect Agent
Concevoir le système
03 · Ralph Loop Agent
Construire et vérifier
Un projet · trois itérations d'implémentation · limite de huit minutes · fichiers temporaires supprimés après livraison
L'exécution réelle apparaîtra ici.
Vous verrez les phases de l'agent, l'activité des outils, les contrôles qualité et les fichiers que Ralph retourne.
Architecture générale
Entièrement construit en Rust avec les capacités de boucle natives d'ADK-Rust
Agent en boucle
L'orchestrateur principal parcourt les tâches, délègue le travail et suit l'avancement global.
Agent exécutant
Exécute chaque tâche avec un contexte ciblé. Implémente, teste et enregistre les modifications.
Outils personnalisés
Outils ADK-Rust natifs pour Git, les fichiers, les contrôles qualité et la gestion du PRD.
Capacités principales
Ralph présente les capacités d'ADK-Rust pour développer des agents autonomes
Boucle autonome
Exécution continue jusqu'à la fin de tous les éléments du PRD. Intégration native des outils de boucle, sans script Bash.
Coordination multi-agent
L'agent en boucle orchestre les agents exécutants. Chaque agent se spécialise dans son rôle pour gagner en efficacité.
Outils personnalisés
Git, opérations sur les fichiers, contrôles qualité et gestion du PRD : tout est conçu comme des outils ADK-Rust natifs.
Piloté par le PRD
Gestion des tâches en JSON avec récits utilisateur, critères d'acceptation et suivi des résultats.
Contrôles qualité
Vérification automatique avec cargo check, test, clippy et fmt avant chaque commit.
Persistance de l'état
Les commits Git, les journaux de progression et les mises à jour d'AGENTS.md assurent une mémoire complète et la traçabilité.
Implémentation détaillée
Un code Rust clair et idiomatique qui exploite toutes les capacités d'ADK-Rust
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)
}
}Structure du projet
Une organisation modulaire qui sépare agents, outils et modèles afin de faciliter la maintenance et l'extension.
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
Natif contre Bash
Pourquoi construire des agents autonomes directement en Rust plutôt que de les orchestrer avec des scripts shell ?
| Aspect | Bash | Natif |
|---|---|---|
| Implémentation | Script shell + ADK-Rust | Rust pur |
| Sûreté des types | À l'exécution | À la compilation |
| Gestion des erreurs | Codes de sortie | Result<T, E> |
| Concurrence | Séquentiel | Async/await |
| Intégration des outils | Commandes shell | Outils ADK-Rust natifs |
| Débogage | Fichiers journaux | Traçage + journaux structurés |
| Performances | Coût de création des processus | Abstractions sans surcoût |
| Sécurité mémoire | Gestion manuelle | Garantie par le compilateur |
| Tests | Tests d'intégration uniquement | Tests unitaires et d'intégration |
Prêt à créer votre propre version de Ralph ?
Explorez le code source complet, adaptez-le à votre cas d'usage ou utilisez-le comme point de départ pour vos propres systèmes d'agents autonomes.