NTM v1.13.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.13.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
- 111f10e: feat(lifecycle): graceful goroutine shutdown across all subsystems, checkpoint restore via respawn-pane, test reliability improvements (@Dicklesworthstone)
- 96df838: feat(scheduler): poll-based codex throttle gate for Acquire() (@Dicklesworthstone)
Bug Fixes
- 5ba4dd1: fix(agentmail): cap overseer response body at 10MB to prevent DoS/OOM (@Dicklesworthstone)
- 4e8f935: fix(cli): bound response body reads with io.LimitReader (@Dicklesworthstone)
- 7780d91: fix(cli): remove unused inProgress variable after stale-bead loop removal (@Dicklesworthstone)
- 2a188ed: fix(cli): use ResolveSessionWithOptions for JSON-aware session resolution and add input validation tests (@Dicklesworthstone)
- dc891e6: fix(concurrency): ScannerStore deep-cloning, executor snapshot race, and t.Parallel() removal across 90+ test files (@Dicklesworthstone)
- 556c0ae: fix(concurrency): remove t.Parallel() from 57 test files and fix three data races in production code (@Dicklesworthstone)
- 46e42a4: fix(coordinator): add lifecycle mutex to serialize Start/Stop, eliminate shared ctx field race (@Dicklesworthstone)
- 1537902: fix(events): clear handler entry on unsubscribe to prevent closure memory leak (@Dicklesworthstone)
- 1192ccc: fix(http): cap HTTP JSON response bodies at 10 MiB with io.LimitReader (@Dicklesworthstone)
- ff259a9: fix(lifecycle): add lifecycle mutex to resilience monitor, autoscanner, timeline lifecycle/persister, and supervisor to serialize Start/Stop (@Dicklesworthstone)
- 86a9f4b: fix(lifecycle): add lifecycle mutex to serialize Start/Stop across all background subsystems, prevent concurrent lifecycle races (@Dicklesworthstone)
- f3ac438: fix(palette): use key.Matches for quit binding in edit phase instead of raw KeyCtrlC (@Dicklesworthstone)
- 20cb58a: fix(pipeline): surface failed-iteration errors from loops; persist parallel state outside global mutex (@Dicklesworthstone)
- 408fa8e: fix(robot): thinking signals now outrank co-present idle-prompt patterns, preventing false WAITING classification (@Dicklesworthstone)
- 17a87fb: fix(scheduler): use a single ticker for worker periodic polling (@Dicklesworthstone)
- 6090f11: fix(serve): propagate auth claims through middleware and pick highest realm_access role (@Dicklesworthstone)
- bd0f59c: fix(state): release read lock before invoking replay handler to prevent callback deadlocks (@Dicklesworthstone)
- 382e428: fix(swarm): log derived lastRotation instead of raw state field in cooldown warning (@Dicklesworthstone)
- a94e687: fix(test): use DefaultModels() for ollama test case consistently (@Dicklesworthstone)
Others
- b9437ec: chore(beads): advance migration hint timestamp (@Dicklesworthstone)
- 27bfa62: chore(beads): advance migration hint timestamp (@Dicklesworthstone)
- b461889: chore(beads): advance migration-hint-ts timestamp (@Dicklesworthstone)
- 3a1f421: chore(beads): update migration hint timestamp (@Dicklesworthstone)
- 8dcfb67: data(beads): bump migration hint timestamp (@Dicklesworthstone)
- 5653d1e: data: update beads migration timestamp after pull sync (@Dicklesworthstone)
- b62cfbc: feat(assign/effectiveness): rank against all supported agent types (@Dicklesworthstone)
- 420584c: feat(cli,serve,robot): remove stubs and unimplemented features, add truthfulness tests and rate-limit detection (@Dicklesworthstone)
- 9199bbd: feat(robot,cli,serve): add dashboard alerts section, expand CLI/serve test coverage (@Dicklesworthstone)
- fbcd2e7: feat(robot,serve): expose alert Source field in all output paths and upgrade redaction config to reader locks (@Dicklesworthstone)
- 83ba973: feat(scheduler,audit): typed cap waiters with reset abort, and audit DB connection hardening (@Dicklesworthstone)
- b385436: feat(serve,tmux,state): add tmux circuit breaker, session reconciliation, and server startup hardening (@Dicklesworthstone)
- 76ee9ad: fix(assign/reservation): drop trailing boundary from path extraction regexes (@Dicklesworthstone)
- 7977f98: fix(assign/test): expect 7 agent types in TestRankAgentsForTask ranking (@Dicklesworthstone)
- f57638f: fix(bv/triage): use RWMutex and double-checked locking for triage cache (@Dicklesworthstone)
- 8e4a0b4: fix(cli/test): remove duplicate TestResolveEnsembleSessionRejectsInvalidSessionName (@Dicklesworthstone)
- 0c09978: fix(coordinator,robot): enforce directory boundary in wildcard glob matching and fix consecutive file path extraction regex overlap (@Dicklesworthstone)
- 89f7fe5: fix(events/logger): rotate event log without blocking concurrent writers or losing events (@Dicklesworthstone)
- e00f4ee: fix(metrics/collector): emit ExportCSV rows in deterministic operation-name order (@Dicklesworthstone)
- 28042ae: fix(quota,scoring): skip redundant status fetch when commands overlap, throttle score pruning to once per 24h (@Dicklesworthstone)
- b5e7315: fix(serve,robot): session name validation, race-safe config endpoints, policy check error logging, and alert tracker cleanup (@Dicklesworthstone)
- e04472f: fix(serve/checkpoints): stream checkpoint export bodies instead of buffering in memory (@Dicklesworthstone)
- 53c70da: fix(serve/test): align TestParseJWT variants with new 5-value parseJWT signature (@Dicklesworthstone)
- f256738: fix(serve/test): seed robot-API contract state with wall-clock now instead of a frozen 2026-03-26 date (@Dicklesworthstone)
- be31536: fix(serve/test,tui/dashboard): align OIDC test harness with (claims, err) return + add missing io import (@Dicklesworthstone)
- d7700b8: fix(tmux,state): distinguish infrastructure errors from application errors in circuit breaker and skip reconciliation when breaker is open (@Dicklesworthstone)
- 6021c8e: fix(tui,tests): migrate deprecated viewport API and replace nil contexts across test suite (@Dicklesworthstone)
- cdebcc2: perf(cli,context): hoist runtime regex compilation to package-level vars (@Dicklesworthstone)
- 62654f3: refactor(robot): use global alert tracker from alerts package and add DashboardAlertsData type (@Dicklesworthstone)
- ad7b180: refactor(scheduler): simplify CancelSession/CancelBatch with single-pass retain pattern (@Dicklesworthstone)
- 947fedc: test(assign/capability): extend TestDefaultCapabilities to cover all seven agent types (@Dicklesworthstone)
- 8b69e32: test(pipeline): add explicit RetryDelay to retry-policy tests to prevent slow execution (@Dicklesworthstone)
- f2b440c: test(robot): add validation contract tests for section schema compliance (bd-j9jo3.9.7) (@Dicklesworthstone)
- e3d26d6: test(serve/parity): seed RuntimeSession rows alongside Sessions for robot-API contract state (@Dicklesworthstone)
Full Changelog: v1.12.1...v1.13.0
Container Image: ghcr.io/dicklesworthstone/ntm:v1.13.0