Skip to content

CLI Commands

All PACE commands are run from the pace/ subdirectory inside your repository.

Terminal window
cd pace
source .venv/bin/activate

Orchestrator

The orchestrator is the main entry point. It runs all six agents in sequence for a given day.

Terminal window
python pace/orchestrator.py --day <N> [options]

Arguments

ArgumentTypeRequiredDescription
--day NintegerYesDay to run (1-indexed, must not exceed sprint.duration_days).
--retryflagNoRe-run a day that previously ended in HOLD. Clears the previous day’s artifacts before re-running.
--dry-runflagNoRun PRIME only and print the Story Card. Does not call FORGE or downstream agents.
--skip-ciflagNoSkip CI polling in GATE. CI result will be no_runs. Useful for local development.
--config PATHstringNoPath to an alternative pace.config.yaml. Defaults to pace/pace.config.yaml.

Examples

Terminal window
# Run Day 1
python pace/orchestrator.py --day 1
# Re-run Day 3 after fixing a HOLD
python pace/orchestrator.py --day 3 --retry
# Preview the Day 5 Story Card without running FORGE
python pace/orchestrator.py --day 5 --dry-run
# Run Day 2 without waiting for CI
python pace/orchestrator.py --day 2 --skip-ci

Running individual agents

Each agent can be run standalone for debugging. All agents read from pace.config.yaml and the relevant .pace/day-N/ artifacts.

PRIME

Terminal window
python pace/agents/prime.py --day <N>

Outputs: .pace/day-N/story-card.yaml

FORGE

Terminal window
python pace/agents/forge.py --day <N>

Reads: .pace/day-N/story-card.yaml Outputs: .pace/day-N/handoff.yaml

GATE

Terminal window
python pace/agents/gate.py --day <N>

Reads: .pace/day-N/story-card.yaml, .pace/day-N/handoff.yaml Outputs: .pace/day-N/gate-report.yaml

SENTINEL

Terminal window
python pace/agents/sentinel.py --day <N>

Reads: story-card, handoff, gate-report Outputs: .pace/day-N/sentinel-report.yaml

CONDUIT

Terminal window
python pace/agents/conduit.py --day <N>

Reads: story-card, handoff, sentinel-report Outputs: .pace/day-N/conduit-report.yaml

SCRIBE

Terminal window
python pace/agents/scribe.py --day <N>

Reads: all reports from the day Outputs: updated .pace/context/*.md files


Utility commands

Validate configuration

Terminal window
python pace/pace/config.py --validate

Checks pace.config.yaml for required fields, type errors, and missing source directories.

Check environment variables

Terminal window
python pace/pace/config.py --check-env

Verifies that all environment variables required for your configured platform.type and llm.provider are set.

View advisory backlog

Terminal window
cat .pace/advisory-backlog.yaml

Lists all open advisory findings across all sprint days.

View sprint summary

Terminal window
cat .pace/sprint-summary.md

Markdown summary of all daily decisions and open advisories (generated at sprint end or on the final day).


GitHub Actions workflow

To run PACE as a scheduled or manually triggered GitHub Actions workflow:

.github/workflows/pace.yml
name: PACE Sprint
on:
workflow_dispatch:
inputs:
day:
description: 'Sprint day to run'
required: true
type: number
jobs:
pace:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
issues: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install PACE dependencies
run: pip install -r pace/requirements.txt
- name: Run PACE Day ${{ inputs.day }}
working-directory: pace
run: python pace/orchestrator.py --day ${{ inputs.day }}
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Commit PACE artifacts
run: |
git config user.name "PACE Bot"
git config user.email "pace@noreply"
git add .pace/
git diff --staged --quiet || git commit -m "PACE: Day ${{ inputs.day }} artifacts"
git push

Exit codes

CodeMeaning
0Day completed successfully (SHIP or ADVISORY decisions)
1Day ended with HOLD — at least one agent issued a blocking failure
2Configuration error — invalid pace.config.yaml or missing environment variable
3Plan error — day not found in plan.yaml or day exceeds duration_days