DAG-based progress visualization for vibe coding — Lean 4 region map style
Dependencies
A goal DAG that coding agents maintain and humans watch — Lean 4 region map style, rendered as a live .vmap/vibe-map.html.

The screenshot is vibe-map's own self-map. examples/dag.html is the live version — open it locally.
# macOS arm64 / Linux x86_64 / Linux arm64 — prebuilt
curl -fsSL https://raw.githubusercontent.com/eanzhao/vibe-map/master/install.sh | bashIntel Mac (darwin-x86_64) is not in the prebuilt matrix yet (GitHub Actions macos-13 queue is too slow). Build from source for now.
git clone https://github.com/eanzhao/vibe-map && cd vibe-map
moon install && moon build --target native --release
./install.sh --local "$PWD"Help me track this project's progress with vibe-map (vmap).
If vmap isn't installed yet:
curl -fsSL https://raw.githubusercontent.com/eanzhao/vibe-map/master/install.sh | bash
# If ~/.local/bin isn't on PATH, follow the script's hint and source your shell rc
Read the rules (required):
cat ~/.vmap/skills/SKILL.md
ls ~/.vmap/skills/playbooks/
Initialize at the project root (if .vmap/ doesn't exist):
vmap init --name "<my project>"
# Add .vmap/ to .gitignore
From then on, every piece of progress goes through the vmap CLI:
- I describe a requirement → you extract goals at the PRD level (semantic, not by code package!) with vmap add goal
- You break work into tasks: vmap add task --deps ...
- You finish a task: vmap update <id> --status done
- You promote a goal: vmap update <goal> --closure scoped/public/...
- At key checkpoints: vmap audit, then fix tests/docs per the violations
Constraints:
- A goal is a "user-perceivable capability" on the PRD, not a code package
- closure is monotonic (seed → obligation → scoped → public → bridged → mature), never regress
- Never hand-edit .vmap/vibe-map.json — everything goes through the vmap CLI
- Exit codes: 1 = business error / 2 = bad args / 3 = audit violation
Playbook lookups in ~/.vmap/skills/playbooks/:
new-feature.md / audit-fix-loop.md / release-shipping.md / daily-progress.md
codex-goal-implement-loop.md / codex-architecture-refactor-loop.md
Command cheatsheet: ~/.vmap/skills/cheatsheet.md.
Every mutating vmap command auto-refreshes .vmap/vibe-map.html, which I'll keep open. Go.Terminology: goal / task rather than milestone / issue to avoid collision with GitHub's own concepts. The "region map" visual is borrowed from Lean 4 — goal / focus / closure are the same family of ideas.
| code | meaning |
|---|---|
| 0 | success |
| 1 | business validation failed (cycle, duplicate id, unknown node, release validation, ...) |
| 2 | CLI argument error |
| 3 | audit violations (drives the fix-and-retry loop) |
vmap init --name "<my project>"
vmap add goal --id g-login --title "users can log in"
vmap add task --id t-auth --goal g-login --title "auth middleware" --regression-testable
vmap update t-auth --status done --tests "src/auth/middleware_test.mbt"vmap plan --docs ROADMAP.md docs/ # default: extract `- [ ]` checklist items
vmap plan --docs TODOS.md --format tlist # extract `## T<N> — title` + `**Status:**`Today plan only handles explicit checklists. Pulling semantic goals from free-form PRD text is on the 1.0.0 roadmap (goal-llm-plan) — and unblocks vision point 2.
vmap backfill --src . --template moonbit # built-in: moonbit | typescript | dotnet
vmap backfill --src . --template-file path.json⚠️ Useful only for retroactive recovery. Product capability dependencies ≠ code package structure — backfilled goals are package-shaped, not PRD-shaped. Once the project is running, the main entry point should return to live tracking.
vmap release add 0.5.2 --label-en "publish to mooncakes.io" --label-zh "发布到 mooncakes.io" \
--target 2026-05-20 --status open
vmap release assign 0.5.2 --goals goal-publish,goal-licensing
vmap status --release 0.5.2 # text, filtered to one release
vmap status --release 0.5.2 --json # AI-loop friendly
vmap release list [--json]vmap audit # text
vmap audit --json # JSON
echo $? # 0 clean / 3 violationspython3 tools/audit_github.py --file vibe-map.json [--strict] [--markdown]vmap audit --json > /tmp/v
# parse violations → write tests for each missing_tests / write docs for each missing_docs / fill region metadata
# vmap update <id> --tests ... / --docs ... / --owner ...
# audit again until exit 0Today audit checks that tests are listed. Actually running the regression suite and gating on it — vision point 4 — is goal-regression-runner, not yet started.
vmap render --out examples/dag.html
open examples/dag.htmlvmap init create vibe-map.json
vmap add goal … add a goal
vmap add task … add a task
vmap update <id> … edit any field (unset flags don't touch existing values)
vmap rm <id> remove a goal or task
vmap rename <old> <new> rename id (rewrites deps + task.goal refs)
vmap show <id> [--json] full detail for one node (tasks / upstream / downstream)
vmap list goals [filters] [--json] list goals with filtering
vmap list tasks [filters] [--json] list tasks with filtering
vmap deps <id> [--upstream/--downstream/--json] transitive deps graph
vmap context <id> JSON minimal context: files + ancestorGoals
vmap import --in <path> bulk-load a hand-written vibe-map.json (validate + write)
vmap render --out X.html render visualization HTML
vmap status [--json] [--release K] summary text / JSON (optionally per release)
vmap audit [--json] quality gate
vmap coverage [--json] how much of docs / src / issues the DAG references
vmap doctor [--json] health alerts (density / lane / orphan / mismatch)
vmap backfill --src DIR rescue tool: recover goals from source
vmap plan --docs F,… extract from markdown
vmap release add <key> add a release lane
vmap release list [--json] list releases
vmap release update <key> --status/--target/--label-en/--label-zh/--notes
vmap release assign <key> --goals assign goals to a release
vmap release unassign <key> [--goals] remove goals from a release (default: all)
vmap release rm <key> [--force] delete a release (--force if it has members)
vmap version [--check] print version
vmap upgrade print the upgrade command (pipe through bash to run){
"config": { /* products / closure_tiers / formal_levels / ui */ },
"project": { "name": "...", "description": "..." },
"releases": [
{ "key": "0.5.2", "label": {"en":"publish to mooncakes.io","zh":"发布到 mooncakes.io"},
"target": "2026-05-20", "status": "planned|open|closed", "closed_at": null }
],
"goals": [{
"id": "goal-login",
"title": "users can log in",
"deps": ["goal-schema"], // cross-goal deps at the semantic layer
"closure": "scoped", // seed → obligation → scoped → public → bridged → mature (monotonic)
"formal": "checked", // none / sop / checked / audited
"product": "default",
"milestone": "0.5.2", // points at release.key (soft-validated)
"owner": "eanzhao",
"issue_count": 3,
"focus": true,
"archived": false,
"promoted_at": { "scoped": "2026-05-19" },
"gh_query": "is:issue label:goal-login",
"regression_testable": true,
"tests": [], "docs": []
}],
"tasks": [{
"id": "t-auth", "goal": "goal-login",
"title": "auth middleware",
"status": "todo | in-progress | blocked | done",
"deps": [], // same-layer task deps
"notes": "",
"regression_testable": true,
"tests": [], "docs": []
}]
}{ "files": ["..."], "ancestorGoals": ["..."] }Machine-friendly: vmap release list --json. Human-friendly below.
| Goal | State |
|---|---|
| goal-release-modeling — release lanes (data + CLI) | Stage 1 ✓ (add/list/update/assign/unassign/rm, status --release, release_progress); Stage 2 pending (release status / close) |
| goal-cli-dag-mgmt — CLI surface the agent uses to drive the DAG | ✓ update --deps/--add-dep/--remove-dep/--goal/--notes/--description/--add-test/--remove-test/--add-doc/--remove-doc, show <id>, list goals/tasks (filtering), deps <id> (transitive), rename <old> <new> |
| goal-audit — audit rule expansion | Base rules ✓; pending: release_blocked / release_unknown / audit --release filtering |
| goal-viz — release dimension in the viz | Base viz ✓; pending: release dropdown filter, group-by-release on the left panel |
| Goal | Vision link | Notes |
|---|---|---|
| goal-llm-plan | point 2 (greenfield → DAG) | Upgrade vmap plan: extract semantic goals from free-form PRD text, not just - [ ] checklists |
| goal-regression-runner | point 4 (regression suite per goal) | Actually run the tests attached to every goal, gate new ships on them, point at the exact regressed goal when something breaks. Today audit only checks tests are listed, not that they pass. |
| goal-greenfield-bootstrap | point 2 | Tighter loop between brainstorm-style skills (gstack and similar) and vmap plan — agent walks the user from raw idea to a full DAG without manual copy-paste |
| goal-cross-language | — | Rust / Go / Python templates for backfill (rescue tool broadcast) |
| goal-schema-freeze | — | schema_version field + upgrade path + stable schema doc |
| Release | Date | Contents |
|---|---|---|
| 0.1.0 | 2026-05-15 | Live tracking: init / add goal / add task / update / rm, JSON persistence, cycle detection, stable exit-code contract |
| 0.2.0 | 2026-05-17 | Plan (checklist + tlist), Backfill (moonbit / typescript / dotnet templates), base visualization (HTML, product/search/status filters, node detail), base Audit (tests / docs / region metadata), GitHub issue drift script |
| 0.3.0 | 2026-05-18 | Terminology rename: Milestone → Goal, Issue → Task (isolating from GitHub's concepts) |
| 0.5.0 | 2026-05-19 | The all-in-one coding-agent experience: install.sh (curl | bash) + skills bundle (SKILL.md / cheatsheet / playbooks / vibe-map-bootstrap) + .vmap/ default path + auto-render of .vmap/vibe-map.html on every mutating command + vmap version / vmap upgrade + 12 cli-dag-mgmt commands + release lanes (base) + node detail modal |
| 0.5.1 | 2026-05-19 | Skill refresh: agent now reads GitHub issues (gh issue list) as a PRD signal during bootstrap |
| 0.5.2 | 2026-05-20 | vmap coverage (docs/src/issues coverage) + vmap doctor (density / lane / orphan / mismatch warnings); published to mooncakes.io under MIT |
| 0.5.3 | 2026-05-20 | vibe-map.html frontend: double-click a sidebar goal row to open its detail modal, GitHub URLs across the page become new-tab links, double-click an expanded task card for a dedicated task detail modal |
| 0.6.0 | 2026-05-21 | Release modeling Stage 2, Audit Stage 2, Visualizer Stage 3 & AI Regression Context: vmap release status / close CLI subcommands (with target-specific FFI date retrieval), vmap audit --release filtering, core release audit rules (release_unknown & release_blocked), HTML visualizer sidebar release grouping & filter dropdown, and vmap regression prompt to compile structured markdown diagnostics context for external AI agents |
| 0.6.1 | 2026-05-22 | Regression Probes Dashboard & Runner: Added automated regression sweep runner vmap regression run (cross-platform FFI command execution), left progress sidebar tab-switcher to display Probes status dashboard (Passed/Failed/Missing/Pending), and detailed execution stats/warnings rendering inside vibe-map.html |
| 0.7.1 | 2026-05-23 | Delegated Codex loops: added codex-goal-implement-loop and codex-architecture-refactor-loop playbooks, prompt templates, and a cross-platform spawn-codex.sh wrapper so a controller agent can delegate implementation/review/refactor work to Codex CLI while keeping vmap as the visible state surface |
| 0.7.2 | 2026-06-03 | Minimal agent context slices: added vmap context <id> to emit deterministic { files, ancestorGoals } JSON from existing DAG deps, docs, and tests, with core tests for goal and task slices |
moon install # fetch moonbitlang/x
moon build --target native # outputs _build/native/debug/build/cmd/vmap/vmap.exe
moon test # 63 tests
moon fmt && moon checkDAG-based progress visualization for vibe coding — Lean 4 region map style
Dependencies