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.
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 project_supervisor-0.5.0.tar.gz.
File metadata
- Download URL: project_supervisor-0.5.0.tar.gz
- Upload date:
- Size: 46.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9596269c068f96bb884053ada96df09d439063ed3e90a49bd09f4505c7eb8175
|
|
| MD5 |
a78a389ec1846b51c839adc04d064b26
|
|
| BLAKE2b-256 |
423f8a1424738e823eb34968aadca9233cb1f99880245dcc4696824421a8f465
|
Provenance
The following attestation bundles were made for project_supervisor-0.5.0.tar.gz:
Publisher:
publish.yml on Smkzz/project-supervisor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
project_supervisor-0.5.0.tar.gz -
Subject digest:
9596269c068f96bb884053ada96df09d439063ed3e90a49bd09f4505c7eb8175 - Sigstore transparency entry: 2314110953
- Sigstore integration time:
-
Permalink:
Smkzz/project-supervisor@fc7909c001f5481874b5b559a2d2b0cf05fecef9 -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/Smkzz
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fc7909c001f5481874b5b559a2d2b0cf05fecef9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file project_supervisor-0.5.0-py3-none-any.whl.
File metadata
- Download URL: project_supervisor-0.5.0-py3-none-any.whl
- Upload date:
- Size: 42.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2008d8ad22cdda7661fd155e4d3c7d14f4a2a12ddde53b151d2aeea1d3224cf1
|
|
| MD5 |
d1445ecf2f3dc2c504e9a831465ddb2d
|
|
| BLAKE2b-256 |
76122e169cec8b7d52d4b65886c2cf5603d4d02b9f906498950e59d0a408fa2e
|
Provenance
The following attestation bundles were made for project_supervisor-0.5.0-py3-none-any.whl:
Publisher:
publish.yml on Smkzz/project-supervisor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
project_supervisor-0.5.0-py3-none-any.whl -
Subject digest:
2008d8ad22cdda7661fd155e4d3c7d14f4a2a12ddde53b151d2aeea1d3224cf1 - Sigstore transparency entry: 2314110974
- Sigstore integration time:
-
Permalink:
Smkzz/project-supervisor@fc7909c001f5481874b5b559a2d2b0cf05fecef9 -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/Smkzz
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fc7909c001f5481874b5b559a2d2b0cf05fecef9 -
Trigger Event:
push
-
Statement type: