NTM v1.9.0
Named Tmux Manager - Orchestrate AI coding agents in tmux sessions with beautiful TUI interfaces.
Quick Install
# One-liner install (Linux/macOS)
curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/ntm/main/install.sh | bash
# Homebrew (macOS/Linux)
brew install dicklesworthstone/tap/ntm
# Go install
go install github.com/Dicklesworthstone/ntm/cmd/ntm@v1.9.0Shell Integration
Add to your shell rc file:
eval "$(ntm shell zsh)" # for zsh
eval "$(ntm shell bash)" # for bash
eval "$(ntm shell fish)" # for fishChangelog
Features
- c9fc866: feat(agents): add cursor, windsurf, aider, and ollama agent type support (@Dicklesworthstone)
- 6dced9e: feat(agents): add full cursor, windsurf, aider, ollama support across all subsystems (@Dicklesworthstone)
- 9d738cf: feat(attention): canonical flag names and robot-inspect-coordination action (@Dicklesworthstone)
- d1361ee: feat(checkpoint): implement restore subcommand with dry-run and context injection (@Dicklesworthstone)
- 48f9894: feat(cli): --attention-cursor flag for dashboard and overlay commands (@Dicklesworthstone)
- 202d442: feat(cli): --robot-overlay command for agent-initiated human handoff, session agent type counts (@Dicklesworthstone)
- 0fbe36e: feat(cli): add session name resolvers and expand shared flag resolution to all robot commands (@Dicklesworthstone)
- 5dae8f3: feat(cli): assign watch overlay auto-binding, bind refactoring, mouse support (@Dicklesworthstone)
- d0b8d9c: feat(cli): consolidate session resolution with resolveAgentMailScope, session-aware pipeline dirs, per-command line defaults (@Dicklesworthstone)
- ca45665: feat(cli): recognize Cursor, Windsurf, and Aider agent types across CLI (@Dicklesworthstone)
- 965841a: feat(cli): resolve --verbose and --dry-run through shared flag fallback for all robot commands (@Dicklesworthstone)
- 9424ad9: feat(cli): unify --since/--type as shared flags and normalize session names across scope resolvers (@Dicklesworthstone)
- b86f453: feat(components): wire spinner and progress bars to centralized animation detection (@Dicklesworthstone)
- 72756d9: feat(config): add context_warning_threshold and project-scoped alert overrides (@Dicklesworthstone)
- b96541b: feat(dashboard): RFC3339Nano timestamp parsing, sidebar attention panel, ultra/mega focus fix (@Dicklesworthstone)
- a01da06: feat(dashboard): add pane_delegate.go foundation for bubbles/list (@Dicklesworthstone)
- d8a0f10: feat(dashboard): attention panel cursor retention, mail signals, stats badges, zoom propagation (@Dicklesworthstone)
- 367395c: feat(dashboard): extract FocusRing abstraction and bubbles/list pane delegate (@Dicklesworthstone)
- 7580341: feat(disclosure): propagate sanitized disclosure metadata through mail, state, and robot layers (@Dicklesworthstone)
- 421aedc: feat(e2e): artifact manager and scenario harness infrastructure (@Dicklesworthstone)
- a47dee9: feat(history): persist agent types per entry and filter history by agent type (@Dicklesworthstone)
- 5bcb734: feat(layout): 6-panel mega layout with dedicated attention column (@Dicklesworthstone)
- ad20c3e: feat(palette): add edit-before-send mode for template prompts (@Dicklesworthstone)
- fed4d4e: feat(panels): add HandlesOwnHeight() to Panel interface (@Dicklesworthstone)
- a03dd4d: feat(panels): migrate timeline panel rendering to bubbles/table (@Dicklesworthstone)
- 136e9ce: feat(robot): --robot-attention CLI command with profile-aware event filtering (@Dicklesworthstone)
- 99cae5c: feat(robot): --robot-events command with attention feed API expansion (@Dicklesworthstone)
- fc60eef: feat(robot): add Attention Feed contract specification (@Dicklesworthstone)
- c266d73: feat(robot): add attention feed commands to capabilities discovery (@Dicklesworthstone)
- 26735d6: feat(robot): attention profile resolution engine with discoverable presets (@Dicklesworthstone)
- 3cd98fa: feat(robot): attention-aware wait conditions, snapshot attention summary, event streaming (@Dicklesworthstone)
- 7904d95: feat(robot): bridge Process Triage health monitor into durable attention feed (@Dicklesworthstone)
- 29ea02f: feat(robot): canonicalize shared flag names in command registry, docs, and error messages (@Dicklesworthstone)
- 6442988: feat(robot): expand command registry to ~80+ surfaces, normalize attention-loop flags, complete schema coverage (@Dicklesworthstone)
- 5b594c7: feat(robot): expand command registry with restart-pane, smart-restart, activity, and dismiss-all surfaces (@Dicklesworthstone)
- c7a1cda: feat(robot): extended wait conditions in capability registry, snapshot summary tests, beads metadata (@Dicklesworthstone)
- 93f01ec: feat(robot): implement attention feed runtime with cursor-based event replay (@Dicklesworthstone)
- 42773b0: feat(robot): register is-working capability, extract help sections into testable data, skip slow tests in -short mode (@Dicklesworthstone)
- d4fe460: feat(robot): rewrite --robot-wait with split pane/attention condition evaluation (@Dicklesworthstone)
- 7e5b2cb: feat(robot): thread profile filtering through attention/wait/digest pipeline (@Dicklesworthstone)
- 93e9c99: feat(robot): unify command-specific flags into shared canonical modifiers (@Dicklesworthstone)
- d92a017: feat(robot): use project-scoped alert config throughout robot mode (@Dicklesworthstone)
- f31fa20: feat(robot): wire attention feed into dashboard and terse output, harden profile/event defensiveness (@Dicklesworthstone)
- 3921a07: feat(robot): wire dismiss-alert to tracker backend and add palette favorites/recent/usage (@Dicklesworthstone)
- d072797: feat(runtime): durable attention item state, actuation tracing, and runtime GC guardrails (@Dicklesworthstone)
- c1a446c: feat(serve): SSE event stream endpoint and attention webhook integration (@Dicklesworthstone)
- d496cbb: feat(serve): implement full WebSocket hub, REST API handlers, replace dummy stubs (@Dicklesworthstone)
- 76920b1: feat(spinner): delegate to bubbles/spinner while preserving API (@Dicklesworthstone)
- b67b7a3: feat(styles): add centralized animation detection with smart environment defaults (@Dicklesworthstone)
- e874edf: feat(tui): add SpringManager for centralized spring animations (@Dicklesworthstone)
- c8bc6da: feat(tui): add bubbles/help KeyMap interface and ScrollablePanel component (@Dicklesworthstone)
- 3fcc0f7: feat(tui): add bubbles/table to history panel and fix toast dismiss animation (@Dicklesworthstone)
- 59a5928: feat(tui): add charmbracelet/huh forms integration (br-6g08x Phase 4a) (@Dicklesworthstone)
- 7dc003f: feat(tui): add sparkline, tab bar, and toast notification components (@Dicklesworthstone)
- 90d9951: feat(tui): add spring animations to progress bars (@Dicklesworthstone)
- 74a0ecf: feat(tui): enhance toast notifications with progress bars and history (@Dicklesworthstone)
- f841de4: feat(tui): expand dashboard panels with improved alerts, beads view, layout, and perf tracking (@Dicklesworthstone)
- c2e41e9: feat(tui): expand dashboard with additional rendering logic (@Dicklesworthstone)
- e99488b: feat(tui): integrate SpringManager into dashboard for focus animations (@Dicklesworthstone)
- 8335feb: feat(tui): integrate bubbles/list for pane list rendering (br-a6cs7) (@Dicklesworthstone)
- 8a9fafc: feat(tui): major dashboard expansion with additional panel rendering and agent status views (@Dicklesworthstone)
- 57240f6: feat(tui): rewrite help overlay with bubbles/help FullHelp and Catppuccin theming, update beads (@Dicklesworthstone)
- ead9546: feat(tui): spring dimension animation, shimmer borders, spawn wizard keybinding fixes (@Dicklesworthstone)
- 9893516: feat(tutorial): auto-skip animations via centralized motion detection (@Dicklesworthstone)
- 77a0a12: feat: durable attention persistence, normalized projections, safety/scanner hardening, and web dashboard resilience (@Dicklesworthstone)
Bug Fixes
- e22aedd: fix(agentmail): add busy retry to RegisterAgent, not just CreateAgentIdentity (@Dicklesworthstone)
- 17c26e7: fix(agentmail): detect transient busy in MCP tool-level errors, not just JSON-RPC (@Dicklesworthstone)
- a4c5203: fix(agentmail): retry on transient busy and reconcile partially-created agents (#97) (@Dicklesworthstone)
- fcb50c6: fix(brew): remove broken completion stanzas and fix ntm init -> ntm shell (#100) (@Dicklesworthstone)
- 5872fb5: fix(bv): use double-dash flags for all bv CLI invocations (@Dicklesworthstone)
- 5f3ba2c: fix(cask): escape double quotes in caveats block (#98) (@Dicklesworthstone)
- 35c4c9f: fix(cass): update CLI invocation to match CASS v0.2.1 interface (@Dicklesworthstone)
- 6ad1c0b: fix(checkpoint): return proper errors in JSON mode; add naive scheduler benchmark; fix tutorial alt screen (@Dicklesworthstone)
- d9c5c01: fix(ci): handle both double-quoted and do/end caveats block forms in Homebrew cask patch (@Dicklesworthstone)
- 984b4cd: fix(ci): post-release patch for Homebrew cask caveats $() breakage (@Dicklesworthstone)
- 6627f0c: fix(cli): anchor pgrep pattern in isMonitorAlive to prevent false positives (@Dicklesworthstone)
- 4698fa7: fix(cli): register signal handler before startup and recover panics in summary (@Dicklesworthstone)
- 108168e: fix(cli): tolerate transient tmux failures in recovery monitor (#99) (@Dicklesworthstone)
- 89122ae: fix(config): allow double-dot filenames in palette path validation (@Dicklesworthstone)
- 999cb99: fix(config): support NTM_PROJECTS_BASE env var override for projects_base default (@Dicklesworthstone)
- ec16701: fix(context): git worktree support for repo revision, packed-refs fallback, cache key completeness (@Dicklesworthstone)
- 29bfeae: fix(core): EventBus buffered delivery, health score cleanup, BV insights enrichment, server refactoring (@Dicklesworthstone)
- e079a72: fix(core): harden error handling, fix UTF-8 truncation, escape parsing, OOM protection (@Dicklesworthstone)
- b7c5159: fix(dashboard): prefetch panes before TUI init, remove eager session check, seed initial state (@Dicklesworthstone)
- a3f21c2: fix(e2e): resolve variable shadowing in newTestLoggerWithDir, close overlay-feed beads (@Dicklesworthstone)
- 5c8964f: fix(e2e): rework overlay-feed tests for PATH-based binary, add no-wait test, fix webui context leak (@Dicklesworthstone)
- e0a4b99: fix(infra): ensemble state store cleanup, SQL table name validation, monitor lifecycle (@Dicklesworthstone)
- 038a5d6: fix(monitor): remove duplicate registration, kill before session destroy, prevent duplicates on spawn (@Dicklesworthstone)
- ec54f43: fix(palette): also exempt PhaseXFSearch from help overlay toggle (@Dicklesworthstone)
- 3937c80: fix(palette): fix edit-before-send key handling and draft persistence bugs (@Dicklesworthstone)
- 5d766fc: fix(palette): use double-Enter submission protocol to match
ntm send(@Dicklesworthstone) - 79b2d13: fix(palette): use whitelist for help toggle to avoid intercepting text inputs (@Dicklesworthstone)
- df08d72: fix(release): remove unnecessary caveats escaping, dead safety-net, deprecated runner (@Dicklesworthstone)
- 3904344: fix(robot): access docs output through Content field in quickstart test (@Dicklesworthstone)
- a346513: fix(robot): align attention feed and snapshot anchor after type consolidation (@Dicklesworthstone)
- a677db5: fix(robot): correct docs wording and support-bundle privacy hint flag (@Dicklesworthstone)
- 38d13d3: fix(robot): include window index in tmux target format (@Dicklesworthstone)
- 419eb11: fix(robot): update TestCategoryIndex to include attention category (@Dicklesworthstone)
- 0b6250d: fix(serve): cap user-provided limits to prevent resource exhaustion (@Dicklesworthstone)
- da50932: fix(serve): cursor boundary checks for attention endpoints (@Dicklesworthstone)
- ce554aa: fix(spawn): increase registerSessionAgent timeout to accommodate retry backoff (@Dicklesworthstone)
- a8c6784: fix(spawn): mark unused agentType parameter explicitly (@Dicklesworthstone)
- e4b3157: fix(spawn): prevent duplicate agent reconciliation and revert goreleaser escaping (@Dicklesworthstone)
- 9772834: fix(swarm): close eventChan in AutoRespawner.Stop to prevent goroutine leaks (@Dicklesworthstone)
- 1801c5d: fix(swarm): empty DefaultAgentArgs so bare shell aliases launch correctly (@Dicklesworthstone)
- 94aaa61: fix(swarm): nil-result guards in orchestrator, limit detector hardening (@Dicklesworthstone)
- 1f366b3: fix(swarm): three bug fixes in auto_respawner and limit_detector (@Dicklesworthstone)
- abe625f: fix(templates): distinguish explicit model requests from defaults in override guard (@Dicklesworthstone)
- 3b8939e: fix(test): use dynamic timestamps and wider stale window in projection persistence test (@Dicklesworthstone)
- eddedf5: fix(tmux): correct pane ID format from session:N to session:.N across all subsystems (@Dicklesworthstone)
- 0b4a845: fix(tmux): rewrite FIFO reader to goroutine+channel instead of SetReadDeadline (@Dicklesworthstone)
- 6ca5e62: fix(tui): add cleanup() to release configCloser on dashboard quit (@Dicklesworthstone)
- 12e2745: fix(tui): add missing imports in decomposed dashboard files (@Dicklesworthstone)
- cdffc26: fix(tui): eliminate header staircase effect with block-centered layout (@Dicklesworthstone)
- 217575c: fix(watcher): prevent duplicate file entries in reservation attempts (@Dicklesworthstone)
- 78a6822: fix(webhook): close queue channel in Stop to prevent goroutine leak (@Dicklesworthstone)
- b1a326f: fix: correct GoReleaser cask caveats template (fixes #91) (@Dicklesworthstone)
- 7726aab: fix: handle ENOENT in DeleteManifest and synchronize OutputFormat/OutputVerbosity globals (@Dicklesworthstone)
- c272b7a: fix: harden error handling and input validation across subsystems (@Dicklesworthstone)
- 362ad6e: fix: route printable keystrokes to filter input when palette is focused (@Dicklesworthstone)
- f54d3d2: fix: use canonical flag names and full commands in error hints (@Dicklesworthstone)
Performance
- 18e462c: perf(pipeline): O(1) ready-step tracking with incremental dependency resolution (@Dicklesworthstone)
- 79665b2: perf(summary): compile path-extraction regexes once at package init (@Dicklesworthstone)
Documentation
- 60e8406: docs(tmux): update comments to reflect Claude Code buffer send support (@Dicklesworthstone)
Others
- b0fa9d3: chore(beads): add issue tracking for NTM development tasks (@Dicklesworthstone)
- 9382cc9: chore(beads): bump migration-hint-ts to 1774128647 (@Dicklesworthstone)
- b55e899: chore(beads): bump migration-hint-ts to 1774223682 (@Dicklesworthstone)
- 7735a7c: chore(beads): bump migration-hint-ts to latest schema state (@Dicklesworthstone)
- 1199a12: chore(beads): close P0 attention feed validation gate br-7h8it (@Dicklesworthstone)
- 01301ab: chore(beads): close Phase 1 verification gate br-bgfdt (@Dicklesworthstone)
- 0ef858a: chore(beads): close TUI Glamour Upgrade and Overlay-Feed Integration campaigns (@Dicklesworthstone)
- c45d3c3: chore(beads): close bd-j9jo3.6.2 — projection-backed --robot-status is complete (@Dicklesworthstone)
- add5a8b: chore(beads): close br-6g08x Phase 4a huh forms (@Dicklesworthstone)
- 22e63e6: chore(beads): close br-7dnb7 Phase 3 VERIFY gate (@Dicklesworthstone)
- 9d36596: chore(beads): close br-a6cs7 bubbles/list integration (@Dicklesworthstone)
- 122cfcb: chore(beads): close br-ee3h8 scrollable panel work (@Dicklesworthstone)
- ab465de: chore(beads): close br-obaln dashboard decomposition (@Dicklesworthstone)
- e0023cd: chore(beads): close br-pihrr (bubbles/table history panel) (@Dicklesworthstone)
- aa6673c: chore(beads): close br-zqcqd FocusRing refactor (already complete) (@Dicklesworthstone)
- 76979a5: chore(beads): close tui-upgrade Layer 0+1 beads (@Dicklesworthstone)
- a1dd764: chore(beads): sync issue tracker state with latest bead metadata (@Dicklesworthstone)
- 89d8aaa: chore(beads): sync issue tracker state with updated bead metadata (@Dicklesworthstone)
- 5fa97ab: chore(beads): update NTM beads config and issue status (@Dicklesworthstone)
- 6f6f4f3: chore(beads): update NTM issue tracking (@Dicklesworthstone)
- 9cd6ec3: chore(beads): update NTM issue tracking status (@Dicklesworthstone)
- 2811652: chore(beads): update NTM issue tracking status (@Dicklesworthstone)
- e4e1332: chore(beads): update beads configuration (@Dicklesworthstone)
- a406710: chore(beads): update issue status (@Dicklesworthstone)
- 427174f: chore(beads): update issue status (@Dicklesworthstone)
- 279c05f: chore(beads): update issue status for agent types and robot-events work (@Dicklesworthstone)
- 62eb48e: chore(beads): update issue status for attention feed dashboard integration (@Dicklesworthstone)
- e727ca4: chore(beads): update issue status for br-ofwdn (@Dicklesworthstone)
- 22dcfd4: chore(beads): update issue status for br-pihrr (@Dicklesworthstone)
- a854e9e: chore(beads): update migration hint timestamp (@Dicklesworthstone)
- 6ab7efb: chore(beads): update migration hint timestamp (@Dicklesworthstone)
- e1a6e46: chore(beads): update migration timestamp (@Dicklesworthstone)
- 5991c25: chore(deps,perf): pre-compile reservation regexes, add harmonica dep, isolate VHS temp dirs (@Dicklesworthstone)
- 2608967: chore(tui): remove unused imports from model.go (@Dicklesworthstone)
- a00fb1a: feat(attention,reservations,mail): adaptive heartbeats, robust reservation tracking, and conditional mail events (@Dicklesworthstone)
- 9bb1b99: feat(attention,state,cli): incident-scoped replay, time-range queries, and session-aware project dir resolution (@Dicklesworthstone)
- 51705b9: feat(checkpoint,cli,pipeline,events,server): harden validation, fix truncation, enrich API responses (@Dicklesworthstone)
- b1c8953: feat(cli,ensemble,robot,serve,state): fix slice aliasing, harden resume resolution, propagate RowsAffected errors (@Dicklesworthstone)
- 9882251: feat(cli,events,server): validate session names, enrich attention events API response (@Dicklesworthstone)
- b275120: feat(cli,robot,serve,summary): harden session validation, clone registry, fix EOF/error handling (@Dicklesworthstone)
- 92f9563: feat(cli,robot,tui,e2e): recognize Cursor, Windsurf, and Aider agent types across all layers (@Dicklesworthstone)
- 05db238: feat(cli,serve): add --robot-digest flag and refactor attention stream preparation (@Dicklesworthstone)
- 9cd90a1: feat(cli,tui): add overlay command, expand bind command, and dashboard improvements (@Dicklesworthstone)
- d8f45f3: feat(cli,tui): expand bind/overlay/dashboard commands and help component (@Dicklesworthstone)
- 2c78f87: feat(context,recovery,tui): SendBuffer for large prompts, deterministic handoffs, dedup file counts (@Dicklesworthstone)
- 1fe3960: feat(coordinator,robot,web): conflict resolution system, webhook validation, dashboard state hooks (@Dicklesworthstone)
- 18ae64f: feat(e2e,tui): complete TUI Glamour Upgrade and Overlay-Feed Integration (@Dicklesworthstone)
- 9765382: feat(events,replay,server): add incident-bounded and as-of historical replay modes (@Dicklesworthstone)
- fe7945f: feat(incidents,webhook,cli): durable incident tracking, graceful webhook shutdown, and session-aware project dir resolution (@Dicklesworthstone)
- 08038bc: feat(inspect,checkpoint,robot,state): add projection-backed inspect-session/inspect-agent, harden checkpoint session resolution, refactor GC helpers (@Dicklesworthstone)
- 3d384e2: feat(robot,checkpoint,cli,bv): add inspect-work/coordination/quota/incident surfaces, harden checkpoint and upgrade reliability (@Dicklesworthstone)
- 76c7c6a: feat(robot,dashboard): mail attention signals and snapshot bootstrap contract (@Dicklesworthstone)
- 87f5baf: feat(robot,events): attention feed digest engine with conflict event types (@Dicklesworthstone)
- ec7af42: feat(robot,pt,serve): projection-backed status, PT state-change callbacks, and live server integration (@Dicklesworthstone)
- 576fd45: feat(robot,serve): add operator loop guardrails and REST/CLI parity for capabilities (@Dicklesworthstone)
- ec9451f: feat(robot,serve,web): robot-redesign runtime layer, adapter stack, hardened server, and dashboard type safety (@Dicklesworthstone)
- e5c18d7: feat(robot,tmux): improve overlay validation order, document --overlay-no-wait, tmux session fallback (@Dicklesworthstone)
- e38144e: feat(robot/adapters): expand work coordination adapter with mail summaries, reservation pressure, and handoff context (@Dicklesworthstone)
- 0cc7561: feat(serve,state,tmux,tracker): log recovered panics, harden error handling in pipelines, audit, and timeline (@Dicklesworthstone)
- bc98efb: feat(snapshot,alerts,scanner,ensemble,robot): enrich snapshot schema, fix alert granularity, harden autoscan exclusions (@Dicklesworthstone)
- 2d22e98: feat(theme,tools,alerts,robot,cli,serve): add agent themes for Cursor/Windsurf/Aider/Ollama, add WaitDelay to all tool subprocesses, improve alert severity ranking, harden robot/serve/cli (@Dicklesworthstone)
- 162f12b: feat(tui,cli): spawn wizard, gradient tab bar, panel gap spacing, statusbar, overlay, icon alignment (@Dicklesworthstone)
- 008f05e: feat(tui,dashboard): vendored bubbletea fork, theme system overhaul, reservation watcher refactor, adaptive model (@Dicklesworthstone)
- 31b7959: feat(tui,events): human overlay events with duration tracking and dashboard telemetry (@Dicklesworthstone)
- 73973f2: feat(tui,robot): attention feed panel with unsupported condition documentation (@Dicklesworthstone)
- 50cdee9: feat(tui,robot,agentmail,session,timeline): comprehensive improvements across TUI, robot mode, agent mail sessions, and persistence (@Dicklesworthstone)
- 724bde3: feat(tui,serve): scrollable panels, toast system, sparkline improvements, dashboard layout tests, server hardening (@Dicklesworthstone)
- cb98380: fix(agentmail,checkpoint,health): agent registry remap on re-register, compressed scrollback restore, rate-limit restart guard (@Dicklesworthstone)
- 9626579: fix(assign,swarm): nil safety and channel lifecycle improvements (@Dicklesworthstone)
- b149dd8: fix(bd,tools): add output size limits to bd message client and tool commands (@Dicklesworthstone)
- b78c3b4: fix(bv,tests): per-workspace mutex for br subprocess serialization, test isolation for beads handlers (@Dicklesworthstone)
- edfc553: fix(cli,cm,ensemble,serve): harden error handling for json.Marshal and file stat calls (@Dicklesworthstone)
- 1216524: fix(docs,ensemble): use canonical flag names in docs and add mutex to state store singleton (@Dicklesworthstone)
- 92117a8: fix(ensemble,pipeline,tokens): harden json.Marshal fallbacks, wire ProjectDir through pipeline, fix division-by-zero in token usage (@Dicklesworthstone)
- 8ab3ac2: fix(pipeline,serve,tmux): add panic recovery to goroutines, prevent closed-channel drains (@Dicklesworthstone)
- bfd77c8: fix(ratelimit,tui): mutex ordering fix and unused import cleanup (@Dicklesworthstone)
- e9225bf: fix(robot,scheduler,tui): extract controlPaneIndex, fix backoff extension race, align resize tests to 6-panel (@Dicklesworthstone)
- fa59ce4: fix(serve,agentmail): overhaul Agent Mail HTTP error handling with correct status codes and structured conflict responses (@Dicklesworthstone)
- dd22515: fix(swarm,safety): harden temp file cleanup and cap query/TTL bounds (@Dicklesworthstone)
- fafdd35: fix(swarm,tui): orchestrator pane tracking, layout indent consistency (@Dicklesworthstone)
- fac4e64: fix(tools,context,tui): output safety limits, context key caching, timeline guards (@Dicklesworthstone)
- 4554829: fix(tui,webhook): toast reduced-motion dismiss, conflict agent extraction, webhook error handling (@Dicklesworthstone)
- fd01fd5: refactor(agentmail): return structured ReleaseReservationsResult from ReleaseReservations API (@Dicklesworthstone)
- 237d3a2: refactor(agentmail): return structured results from MarkMessageRead and AcknowledgeMessage APIs (@Dicklesworthstone)
- d665f31: refactor(agentmail): use full-path project slugs with legacy fallback and harden session storage (@Dicklesworthstone)
- c65e50e: refactor(cli): extract announceAssignWatchOverlay and add comprehensive tests (@Dicklesworthstone)
- 6473bb8: refactor(cli): extract prepareAndAnnounceAssignWatchOverlay with callback hooks (@Dicklesworthstone)
- 81b94ed: refactor(cli,tui): simplify send command and dashboard rendering (@Dicklesworthstone)
- 95bbdb6: refactor(dashboard): deduplicate WindowSizeMsg handler, add reduced-motion tick rates (@Dicklesworthstone)
- 233722b: refactor(palette): extract layout helpers, centralize viewport sync, gate animations (@Dicklesworthstone)
- ae7205d: refactor(robot): consolidate snapshot attention into robot.go, delete anchor file (@Dicklesworthstone)
- c6a44e7: refactor(robot): remove duplicate SnapshotAttention types from robot.go (@Dicklesworthstone)
- ac1b13e: refactor(robot): simplify snapshot_attention.go to anchor file (@Dicklesworthstone)
- 2b4c4f3: refactor(serve): remove ~1k lines of unused API handlers, harden JobStore, fix sanitizeRequestID (@Dicklesworthstone)
- 82cf982: refactor(tui): decompose dashboard.go into logical sub-files (@Dicklesworthstone)
- 8c62a61: refactor(tui): improve scrollable panel stability and dashboard panel resilience (@Dicklesworthstone)
- 13d302e: refactor(tui,assign,palette): simplify reservation logic, refine sparkline/toast components, streamline dashboard panels (@Dicklesworthstone)
- 3d44a47: refactor(web): remove unused panes and tags fields from Session interface (@Dicklesworthstone)
- ed34927: refactor: comprehensive code quality pass — struct alignment, error handling, import ordering, idle detection, and redaction optimization (@Dicklesworthstone)
- 137e21b: security(checkpoint): prevent path traversal in storage, export, integrity, and restore (@Dicklesworthstone)
- 74c36f1: test(dashboard): attention feed test serialization, popup cursor tests, render badge tests, beads metadata (@Dicklesworthstone)
- 8928033: test(perf): add Phase 5b performance benchmarks for spring animations (@Dicklesworthstone)
- c98cb0c: test(robot): profile filtering and operator loop test coverage, update beads (@Dicklesworthstone)
- f63a109: test(robot,events,e2e): comprehensive attention feed integration test coverage (@Dicklesworthstone)
- 7b90457: test(robot,serve): expand snapshot test coverage, fix struct alignment, clean up imports (@Dicklesworthstone)
- 0d80e70: test(robot,tui): comprehensive attention system test coverage (@Dicklesworthstone)
Full Changelog: v1.8.0...v1.9.0
Container Image: ghcr.io/dicklesworthstone/ntm:v1.9.0