prodigy 0.4.4

Turn ad-hoc Claude sessions into reproducible development pipelines with parallel AI agents
Documentation
## Merge Workflows

Merge workflows execute when merging worktree changes back to the main branch. This feature enables custom validation, testing, and conflict resolution before integrating changes.

**When to use merge workflows:**
- Run tests before merging
- Validate code quality
- Handle merge conflicts automatically
- Sync with upstream changes

### Configuration Formats

Merge workflows support two configuration formats (src/config/mapreduce.rs:96-123):

**1. Simplified Format** (direct array of commands, no timeout support):

```yaml
merge:
  - shell: "git fetch origin"
  - shell: "cargo test"
  - claude: "/prodigy-merge-worktree ${merge.source_branch} ${merge.target_branch}"
```

**2. Full Format** (config object with commands array and optional timeout):

```yaml
merge:
  commands:
    - shell: "git fetch origin"
    - shell: "git merge origin/main"
    - shell: "cargo test"
    - claude: "/prodigy-merge-worktree ${merge.source_branch} ${merge.target_branch}"
  timeout: 600  # Optional: timeout for entire merge phase (seconds)
```

Use the simplified format for quick merge workflows without timeouts. Use the full format when you need timeout control for long-running merge operations.

**Important**: Always pass both `${merge.source_branch}` and `${merge.target_branch}` to the `/prodigy-merge-worktree` command. This ensures the merge targets the branch you were on when you started the workflow, not a hardcoded main/master branch.

### Available Merge Variables

The following variables are available exclusively within merge workflow commands. Variable interpolation happens before command execution, and these variables are NOT available in setup/map/reduce phases:

- `${merge.worktree}` - Worktree name (e.g., "prodigy-session-abc123")
- `${merge.source_branch}` - Source branch (worktree branch)
- `${merge.target_branch}` - Target branch (the branch you were on when workflow started)
- `${merge.session_id}` - Session ID for correlation

Merge workflows also have access to all workflow [environment variables](environment-configuration.md) defined in the env block, including profile-specific values and secrets.

### Claude Merge Streaming

Claude commands in merge workflows respect verbosity settings (src/worktree/merge_orchestrator.rs:521-534):

- Use `-v` flag for real-time streaming output
- Set `PRODIGY_CLAUDE_CONSOLE_OUTPUT=true` to force streaming regardless of verbosity
- Default behavior shows clean minimal output

This provides full visibility into Claude's merge operations and tool invocations.

### Real-World Examples

**Pre-merge CI validation** (workflows/implement.yml:33-41):

```yaml
merge:
  - claude: "/prodigy-merge-master"  # Merge main into worktree first
  - claude: "/prodigy-ci"  # Run all CI checks
  - claude: "/prodigy-merge-worktree ${merge.source_branch} ${merge.target_branch}"
```

**Environment-aware merge** (workflows/mapreduce-env-example.yml:83-93):

```yaml
merge:
  commands:
    - shell: "echo Merging changes for $PROJECT_NAME"
    - shell: "echo Debug mode was: $DEBUG_MODE"
    - claude: "/validate-merge --branch ${merge.source_branch} --project $PROJECT_NAME"
```

**Documentation workflow with cleanup** (workflows/book-docs-drift.yml:93-100):

```yaml
merge:
  commands:
    - shell: "git fetch origin"
    - claude: "/prodigy-merge-master --project ${PROJECT_NAME}"
    - claude: "/prodigy-merge-worktree ${merge.source_branch} ${merge.target_branch}"
```