Define your jobs in a YAML file, run them locally, trace every event in JSONL — zero external infrastructure.
Crée un fichier workflow.yml avec un name, une version et une liste de steps. Valide-le en une commande.
Enregistre le job, lance-le. RunFlow crée un workspace isolé et émet chaque événement en JSONL.
Liste tes runs, lis les logs JSONL, consulte les manifests de complétion et nettoie les anciens runs avec la rétention.
Exécution de steps ordonnés : command, sleep, wait_until, plugin.
Chaque événement de run est écrit en JSONL. Historique complet et lisible.
Chaque run terminé produit manifest.json avec statut final, timestamps, policy et métriques.
Chaque run dispose de son propre workspace dans .flow/, ignoré par Git.
Génère des squelettes Rust, Java, Python, Node. Valide les manifests.
Build et installe des packages JSON avec workflow YAML et checksum déterministe.
Runs et jobs projetés en SQLite pour des requêtes rapides.
Supprime les anciens runs et snapshots avec dry-run, limite de conservation et seuil d'âge.
Seul name est obligatoire pour créer un draft. version et schema_version valent 1 par défaut, steps vaut []. Pour run/test/package, il faut au moins un step.
Types de steps supportés :
git clone https://github.com/dandyArise/runflow.gitSet-Location .\runflowcargo build --release.\target\release\flow.exe versionOptionnel : ajouter le répertoire release à votre PATH utilisateur.
$bin = (Resolve-Path .\target\release).Path
[Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path","User")+";$bin","User")git clone https://github.com/dandyArise/runflow.gitcd runflowcargo build --release./target/release/flow versionSans installation globale : cargo run -- version
Objectif : lancer un ping vers 1.1.1.1 et récupérer stdout/stderr et les métadonnées du step via RunFlow.
# workflow.ymlname: ping-cloudflare
version: 1
schema_version: 1
steps:
- name: ping_1111
type: command
run:
command: ping
args: ["-n", "4", "1.1.1.1"]Sur Linux/macOS, utilisez args: ["-c", "4", "1.1.1.1"].
flow job add .\workflow.yml$runId = flow job run ping-cloudflareflow run summary $runIdflow run output $runId ping_1111flow run output $runId ping_1111 --stderrLes fichiers sont aussi disponibles directement dans logs/ et .flow/.
Get-Content ".\logs\$runId\ping_1111\stdout.log"Get-Content ".\logs\$runId\ping_1111\step.metadata.json"Le bloc schedule du workflow configure l'exécution automatique par le daemon. Les commandes flow schedule servent seulement à prévisualiser les prochaines dates.
schedule:
cron: "0 */5 * * * * *"
timezone: Europe/Paris
enabled: trueFormat cron : sec min hour day-of-month month day-of-week year. Sans schedule, ou avec schedule: false / enabled: false, le job reste exécutable manuellement mais le daemon ne le planifie pas.
Le raccourci schedule: "0 */5 * * * * *" reste supporté et équivaut à timezone UTC + enabled true.
Preview CLI : ces commandes ne lancent rien, elles affichent seulement les prochaines dates calculées.
flow schedule next "0 */5 * * * * *" --count 5flow schedule next "0 */5 * * * * *" --from 2026-05-31T14:00:00Z --count 3flow schedule workflow .\workflow.ymlExemples : 0 0 * * * * * = toutes les heures, 0 */10 * * * * * = toutes les 10 minutes, 0 30 9 * * Mon * = chaque lundi à 09:30 UTC.