Skip to main content

Overview

The routa workflow command executes YAML-defined workflows — automated sequences of agent tasks with conditional logic, parallel execution, and error handling.

Usage

routa workflow run [OPTIONS] <FILE>

Options

file
string
required
Path to the workflow YAML file
--verbose
boolean
Enable verbose output (show prompts and responses)
--specialist-dir
string
Directory containing custom specialist definitions
--trigger-payload
string
JSON payload to pass to the workflow trigger

Example Usage

Basic Workflow Execution

routa workflow run .routa/workflows/pr-review.yaml
Output:
📄 Loaded workflow: PR Review (pr-review.yaml)
   3 step(s), trigger: manual

🔄 Step 1/3: analyze-changes
   ✓ Completed in 45s

🔄 Step 2/3: run-tests
   ✓ Completed in 120s

🔄 Step 3/3: post-comment
   ✓ Completed in 5s

🎉 Workflow completed successfully!

Verbose Mode

See detailed agent prompts and responses:
routa workflow run --verbose .routa/workflows/deployment.yaml

Custom Specialist Directory

Use custom specialist definitions:
routa workflow run \
  --specialist-dir ~/my-specialists \
  .routa/workflows/custom-flow.yaml

With Trigger Payload

Pass data to the workflow:
routa workflow run \
  --trigger-payload '{"pr_number": 123, "branch": "feature/auth"}' \
  .routa/workflows/pr-review.yaml

Workflow File Format

Workflows are defined in YAML with this structure:
name: PR Review Workflow
description: Automated code review for pull requests
version: "1.0"

trigger:
  type: manual  # or: webhook, schedule, event

variables:
  repo_path: ${REPO_PATH:-/home/user/project}
  pr_number: ${trigger.pr_number}

steps:
  - name: analyze-changes
    specialist: developer
    model_tier: smart
    prompt: |
      Review the changes in PR #{{ variables.pr_number }}.
      Analyze for:
      - Code quality issues
      - Security vulnerabilities
      - Performance concerns
    condition: ${trigger.pr_number != null}
    
  - name: run-tests
    specialist: developer
    model_tier: balanced
    prompt: Run the full test suite and report any failures
    retry:
      max_attempts: 3
      backoff: exponential
    
  - name: post-comment
    specialist: developer
    model_tier: fast
    prompt: Post a summary comment to PR #{{ variables.pr_number }}
    depends_on:
      - analyze-changes
      - run-tests

on_error:
  - name: notify-failure
    specialist: developer
    prompt: Post a failure notification

Workflow Features

Variable Substitution

Reference variables and environment variables:
variables:
  project: ${PROJECT_NAME}
  branch: ${trigger.branch:-main}
  
steps:
  - name: checkout
    prompt: Checkout branch {{ variables.branch }}

Conditional Execution

Run steps based on conditions:
steps:
  - name: deploy-prod
    prompt: Deploy to production
    condition: ${variables.branch == "main"}
    
  - name: deploy-staging
    prompt: Deploy to staging
    condition: ${variables.branch != "main"}

Parallel Execution

Run multiple steps concurrently:
steps:
  - name: frontend-tests
    parallel_group: tests
    prompt: Run frontend tests
    
  - name: backend-tests
    parallel_group: tests
    prompt: Run backend tests
    
  - name: integration-tests
    parallel_group: tests
    prompt: Run integration tests

Error Handling

Define retry logic and error handlers:
steps:
  - name: flaky-operation
    prompt: Perform network operation
    retry:
      max_attempts: 3
      backoff: exponential
      backoff_multiplier: 2
      
on_error:
  - name: cleanup
    prompt: Clean up resources
  - name: notify
    prompt: Send failure notification

Dependencies

Specify step execution order:
steps:
  - name: build
    prompt: Build the application
    
  - name: test
    prompt: Run tests
    depends_on: [build]
    
  - name: deploy
    prompt: Deploy to production
    depends_on: [build, test]

Example Workflows

PR Review Workflow

name: Pull Request Review
description: Automated code review for GitHub PRs
version: "1.0"

trigger:
  type: webhook

variables:
  pr_number: ${trigger.pr_number}
  base_branch: ${trigger.base_branch}

