Whilly Orchestrator
Task orchestrator that runs coding-agent CLIs on a JSON plan — loopable, resumable, budget-capped, and happy to hand tasks back to a human when it hits a wall.
Getting Started View on GitHub
What whilly does
- Pulls tasks from a GitHub repo (
--from-github,--from-issue), a Projects v2 board (--from-project), or a Jira project (--from-jira). - Runs agents — Claude CLI by default, OpenCode, or
claude_handoff(file-based RPC to you). - Tracks lifecycle on your Projects v2 board and your Jira ticket in real time:
Todo → In Progress → In Review → Done, plusOn HoldandHuman Loopfor anything that needs a human. - Stays safe — hard budget cap, wall-clock timeout, automatic task resume, idempotent plan files.
- Works everywhere — pure Python 3.10+, stdlib-only for Jira, tested on Linux / macOS / Windows.
One-liner demo
pipx install whilly-orchestrator
whilly --config path # where to drop your config
whilly --from-issue you/repo/42 --go
That fetches issue 42, generates a one-task plan, spawns an agent, and exits 0 when the agent reports complete.
Read next
| Page | When to read |
|---|---|
| Getting Started | First time here — eight practical walkthroughs |
| Full Usage Reference | Every CLI flag, env var, and config field |
| GitHub Integration Guide | Setting up Projects v2 + board sync |
| Interfaces & Tasks | Module contracts + the JSON plan schema |
| Architecture Decisions | Why things are the way they are (if published) |
Under the hood
CLI ──▶ TaskManager ──▶ AgentBackend ──▶ Claude / OpenCode / claude_handoff
↓
on_status_change hook ──▶ Projects v2 (GraphQL) + Jira (REST)
↓
Dashboard, Reporter, Budget + Resource guards
Full module map lives in Whilly-Interfaces-and-Tasks.
Current status
- 643 tests, cross-OS CI (Linux / macOS / Windows) on every PR.
- Layered config —
whilly.toml+ OS keyring, migrates from legacy.envwith one command. - Latest release · Open issues · Changelog