Skip to main content

muvue

muvue runs an AI coding agent's work as an auditable state machine instead of a chat transcript: every task is a node in a SQLite-backed graph (pending -> ready -> in_progress -> review -> done), every mutation is a recorded event, and a two-gate approval flow (spec approval, then task decomposition approval) sits between an agent's plan and it touching your repo. An unattended runner can then drive approved work through pluggable vendor-CLI drivers (claude, codex, gemini, or fake for testing), enforcing per-driver budgets, risk-tiered auto-approval, and — in strict mode — a worktree-per-node git airlock that blocks a push unless the node's frozen acceptance criteria are met.

Requirements

  • Python >= 3.12
  • uv
  • git
  • gh CLI, authenticated, only if you use muvue import --from github#N or muvue merge --pr --create

Install

No clone needed — pick one:

pip install muvue          # from PyPI
pipx install muvue         # isolated, puts `muvue` on PATH
uvx muvue --help           # try it without installing anything
uv tool install muvue      # isolated, uv-managed

Installing gives you two console scripts: muvue (the CLI) and muvue-fake-agent (a scripted driver for testing, no vendor subscription required).

From source

git clone https://github.com/eugkim0120/muvue && cd muvue
uv sync

Run via uv run muvue ..., or uv pip install -e . into an active venv to get muvue directly on PATH. Also installable straight from GitHub without cloning: pipx install git+https://github.com/eugkim0120/muvue.

Quickstart

muvue operates on an external git repo — point it at one:

uv run muvue init /path/to/your/repo
uv run muvue doctor /path/to/your/repo

init scaffolds .muvue/ in that repo: config.toml, muvue.db, git hook shims, and a .gitignore entry. doctor validates the install and, if no daemon is already running, spins up a throwaway one against a scratch repo to live-probe its security controls (loopback bind, Host/Origin checks) then tears it down.

Walk a project through both gates and have the (fake, no-login-required) driver execute it:

uv run muvue project create --goal "add a health endpoint" --path /path/to/your/repo
# -> prints the new project's id

uv run muvue spec <project_id> --title "Health endpoint" \
  --body "Add GET /health returning 200" --path /path/to/your/repo
# -> Gate 1: spec node, status=pending

uv run muvue approve spec:<spec_id> --path /path/to/your/repo
# -> spec node, status=ready

uv run muvue decompose <spec_id> --title "Implement /health" \
  --criteria "GET /health returns 200" --path /path/to/your/repo
# -> Gate 2: task node, status=pending

uv run muvue approve gate2:<project_id> --path /path/to/your/repo
# -> freezes acceptance criteria, unblocks the task

uv run muvue run --path /path/to/your/repo
# -> unattended runner drives ready nodes through the routed driver
#    (config.toml routes every kind to `fake` by default)

uv run muvue approve review:<node_id> --path /path/to/your/repo
uv run muvue close <project_id> --yes --path /path/to/your/repo
# -> commits the project's proposed structure diff, flips it to closed

uv run muvue uninit /path/to/your/repo reverses everything init did — config, db, hook shims, gitignore entry, and the muvue/structure git ref if present — leaving the repo byte-for-byte as it was before.

Other entry points

  • uv run muvue serve --path <repo> — one daemon per repo: HTTP API + SSE-driven dashboard at http://127.0.0.1:8765 (loopback only).
  • uv run muvue mcp --path <repo> — MCP stdio server exposing agent verbs (start/done/fail/ask/...), for wiring muvue into an editor or agent harness directly instead of driving it from the CLI.
  • uv run muvue audit --path <repo> — structure-graph drift audit: samples stale/unverified components, drafts proposed diffs into the inbox, and archives lessons that have decayed past their retrieval threshold.
  • uv run muvue import --from github#<N> --path <repo> / muvue merge --pr --create — real gh CLI integration; needs gh auth login first.

Configuration

.muvue/config.toml, written by init with working defaults. Key sections: mode (light or strict), [agents.<name>] (driver command + budget + cost unit), [routing] (node kind -> driver name), [risk] (globs and diff-size thresholds that raise risk tier), [budget] (wall-clock and node-count caps for muvue run).

Development

uv run pytest        # 537 tests

No network or vendor-CLI login is required for the test suite or the quickstart above — everything routes through the fake driver unless you edit [routing] yourself.

Known limitations

  • The claude/codex/gemini driver output parsers were built from documented/synthetic samples of each vendor CLI's output format, not verified against a live, subscription-authenticated run of that CLI.
  • The VS Code extension (vscode-extension/) compiles and unit-tests clean but has not been run inside a real VS Code Extension Host.

Docs

  • docs/protocol.md — node status machine, verb reference, event schema.
  • docs/decisions.md — numbered decision log, append-only.
  • docs/threat-model.md — daemon/API security model.
  • docs/providers.md — vendor driver adapter contracts.
  • CHANGELOG.md

Release files for muvue 0.1.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 muvue 0.1.0
File Size Uploaded
muvue-0.1.0.tar.gz 126.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for muvue 0.1.0
File Interpreter ABI Platform
muvue-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 276.8 kB

Release files / muvue-0.1.0.tar.gz

Download URL muvue-0.1.0.tar.gz
Size 126.1 kB
Tags Source
SHA-256 checksum
How to use checksums
ed0ee4009f80483ad4c4a1123fa49f4194326351ef5924fe6a3e8358dedf4c51
BLAKE2b-256 checksum
How to use checksums
a616546c23eca804a04f1287d121f08b2edc1a33a96140871e9a34b5c14f21fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.6 {"installer":{"name":"uv","version":"0.12.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / muvue-0.1.0-py3-none-any.whl

Download URL muvue-0.1.0-py3-none-any.whl
Size 150.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6e4e295291590a271f0679a925e7750b88f95c81afe48b97e8762664d62a4af4
BLAKE2b-256 checksum
How to use checksums
f2493c0495d1cdf2be52ed5f2a70e9a79e333ecc42a3d62c0465220df57fff06
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.6 {"installer":{"name":"uv","version":"0.12.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.1.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