Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
fc33f6d
Review fixes for Epic 1 and Epic 2: cycle detection, UnicodeDecodeErr…
Feb 24, 2026
0b5aac3
Epic 3: Documentation — Add External File References section to workf…
Feb 24, 2026
e206999
EPIC-1-4: Add script execution steps (type: script)
Feb 24, 2026
79fa1fd
fix: Address plan review feedback for script execution steps
Feb 24, 2026
9d53ded
fix: address plan review feedback - working_dir Jinja2 rendering and …
Feb 24, 2026
df5fa81
fix: break long line in script.py to satisfy ruff E501 lint rule
Feb 24, 2026
1abb9dd
docs: reorganize project docs into usability-features directory
Feb 25, 2026
452b870
Epic 1: State Serialization — add to_dict/from_dict to WorkflowContex…
Feb 25, 2026
9359d3c
Epic 3: Engine Integration — checkpoint save and workflow resume
Feb 25, 2026
fef331b
Epic 4: CLI Commands (review fixes) — deduplicate MCP server building…
Feb 25, 2026
e36ca5c
Epic 5: Copilot Session Resume (Optional Enhancement)
Feb 25, 2026
bade09e
fix: per-task idle detection with activity-aware recovery
Feb 25, 2026
cd51f68
Epic 1: Keyboard Listener & CLI Integration (review fixes)
Feb 25, 2026
02bd8e9
EPIC-002: Interrupt Handler UI review fixes
Feb 25, 2026
e4f8bea
Epic 3: Guidance Injection & Context Integration
Feb 25, 2026
99b6627
Epic 4: Engine Interrupt Integration (Between-Agent)
Feb 25, 2026
b2bbe4e
Epic 5: Mid-Agent Interrupt — Copilot Provider (Phase 2) — Review Fixes
Feb 25, 2026
5ab9f67
Epic 6: Mid-Agent Interrupt — Claude Provider (Phase 3)
Feb 25, 2026
d065b91
docs: web ui docs
Feb 25, 2026
6e06d93
Epic 1: Implement WorkflowEvent and WorkflowEventEmitter
Feb 25, 2026
83c4ad9
Epic 2: Engine Integration (review fixes)
Feb 25, 2026
327e261
Epic 3: Web Server (WebDashboard) - review fixes
Feb 25, 2026
24a544b
Epic 4: Frontend Dashboard (review fixes)
Feb 25, 2026
39b60ad
Epic 5: CLI Wiring & Dependency Group
Feb 25, 2026
49aa198
Fix daemon thread holding stdin lock at interpreter shutdown
Feb 25, 2026
13f6d55
Add agent detail streaming, --web-bg background mode, and make web de…
Feb 25, 2026
c37028c
feat(web): migrate dashboard to React + Vite, fix MCP configs
Feb 26, 2026
c6762f1
feat(web): enable draggable nodes in workflow graph
Feb 26, 2026
2b27355
Add web dashboard test workflow example
Feb 26, 2026
14616ce
feat(web): enhance dashboard with tooltips, cost tracking, and UX polish
Feb 26, 2026
fe39f89
Fix CI: ruff format and ty type check errors
Feb 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .claude/skills/conductor/references/execution.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ conductor run <workflow.yaml> [OPTIONS]
| `--provider`, `-p PROVIDER` | Override provider (copilot, claude) |
| `--dry-run` | Show execution plan only |
| `--skip-gates` | Auto-select first option at human gates |
| `--web` | Start real-time web dashboard |
| `--web-bg` | Run in background, print dashboard URL, exit |
| `--web-port PORT` | Port for web dashboard (0 = auto) |
| `--no-interactive` | Disable Esc-to-interrupt capability |

**Global options** (before the subcommand):

Expand Down Expand Up @@ -49,8 +53,16 @@ conductor run workflow.yaml --dry-run

# Override provider
conductor run workflow.yaml -p claude

# Start real-time web dashboard
conductor run workflow.yaml --web --input question="Hello"

