Releases: ndisisnd/msg
Release list
v5.6.5
Long engineering runs now survive interruptions. If a session dies or you close your laptop mid-run, the orchestrator picks up where it left off — finished work is kept, only the unfinished agents are re-dispatched. Runs also got cheaper: compiled coding standards are remembered between runs, and agent briefings are arranged so the shared portion is billed at cache rates instead of full price.
✨ New
- An interrupted orchestration run is no longer lost. Start the same plan again and you'll be offered a resume: waves that finished stay finished, engineers who already returned aren't sent out again, and only the remaining work runs. If the checkpoint is ever missing or damaged, nothing breaks — the run simply starts fresh.
- Your coding standards are now compiled once and remembered. Every later run — orchestrated or a solo build — reuses the saved copy instantly instead of recompiling it. Edit any standards file and the copy invalidates itself automatically, so you can never be served stale rules.
📈 Improved
- Parallel engineering runs cost less. Each agent's briefing now leads with the material every agent shares and ends with what's unique to them, so the shared part hits the provider's prompt cache for every agent after the first instead of being paid for in full each time.
- Resuming never guesses. What kind of run to make is always decided from the plan document itself — the checkpoint only records progress, and if the two ever disagree, the plan wins and the stale checkpoint is set aside.
- Various small documentation touch-ups.
v5.6.4
You can now run your app on a simulator or emulator with one command:
/emulate. It takes whatever branch you're on, clears out the leftover build processes from your last attempt, and opens the window on your desktop. That last part is the reason it exists — a half-dead build server from the run before is the most common cause of a launch that fails for reasons that have nothing to do with your code.
✨ New
- Type
/emulatein any project and the app launches locally, on the branch you're standing on. You don't have to remember the right build command, stop last time's dev server, or pick a device — it works out all three and tells you what it chose. - Say which platform you want with
/emulate --iosor/emulate --adr. Leave the flag off and it reads the platforms you actually ship from your project's setup. If you ship both, it asks; if you ship neither, it stops and says so rather than guessing and booting the wrong thing. - Choose a device with
/emulate --device "iPhone 17", or let it suggest one. It prefers a simulator you already have running, then one you've set as your own default, then the newest you have installed — so the common case needs no decision from you. - Preview a run without touching anything using
/emulate --dry-run. It shows you exactly which processes it would stop, so you can see what it's about to do before it does it. - If you'd rather it ran a specific command, you can now write one into your project's platform setup and
/emulatewill use that instead of working one out. Leave it blank and nothing changes.
📈 Improved
/emulatenever writes to your repository — no commits, no branches, no files. The only thing it changes on your machine is stopping stale build processes, and it will only ever stop ones belonging to this project. A dev server from another project is never touched, even if it looks identical.- Failures tell you what went wrong and what to do about it. A missing toolchain, a device name that doesn't exist, a project with nothing to emulate — each one stops immediately with the fix, instead of surfacing as an obscure error several minutes into a build.
- Projects you set up before this release can pick up the new settings by running
/msg --update, which offers them to you rather than changing anything on its own.
v5.6.3
You can now check which version of msg you're running. Type
/msg --versionin any project and you get one line back. This matters most right after you install or update — msg lives outside your projects, so an update that quietly failed used to look exactly like one that worked.
✨ New
/msg --versiontells you which release is installed, from any repo. Alongside the version it shows the exact build and the date you installed it, so you can tell a fresh copy from one that's been sitting there — the version number alone wouldn't change if you reinstalled the same release.- Installing now confirms the version as it goes, so you see what you're getting at the moment you get it rather than hoping it took.
v5.6.2
Running a team of agents no longer goes quiet. When you kick off a team build, your session stays responsive and you get a steady stream of progress from the agents doing the work, instead of one long silence until everything finishes.
🐛 Fixed
- Team builds now report progress while they run. Previously the whole wave took over your session until it was done, which also meant the periodic progress updates never reached you — so a long build looked indistinguishable from a stalled one.
- Progress from a team's agents is no longer lost on the way to you. Each layer of the run now keeps its own separate progress track, so updates from the inner agents get passed along rather than overwritten by whichever one reported first.
v5.6.1
Gate runs — the checks
pre-mergeandmergedo before shipping — now happen in a background subagent instead of your main conversation. Your conversation stays lean and you still see live progress, but you're only pulled in for the decisions that are actually yours to make.
📈 Improved
- Gate runs in
pre-mergeandmergeexecute in a dedicated subagent, keeping your main conversation short while still streaming live progress — what you see and every approval you're asked for work exactly as before. mergenow splits its work so mechanical steps run in the background while every human decision — approvals, sign-offs — stays in your main conversation, so you're only interrupted when a call is genuinely yours.- Progress from nested work is folded into one coherent stream of updates instead of surfacing as separate, overlapping status reports.
🐛 Fixed
- A gate run's verdict is now always written to disk, so its outcome can never go missing after the run finishes.
v5.6.0 — AHA hygiene
Your project's learnings log (
devkit/AHA.md) now stays short enough to actually help. Every agent that records a lesson is held to a terse two-to-three-line format — the shared writer script simply refuses anything longer — and a new/msg --ahamode sweeps the log on demand: it merges repeats, prunes entries that no longer earn their lines, and flags lessons that keep recurring as things to fix at the source (a workflow change, a note in your project memory, or a real code fix). Agents reading the log now carry only the handful of entries relevant to their assigned work, so past lessons inform new work without crowding it out.
✨ New
/msg --aha— sweepsdevkit/AHA.md, shows a per-entry triage table (keep / merge / prune / promote), and after one confirmation rewrites the ledger in compact form. Like--doctor, it never fixes anything itself: promotions are handed to you as briefs.script-aha.sh --list— a deterministic sweep of the ledger with recurrence counts, so the triage never re-counts by hand.
🔧 Improved
- Terse entries at the source: every writer (eng builds, plan-pm, plan-em, plan-review) goes through the shared writer, which now rejects any field over 140 characters — one clause per field, no narrative.
- Targeted reads: orchestrated build agents receive at most 5 row-relevant AHA entries in their injected digest; direct runs scan for relevant entries instead of carrying the whole file.
v5.5.0
When a run fans work out to parallel agents, it no longer goes dark until they all come back. You now get a status update roughly every five minutes for the whole stretch, and every agent is watched for signs of life: one that has produced nothing is mentioned at 5 minutes, flagged at 10, and declared stuck at 15 — at which point the run asks you whether to stop it or let it ride. Nothing is ever killed automatically; that call is always yours.
✨ New
- Live progress through parallel work. During planning waves and the pre-merge pipeline you see a short update on a real five-minute rhythm — elapsed time, what finished since the last update, what's running now, and anything that needs your attention — instead of one report whenever the whole wave happens to end.
- A watchdog on every parallel agent. A quiet agent is measured against the evidence of its work, so a stuck one is called out while you can still do something about it, with a plain question: stop it, or let it ride?
/plan-pm --updatebrings a PRD written under an older template up to the current shape — one document or all of them at once. It's maintenance-safe by design: acceptance criteria, feature numbering, and everything engineering wrote are never touched, and re-running it on an already-current PRD changes nothing at all.
📈 Improved
- A stuck agent no longer looks identical to a slow one. Before, a wave that never ended gave you no way to tell the difference; now the difference is measured and reported, with the decision left to you.
- The watchdog's timing is tunable per project, and it can be switched off entirely for a run or a repo. The one thing no setting can do is auto-stop an agent — that option deliberately does not exist.
- The bundled sample projects have been brought up to the current PRD template, so they read as current examples rather than leftovers from an older format.
v5.4.0
Build sessions get shorter because effort now scales with feature size. A medium feature plans and builds in a single run instead of two, the documents the pipeline writes are roughly half their old size, and everything it used to write "just in case" is now written only when someone actually reads it. Every run also leaves a timing log, so "where did the hour go?" finally has a measured answer.
✨ New
- Medium-sized features plan and build in one run. You no longer re-invoke the planner between the planning and building phases — it flows straight through, and only genuinely large, multi-platform features keep the deliberate two-phase path. The size call is made automatically from the idea's existing grade.
- Every planning run leaves a simple timeline of its stages, so you can see exactly which part of a long session took the time — measured, not guessed.
📈 Improved
- PRDs are about half their former size. The objective is a few sharp bullets instead of prose, engineering plans keep only the four sections that downstream work actually uses, and boilerplate rows are no longer required just to fill a quota.
- Review findings now live in one growing report beside the PRD instead of inside it, so the PRD stays a spec rather than a spec-plus-audit-trail. The project board reads the report directly; older PRDs keep showing their findings exactly as before.
- Build workers read a short, focused playbook instead of the full manual — about three-quarters less onboarding per worker — and simple changes are reviewed together per batch instead of one at a time, with the same "review cannot be skipped" guarantees from v5.3.
- File lists in the plan are now derived automatically from the tickets rather than filled in by hand, which removes an entire class of "the plan forgot to fill this in" failures.
- Nothing to migrate: PRDs written before this release keep working everywhere, unchanged.
🐛 Fixed
- The PRD validator wrongly rejected the Todos section of every PRD the pipeline itself produces — found and fixed while regenerating the sample projects.
- The project board showed no review findings for PRDs written in the new format.
v5.3.0
Code review can no longer be silently skipped. Every review now leaves a small evidence file behind, and every build run checks that evidence before declaring itself done — a missing review is repaired automatically by re-running just the review, never the build. This closes a real incident where nine parallel build packets shipped green without a single review running.
✨ New
- Every code review leaves proof it happened. "Was this change reviewed?" is now answered by a file on disk, not by a claim in a summary.
- After every build wave, review coverage is verified mechanically. If a review is missing, it is re-run automatically over that change alone — your builds and commits are never touched, and you're only asked if the repair fails twice.
- The pre-merge gate now reports review coverage for the whole branch. It never blocks a merge, but an unreviewed branch can no longer reach you without saying so.
📈 Improved
- The "reviewer must not be the author" rule is now enforced, not aspirational — a change reviewed by the same agent that wrote it is flagged as unreviewed.
- Review stays advisory by design: nothing in this release changes what a review can block. It changes only whether the review happened — provably.
🐛 Fixed
- Parallel build runs could previously complete, consolidate, and report green without any reviewer running — and nothing anywhere would notice. That exact shape is now caught at the first checkpoint and repaired on the spot.
v5.2.0
Long runs stop going quiet on you. While a build, a gate run, or a ship is working — often for tens of minutes with nothing on screen — you now get a short status line roughly every five minutes: which phase is running, what finished since the last one, and whether anything is blocking. Nothing about what a run decides has changed; the update only reports.
✨ New
- Builds, gate runs, ship runs, and multi-agent planning waves now tell you where they are about every five minutes — the phase, how many items are done out of how many, what just finished, what's running now, and any blockers found so far. You no longer have to guess whether a long run is progressing or stuck.
- Steps that are known to take a while — a full test suite, a deploy, a review pass — now announce themselves and their expected duration before they start. A quiet stretch becomes an expected one instead of a worrying one.
- You can tune the updates per run:
--quietturns them off entirely, and--status <n>msets how often they arrive. For a project-wide default, set the cadence once in your policy file and every run picks it up. - A run that ends badly now closes with a summary too — a refusal, a failed check, a failed ship. The moment a run goes wrong is exactly when a closing summary is worth most, so it's no longer reserved for the runs that succeed.
📈 Improved
- The updates never interrupt work to speak. A run reports only at points where it naturally comes up for air — between checks, waves, or steps — so nothing is slowed down or reshaped just to produce an update. The trade-off is deliberate: you may occasionally wait slightly longer than the interval, but a run is never made worse to hit it.
- Every human decision point is untouched. No status update is inserted between a question and your answer, and an update that fails to render is simply dropped — it can't stall or alter the run around it.