steps:
  - name: fetch-changes
    specialist: developer
    model_tier: fast
    prompt: |
      Fetch the diff for PR #{{ variables.pr_number }}
      Compare {{ variables.base_branch }} with the PR branch
      
  - name: security-scan
    specialist: developer
    model_tier: smart
    prompt: |
      Scan the changes for security vulnerabilities:
      - SQL injection
      - XSS vulnerabilities
      - Exposed secrets
      - Dependency vulnerabilities
    parallel_group: analysis
    
  - name: code-quality
    specialist: developer
    model_tier: balanced
    prompt: |
      Review code quality:
      - Coding standards
      - Best practices
      - Code duplication
      - Complexity metrics
    parallel_group: analysis
    
  - name: generate-report
    specialist: developer
    model_tier: smart
    prompt: |
      Generate a comprehensive review report combining:
      - Security scan results
      - Code quality findings
      - Recommendations
      Post as PR comment
    depends_on:
      - security-scan
      - code-quality
Run it:
export REPO_PATH=/home/user/my-project
routa workflow run \
  --trigger-payload '{"pr_number": 42, "base_branch": "main"}' \
  .routa/workflows/pr-review.yaml

Deployment Workflow

name: Production Deployment
description: Deploy application to production with checks
version: "1.0"

trigger:
  type: manual

variables:
  environment: production
  version: ${VERSION}

steps:
  - name: pre-flight-checks
    specialist: developer
    model_tier: smart
    prompt: |
      Verify deployment prerequisites:
      - All tests passing
      - No critical bugs open
      - Database migrations ready
      
  - name: backup-database
    specialist: developer
    model_tier: balanced
    prompt: Create database backup before deployment
    depends_on: [pre-flight-checks]
    
  - name: deploy-application
    specialist: developer
    model_tier: balanced
    prompt: |
      Deploy version {{ variables.version }} to {{ variables.environment }}
      Use blue-green deployment strategy
    depends_on: [backup-database]
    retry:
      max_attempts: 2
      
  - name: smoke-tests
    specialist: developer
    model_tier: fast
    prompt: Run smoke tests on production
    depends_on: [deploy-application]
    
  - name: notify-success
    specialist: developer
    model_tier: fast
    prompt: Send deployment success notification
    depends_on: [smoke-tests]

on_error:
  - name: rollback
    prompt: Rollback to previous version
  - name: notify-failure
    prompt: Send deployment failure alert
Run it:
export VERSION=v2.1.0
routa workflow run .routa/workflows/deploy.yaml

Scheduled Maintenance Workflow

name: Daily Maintenance
description: Automated maintenance tasks
version: "1.0"

trigger:
  type: schedule
  cron: "0 2 * * *"  # 2 AM daily

steps:
  - name: cleanup-logs
    specialist: developer
    model_tier: fast
    prompt: Delete log files older than 30 days
    parallel_group: maintenance
    
  - name: optimize-database
    specialist: developer
    model_tier: balanced
    prompt: Run database optimization and vacuum
    parallel_group: maintenance
    
  - name: backup-data
    specialist: developer
    model_tier: balanced
    prompt: Create incremental backup
    depends_on:
      - cleanup-logs
      - optimize-database
      
  - name: generate-report
    specialist: developer
    model_tier: fast
    prompt: |
      Generate maintenance report:
      - Disk space freed
      - Database size after optimization
      - Backup status
    depends_on: [backup-data]

Best Practices

  • Smart tier for complex analysis, planning, code review
  • Balanced tier for most implementation tasks
  • Fast tier for simple operations, notifications, cleanup
Always define on_error handlers for critical workflows:
on_error:
  - name: cleanup-resources
    prompt: Clean up any partially created resources
  - name: notify-team
    prompt: Alert the team of workflow failure
Group independent tasks to run concurrently:
steps:
  - name: lint
    parallel_group: checks
  - name: type-check
    parallel_group: checks
  - name: security-scan
    parallel_group: checks
Make workflows reusable with variables:
variables:
  environment: ${ENVIRONMENT:-staging}
  version: ${VERSION}
  
steps:
  - prompt: Deploy {{ variables.version }} to {{ variables.environment }}

Troubleshooting

Check YAML syntax:
# Validate YAML
python -c "import yaml; yaml.safe_load(open('.routa/workflows/my-flow.yaml'))"
Verify file path:
ls -la .routa/workflows/my-flow.yaml
List available specialists:
routa workflow list-specialists
Use custom specialist directory:
routa workflow run --specialist-dir ~/specialists my-flow.yaml
Export environment variables:
export VERSION=v1.0.0
export ENVIRONMENT=production
routa workflow run my-flow.yaml
Pass trigger payload:
routa workflow run \
  --trigger-payload '{"version": "v1.0.0"}' \
  my-flow.yaml

Next Steps

Workflow Guide

Complete guide to workflow configuration

Custom Specialists

Create custom specialist definitions

Delegate Command

Delegate tasks programmatically

Task Orchestration

Learn about task coordination patterns

Build docs developers (and LLMs) love