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
Metadata
Release files for lindy-orchestrator 0.15.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| lindy_orchestrator-0.15.0.tar.gz | 393.8 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| lindy_orchestrator-0.15.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 553.0 kB
Release files / lindy_orchestrator-0.15.0.tar.gz
| Download URL | lindy_orchestrator-0.15.0.tar.gz |
|---|---|
| Size | 393.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6f2884df50e87201de05e2a6b8ba2a3ba0f725f69416e99e1d47b5de12a46018
|
|
BLAKE2b-256 checksum How to use checksums |
2c14c33779700a3538592d2f98f5d9dcb87be2ca412877fa53af9e2890651338
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / lindy_orchestrator-0.15.0-py3-none-any.whl
| Download URL | lindy_orchestrator-0.15.0-py3-none-any.whl |
|---|---|
| Size | 159.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b1fbc51ddc05709e5df34e1978fc2d0d3d8826c267891ff32baa823ceb7ef965
|
|
BLAKE2b-256 checksum How to use checksums |
a7d7fec39b2a173d13fa65546e752620bba44b51c5aab6a7fdc0503d16f9caf5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Security for lindy-orchestrator 0.15.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.