Nudge Logo

Nudge

Ne passez plus votre temps à parser vos agents. Donnez-leur un Nudge.
Un langage de programmation typé, rejouable et soucieux du budget pour les agents IA.
Moteur bytecode natif et compilateur autonome. Compile vers Python et TypeScript.

Version License Platform Target VS Code Good First Issues Snyk Verified

---

English • 中文 • 日本語 • 한국어 • Русский • Español • Türkçe • Deutsch • Français

--- ## Pourquoi Nudge ? Les agents en production sont encore trop souvent assemblés avec du code de bricolage : chaînes de prompts découpées à la main, appels d'outils enveloppés dans des blocs try/except, absence de rejouabilité, coûts imprévisibles et aucun test de régression. Les bibliothèques ne font que masquer les symptômes. **Nudge corrige le problème à la racine : au niveau du langage.** | Point Critique | Bibliothèques classiques | Nudge | |:---|:---|:---| | Sortie LLM non typée | Validation au runtime | Le schéma est un type natif de premier ordre, vérifié à la compilation | | Effets de bord cachés | Invisibles | 10 effets typés explicites déclarés dans les signatures (`uses LLM, Tool, IO, ...`) | | Aucun test de régression | Replay greffé artificiellement | Chaque exécution écrit une trace NTF déterministe rejouable pour 0$ | | Surprises budgétaires | Découvertes à la facture | Le budget est un contrat strict garanti par le compilateur et le runtime | | Spaghetti asynchrone | Boucles async manuelles | Primitives natives `par map / race / all` avec sûreté vérifiée à la compilation | ## Un aperçu de Nudge ```nudge type Finding = { claim: string, source: Url, confidence: float @range(0, 1) } fn analyze(q: string, hits: [SearchResult]) -> [Finding] uses LLM { llm"""Extrais des observations vérifiables sur {q} depuis : {hits}""" with { schema: [Finding], model: "anthropic:sonnet-4.6", budget: 0.03 USD, retry: 2 with repair } } test "reste dans le budget sur trace enregistrée" { let t = replay("traces/demo.jsonl") assert t.cost_usd < 0.25 // zéro token consommé en CI } ``` Le compilateur garantit la conformité du schéma, déduit les effets et borne le coût maximal. Le runtime enregistre chaque interaction dans une trace adressée par son contenu, versionnable et rejouable pour 0$. ## Démarrage rapide ### 1. Installer Nudge **Installateur en une ligne (Recommandé) :** ```sh # Linux / macOS curl -fsSL https://raw.githubusercontent.com/NekomyaDev/nudge/main/install.sh | bash # Windows (PowerShell en Administrateur) irm https://raw.githubusercontent.com/NekomyaDev/nudge/main/install.ps1 | iex ``` **Gestionnaires de paquets et conteneurs :** ```sh # Snap (Linux) sudo snap install nudge --classic # Docker docker run -it --rm -v $(pwd):/workspace nekomyadev/nudge nudgec --help ``` ### 2. Premier test en 60 secondes (Natif, 0$) Sans Python, sans Node.js et sans clés d'API requises : ```sh # Créer un programme cat > hello.ndg << 'EOF' type Greeting = { message: string, timestamp: string } fn greet(name: string) -> Greeting uses LLM { llm"""Crée une salutation pour {name}. Renvoie message et timestamp.""" with { schema: Greeting, model: "anthropic:sonnet-4.6", budget: 0.01 USD } } fn main() -> Greeting uses LLM { greet("World") } EOF # Vérifier les types nudgec check hello.ndg # Exécuter sur la VM native (0$, sans clé d'API) nudgec run hello.ndg # Lancer les tests de régression hors-ligne nudgec test hello.ndg ``` ### 3. Leçons interactives ```sh # Leçons interactives dans votre terminal nudgec learn # Initialiser un projet avec des modèles prêts à l'emploi nudgec init my-agent --template triage cd my-agent && nudgec check my-agent.ndg && nudgec run my-agent.ndg ``` ### 4. Compilation vers Python ou TypeScript (Optionnel) ```sh # Cible Python pip install nudge-runtime nudgec build hello.ndg # génère out/hello.py python3 out/hello.py # Cible TypeScript nudgec build-ts hello.ndg # génère out/hello.ts ``` ## Fonctionnalités principales | Fonctionnalité | Description | |:---|:---| | **Appels LLM Typés** | Le schéma de sortie est un type, réparations automatiques si invalide | | **Contrôle & Données** | `if/else`, boucles `for`, enregistrements `{k: v}`, indexation, `T?`, `T \| U` | | **Effets Typés** | 10 effets connus suivis et vérifiés statiquement à la compilation | | **Espace de travail sécurisé** | Système de fichiers cloisonné en bac à sable + stockage clé-valeur typé | | **Interface Locale (UI)** | Vues typées, fenêtres, tests headless et fenêtre desktop native | | **Tâches & Concurrence** | Spawn/join, annulation coopérative, `par race`, libération de budget | | **Authentification Sécurisée** | Flux RFC 8628 OAuth Device Flow fail-closed natif | | **Décisions Typées** | Classification groupée, scoring par rubriques (`/v1/systemone`) | | **Utilisation d'ordinateur** | Observation d'écran, actions typées, liste blanche d'applications | | **Moteur Bytecode VM** | VM pile native (~70x plus rapide en calcul pur, sûreté récursive) | | **Agents Autonomes** | Exécutable unique sans dépendance Cargo (~2.09Mo live, ~832Ko replay) | | **Cible WebAssembly** | Replay hors-ligne dans WASI (~526Ko) et pont d'outils live | | **Traces Déterministes** | Format ouvert NTF v1, rejouabilité à 0$, validation CI | | **Confidentialité & Masquage** | Masquage automatique des secrets et données personnelles | ## Variables d'environnement | Variable | Portée | Description | Valeur par défaut | |:---|:---|:---|:---| | `NUDGE_PROVIDER` | les deux | Fournisseur LLM actif (`fake`, `openai`, `anthropic`, `gemini`, etc.) | `fake` | | `NUDGE_VM` | natif | Moteur Bytecode VM (`1` = VM par défaut, `0` = interpréteur AST) | `1` | | `NUDGE_BUDGET` | les deux | Plafond budgétaire global en USD | Aucun | | `NUDGE_TRACE` | les deux | Chemin de destination du fichier de trace NTF JSONL | `trace.jsonl` | | `NUDGE_REPLAY` | les deux | Chemin de trace pour le replay déterministe hors-ligne | Aucun | | `NUDGE_TRACE_REDACT` | natif | Masquage automatique des secrets et données sensibles (`1` ou `0`) | `1` (Actif) | | `NUDGE_WORKSPACE_DIR` | natif | Répertoire racine de l'espace de travail sécurisé | Répertoire courant | | `NUDGE_STORE_PATH` | natif | Fichier de stockage clé-valeur persistant | `/.nudge/store.json` | ## Licence Nudge est distribué sous licence **Apache-2.0**.