Skip to main content

Project Supervisor

Project Supervisor is the project-neutral control plane for autonomous multi-agent software development. Projects provide a strict YAML adapter; the supervisor provides atomic queueing, leases, worktree/evidence roots, shell-free verification, recovery decisions, and typed handoff contracts.

This 0.5.0 release is the reusable control-plane foundation. It now has atomic SQLite ownership transitions, lease heartbeat/expiry/release, bounded command execution, evidence manifests, and structured handoffs. OS-agent launching, independent-review orchestration, and project cutover remain deliberately separate provider work.

Install in any GitHub project

The package is designed to be installed into each consuming project rather than copied into it:

python -m pip install project-supervisor
project-supervisor init
# edit .project-supervisor.yaml and ensure its status_file exists
project-supervisor check

init creates .project-supervisor.yaml in the current project. Once present, the adapter is discovered automatically from the project root or a child directory. The explicit form remains available for scripts and CI:

project-supervisor --project C:\path\to\project\.project-supervisor.yaml check

For a GitHub checkout before a PyPI release exists:

python -m pip install "project-supervisor @ git+https://github.com/Smkzz/project-supervisor.git@main"

For stable automation, pin a release tag or PyPI version. The consumer templates in templates/project/ include a pinned requirements file, Dependabot config, and a scheduled compatibility workflow. Dependabot opens a reviewable upgrade PR whenever a new release is published; the workflow validates the installed version. This is the automatic-update path for existing projects while keeping their dependency state visible and reproducible.

The package repository includes GitHub Actions for test/build checks and PyPI trusted publishing on v* tags. Publishing still requires a real GitHub remote, the PyPI project name, and trusted-publisher configuration.

The complete repository/PyPI setup checklist is in docs/GITHUB_RELEASE_CHECKLIST.md.

Development gates

