Task Orchestration
Use this skill to drive work through a single authoritative YAML todo file: .copilot-todo.yaml.
Source of truth
- •
.copilot-todo.yaml— only status tracker. - •
.copilot-todo.md— legacy/migration only (do not update by hand).
Getting Started with Templates
Creating a new plan from template
bash
# Copy the template to your repo root or session folder cp .github/skills/task-orchestration/template/plan.md.template plan.md # Edit plan.md with your tasks (use Markdown checkboxes: - [ ] Task name) # Generate .copilot-todo.yaml from your plan python3 .github/skills/task-orchestration/scripts/task_orchestrator.py \ --plan-md plan.md \ --plan-mode regen \ init
Creating a .copilot-todo.yaml from scratch
bash
# Copy the template cp .github/skills/task-orchestration/template/copilot-todo.yaml.template .copilot-todo.yaml # Edit the tasks section, then initialize python3 .github/skills/task-orchestration/scripts/task_orchestrator.py init
Template locations:
- •
template/plan.md.template— Markdown plan with task checkboxes - •
template/copilot-todo.yaml.template— YAML structure with example task
Loop (plan → execute → iterate)
Repeat until no runnable tasks remain:
- •Sync / migrate state
- •Reuse existing
.copilot-todo.yaml(default):
bash
python3 .github/skills/task-orchestration/scripts/task_orchestrator.py init
- •(Optional) Seed/regenerate tasks from
plan.mdusing Markdown task list items (- [ ] .../- [x] ...).- •If an item starts with an explicit ID prefix like
A1. ...orT-001: ..., that ID is used. - •Otherwise a stable-ish
P-XXXXXXXXID is generated from the text.
- •If an item starts with an explicit ID prefix like
bash
python3 .github/skills/task-orchestration/scripts/task_orchestrator.py \ --plan-md plan.md \ --plan-mode regen \ init
- •Start next task
bash
python3 .github/skills/task-orchestration/scripts/task_orchestrator.py next
- •
Plan (short bullets, only for the chosen task)
- •
Execute (minimal diff; run smallest relevant existing build/test)
- •
Update status
bash
python3 .github/skills/task-orchestration/scripts/task_orchestrator.py update <ID> completed --note "..." # or python3 .github/skills/task-orchestration/scripts/task_orchestrator.py update <ID> blocked --note "..."
5b) Commit (required when using ralph_loop.py --require-commit)
bash
git add -A git commit -m "<ID>: <short summary>"
- •Iterate / expand If you discover missing work, add follow-up tasks (don’t silently expand scope):
bash
python3 .github/skills/task-orchestration/scripts/task_orchestrator.py add "Title" --deps <ID1,ID2> --priority Medium --goal "..."
Ralph-style multi-session loop (Copilot CLI)
To run one fresh Copilot run per task (uses copilot -p, consuming Copilot requests accordingly):
bash
python3 .github/skills/task-orchestration/scripts/ralph_loop.py \ --non-interactive \ --max-steps 10 # or: derive tasks from plan.md python3 .github/skills/task-orchestration/scripts/ralph_loop.py \ --non-interactive \ --plan-md plan.md \ --plan-mode regen \ --max-steps 10
Notes:
- •This does not bypass quotas; it just splits work into multiple sessions.
- •By default
ralph_loop.pyenforces one commit per finished task (use--no-require-committo disable). - •Keep
--max-stepssmall to avoid burning requests if a task gets stuck.