Skip to main content

Contract-driven multi-agent development orchestrator for Cursor & Codex

Project description

中文

harness-orchestrator

Contract-driven multi-agent development framework — run a full plan-build-review-ship pipeline inside Cursor with one command.

Python License: MIT

AI coding tools excel at single-shot tasks. Continuous development needs more: goal tracking, quality gates, adversarial review, and audit trails. Harness organizes these into a contract-driven engineering loop that runs inside your Cursor IDE — no separate orchestrator process, no complex setup. For CI/CD and headless automation, an optional orchestrator mode drives Cursor and Codex agents via external CLI.

Quick Start (Cursor-native, 3 minutes)

1. Install harness

pip install harness-orchestrator
harness --version   # verify (also works: python3 -m harness --version)
Alternative: install from source (for contributors)
git clone https://github.com/arthaszeng/harness-orchestrator.git
cd harness-orchestrator
pip install -e ".[dev]"

2. Initialize your project

cd /path/to/your/project
harness init

The wizard walks you through setup. When asked for Workflow Mode, choose cursor-native:

Step 5/9  Workflow Mode
  Choose how harness drives development:
  1. orchestrator -- External CLI process drives cursor-agent (default)
  2. cursor-native -- Skills + subagents inside Cursor IDE (no external process)
  Choose [2]: 2
  → cursor-native mode: will generate skills, subagents, and rules

This generates skills, subagents, and rules directly into your .cursor/ directory.

3. Use it in Cursor

Open your project in Cursor. You now have four skills available:

Skill What it does
/harness-plan Analyze a requirement, produce a spec and contract with adversarial review
/harness-build Implement the contract, run CI, triage failures, write a structured build log
/harness-eval Three-pass adversarial code review (Claude + Claude adversarial + GPT cross-model)
/harness-ship Full pipeline in one command: plan → build → review → fix → commit → push → PR

Try it now — open Cursor chat and type:

/harness-ship add input validation to the user registration endpoint

Harness will plan the work, implement it, run a three-pass adversarial review, auto-fix trivial issues, create bisectable commits, and open a PR — all without leaving your IDE.

Updating

harness update          # upgrade to latest, reinstall agents, check config
harness update --check  # just check if a new version is available

What happens under the hood

You type /harness-ship "add feature X"
  → Rebase onto main, run tests
  → Three-pass adversarial review:
      Pass 1: Claude structured review (4 dimensions)
      Pass 2: Claude adversarial subagent (attack surface)
      Pass 3: GPT cross-model review (independent perspective)
  → Fix-First: auto-fix trivial issues, ask about important ones
  → Bisectable commits + push + PR

Three-pass adversarial review

Every code change goes through three independent reviewers:

  1. Structured review — Claude scores on completeness, quality, regression, and design
  2. Claude adversarial — A fresh Claude subagent hunts for security holes, race conditions, edge cases, and resource leaks
  3. GPT cross-model — A GPT-based reviewer (default: gpt-4.1) provides perspective from a different model family

Passes 2 and 3 are dispatched in parallel for speed. Findings from 2+ passes are flagged as high confidence. The adversarial model is configurable in .agents/config.toml.

Fix-First auto-remediation

Review findings are classified before presenting:

  • AUTO-FIX — High certainty, small blast radius, reversible. Fixed immediately and committed.
  • ASK — Security findings, behavior changes, or low confidence. Presented to you for decision.

Trivial issues never block shipping. Important decisions always get human judgment.

Graceful degradation

Pass 1 (Structured) Pass 2 (Claude) Pass 3 (GPT) Behavior
OK OK OK Full three-pass synthesis
OK OK Failed Two-pass, tagged [claude-only]
OK Failed OK Two-pass without Claude subagent
OK Failed Failed Single-reviewer mode
Failed Fatal — cannot evaluate

Generated artifacts

When you choose cursor-native mode, harness init generates:

Artifact Path Purpose
/harness-plan .cursor/skills/harness/harness-plan/SKILL.md Plan and decompose a task with adversarial spec review
/harness-build .cursor/skills/harness/harness-build/SKILL.md Build: implement contract, run CI, triage failures
/harness-eval .cursor/skills/harness/harness-eval/SKILL.md Three-pass review with Fix-First auto-remediation
/harness-ship .cursor/skills/harness/harness-ship/SKILL.md Full automated pipeline: test → review → fix → commit → PR
Adversarial reviewer .cursor/agents/harness-adversarial-reviewer.md Cross-model code reviewer (configurable model, readonly: true)
Evaluator .cursor/agents/harness-evaluator.md Structured evaluator with JSON output (readonly: true)
Trust boundary .cursor/rules/harness-trust-boundary.mdc Always-on: Builder output is untrusted
Fix-First .cursor/rules/harness-fix-first.mdc Always-on: classify findings before presenting
Workflow conventions .cursor/rules/harness-workflow.mdc Commit format, branch naming, task state

To regenerate after config changes:

harness install --force

Configuration

Project settings live in .agents/config.toml:

