Skip to content
/

Prodigy

prodigy-iepathos · iepathos/prodigy · ★ 9 · last commit 2026-05-26

Turn ad-hoc Claude sessions into reproducible, parallel, checkpointable development pipelines via YAML workflow files.

Best whenClaude invocations should be treated as CI/CD pipeline steps — deterministic, resumable, parallelizable, and observable.
Skip ifAd-hoc Claude sessions with no reproducibility, Manual shepherding of agent through sequential prompts
vs seeds
superpowers' behavioral skills, Prodigy requires zero changes to Claude's system prompt — all orchestration lives in the host proce…
Primitive shape
No installable primitives
00

Summary

Prodigy — Summary

Prodigy is a Rust CLI tool that transforms ad-hoc Claude sessions into reproducible, parallel development pipelines defined in YAML workflow files. Written in Rust with a functional-core / imperative-shell architecture, it provides MapReduce-style parallel agent execution, automatic retry with exponential backoff, circuit breakers, and git-worktree isolation per workflow run. Each workflow step invokes a Claude slash command or a shell command, with conditional branching on failure or success. State is checkpointed to disk so interrupted workflows resume exactly where they stopped. Prodigy is the only framework in this batch that ships as a compiled native binary distributed through crates.io, positioning it as infrastructure-grade rather than a configuration overlay. Compared to seeds, it most resembles spec-driver's sequential skill-chain philosophy but adds parallel MapReduce execution, crash recovery, and per-run worktree isolation that spec-driver lacks; unlike claude-flow's 305-tool MCP server, Prodigy orchestrates at the process level using the Claude CLI binary directly.

01

Overview

Prodigy — Overview

Origin

Prodigy was authored by Glen Baker (iepathos) and published to crates.io as version 0.4.4. The first public commit dates from early 2026 and the repository has been actively pushed as recently as 2026-05-26. It has 9 GitHub stars and 2 contributors.

Philosophy

The project description reads: "Turn ad-hoc Claude sessions into reproducible development pipelines with parallel AI agents." The README opens with: "Transform ad-hoc Claude sessions into reproducible development pipelines with parallel execution, automatic retry, and full state management."

The core design opinion is that Claude interactions should be treated like CI/CD pipelines — deterministic, resumable, observable, and parallelizable. Prodigy rejects the idea of manually shepherding Claude through sequential prompts in a terminal and instead treats each Claude invocation as a pipeline step in a DAG.

Key Design Opinions

  • YAML-first workflow definition: Complex orchestration is encoded in plain YAML, not code or prompts.
  • Functional core / imperative shell: All business logic lives in pure Rust functions; I/O is isolated to an outer shell. This makes the orchestration engine itself testable without mocks.
  • Worktree isolation by default: Every workflow execution creates a git worktree, so parallel branches don't collide.
  • Failure is first-class: on_failure and on_success branches are first-class YAML constructs, not error-catching afterthoughts.
  • Analytics over intuition: Cost tracking, performance metrics, and optimization recommendations are built in.
02

Architecture

Prodigy — Architecture

Distribution & Install

  • Distribution type: cli-tool (Rust binary via crates.io)
  • Primary install: cargo install prodigy
  • Source install: git clone && cargo build --release && cargo install --path .
  • Binary name: prodigy
  • Version analyzed: 0.4.4 (from Cargo.toml)
  • License: MIT
  • Required runtime: Rust toolchain for source build; precompiled binary otherwise. Claude CLI must be installed and authenticated separately.

Directory Tree (repo)

prodigy/
├── .claude/              # Claude Code context
├── .prodigy/             # Prodigy config dir
├── src/
│   ├── main.rs
│   ├── lib.rs
│   ├── cli/
│   │   ├── commands/     # changelog, checkpoints, clean, config, dlq, events, exec, logs, progress, resume, sessions, worktree
│   │   ├── args.rs
│   │   ├── router.rs
│   │   └── yaml_validator.rs
│   ├── core/             # Pure functional modules
│   │   ├── config/
│   │   ├── session/
│   │   ├── workflow/
│   │   ├── mapreduce/
│   │   └── validation/
│   ├── storage/          # Persistence layer
│   ├── worktree/         # Git worktree management
│   ├── subprocess/       # Claude CLI process spawning
│   └── unified_session/
├── workflows/            # Example YAML workflows
├── templates/            # Workflow templates
├── specs/                # Feature specs (YAML)
└── scripts/              # install-man-pages.sh, etc.

Target AI Tools

  • Primary: Claude CLI (claude binary)
  • Cross-tool: Any CLI that accepts slash commands (referenced via claude: "/command" in YAML steps)

Workflow Format

