ntm v1.31.0
Durable agent identity, coordinator/Agent Mail integrity, and the Antigravity/Codex delivery-gate wave.
Added
- Oh My Pi plugin preset (#262): ships the maintained Oh My Pi preset with a setup guide.
- Stable pane identity in activity output:
ntm activitynow emitswindow_indexand a stablepane_id, so robot-mode consumers can track panes across layout changes. - Pane-generation-bound Agent Mail identities: spawned identities are bound to their pane generation and server receipts are preserved, so a respawned pane can never inherit a predecessor's mail identity.
- Tool-rejection classification in atomic dispatch, with streamlined spawn availability checks.
Fixed
- Durable agent type (GH#268): the pane's agent type is recorded on the pane (not just its title) and persists across spawn, add, adopt, controller changes, rotation, profile switch, restore, and restart; the
userpseudo-type is never stamped as durable. - Antigravity hardening (GH#269, GH#270, GH#271): idle/working TUI frames classify correctly, pinned Antigravity personas pass model validation,
agymodel overrides are rejected with a clear explanation, and error strings are normalized. - Codex ultra composer delivery gate (#273): the delivery gate accepts the Codex ultra composer glyph
»and rejects dialog frames, so sends no longer stall on Codex ultra. - Agent Mail read state (#277): inbox rows accept
read_ts, so read mail stops counting as unread; structured pane-binding JSON is decoded to its name and the real coordinator identity is registered. - Robot-mode reliability: completed Beads work is no longer dropped when Agent Mail history is slow; stale errors are debounced only on authoritative live work; mail checks use the configured Agent Mail client; restarts gate on live pane membership; crash handling runs even for a known-dead PID.
- Assignment flow: explicit persona roles are respected when matching work to panes; stale
bvplan rows reconcile against live bead lifecycle instead of failing assignment. - Controller safety: the controller never takes over a running agent's pane; dashboard mail-client semantics align with it; Grok Build panes are admitted through the shared mail-nudge safety gate.
- Event bus: reentrant publishing at capacity no longer deadlocks (non-blocking caller-runs backpressure).
- Windows: drive paths serialize as empty-authority SQLite URIs and embedded migration paths are slash-joined (#263 family).
- Pipeline: executor snapshot persistence to disk is serialized.
- Polish: shipped-plugin send flags parse as optional values;
adopthelp no longer claims 0-based pane indices (honourspane-base-index).
Full changelog: https://github.com/Dicklesworthstone/ntm/blob/main/CHANGELOG.md