NTM v1.4.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.4.0Shell Integration
Add to your shell rc file:
eval "$(ntm init zsh)" # for zsh
eval "$(ntm init bash)" # for bash
eval "$(ntm init fish)" # for fishChangelog
Features
- a652fff: feat(agentmail): add PrepareThread and ContactHandshake macro wrappers (@Dicklesworthstone)
- 1915a12: feat(approval): implement approval workflow engine (ntm-gy4o) (@Dicklesworthstone)
- c2dc8d6: feat(beads): add 72 comprehensive beads for NTM v2.0 transformation (@Dicklesworthstone)
- 31ddcf1: feat(bv): add markdown triage output for token savings (ntm-2mz5) (@Dicklesworthstone)
- 1e8e6cb: feat(bv): implement -robot-triage mega-command integration with caching (@Dicklesworthstone)
- aa57934: feat(cli): add doctor command for ecosystem health validation (@Dicklesworthstone)
- 2f712c4: feat(cli): add ntm guards commands for Agent Mail pre-commit guards (@Dicklesworthstone)
- 189d804: feat(cli): add ntm setup command for project initialization (@Dicklesworthstone)
- 3f26d19: feat(cli): add ntm work commands for intelligent work distribution (@Dicklesworthstone)
- 26d4e9e: feat(cli): enhance ntm health command with watch mode and filters (@Dicklesworthstone)
- 1690f29: feat(cli): implement ntm approve command (ntm-55zg) (@Dicklesworthstone)
- 2846ff2: feat(config): add ConfigDiff, Diff(), and Validate() functions (@Dicklesworthstone)
- 53a4dd9: feat(dashboard): add health indicators to pane cards (@Dicklesworthstone)
- 541cd74: feat(events): add Replay and Since functions for event log recovery (@Dicklesworthstone)
- 0ff3b3f: feat(foundations): implement State Store and Daemon Supervisor (@Dicklesworthstone)
- 51020a7: feat(invariants): implement design invariants enforcement (ntm-3xrj) (@Dicklesworthstone)
- 75480bb: feat(locks): implement file reservation lifecycle commands (@Dicklesworthstone)
- 647b6b8: feat(notify): add file inbox and advanced routing (ntm-twff) (@Dicklesworthstone)
- 64cc085: feat(output): add styled UX components and error helpers (@Dicklesworthstone)
- 3f9715e: feat(policy): add policy package for destructive command protection (ntm-io2c) (@Dicklesworthstone)
- 596a059: feat(robot): add --robot-health=SESSION per-agent health API (@Dicklesworthstone)
- 99a99a8: feat(robot): implement alerting system for health events (ntm-caib) (@Dicklesworthstone)
- 1c0db5c: feat(robot): implement automatic restart with alerting (ntm-ebvm) (@Dicklesworthstone)
- 30867cf: feat(robot): implement health state tracking for agents (ntm-v5if) (@Dicklesworthstone)
- bb4917c: feat(robot): implement rate limit backoff with exponential growth (ntm-1ir2) (@Dicklesworthstone)
- e72e654: feat(serve): implement HTTP server with REST API and SSE streaming (ntm-r5b6) (@Dicklesworthstone)
- c5774b4: feat(supervisor): add tests and fix duplicate detection bug (@Dicklesworthstone)
- bc7efc5: feat(test): implement test strategy foundation (ntm-iymd) (@Dicklesworthstone)
- cc816fa: feat(tools): add Tool Adapter Framework for ecosystem integration (@Dicklesworthstone)
Bug Fixes
- 9b62685: fix(bv): remove truncation from triage markdown output (@Dicklesworthstone)
- 533fd6b: fix(checkpoint): avoid duplicate time.Now() calls in GenerateID (@Dicklesworthstone)
- a1f2b0b: fix(cli): correct UTF-8 truncation in truncatePrompt (@Dicklesworthstone)
- a154d32: fix(cli): improve doctor command error handling and output (@Dicklesworthstone)
- 9c4e48d: fix(cli): prevent nil pointer dereference in ResolveCassContext (@Dicklesworthstone)
- 56da58c: fix(cli): remove unused import in safety.go (@Dicklesworthstone)
- 61e4521: fix(cli): validate reservation ID is positive in force-release command (@Dicklesworthstone)
- 9e8e69f: fix(doctor): correct version message formatting (@Dicklesworthstone)
- f4db956: fix(doctor): improve checkDaemons determinism and context support (@Dicklesworthstone)
- f769ad0: fix(e2e): correct robot-send flag and add session verification (@Dicklesworthstone)
- 7b43e5a: fix(e2e): remove non-existent --safety flag from spawn commands (@Dicklesworthstone)
- ae14687: fix(events): serialize json.Encoder calls in EnableRobotMode (@Dicklesworthstone)
- 5fbc4a7: fix(hooks): correct UTF-8 truncation in message environment variable (@Dicklesworthstone)
- 2eaf10f: fix(locks): improve error handling for edge cases (@Dicklesworthstone)
- 8f6c408: fix(output): accurate line counting in diff computation (@Dicklesworthstone)
- 516cc9f: fix(output): remove dead code and fix SuccessFooter display logic (@Dicklesworthstone)
- e03e072: fix(pipeline): truncatePrompt respects n byte limit with UTF-8 (@Dicklesworthstone)
- c6322b2: fix(plan): resolve 9 issues from document review (@Dicklesworthstone)
- 8fc881d: fix(prompt): correct line number display for implicit start range (@Dicklesworthstone)
- d708fd4: fix(robot): address bugs in RestartManager found during code review (@Dicklesworthstone)
- 81e3b10: fix(robot): correct shell prompt detection and state idle calculation (@Dicklesworthstone)
- 1bc663f: fix(robot): simplify THINKING agent relaxation check (@Dicklesworthstone)
- 3c46d64: fix(safety): critical bugs in wrapper scripts and policy YAML (@Dicklesworthstone)
- c728866: fix(safety): exit code and log path bugs (@Dicklesworthstone)
- 02b4447: fix(safety): proper JSON escaping in blocked command logs (@Dicklesworthstone)
- 15ef511: fix(serve): add nil check in handleSessionAgents for defensive programming (@Dicklesworthstone)
- cba7725: fix(setup): splitLines trailing newline and empty string handling (@Dicklesworthstone)
- d8fdd1c: fix(startup): close profiler spans in BeginPhase1/BeginPhase2 (@Dicklesworthstone)
- 5fa701f: fix(state): handle NULL columns in SQL queries with COALESCE (@Dicklesworthstone)
- 56ab502: fix(status): prevent data race in recovery goroutine (@Dicklesworthstone)
- 8a9a0bf: fix(status): respect UTF-8 boundaries in truncateOutput (@Dicklesworthstone)
- 429a674: fix(supervisor): prevent restart race and fix data races (@Dicklesworthstone)
- 4a73042: fix(test): correct mcp-agent-mail fake tool version string (@Dicklesworthstone)
- d0f442e: fix(test): use t.TempDir() instead of os.TempDir() in pane tests (@Dicklesworthstone)
- a38bf19: fix: UTF-8 boundary handling in truncate functions (@Dicklesworthstone)
- bc14c1c: fix: add YAML escaping and prevent panic on empty gitignore entry (@Dicklesworthstone)
- 076fe45: fix: code quality improvements across multiple packages (@Dicklesworthstone)
- 6a26c81: fix: consistent UTF-8 boundary handling in truncate functions (@Dicklesworthstone)
- 450a991: fix: consistent truncate edge cases and case-insensitive agent types (@Dicklesworthstone)
- 5a4ed5f: fix: correct UTF-8 truncation in 5 additional files (@Dicklesworthstone)
- 212aafe: fix: correct bugs in grep highlight, recovery event, patterns, and pipeline (@Dicklesworthstone)
- 8e6a930: fix: correct semantic bug and add thread safety (@Dicklesworthstone)
- ecfa09e: fix: correct threshold unit mismatch and improve test robustness (@Dicklesworthstone)
- 2f4e897: fix: countLines trailing newline bug and remove dead code (@Dicklesworthstone)
- f93882f: fix: improve short truncation to show actual content (@Dicklesworthstone)
- 327cf93: fix: policy YAML escaping and test timeout handling (@Dicklesworthstone)
- 238398a: fix: remove dead code and fix deprecated lipgloss API (@Dicklesworthstone)
- 32c4d6c: fix: remove dead code and redundant pattern check (@Dicklesworthstone)
- 1dac024: fix: remove unused code and duplicate function declarations (@Dicklesworthstone)
- e25a192: fix: resolve multiple bugs and improve test reliability (@Dicklesworthstone)
- a542b7c: fix: truncate edge case and restart count preservation (@Dicklesworthstone)
Performance
- 949b4b7: perf(bv): remove unnecessary fmt.Sprintf for constant strings (@Dicklesworthstone)
Others
- 636896f: chore(beads): close ntm-pp4g, ntm-3s2g - Event Bus complete, E2E tests done (@Dicklesworthstone)
- e72730c: chore(beads): close ntm-r5b6 (ntm serve command feature) (@Dicklesworthstone)
- cf803e7: chore(beads): sync issue tracking (@Dicklesworthstone)
- 52f6bd7: chore(beads): sync issue tracking state (@Dicklesworthstone)
- 6091d96: chore(beads): upgrade bd tool from v0.32.1 to v0.43.0 (@Dicklesworthstone)
- 6d8729a: chore(persona): remove unused expandPromptVars wrapper (@Dicklesworthstone)
- ab8feeb: chore(robot): remove unused helper functions (@Dicklesworthstone)
- afc5e7a: chore(test): remove debug logging from chaos test (@Dicklesworthstone)
- 20eedac: fix(lock/unlock): add fallback error messages for empty error case (@Dicklesworthstone)
- ebe1494: refactor(e2e): simplify containsMarker using strings.Contains (@Dicklesworthstone)
- acc4d8e: refactor(setup): simplify splitLines with strings.Split (@Dicklesworthstone)
- cf8f1bd: refactor(startup): replace sync.Once with double-checked locking in Lazy (@Dicklesworthstone)
- a3f74c1: revert: restore placeholder functions for future features (@Dicklesworthstone)
- 23530dc: test(bv): add regression test for no-truncation in compact markdown (@Dicklesworthstone)
- 6a5af5c: test(e2e): add robot-spawn, robot-send, robot-tail, robot-interrupt tests (@Dicklesworthstone)
- 0a41722: test(hooks): fix truncation test expectation to match implementation (@Dicklesworthstone)
- 662185c: test(pipeline): add UTF-8 edge case tests for truncatePrompt (@Dicklesworthstone)
- 2fb5a3f: test(pipeline): add case-insensitive tests for NormalizeAgentType (@Dicklesworthstone)
- 1e4fdcb: test(pipeline): add tests for IsValidAgentType (@Dicklesworthstone)
- ee43275: test(policy): add comprehensive tests for automation and SLB features (@Dicklesworthstone)
- 0b11967: test(tmux): add real integration tests for keys, capture, and title parsing (@Dicklesworthstone)
Full Changelog: v1.3.0...v1.4.0
Container Image: ghcr.io/dicklesworthstone/ntm:v1.4.0