Key Default Description
workflow.mode "orchestrator" orchestrator or cursor-native
workflow.profile "standard" lite / standard / autonomous
workflow.max_iterations 3 Max iterations per task
workflow.pass_threshold 3.5 Evaluator pass threshold (out of 5)
workflow.auto_merge true Auto-merge branch after pass
workflow.dual_evaluation false Add alignment review after quality review
workflow.branch_prefix "agent" Task branch prefix
native.adversarial_model "gpt-4.1" Cross-model reviewer model
native.adversarial_mechanism "auto" Adversarial dispatch: subagent / cli / auto
native.review_gate "eng" Which review layers are hard gates
autonomous.max_tasks_per_session 10 Max tasks per autonomous session
autonomous.consecutive_block_limit 2 Stop after this many consecutive blocks

Models (optional)

Per-role model selection under [models]. Harness only passes --model when the resolved value is non-empty.

Resolution order: role_overrides.<role>driver_defaults.<driver>models.default → empty.

[models]
default = ""

[models.driver_defaults]
# codex = "o3"
# cursor = "claude-4-opus"

[models.role_overrides]
# planner = "o3-pro"
# builder = ""  # explicit: always use IDE default

Workflow profiles

Profile Flow When to use
lite planner → builder → eval (no spec/contract split; threshold cap 3.0; max 2 rounds) Small changes, quick fixes
standard planner → spec + contract → builder → eval (full review) Day-to-day development (default)
autonomous strategist → standard loop → reflector Vision-driven autonomous mode

Task artifacts

All artifacts live under .agents/ at the project root:

.agents/
├── config.toml            # Project config
├── vision.md              # Project vision
├── state.json             # Runtime state
├── .stop                  # Stop signal
├── runs/
│   └── <session-id>/
│       └── events.jsonl   # Structured events
├── tasks/
│   └── task-001/
│       ├── spec-r1.md     # Spec: analysis and technical plan
│       ├── contract-r1.md # Contract (Markdown)
│       ├── contract-r1.json # Contract (JSON sidecar)
│       ├── evaluation-r1.md # Review (Markdown)
│       ├── evaluation-r1.json # Review (JSON sidecar)
│       ├── alignment-r1.md # Alignment review (if dual_evaluation)
│       ├── build-r1.log   # Builder log
│       └── ...
└── archive/               # Archived sessions

Every step is traceable. JSON sidecars suit automation and UIs without regex-parsing Markdown.

Local-first: All state stays on disk; no cloud dependency. The .agents/ tree is usually gitignored. To share config.toml or vision.md with your team, use git add -f .agents/config.toml.


Command reference

Command Description
harness install [--force] [--lang] Install agent definitions to local IDE
harness init [--name] [--ci] [--lang] [-y] Initialize project configuration (interactive wizard)
harness vision Create or update project vision
harness run <req> [--resume] [--verbose] Run a single development task
harness auto [--resume] [--verbose] Start the autonomous development loop
harness status Show current progress
harness stop Gracefully stop the current task
harness --version Show version

Advanced: Cross-Client Orchestrator Mode

Cursor-native mode covers most interactive development workflows. For CI/CD pipelines, headless automation, or multi-IDE setups (Cursor + Codex), use orchestrator mode.

Prerequisites

Dependency Requirement Notes
Python >= 3.9 Runs the Harness CLI
Cursor CLI and/or Codex CLI At least one Provides agent capability
Git Any version Project must be a Git repo

IDE CLI setup:

  • Cursor: Command Palette → Install 'cursor' command
  • Codex: npm install -g @openai/codex or from GitHub

Orchestrator vs Cursor-native

Orchestrator Cursor-native
How it runs External harness CLI spawns agent processes Skills + subagents inside Cursor IDE
Entry point harness run / harness auto /harness-plan, /harness-build, /harness-eval, /harness-ship
Cross-model review Configurable per role Adversarial subagent with a different model
When to use CI/CD, headless, multi-IDE Interactive development, Cursor-only

Role architecture

Role Responsibility Default backend (auto mode)
Planner Analyze requirements; produce spec and contract Codex
Builder Implement against the contract; commit changes Cursor
Evaluator Independent review; four-dimensional scoring Codex
Alignment Evaluator Requirement alignment and intent drift detection Codex
Strategist Pick the next task from vision (autonomous mode) Codex
Reflector Distill lessons into long-term memory Codex/Cursor

Each role's backend is configurable under [drivers.roles]. See docs/compatibility.md for CLI version requirements.

Orchestrator setup

# 1. Install agent definitions to IDE directories
harness install

# 2. Initialize (choose "orchestrator" mode)
cd /path/to/your/project
harness init

# 3. Create project vision
harness vision

# 4. Run
harness run "add user authentication"   # single task
harness auto                            # autonomous loop

# 5. Monitor
harness status
harness stop

Single-task flow (harness run)

Requirement
  → Planner: spec + iterative contract
  → Builder: implement and commit
  → Evaluator: four-dimensional score
      → Pass (≥ 3.5) → done
      → Fail → feedback to Builder, iterate
  → Max iterations (3) → blocked

