A standalone multi-agent orchestrator that turns high-level product visions into implementation code
Project description
Write a vision document. Run orc run. Walk away.
orc reads your high-level feature descriptions, breaks them into tasks, spawns AI coder agents, reviews the results, and merges passing work — all on a separate dev branch so you can keep working on main.
✨ Highlights
- Board-driven workflow — a YAML kanban board is the single source of truth; the orchestrator drives a plan → code → review → merge pipeline.
- Parallel coders — scale from 1 coder to many, each in its own git worktree, with configurable tool permissions.
- Git-native — every decision is a commit. The full audit trail lives in your repo.
- Sandboxed by default — agents run in
confinedmode with explicit tool allow-lists. Opt in toyolowhen you trust the environment. - Backend-agnostic — uses OpenAI-compatible LLM APIs (Gemini, OpenAI, GitHub Models).
- Telegram integration — optional real-time notifications and human-in-the-loop unblocking.
📦 Installation
pip install qorc
# or, with uv:
uv add qorc
Requires Python 3.13+.
🚀 Quick start
cd your-project/
orc bootstrap # scaffold .orc/ config directory
$EDITOR .env # fill in credentials (see below)
orc run # let the orchestra play
That's it. orc will plan tasks, write code, review changes, and merge passing work into your dev branch.
Key commands
| Command | What it does |
|---|---|
orc bootstrap |
Scaffold the .orc/ directory with roles, squads, and vision templates |
orc run |
Run the dispatch loop (plan → code → review → merge) |
orc run --maxloops 0 |
Loop until all visions are implemented |
orc run --squad broad |
Use a custom squad profile |
orc status |
Print current board state |
orc merge |
Rebase dev on main and fast-forward merge |
🏗️ How it works
orc is a workflow engine. On every cycle it reads the board (.orc/work/board.yaml) and drives a pipeline:
pending visions → plan (single LLM call → creates tasks)
open task, no branch → coder (full agentic loop in git worktree)
coder done → review (run tests + single LLM review)
review approved → merge (git merge, LLM for conflicts)
review rejected → coder (retry with feedback)
Only the coder is a full agent with creative autonomy. Planning, review, and merge are orchestrator operations — deterministic steps with targeted LLM calls. This eliminates the infinite-loop and instruction-reading failure modes of a multi-agent system.
Board tools are called in-process by the ToolExecutor. Each coder agent works in its own git worktree with role-appropriate tool permissions.
Work happens on a dev branch. You keep working on main. When you're ready, orc merge brings everything together (with automatic conflict resolution by a coder agent if needed).
Tip: configure the integration branch name via
orc-dev-branchin.orc/config.yaml. Tip: namespace all orc branches withorc-branch-prefix(e.g.orc→.orc/feat/0001-foo).
🗂️ Project layout after bootstrap
your-project/
.orc/
agents/ ← coder instructions (override bundled defaults)
squads/
default.yaml ← squad profile (coder count, model, permissions)
config.yaml ← project settings
justfile ← convenience recipes
vision/ ← your feature descriptions go here
work/
board.yaml ← kanban board (managed by orc)
.env.example ← credential template
Existing files are never overwritten unless --force is passed.
⚙️ Configuration
Credentials (.env)
Copy .env.example → .env and fill in:
GEMINI_API_TOKEN=... # Gemini API key (default provider)
# OPENAI_API_KEY=... # OpenAI API key (optional)
# GH_TOKEN=... # GitHub Models token (optional)
Environment variables
| Variable | Default | Description |
|---|---|---|
GEMINI_API_TOKEN |
— | Gemini API key. Required when using the default gemini provider. |
OPENAI_API_KEY |
— | OpenAI API key. Required when using the openai provider. |
GH_TOKEN |
— | GitHub token. Required when using the github provider. |
COLONY_TELEGRAM_TOKEN |
— | Telegram bot token for notifications. |
COLONY_TELEGRAM_CHAT_ID |
— | Telegram chat ID. Required when token is set. |
ORC_DIR |
.orc/ |
Override config directory path. |
ORC_LOG_LEVEL |
INFO |
DEBUG · INFO · WARNING · ERROR |
ORC_LOG_FORMAT |
console |
console or json |
ORC_LOG_FILE |
.orc/logs/orc.log |
Log file path. Empty string disables file logging. |
Config file (.orc/config.yaml)
| Key | Default | Description |
|---|---|---|
orc-dev-branch |
dev |
Integration branch name. |
orc-branch-prefix |
(empty) | Optional prefix for orc-owned branches. |
orc-worktree-base |
.orc/worktrees |
Base directory for git worktrees. |
🎻 Squad profiles
Squads define the composition and permissions of your agent team. They live in .orc/squads/{name}.yaml.
name: broad
description: High-throughput squad for large projects.
permissions:
mode: confined # "confined" (default) or "yolo"
allow_tools:
- "shell(just:*)"
deny_tools:
- "shell(git push:*)"
composition:
- role: planner
count: 1
model: claude-sonnet-4.6
- role: coder
count: 4
model: claude-sonnet-4.6
permissions:
allow_tools:
- "shell(npm:*)"
- "shell(cargo:*)"
- role: qa
count: 2
model: claude-sonnet-4.6
review-threshold: HIGH
timeout_minutes: 180
Permission modes
| Mode | Behaviour |
|---|---|
confined |
Agents may only use board tools, read, write, shell(git:*), plus explicit allow_tools. Default. |
yolo |
Unrestricted tool access. Use for trusted environments or debugging. |
QA review threshold
Controls which severity of issues causes QA to reject work back to coders:
| Threshold | Rejects on |
|---|---|
CRITICAL |
Critical failures only (most lenient) |
HIGH |
High-severity and above |
MID |
Medium-severity and above |
LOW |
Any issue (strictest, default) |
The planner count must always be
1. Scale throughput by adding coders and QA reviewers.
📱 Telegram notifications
Optionally monitor your agents in real time via Telegram. Set up a bot through @BotFather, add it to a group, and configure COLONY_TELEGRAM_TOKEN + COLONY_TELEGRAM_CHAT_ID.
Agents post structured status updates:
[coder-1](done) 2026-03-01T12:45:00Z: Implemented task 0002.
[qa-1](passed) 2026-03-01T13:00:00Z: No issues found.
[coder-2](blocked) 2026-03-01T14:00:00Z: Need clarification on auth flow…
🤝 Contributing
See CONTRIBUTING.md for the development workflow, commit conventions, and test-first policy.
git clone https://github.com/PietroPasotti/orc.git && cd orc
just install # deps + git hooks
just test # run the suite
📜 License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file qorc-0.2.11.tar.gz.
File metadata
- Download URL: qorc-0.2.11.tar.gz
- Upload date:
- Size: 4.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
97eb682329707a94d78a19a79434de545ad689ed06afdb790535377678e161e0
|
|
| MD5 |
98d883128080e89c2513cc2091691868
|
|
| BLAKE2b-256 |
b4973855ef039fb46f7aacb1b072d2890d0d7b8c4429bf4751537089a60e614b
|
Provenance
The following attestation bundles were made for qorc-0.2.11.tar.gz:
Publisher:
ci.yml on PietroPasotti/orc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qorc-0.2.11.tar.gz -
Subject digest:
97eb682329707a94d78a19a79434de545ad689ed06afdb790535377678e161e0 - Sigstore transparency entry: 1189326767
- Sigstore integration time:
-
Permalink:
PietroPasotti/orc@93f06ee3941679c60b90baf49e9c34d16739ddb4 -
Branch / Tag:
refs/tags/v0.2.11 - Owner: https://github.com/PietroPasotti
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@93f06ee3941679c60b90baf49e9c34d16739ddb4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file qorc-0.2.11-py3-none-any.whl.
File metadata
- Download URL: qorc-0.2.11-py3-none-any.whl
- Upload date:
- Size: 143.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7e116e749e7f1a94dc5f75f8f12c3754a5f4523050da616d0269ae3333a3580
|
|
| MD5 |
b56d06f67d29ae74ff3baa16d0083717
|
|
| BLAKE2b-256 |
ebd990999708fef84edbb3e806e8f2bafacdf1b2e8486bb7d7088b0f61235311
|
Provenance
The following attestation bundles were made for qorc-0.2.11-py3-none-any.whl:
Publisher:
ci.yml on PietroPasotti/orc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qorc-0.2.11-py3-none-any.whl -
Subject digest:
b7e116e749e7f1a94dc5f75f8f12c3754a5f4523050da616d0269ae3333a3580 - Sigstore transparency entry: 1189326780
- Sigstore integration time:
-
Permalink:
PietroPasotti/orc@93f06ee3941679c60b90baf49e9c34d16739ddb4 -
Branch / Tag:
refs/tags/v0.2.11 - Owner: https://github.com/PietroPasotti
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@93f06ee3941679c60b90baf49e9c34d16739ddb4 -
Trigger Event:
push
-
Statement type: