Autonomous CLI supervisor for staged AI workflows
Project description
cybervisor
cybervisor is an autonomous CLI supervisor for development runs. It executes a default 5-stage pipeline with Gemini CLI, Claude Code, or a mock agent, supports customizing stages in YAML config, installs runtime hooks for non-interactive execution, enforces optional stage-result contracts, and keeps audit logs in JSONL.
cybervisor works best when it sits on top of a speckit repository. speckit gives the project durable product and planning memory under .specify/, and cybervisor turns that context into an autonomous execution loop with review, correction, and verification stages.
What it does
- Runs the default five ordered stages:
Spec,Review Spec,Implement,Review Code,Verify - Allows custom stage lists in
cybervisor.yaml - Supports optional structured stage-result contracts and artifact-driven routing
- Fails fast when the selected agent CLI or hook verifier credentials are missing
- Writes non-secret hook runtime metadata and settings snapshots under
.cybervisor/hooks/for non-mock runs - Keeps verifier credentials in inherited
CYBERVISOR_LLM_*env vars instead of persisting them under.cybervisor/hooks/ - Snapshots
.gemini/settings.jsonor.claude/settings.jsonand restores the exact pre-run content on exit - Streams live agent output to stderr and persists per-stage logs under
.cybervisor/ - Exits with
130onSIGINTorSIGTERMafter cleanup
Requirements
- Python 3.11+
uv- One of:
geminionPATHclaudeonPATHmockmode for local deterministic runs
CYBERVISOR_LLM_API_KEYfor non-mock runs
Optional local env loading is supported from .env in the working directory. cybervisor reads only CYBERVISOR_LLM_BASE_URL, CYBERVISOR_LLM_API_KEY, and CYBERVISOR_LLM_MODEL, and does not override variables already exported in the shell.
Install For Use In Another Project
Install the CLI onto your PATH:
uv tool install cybervisor
After installation, verify:
cybervisor --version
If you prefer pip:
pip install cybervisor
Quick Start In Your Project
Recommended flow: start with a repository that already uses speckit, then let cybervisor add the autonomous pipeline scaffold on top.
If your project does not have speckit yet, initialize that first so the repo has .specify/ context for specs, plans, tasks, and constitution-driven workflows.
In the project you want cybervisor to supervise, bootstrap the default scaffold:
cybervisor init
cybervisor init chooses the scaffold based on the repo:
- If
.specify/already exists, it creates thespeckit-oriented robust scaffold. - If
.specify/is missing, it creates a standalone default scaffold.
In a standalone repo, that creates:
cybervisor.yaml.cybervisor/contracts/prompts/Specify.md.cybervisor/contracts/prompts/Review Spec.md.cybervisor/contracts/prompts/Plan.md.cybervisor/contracts/prompts/Tasks.md.cybervisor/contracts/prompts/Review Code.md.cybervisor/contracts/prompts/Verify.md
In a speckit repo, the robust scaffold is leaner because it expects specification context to already live in .specify/:
cybervisor.yaml.cybervisor/contracts/prompts/Review Spec.md.cybervisor/contracts/prompts/Review Code.md.cybervisor/contracts/prompts/Verify E2E.md
Export your verifier credentials in that project shell, or create a local .env file there:
export CYBERVISOR_LLM_API_KEY=...
# Optional overrides
# export CYBERVISOR_LLM_BASE_URL=https://api.openai.com/v1
# export CYBERVISOR_LLM_MODEL=auto
Then run cybervisor from that project directory:
cybervisor "Create a 360 feedback system"
# equivalent explicit form
cybervisor run "Create a 360 feedback system"
cybervisor expects cybervisor.yaml in the current working directory by default, writes runtime files under .cybervisor/, and patches the selected agent's local settings during the run so the packaged hook can enforce autonomy and contract rules.
For the standalone default scaffold, planning and implementation handoffs live in stage contract artifacts under .cybervisor/contracts/artifacts/, and each run resets both .cybervisor/contracts/artifacts/ and any leftover .cybervisor/artifacts/ state before the first stage starts.
Recommended With speckit
The strongest setup is:
- Use
speckitto establish the repo's specification system and.specify/memory. - Run
cybervisor initin that same repo. - Let
cybervisorsupervise implementation, review, and verification loops using the repo's existingspeckitcontext.
Why this pairing works well:
speckitkeeps the long-lived product, plan, task, and constitution context in-repo.cybervisoradds autonomous stage orchestration, retries, hook enforcement, and audit logging.cybervisor initdetects.specify/automatically and installs the robust scaffold intended forspeckitrepositories.- The combined flow is better suited for real project work than using
cybervisoras a completely standalone prompt runner.
If you want a lightweight experiment, the standalone scaffold still works. For ongoing repository development, speckit should be the default recommendation.
Usage
cybervisor "Create a 360 feedback system"
cybervisor run "Create a 360 feedback system"
Start from a specific stage:
cybervisor "Create a 360 feedback system" --start-stage "Implement"
Stop before a specific stage:
cybervisor "Create a 360 feedback system" --start-stage "Implement" --end-before "Verify"
Version and help:
cybervisor --version
cybervisor --help
What You Need In The Target Project
- A
cybervisor.yamlfile in the project root, or--configpointing to one - Preferably an existing
.specify/directory fromspeckit geminiorclaudeinstalled onPATHfor real runs, ormockfor deterministic local testingCYBERVISOR_LLM_API_KEYset for non-mock runs- Write access to the project directory so
cybervisorcan create.cybervisor/
Develop cybervisor Itself
If you want to contribute to this repository rather than use the packaged CLI in another repo:
uv sync
uv run cybervisor --version
Local env for this repo can be bootstrapped from:
cp .env.example .env
More detail lives in:
Development
Validation commands used by this repo:
uv run mypy --strict src
uv run pytest
Useful focused runs:
uv run pytest tests/integration/test_pipeline_e2e.py
uv run pytest tests/unit/test_hooks.py tests/unit/test_pipeline.py tests/unit/test_signals.py
Release helper:
./scripts/publish.sh
That script bumps the version in pyproject.toml with a patch release by default, refreshes uv.lock, removes the old dist/, builds fresh artifacts, and publishes them with uv publish. Pass minor or major to change the bump type.
Specs Directory
Feature folders under specs/ are archival implementation artifacts after delivery. The current source of truth for runtime behavior is the checked-in code plus the main project docs and constitution.
Repository layout
src/cybervisor/ Core CLI package
assets/hooks/ Hook prompt assets and fixtures
scripts/ Demo bootstrap and end-to-end scripts
templates/demo/ Demo project scaffold
tests/ Unit and integration coverage
specs/ Speckit feature artifacts
.specify/ Constitution, templates, and repo scripts
AGENTS.md Symlink to .specify/memory/constitution.md
GEMINI.md Symlink to AGENTS.md
CLAUDE.md Symlink to AGENTS.md
Agent docs
The agent mandate files are symlinked by design:
AGENTS.md->.specify/memory/constitution.mdGEMINI.md->AGENTS.mdCLAUDE.md->AGENTS.md
If mandate content needs to change, update .specify/memory/constitution.md, not the symlinks.
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 cybervisor-0.2.1.tar.gz.
File metadata
- Download URL: cybervisor-0.2.1.tar.gz
- Upload date:
- Size: 47.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.29 {"installer":{"name":"uv","version":"0.9.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
951334d1e68dc72e56406dbb5d27dd2b4e26ef6717491106ec572f8e15e8675e
|
|
| MD5 |
3725701387486fd6a013115bb6555608
|
|
| BLAKE2b-256 |
7039988f28fe2d8af518fa8de1367d4b1efad3d0a6473200a68e718263f48907
|
File details
Details for the file cybervisor-0.2.1-py3-none-any.whl.
File metadata
- Download URL: cybervisor-0.2.1-py3-none-any.whl
- Upload date:
- Size: 62.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.29 {"installer":{"name":"uv","version":"0.9.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f0776e9a97294ef5007b83de3641eaa5ed2a54feb7239d8fe77fe2f017a07db
|
|
| MD5 |
dcf88ccd163c58187fc276ecf4608c06
|
|
| BLAKE2b-256 |
90cd22e9df9d83593ca66a2f5e20098fb0c186306396324e5d2d39a421db7604
|