Workflows are YAML files with steps, mode: mapreduce, setup, map, reduce, and config blocks. Each step can be shell: or claude: with on_failure: / on_success: branches and capture_output: for chaining outputs.

Key Dependencies (Cargo.toml)

  • clap 4.5 — CLI argument parsing
  • tokio 1.49 — async runtime
  • serde_yaml 0.9 — workflow parsing
  • git2 0.20 — git worktree operations
  • axum 0.8 — analytics/observability HTTP endpoints
  • uuid 1.10 — session IDs
  • indicatif 0.18 — progress bars
03

Components

Prodigy — Components

CLI Subcommands

Command Purpose
prodigy run <workflow.yml> Execute a workflow file sequentially
prodigy exec "<step>" Execute a single step with retry
prodigy batch "<glob>" --command <cmd> --parallel N Run a command over matched files in parallel
prodigy resume <workflow-id> Resume an interrupted workflow from checkpoint
prodigy analytics --session <id> View cost/performance metrics for a session
prodigy worktree ls List active git worktrees
prodigy worktree ls --detailed Show enhanced session info per worktree
prodigy worktree ls --json Machine-readable worktree list
prodigy worktree clean Remove inactive worktrees
prodigy config Manage Prodigy configuration
prodigy sessions List all sessions
prodigy logs View session logs
prodigy checkpoints List workflow checkpoints
prodigy clean Clean up state files
prodigy dlq Inspect dead-letter queue (failed steps)
prodigy events Show workflow event history
prodigy progress Show workflow progress

Workflow Primitives

Primitive Purpose
shell: step Run a shell command; capture output; branch on failure/success
claude: step Invoke a Claude slash command; pass captured vars
mode: mapreduce Fan out over a list of inputs to parallel agents, then reduce
on_failure: Recursive sub-workflow triggered on step failure
on_success: Recursive sub-workflow triggered on step success
capture_output: Bind step stdout to a named variable for use in later steps
commit_required: Whether the step must result in a git commit
analysis.max_cache_age: How fresh cached analysis must be before re-running
config.max_iterations: Loop cap when using --iterate flag
config.continue_on_error: Whether to proceed past non-critical failures
config.command_timeout: Per-step execution timeout
config.environment: Environment variables injected into all steps

Example Workflow Files (in workflows/)

  • implement-with-tests.yml — TDD pipeline with test-fail recovery
  • fix-files-mapreduce.yml — parallel fix across file list
  • documentation-drift.yml — detect and repair doc/code drift
  • analysis-workflow.yml — codebase analysis
  • coverage.yml — test coverage improvement loop
  • complex-build-pipeline.yml — multi-stage build with retry
  • debtmap.yml — technical debt mapping
  • debtmap-reduce.yml — MapReduce version of debt analysis

Scripts

  • scripts/install-man-pages.sh — installs man pages for offline help
  • install.sh — build-from-source helper

No Hooks, No Skills, No MCP

Prodigy does not use Claude Code hook events, skill files, or MCP servers. Orchestration is entirely at the process level.

05

Prompts

Prodigy — Prompts

Prodigy does not embed prompt text files; instead, prompts are YAML workflow step values (the claude: field value is a Claude slash command string). The framework invokes Claude via the CLI, so the agent prompt is the target tool's system prompt plus the slash command.

Verbatim Excerpt 1 — workflows/implement-with-tests.yml

# Step 1: Implement the specification
- claude: "/prodigy-implement-spec $ARG"
  analysis:
    max_cache_age: 300

# Step 2: Run tests to verify implementation  
- shell: "cargo test"
  capture_output: "test_output"
  commit_required: false
  on_failure:
    # If tests fail, debug and fix them
    claude: "/prodigy-debug-test-failures '${test_output}'"
    commit_required: true
    on_success:
      # After fixing, verify tests pass
      shell: "cargo test"
      commit_required: false
      on_failure:
        # If still failing, try a more thorough fix
        claude: "/prodigy-fix-test-failures '${shell.output}' --deep-analysis"
        commit_required: true

Technique: Sequential prompt chaining — shell output is captured as test_output and injected directly into the next Claude invocation. The outer on_failure: triggers a repair loop with up to 2 retry levels.

Verbatim Excerpt 2 — workflows/fix-files-mapreduce.yml (referenced in README)

name: add-documentation
mode: mapreduce

setup:
  - shell: "find src -name '*.rs' -type f > files.json"

map:
  input: files.json
  agent_template:
    - claude: "/add-rust-docs ${item}"
  max_parallel: 10

reduce:
  - claude: "/summarize Documentation added to ${map.successful} files"

Technique: MapReduce fan-out — ${item} is substituted per file, allowing up to 10 Claude agents to run concurrently. The reduce step receives a count of successful map operations via ${map.successful}.

Prompting Pattern Assessment

  • Prompt chaining: Yes — one step's captured output becomes the literal argument to the next Claude invocation.
  • Template substitution: $ARG, ${item}, ${test_output}, ${shell.output}, ${map.successful} are runtime-substituted variables.
  • No persona injection: Prodigy does not inject personas or system-level instructions; it relies on the target tool's slash command handling.
  • Failure-aware retry: Multi-level nested on_failure: blocks create recovery sub-chains without human intervention.
09

Uniqueness

Prodigy — Uniqueness & Positioning

Differs from Seeds

Prodigy is most similar to spec-driver in its sequential skill-chaining philosophy — both treat each agent step as a discrete unit with defined inputs and outputs. However, Prodigy diverges sharply in three dimensions: (1) it is a compiled Rust binary rather than a set of markdown skill files, making it infrastructure rather than a behavioral overlay; (2) it adds parallel MapReduce execution across git worktrees, which no seed framework supports; and (3) it has first-class crash recovery via checkpoints and a dead-letter queue, turning a best-effort agent loop into an engineering-grade pipeline. Compared to claude-flow's MCP-anchored approach, Prodigy invokes Claude at the process level rather than through a tool-server, giving it simpler deployment but lower cross-tool portability. Unlike superpowers' skills-only behavioral framework, Prodigy requires zero changes to Claude's system prompt; the orchestration lives entirely in the host process.

Positioning

Prodigy targets teams that want CI/CD-grade reproducibility for Claude workflows — not researchers running one-off prompts. The intended user has multiple files to process in parallel, needs to resume after failures, and wants cost analytics. It is the only framework in this catalog that ships as a native Rust binary via crates.io.

Observable Failure Modes

  • Claude CLI dependency: The workflow fails if the Claude CLI is not installed, not authenticated, or its slash commands are not defined. Prodigy does not ship the slash commands — it assumes they exist.
  • YAML coupling: Workflow files reference slash commands by name (/prodigy-implement-spec). If those commands are renamed or removed, all dependent workflows break silently.
  • No agent memory: Each Claude invocation is cold-started. For complex multi-step tasks, the agent may lose context between steps despite output capture.
  • Worktree accumulation: prodigy worktree clean must be run manually; stale worktrees accumulate on disk.
  • No approval gate: Fully autonomous execution means a bad step can cascade before the human intervenes.

Explicit Antipatterns

None stated in README, but the design implies: avoid embedding complex logic in capture_output chaining instead of writing explicit reduce steps.

04

Workflow

Prodigy — Workflow

Phases

Phase Description Artifact
Init prodigy init creates .prodigy/ config dir .prodigy/ directory
Workflow authoring User writes YAML with steps, mode, config workflow.yml
Execution prodigy run workflow.yml spawns Claude CLI per step Session logs, commits
Parallel fan-out (if MapReduce) Setup step builds file list; map fan-out spawns parallel agents Per-file worktrees
Reduce Reduce step aggregates results Summary output
Retry/recovery on_failure: sub-workflow; circuit breaker; prodigy resume Updated checkpoint
Analytics prodigy analytics queries cost/perf data Report

Approval Gates

Prodigy has no interactive approval gates by default. Workflow execution is fully autonomous. The human defines the workflow YAML in advance; execution is non-interactive. Failure branches are automatic. Optionally, commit_required: true on a step acts as an implicit quality gate (the step fails if no commit results).

Spec Format

Workflows are plain YAML. Each step is an object with claude: or shell:, optional on_failure: / on_success: branches, and config: blocks. There is no separate spec language.

Key Execution Concepts

  • Checkpoint/resume: State is persisted to disk after each step; prodigy resume <id> re-enters from the last completed checkpoint.
  • Dead-letter queue (DLQ): Permanently failed steps are queued in a DLQ for manual inspection.
  • Circuit breaker: Repeated failures on the same step trigger a circuit breaker that halts the workflow.
  • Session tracking: Every run has a UUID session; analytics, logs, and worktrees are keyed to the session.
06

Memory Context

Prodigy — Memory & Context

State Storage

Prodigy uses file-based state in the .prodigy/ directory within the project root:

  • Session files: UUID-keyed JSON per session (start time, steps completed, checkpoint positions)
  • Checkpoints: Serialized step states written after each step completes; read on prodigy resume
  • Dead-letter queue (DLQ): Failed steps archived to disk for manual review
  • Logs: Per-session logs in logs/ subdirectory
  • Analytics: Cost and performance metrics stored as structured files

Persistence Scope

Persistence is project-scoped. The .prodigy/ directory lives in the project repo. Multiple projects each have independent state.

Memory Between Claude Invocations