# Background mode: prints URL and exits immediately
conductor run workflow.yaml --web-bg --input question="Hello"
```

The `--web` flag opens a browser dashboard with a DAG visualization showing live agent status, streaming reasoning/tool calls, and an agent detail panel. The `--web-bg` flag forks a background process and exits immediately. `--web` and `--web-bg` are mutually exclusive.

### conductor validate

Validate without executing:
Expand Down Expand Up @@ -163,6 +175,14 @@ conductor run workflow.yaml --dry-run

Preview execution plan without running agents. Shows the workflow graph, agent order, and configuration.

### Web Dashboard

```bash
conductor run workflow.yaml --web --input question="test"
```

Visualize execution in real-time with a browser dashboard. Shows agent prompts, reasoning, tool calls, and outputs as they stream in.

### Validate First

```bash
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -77,3 +77,6 @@ dmypy.json
# OS
.DS_Store
Thumbs.db

# Frontend
src/conductor/web/frontend/node_modules/
21 changes: 18 additions & 3 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ make check
# Run a workflow
uv run conductor run workflow.yaml --input question="What is Python?"

# Run with web dashboard
uv run conductor run workflow.yaml --web --input question="What is Python?"

# Run in background (prints dashboard URL and exits)
uv run conductor run workflow.yaml --web-bg --input question="What is Python?"

