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
uvgitghCLI, authenticated, only if you usemuvue import --from github#Normuvue 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 athttp://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— realghCLI integration; needsgh auth loginfirst.
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/geminidriver 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)
| File | Size | Uploaded | |
|---|---|---|---|
| muvue-0.1.0.tar.gz | 126.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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}
|