Each Claude step is a fresh CLI invocation with no cross-step memory except:

  • capture_output: variables injected as arguments into subsequent claude: steps
  • Git history (committed changes from prior steps are visible to Claude via filesystem)
  • Worktree state (parallel agents each see their isolated worktree)

There is no vector store, SQLite, or persistent conversation memory. Context passes only through captured shell output and git state.

Context Compaction

No explicit context compaction mechanism. Each Claude invocation is an independent process; the framework does not manage token budgets or compact prior conversations.

Cross-Session Handoff

Resume via prodigy resume <session-id> re-enters from the last checkpoint. The session ID is passed; state is reconstructed from disk files. This is a form of crash recovery, not a persistent memory handoff.

07

Orchestration

Prodigy — Orchestration

Multi-Agent Support

Yes — via the mode: mapreduce workflow keyword. The map phase spawns up to max_parallel concurrent Claude CLI processes, each in its own isolated git worktree, each receiving a different ${item} from the input file list. The reduce phase is a single subsequent step receiving aggregated results.

Orchestration Pattern

Parallel fan-out (MapReduce). Sequential workflows are also supported for single-threaded pipelines. There is no hierarchical queen/worker topology, no swarm, and no consensus mechanism.

Isolation Mechanism

git-worktree — every workflow execution creates an isolated git worktree by default. This is documented as "Automatic worktree isolation for every workflow execution." Parallel map agents each receive their own worktree, preventing filesystem collision.

Multi-Model Support

No. Prodigy invokes whichever Claude CLI is installed. There is no model routing or role-to-model mapping. The YAML workflow references slash commands, not models.

Execution Mode

One-shot per prodigy run invocation, with resume capability. The workflow runs to completion (or failure) in a single prodigy run invocation. It is not a daemon; not continuously polling.

Crash Recovery

Yes — checkpoint files written after each step allow prodigy resume to re-enter mid-workflow. The dead-letter queue archives permanently failed steps.

Circuit Breaker

Prodigy implements a circuit breaker that halts the workflow after repeated failures on the same step. This prevents infinite retry loops.

Consensus Mechanism

None. Parallel map agents do not coordinate with each other; results are collected by the reduce step.

Prompt Chaining

Yes — capture_output: + variable substitution is the explicit mechanism for one step's output to become the next step's argument.

08

Ui Cli Surface

Prodigy — UI & CLI Surface

Dedicated CLI Binary

Yes — prodigy is a compiled Rust binary distributed via crates.io. It is not a thin wrapper over the Claude CLI; it is its own runtime that manages sessions, worktrees, checkpoints, analytics, and parallel process spawning. It calls Claude CLI as a subprocess.

Subcommands

run, exec, batch, resume, analytics, worktree ls/clean, config, sessions, logs, checkpoints, clean, dlq, events, progress

Local UI / Dashboard

The codebase contains axum 0.8 and tower-http as dependencies, suggesting a local HTTP server is available or planned. The README references analytics as a built-in feature (prodigy analytics --session abc123). However, no documented web dashboard port or visual interface is confirmed in the README or the docs directory structure. Status: partial/unknown — HTTP server code exists in the binary but no documented dashboard URL.

Terminal Output

indicatif 0.18 provides progress bars during workflow execution. Real-time streaming output is visible in the terminal.

IDE Integration

None. Prodigy is a standalone CLI; it does not integrate with VS Code, Cursor, or other IDEs.

Observability

  • Logs: Per-session logs accessible via prodigy logs
  • Analytics: Cost/performance metrics via prodigy analytics
  • Events: Workflow event timeline via prodigy events
  • Progress: Real-time step progress via prodigy progress
  • DLQ: Failed step inspection via prodigy dlq
  • Checkpoints: Resumable state list via prodigy checkpoints

Man Pages

scripts/install-man-pages.sh installs man pages for offline reference.

Related frameworks

same archetype · same primary tool · same memory type

Claude-Flow / Ruflo ★ 55k

Eliminates single-agent context limits and sequential bottlenecks by orchestrating fault-tolerant swarms of specialized AI agents…

Hermes Agent (NousResearch) ★ 168k

Self-improving personal AI agent with closed learning loop, 7 terminal backends, and messaging gateway — not tied to any AI…

OpenCode ★ 165k

Terminal-first AI coding agent with multi-model routing, native desktop app, and a typed .opencode/ configuration system for…

OpenHands ★ 75k

Open-source AI software development platform (open-source Devin alternative) with Docker sandbox isolation, 77.6% SWE-bench…

DeerFlow ★ 70k

Long-horizon superagent that researches, codes, and creates by orchestrating parallel sub-agents with isolated contexts in Docker…

oh-my-openagent (omo) ★ 60k

Multi-provider AI agent orchestration for OpenCode: escape vendor lock-in by routing Sisyphus (Claude/Kimi/GLM) and Hephaestus…