# Validate a workflow
uv run conductor validate examples/simple-qa.yaml
make validate-examples # validate all examples
Expand All @@ -44,6 +50,7 @@ make validate-examples # validate all examples
- **cli/**: Typer-based CLI with commands `run`, `validate`, `init`, `templates`
- `app.py` - Main entry point, defines the Typer application
- `run.py` - Workflow execution command with verbose logging helpers
- `bg_runner.py` - Background process forking for `--web-bg` mode

- **config/**: YAML loading and Pydantic schema validation
- `schema.py` - Pydantic models for all workflow YAML structures (WorkflowConfig, AgentDef, ParallelGroup, ForEachDef, etc.)
Expand All @@ -58,6 +65,7 @@ make validate-examples # validate all examples

- **executor/**: Agent execution
- `agent.py` - `AgentExecutor` handles prompt rendering, tool resolution, and output validation for single agents
- `script.py` - `ScriptExecutor` runs shell commands as workflow steps, capturing stdout/stderr/exit_code
- `template.py` - Jinja2 template rendering
- `output.py` - JSON output parsing and schema validation

Expand All @@ -69,17 +77,24 @@ make validate-examples # validate all examples
- **gates/**: Human-in-the-loop support
- `human.py` - Rich terminal UI for human gate interactions

- **web/**: Real-time web dashboard for workflow visualization
- `server.py` - FastAPI + uvicorn server with WebSocket broadcasting and late-joiner state replay
- `static/index.html` - Single-file Cytoscape.js frontend with DAG graph, agent detail panel, and streaming activity

- **events.py**: Pub/sub event system decoupling workflow execution from rendering (console, web dashboard)

- **exceptions.py**: Custom exception hierarchy (ConductorError, ValidationError, ExecutionError, etc.)

### Workflow Execution Flow

1. CLI parses YAML via `config/loader.py` → `WorkflowConfig`
2. `WorkflowEngine` initializes with config and provider
3. Engine loops: find agent/parallel/for-each → execute → evaluate routes → next
3. Engine loops: find agent/parallel/for-each/script → execute → evaluate routes → next
4. Parallel groups execute agents concurrently with context isolation (deep copy snapshot)
5. For-each groups resolve source arrays at runtime, inject loop variables (`{{ item }}`, `{{ _index }}`, `{{ _key }}`)
6. Routes evaluated via `Router` using Jinja2 or simpleeval expressions
7. Final output built from templates in `output:` section
6. Script steps run shell commands via asyncio subprocess, expose stdout/stderr/exit_code to context
7. Routes evaluated via `Router` using Jinja2 or simpleeval expressions
8. Final output built from templates in `output:` section

### Key Patterns

Expand Down
10 changes: 9 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.PHONY: install install-cli dev test test-cov lint format typecheck check clean build all
.PHONY: install install-cli dev test test-cov lint format typecheck check clean build all build-frontend dev-frontend

# Default target
all: check test
Expand Down Expand Up @@ -61,3 +61,11 @@ validate-examples:
echo "Validating $$file..."; \
uv run conductor validate "$$file" || exit 1; \
done

# Build frontend dashboard (output to src/conductor/web/static/)
build-frontend:
cd src/conductor/web/frontend && npm install && npm run build

# Run frontend dev server (with proxy to FastAPI backend)
dev-frontend:
cd src/conductor/web/frontend && npm run dev
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ Conductor provides the patterns that work: evaluator-optimizer loops for iterati
- **YAML-based workflows** - Define multi-agent workflows in readable YAML
- **Multiple providers** - GitHub Copilot or Anthropic Claude with seamless switching
- **Parallel execution** - Run agents concurrently (static groups or dynamic for-each)
- **Script steps** - Run shell commands and route on exit code without an AI agent
- **Conditional routing** - Route between agents based on output conditions
- **Human-in-the-loop** - Pause for human decisions with Rich terminal UI
- **Safety limits** - Max iterations and timeout enforcement
- **Web dashboard** - Real-time DAG visualization with agent detail streaming
- **Validation** - Validate workflows before execution

## Installation
Expand Down Expand Up @@ -143,6 +145,9 @@ conductor run <workflow.yaml> [OPTIONS]
| `-p, --provider PROVIDER` | Override provider |
| `--dry-run` | Preview execution plan |
| `--skip-gates` | Auto-select at human gates |
| `--web` | Start real-time web dashboard |
| `--web-bg` | Run in background, print dashboard URL, exit |
| `--web-port PORT` | Port for web dashboard (0 = auto) |
| `-q, --quiet` | Suppress progress output |
| `-s, --silent` | Suppress all output except errors |
| `-l, --log-file PATH` | Write logs to file |
Expand Down Expand Up @@ -183,6 +188,7 @@ See the [`examples/`](./examples/) directory for complete workflows:
| [for-each-simple.yaml](./examples/for-each-simple.yaml) | Dynamic parallel processing |
| [parallel-research.yaml](./examples/parallel-research.yaml) | Static parallel execution |
| [design-review.yaml](./examples/design-review.yaml) | Human gate with loop pattern |
| [script-step.yaml](./examples/script-step.yaml) | Script step with exit_code routing |

**More examples and running instructions:** [examples/README.md](./examples/README.md)

Expand Down
153 changes: 0 additions & 153 deletions docs/architecture-decisions.md

This file was deleted.

27 changes: 27 additions & 0 deletions docs/cli-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ conductor run <workflow.yaml> [OPTIONS]
| `--quiet` | `-q` | Minimal output (agent lifecycle and routing only) |
| `--silent` | `-s` | No progress output (JSON result only) |
| `--log-file <auto\|PATH>` | `-l` | Write full debug output to a file |
| `--web` | | Start a real-time web dashboard |
| `--web-bg` | | Run in background, print dashboard URL, exit |
| `--web-port PORT` | | Port for web dashboard (0 = auto-select) |
| `--no-interactive` | | Disable Esc-to-interrupt capability |

### Examples

Expand Down Expand Up @@ -68,6 +72,29 @@ conductor run workflow.yaml --quiet --input question="Test"
conductor run workflow.yaml --log-file debug.log
```

#### Web Dashboard

```bash
# Start dashboard in foreground (keeps running after workflow completes)
conductor run workflow.yaml --web --input question="Test"

# Start dashboard on a specific port
conductor run workflow.yaml --web --web-port 8080 --input question="Test"

# Background mode: prints URL and exits immediately
conductor run workflow.yaml --web-bg --input question="Test"
# Dashboard auto-shuts down after workflow completes and clients disconnect
```

The `--web` flag starts a real-time browser dashboard showing:
- DAG visualization of the workflow graph with live node state updates
- Agent detail panel with rendered prompt, reasoning, tool calls, and output
- Streaming activity as agents execute (reasoning chunks, tool invocations)

The `--web-bg` flag is a convenience shortcut: it forks a background process running the workflow with the dashboard, prints the URL, and exits the CLI immediately. The background process shuts down automatically after the workflow completes and all browser clients disconnect.

`--web` and `--web-bg` are mutually exclusive.

#### Automation Mode

```bash
Expand Down
Loading
Loading