Lightweight, git-native multi-agent orchestration framework for autonomous project execution
Project description
lindy-orchestrator
Lightweight, git-native multi-agent orchestration for repository work.
Overview
lindy-orchestrator coordinates planning, execution, and validation around your existing code agents instead of trying to replace them. The current architecture is organized around a Planner, Generator, and Evaluator split:
Planner -> TaskSpec[] -> Generator -> GeneratorOutput -> Evaluator -> pass/fail + feedback
The orchestrator owns dependency ordering, worktree isolation, retries, QA gates, checkpointing, and reporting. Agents work against the repo; the orchestrator handles the harness.
Install
pip install lindy-orchestrator
pip install -e ".[dev]"
Requirements:
- Python 3.11+
claudeorcodexinPATH
Quick Start
lindy-orchestrate onboard
lindy-orchestrate plan "Add JWT auth"
lindy-orchestrate run "Add JWT auth"
lindy-orchestrate resume
Pipeline
The intended flow is:
- Planner reads project context and module status files.
- Planner emits
TaskSpecitems with generator and evaluator instructions. - Generator executes a task in an isolated worktree and returns output plus diff context.
- Evaluator runs QA gates and semantic review, then either passes the task or returns retry feedback.
- Orchestrator advances the task DAG until all reachable tasks are complete.
Key runtime pieces:
planner_runner.pyorchestrator.pyproviders/claude_cli.pyproviders/codex_cli.pyqa/
Configuration
Project configuration lives in .orchestrator/config.yaml.
Example:
project:
name: "my-project"
branch_prefix: "af"
modules:
- name: backend
path: backend/
- name: frontend
path: frontend/
planner:
provider: claude_cli
timeout_seconds: 120
prompt: |
You are the planner for {project_name}.
generator:
provider: claude_cli
timeout_seconds: 1800
stall_timeout: 600
permission_mode: bypassPermissions
prompt_prefix: |
You are a code generation agent.
evaluator:
provider: claude_cli
timeout_seconds: 300
pass_threshold: 80
prompt_prefix: |
You are a code evaluation agent.
qa_gates:
ci_check:
enabled: true
structural_check:
max_file_lines: 500
sensitive_patterns: ["*.env", "*.key"]
custom:
- name: lint
command: "ruff check {changed_files}"
diff_only: true
safety:
max_retries_per_task: 2
max_parallel: 3
dry_run: false
lifecycle_hooks:
after_create: ""
before_run: ""
after_run: ""
before_remove: ""
logging:
dir: .orchestrator/logs
session_dir: .orchestrator/sessions
Required concepts:
projectmodules- planner/generator/evaluator role configuration
qa_gatessafetylogging
CLI
Primary commands:
run: plan and execute a goalplan: generate a task plan onlyresume: continue a saved sessionstatus: module overview plus recent logslogs: alias forstatus --logs-onlyvalidate: validate config and module pathsgc: clean stale branches, sessions, and logsscan: run entropy checksonboard: generate.orchestrator/project scaffoldingconfig: manage provider defaultsstats: inspect execution metricsclear: remove generated orchestration filesversion: print version information
Examples:
lindy-orchestrate run "Implement API auth" --provider codex_cli
lindy-orchestrate plan --file goal.md
lindy-orchestrate status --json
lindy-orchestrate validate
lindy-orchestrate gc --apply
QA Gates
Built-in gates:
ci_checkcommand_checkagent_checkstructural_check
Custom QA commands can be added under qa_gates.custom.
Session Files
The orchestrator writes state under .orchestrator/, including:
config.yamlstatus/logs/sessions/plans/reports/claude/andcodex/instruction files
Development
Common commands:
uv sync --extra dev --frozen
uv run ruff check src/ tests/
uv run ruff format --check src/ tests/
uv run python -m pytest tests/ -x -q --tb=short
uv run python -c "import lindy_orchestrator"
License
MIT
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 lindy_orchestrator-0.15.0.tar.gz.
File metadata
- Download URL: lindy_orchestrator-0.15.0.tar.gz
- Upload date:
- Size: 393.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f2884df50e87201de05e2a6b8ba2a3ba0f725f69416e99e1d47b5de12a46018
|
|
| MD5 |
bdbd0fa541d3c83c88667564e8715958
|
|
| BLAKE2b-256 |
2c14c33779700a3538592d2f98f5d9dcb87be2ca412877fa53af9e2890651338
|
File details
Details for the file lindy_orchestrator-0.15.0-py3-none-any.whl.
File metadata
- Download URL: lindy_orchestrator-0.15.0-py3-none-any.whl
- Upload date:
- Size: 159.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1fbc51ddc05709e5df34e1978fc2d0d3d8826c267891ff32baa823ceb7ef965
|
|
| MD5 |
fad8f297dcf52c1100e0fa44d21b56a2
|
|
| BLAKE2b-256 |
a7d7fec39b2a173d13fa65546e752620bba44b51c5aab6a7fdc0503d16f9caf5
|