Autonomous loop (harness auto)

Vision
  → Strategist: pick next task
  → Single-task flow
  → Reflector: distill lessons
  → Loop until: all done / stop signal / block limit / task limit

Dual Evaluator

With workflow.dual_evaluation = true, quality review is followed by alignment review:

  • Quality — Code quality + regression (four-dimensional scoring)
  • Alignment — Requirement coverage + contract fit + intent drift

If alignment returns MISALIGNED, the task iterates back to Builder. If CONTRACT_ISSUE, feedback goes to Planner to revise the contract instead.

[workflow]
dual_evaluation = true

Troubleshooting

Resuming interrupted work

harness run "original requirement" --resume
harness auto --resume

--resume reloads from state.json and continues from the interrupted phase.

Stop behavior

harness stop writes .agents/.stop. The task finishes its current phase and exits cleanly. For immediate abort, use Ctrl+C — Harness saves a checkpoint before exit.

IDE CLI not found

If you see Neither Cursor nor Codex CLI detected:

  • Cursor: Command Palette → Install 'cursor' command
  • Codex: npm install -g @openai/codex

Ensure the binary is on PATH. For cursor-native mode, Cursor CLI is optional — harness generates files that work directly in the IDE.

Reinstalling

If harness install fails or produces a broken setup:

harness install --force

This overwrites existing files, retries CLI installations, and regenerates native artifacts.


Observability

Each session writes structured events to .agents/runs/<session-id>/events.jsonl:

{"ts": "2026-03-31T10:00:00.000Z", "event": "agent_end", "role": "planner", "driver": "codex", "exit_code": 0, "elapsed_ms": 12340}

Event types: agent_start/agent_end, ci_result, state_transition, task_start/task_end.


Repository layout

harness-orchestrator/
├── src/harness/
│   ├── cli.py              # CLI entry (Typer)
│   ├── commands/            # Subcommand implementations
│   ├── orchestrator/        # Workflow core
│   ├── drivers/             # IDE agent invocation abstraction
│   ├── core/                # State, config, UI, events
│   ├── methodology/         # Evaluation, scoring, contracts
│   ├── native/              # Cursor-native mode generator
│   ├── agents/              # Role definitions (Cursor / Codex)
│   ├── templates/           # Prompt templates (orchestrator + native)
│   └── integrations/        # Git, Memverse
├── tests/                   # Test suite
├── docs/                    # State machine, compatibility
└── pyproject.toml

When it fits — and when it doesn't

Good fit:

  • You use Cursor and want quality gates on agent output, not blind trust
  • You want traceability across multi-step work
  • You want adversarial review to catch what a single pass misses

Poor fit:

  • Expecting a one-click "build the whole product" autopilot
  • Enterprise approval workflows unrelated to coding
  • Environments where you cannot install Python or any supported agent CLI (Cursor/Codex)

Internationalization

harness init --lang zh    # Chinese
harness init --lang en    # English (default)

Affects CLI messages, agent prompts, generated files, and installed agent definitions. Stored in .agents/config.toml under [project] lang.


Development

pip install -e ".[dev]"
pytest
ruff check src/ tests/
ruff format src/ tests/

Ruff targets Python 3.9 with line length 100. See docs/releasing.md for the release process.


Further reading

Doc Description
docs/state-machine.md Task state machine
docs/compatibility.md CLI version requirements
docs/releasing.md Release process and PyPI publishing
examples/todo-api-benchmark/ Benchmark: five tasks, three modes

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

harness_orchestrator-2.2.6.tar.gz (190.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

harness_orchestrator-2.2.6-py3-none-any.whl (182.1 kB view details)

Uploaded Python 3

File details

Details for the file harness_orchestrator-2.2.6.tar.gz.

File metadata

  • Download URL: harness_orchestrator-2.2.6.tar.gz
  • Upload date:
  • Size: 190.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for harness_orchestrator-2.2.6.tar.gz
Algorithm Hash digest
SHA256 2692316c7cac64802a583a9f370387022082b855590a71a30b62ded37ec40be1
MD5 74104a3a2c13fdc1384f411add01a85a
BLAKE2b-256 228b4ac04207d540a5c6db7f93fbdafdbf6b28983c00f5b2b07e4e5b2a1163f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for harness_orchestrator-2.2.6.tar.gz:

Publisher: release.yml on arthaszeng/harness-orchestrator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file harness_orchestrator-2.2.6-py3-none-any.whl.

File metadata

File hashes

Hashes for harness_orchestrator-2.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 e10a7b78b95bff6cf202dba4874c037290f139b6b2033ebd6647fbcf4a65391b
MD5 0e5cda54146aa97b4fe5e6db949811e0
BLAKE2b-256 46ab4475d78ac77d616850afd3bf7eb8a8fa03184a1de35a62f2e463c8b1e338

See more details on using hashes here.

Provenance

The following attestation bundles were made for harness_orchestrator-2.2.6-py3-none-any.whl:

Publisher: release.yml on arthaszeng/harness-orchestrator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page