python -m pip install ".[dev]"
python -m ruff check project_supervisor tests
python -m ruff format --check project_supervisor tests
python -m mypy project_supervisor
python -m pytest --cov=project_supervisor --cov-report=term-missing --cov-fail-under=75
python -m build
python -m twine check dist/*
python -m pip check

The release is intentionally tag-driven: the vX.Y.Z tag must match the single-sourced package version before PyPI publishing is allowed.

Adapter contract

schemaVersion: 1
project:
  name: demo
  root: C:/path/to/project
  markers: [package.json]
  queue_file: .supervisor/queue.yaml
  status_file: STATUS.md
  state_db: .supervisor/state.sqlite3
  evidence_root: .supervisor/evidence
  worktree_root: .supervisor/worktrees
  job_id_pattern: 'JOB-[0-9]+'
  max_retries: 2
  capabilities:
    snapshot_read: true
    verification: true
    queue: true
    worker_launch: false
    independent_review: false
    hosted_gate: false
    publish: false
  verification_profiles:
    fast:
      commands:
        - argv: [python, -m, pytest, -q]
          cwd: .
          timeout_seconds: 300
          shell: false
          side_effects: read_only
  snapshot:
    sources:
      - path: orchestration/state.json
        format: json
        role: runtime
        optional: true
  worker_profiles: {}
  reviewer_profiles: {}
  protected_paths: [.git, .supervisor]
  agent_scopes:
    implementer: [src]
    verifier: []
    reviewer: [docs/reviews]

All configured paths are relative to the project root and are checked for containment. Commands use explicit argv, relative cwd, bounded timeout, optional non-secret environment values, shell: false, and an explicit side_effects declaration (read_only, control_plane, project, external, or unknown). The package does not assume backend, frontend, Flutter, Node, or any other repository layout. Capabilities are explicit so the supervisor can fail closed when a project has not yet supplied a worker, reviewer, hosted-gate, or publish integration.

Inspect and verify a project

python -m project_supervisor.cli --project C:\path\to\project-adapter.yaml paths
python -m project_supervisor.cli --project C:\path\to\project-adapter.yaml check
python -m project_supervisor.cli --project C:\path\to\project-adapter.yaml snapshot
python -m project_supervisor.cli --project C:\path\to\project-adapter.yaml verify --job-id JOB-1 --profile fast
python -m project_supervisor.cli --project C:\path\to\project-adapter.yaml shadow-verify --profile fast
python -m project_supervisor.cli --project C:\path\to\project-adapter.yaml coordinate --job-id JOB-1 --agent-id worker-1 --reviewer-id reviewer-1 --revision abcdef1

Verification writes a deterministic command manifest below the adapter's contained evidence root. A failed command returns a non-zero exit code and is never reported as a pass.

Shadow verification runs only commands explicitly declared side_effects: read_only. It reports accepted: false, does not mutate queue, state, worktrees, or evidence, and refuses delegated commands that may reconcile a control plane or touch the project. Use ordinary verify only after accepting the declared side effects. The snapshot command reads adapter-declared JSON and Markdown sources into one normalized, provenance-hashed view.

Queue lifecycle

python -m project_supervisor.cli --project adapter.yaml queue-init
python -m project_supervisor.cli --project adapter.yaml queue-add --job-id JOB-1 --payload-json '{"goal":"run tests"}'
python -m project_supervisor.cli --project adapter.yaml queue-claim --job-id JOB-1 --agent-id agent-1
python -m project_supervisor.cli --project adapter.yaml queue-heartbeat --job-id JOB-1 --agent-id agent-1 --lease-token TOKEN
python -m project_supervisor.cli --project adapter.yaml queue-complete --job-id JOB-1 --agent-id agent-1 --lease-token TOKEN --event-id evt-1 --status completed --result-json '{"ok":true}'

Claims, completion, heartbeat, release, and expiry use SQLite write transactions. A late or mismatched lease cannot complete another worker's job; repeated completion with the same event ID is idempotent.

The typed gate API consumes concrete command results, evidence validation, review handoffs, canary results, and approval records. The older boolean gate function remains only as a compatibility shim and is not sufficient for acceptance.

The provider interface supports Codex/local workers. The coordination API runs one worker and then one distinct reviewer only when the adapter declares both capabilities; it requires complete handoffs, safe changed paths, exact revision/tree identity, and validated evidence before returning APPROVED. Adapters provide those processes through worker_profiles and reviewer_profiles; profile argv values are explicit, shell-free templates with only job_id, agent_id, revision, tree, and handoff_path fields. Each coordinate run writes coordination.json beside its evidence. It does not claim a queue lease automatically; callers must claim a generic queue lease first. The command extends that lease for its declared budget, then completes or releases it according to the final coordination state. The example adapters under examples/ cover Flutter and Gomoku without machine-specific roots, but intentionally leave worker/reviewer launch capabilities disabled until each project has a reviewed integration provider.

Metadata

Release files for project-supervisor 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for project-supervisor 0.5.0
File Size Uploaded
project_supervisor-0.5.0.tar.gz 46.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for project-supervisor 0.5.0
File Interpreter ABI Platform
project_supervisor-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 89.8 kB

Release files / project_supervisor-0.5.0.tar.gz

Download URL project_supervisor-0.5.0.tar.gz
Size 46.9 kB
Tags Source
SHA-256 checksum
How to use checksums
9596269c068f96bb884053ada96df09d439063ed3e90a49bd09f4505c7eb8175
BLAKE2b-256 checksum
How to use checksums
423f8a1424738e823eb34968aadca9233cb1f99880245dcc4696824421a8f465
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 1, 2026.

Transparency log

Release files / project_supervisor-0.5.0-py3-none-any.whl

Download URL project_supervisor-0.5.0-py3-none-any.whl
Size 42.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2008d8ad22cdda7661fd155e4d3c7d14f4a2a12ddde53b151d2aeea1d3224cf1
BLAKE2b-256 checksum
How to use checksums
76122e169cec8b7d52d4b65886c2cf5603d4d02b9f906498950e59d0a408fa2e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 1, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page