app-audit
Grade an existing app against the Mobify Studio House KB and Axiom standards — fan out the specialist auditors, produce a severity-ranked gap report, build a…
Show the current state of the project — vision, sprint goal, board, blockers, daily report
> /plugin marketplace add vmobifystudio/app-dev-team > /plugin install app-dev-team@mobify-studio
How it fires
How this command gets triggered: by you, by Claude, or both.
/app-statusContext preview
What this command does when you run it.
Show the current state of the project — vision, sprint goal, board, blockers, daily report
description: Show the current state of the project — vision, sprint goal, board, blockers, daily report allowed-tools: Read, Glob, Grep, Bash
1. Print the project's one-line vision from `docs/00-vision.md` (first heading + first paragraph). 2. Print the current sprint goal from `docs/30-sprint-plan.md`. 3. Print the board summary from `docs/31-board.md`:
node "${CLAUDE_PLUGIN_ROOT}/scripts/board-doctor.mjs" docs/31-board.mdAnomalies go at the **top** of the status output, not the bottom. A `stranded` ticket is the single most important thing on this screen: it is work the sprint loop will never surface on its own. 3aa. **Say which `qa` rows have actually landed.** `qa` now covers two states and they need different answers:
node "${CLAUDE_PLUGIN_ROOT}/scripts/merge-reconcile.mjs" --root .them as **"gated, not yet landed"** with the command that lands them (`wave-integrate.mjs --wave <N>`). This is the loop working, not a fault.
disagrees. That goes at the **top** of this screen next to the doctor's anomalies.
Without this, a founder reading `4 in qa` cannot tell "four features are on the integration branch" from "four features are approved and still sitting on their own branches".
3a. **Render the board** so the shape is visible, not tabular:
node "${CLAUDE_PLUGIN_ROOT}/scripts/board-render.mjs" docs/31-board.md --out docs/32-board-view.mdPrint the kanban, the per-owner load, and the NEEDS ATTENTION block. **`--out` is not optional:** without it, checking status never refreshes the committed `docs/32-board-view.md`, which is the view humans actually read on GitHub — it silently drifts away from the board it claims to show.
3b. **Self-metrics — the only quantitative thing this system can say about itself.** Derived from `docs/31-board-events.jsonl` by `lib/events.mjs`; read them out of the CLI:
node "${CLAUDE_PLUGIN_ROOT}/scripts/board.mjs" show --jsonPrint the `metrics` object as exactly this block, and nothing more:
SELF-METRICS (E events, I inferred)
cycle time (median) 4h 12m claimed -> closed, over T tickets that have both
review pass rate 67% 4 of 6 tickets approved with no rework
rework rate 33% 2 of 6 went back for changes
gates fired rejected 1 · changes 2 · qa_failed 0 · blocked 1
tickets per round 2026-07-28 3 · 2026-07-29 2Rules, because a metric that lies is worse than no metric:
**`n/a`**, never `0%` — an empty denominator reads as "every review failed".
timestamp. Print `n/a — no ticket has completed`, and say how many are in flight.
contribute a cycle time. Print the inferred count in the header and, if it is more than half the log, add one line: `most of this log is inferred from a hand-written board — timings start from the migration, not from the sprint`. A thin number presented as a measurement is the failure mode this block exists to avoid.
healthy team; it is a loop that is not running its gates. Say so rather than printing it approvingly.
reason. Exit `1` with output → the log folds with sequence violations (hand-appended lines); print the metrics *and* the violation list, since the numbers are derived from a log that disagrees with itself.
hand-written; run /app-plan or /app-build once to migrate it`. Do not migrate from here: `/app-status` is a read-only command and migration rewrites `docs/31-board.md`.
3bb. **Loop trend and budget** — what happened to the *loop*, which the event log cannot answer:
node "${CLAUDE_PLUGIN_ROOT}/scripts/round-journal.mjs" show
node "${CLAUDE_PLUGIN_ROOT}/scripts/round-journal.mjs" checkBoth read `docs/33-rounds.jsonl`, appended once per round by `/app-build` step 6a. `show` is the per-round burn-down (tickets waved, verdicts, retries, refusals); `check` is the one-line budget position, and it prints here whether or not it is near a ceiling — a spend first seen when it stops the run was seen too late. `ROUND JOURNAL: no rounds yet` is the correct output before the first `/app-build` round; it is not an error.
**Spend reads `not measurable in this harness` unless a round actually reported a number.** That sentence is the honest one: rounds, spawns, retries and refusals are counted because they are countable, and no token figure is invented to fill the gap.
3c. **Open team threads.** From `docs/team/messages.jsonl`, list any `question` with no matching `answer`, and any `escalation` not yet closed by a `decision`. These are the conversations the team is stuck inside.
4. Print today's daily report if it exists at `docs/daily/<today>.md`. 5. Print recent bug list from `docs/51-bugs.md` if it exists — show open S1/S2 only. Then print the register view at `d
Describe your app idea in one line. Get a shipped iOS & Android app. AI App Studio is a team of 30 AI specialists — a CEO, product manager, designers, iOS/Android engineers, a code reviewer, QA, and a release manager — that works like a real software studio.
Repo: vmobifystudio/app-dev-team
Grade an existing app against the Mobify Studio House KB and Axiom standards — fan out the specialist auditors, produce a severity-ranked gap report, build a…
Run the sprint — launch developer agents in parallel, review each PR, gate to QA, surface bugs back into the loop
Create a deterministic provenance manifest before an agent starts work:
Open the full control room — five screens (Mission Control, Communications, Board, Team, Founder Inbox) in the browser
Open the emergency/diagnostic dashboard — zero-dependency, single file, works when the build stack is broken