NTM v1.3.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.3.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
- dbb355f: feat(beads): add 4 EPICs and 25 subtasks for incremental orchestration features (@Dicklesworthstone)
- 84ee2c5: feat(bv): add timeout handling for external commands (@Dicklesworthstone)
- 137b03f: feat(cli): add 'config set projects-base' command for easy setup (@Dicklesworthstone)
- 0f8a3d3: feat(cli): add pipeline CLI subcommands (run, status, list, cancel, exec) (@Dicklesworthstone)
- 09303c4: feat(cli): add profiles list/show commands with profile sets display (@Dicklesworthstone)
- 56a2844: feat(cli): comprehensive tests for thundering herd prevention (@Dicklesworthstone)
- 0a46769: feat(cli): polished personas/profiles output with box-drawing tables (@Dicklesworthstone)
- d6fb654: feat(config): add configurable rotation thresholds for context window rotation (@Dicklesworthstone)
- c341a12: feat(context): add rotation history and audit log (@Dicklesworthstone)
- ff68ec5: feat(context): implement graceful degradation before rotation (@Dicklesworthstone)
- d989063: feat(context): implement handoff summary generation for rotation (@Dicklesworthstone)
- cf942c5: feat(context): implement seamless agent rotation (@Dicklesworthstone)
- 950b4c7: feat(context): implement token usage monitoring for context window rotation (@Dicklesworthstone)
- bb7847a: feat(dashboard): add 'u' key to toggle UBS scanning on/off (@Dicklesworthstone)
- 6de0d6b: feat(dashboard): add NTM_DASH_SCAN_REFRESH_SECS to configure/disable UBS scans (@Dicklesworthstone)
- 3e24e5d: feat(dashboard): show 'scan off' indicator in status bar when UBS scanning disabled (@Dicklesworthstone)
- fb3a9b6: feat(dashboard): use pane variant for model detection and improve progress colors (@Dicklesworthstone)
- 8800f3d: feat(events): add unified event bus for pub/sub communication (@Dicklesworthstone)
- 2f51a77: feat(persona): add profile inheritance, sets, focus patterns, and template vars (@Dicklesworthstone)
- c5c0308: feat(pipeline): add execution engine core with executor (@Dicklesworthstone)
- f13b761: feat(pipeline): add robot-pipeline APIs for workflow execution (@Dicklesworthstone)
- 60cc758: feat(pipeline): add variable substitution and condition evaluation (@Dicklesworthstone)
- 6b57807: feat(pipeline): add workflow schema, parser, and dependency resolution (@Dicklesworthstone)
- caa85f8: feat(pipeline): implement parallel step execution with coordination (@Dicklesworthstone)
- 2234e14: feat(pipeline): improve context isolation between stages (@Dicklesworthstone)
- 2ffb102: feat(robot): R5, R6, R9 - Flag docs, RFC3339 timestamps, dry-run capability (@Dicklesworthstone)
- cf9d26b: feat(robot): R8 - Add --robot-schema for JSON Schema generation (@Dicklesworthstone)
- ee96b4b: feat(robot): add --robot-route API for routing recommendations (@Dicklesworthstone)
- 7e2d325: feat(robot): add 7 routing strategies with fallback chain (@Dicklesworthstone)
- 2ca746c: feat(robot): add wait command and agent scoring system (@Dicklesworthstone)
- 1f93142: feat(robot): duration string support for timeout flags (R1) (@Dicklesworthstone)
- 8d72f14: feat(robot): graceful unimplemented feature handling (R4) (@Dicklesworthstone)
- d82c278: feat(robot): implement --robot-assign for work distribution (@Dicklesworthstone)
- 7e1e5cd: feat(robot): implement --robot-context for context window usage (@Dicklesworthstone)
- 1deb8bd: feat(robot): implement --robot-tokens and --robot-history flags (@Dicklesworthstone)
- d9ab5b8: feat(robot): implement agent activity detection system (EPIC ntm-v2m0) (@Dicklesworthstone)
- 99609b9: feat(robot): standardized JSON error responses for robot mode (R2) (@Dicklesworthstone)
- e2dd3ed: feat(robot): unified agent type aliasing across all commands (R3) (@Dicklesworthstone)
- 610316a: feat(send): add smart routing integration with --smart and --route flags (@Dicklesworthstone)
- 4b2d14c: feat(spawn): add --stagger flag for thundering herd prevention (@Dicklesworthstone)
- 9212e2d: feat(tmux): add PasteKeys with bracketed paste mode for reliable multiline input (@Dicklesworthstone)
- 37f451c: feat(tui): T1 - Responsive help bar using RenderHelpBar component (@Dicklesworthstone)
- 3072600: feat(tui): T10 - Column visibility indicators when columns hidden (@Dicklesworthstone)
- 9dcf4f6: feat(tui): T11 - Fixed-width badge rendering for alignment (@Dicklesworthstone)
- 376f0ff: feat(tui): T2 - Context-sensitive panel keybinding hints (@Dicklesworthstone)
- 30a78b9: feat(tui): T3 - Scroll position indicators for scrollable panels (@Dicklesworthstone)
- 02f382a: feat(tui): T4 - Data freshness indicators with staleness warnings (@Dicklesworthstone)
- f530861: feat(tui): T6 - Enhanced empty states with icons and guidance (@Dicklesworthstone)
- af88375: feat(tui): T7 - Error recovery feedback with retry state indication (@Dicklesworthstone)
- 34eb9b8: feat(tui): T8 - Enhanced focus visibility with background tint (@Dicklesworthstone)
- e4991df: feat(tui): T9 - Standardized truncation using single-character ellipsis (@Dicklesworthstone)
- 9e2ecb8: feat(vscode): add file decoration provider for reservation status (@Dicklesworthstone)
- 206edd1: feat(vscode): add session tree view in activity bar (@Dicklesworthstone)
- 4d74c78: feat(vscode): implement openTerminal command and fix mail interface (@Dicklesworthstone)
- 7fb440a: feat(watcher): add ignore path support to polling mode (@Dicklesworthstone)
- 0f0c6bf: feat: add thundering herd prevention design and beads (@Dicklesworthstone)
Bug Fixes
- 07f8bf8: fix(alerts): track failed check sources to prevent false alert resolution (@Dicklesworthstone)
- bd2b332: fix(alerts): update tests to match Update function signature (@Dicklesworthstone)
- 795b2b6: fix(auth): sanitize commands before sending to panes during restart (@Dicklesworthstone)
- cc030ea: fix(beads): audit and fix orchestration bead dependencies (@Dicklesworthstone)
- b14f835: fix(beads): comprehensive audit fixes for orchestration beads (@Dicklesworthstone)
- 2471f7b: fix(bv): robust directory handling and validation for bv/bd commands (@Dicklesworthstone)
- 1545337: fix(cass): add missing IsInstalled check in Timeline function (@Dicklesworthstone)
- 7ed3688: fix(cass): correct CLI invocation to use --json flag instead of robot subcommand (@Dicklesworthstone)
- 804959e: fix(cass): robust timestamp parsing (ntm-g5nt) (@Dicklesworthstone)
- d5d860e: fix(checkpoint): add random suffix to prevent ID collisions (@Dicklesworthstone)
- c34f5b7: fix(checkpoint): handle git capture failures (ntm-6l3u) (@Dicklesworthstone)
- 53ac551: fix(cli): prevent null arrays in JSON and use UTF-8 safe truncation (@Dicklesworthstone)
- f1c70ae: fix(cli): remove redundant newline in fmt.Println (@Dicklesworthstone)
- 7671ea8: fix(cli): respect global config for client initialization (ntm-8k4v) (@Dicklesworthstone)
- e1ebc6f: fix(cli): return error on persona not found in JSON mode + docs (@Dicklesworthstone)
- c3b6fae: fix(cli): use -- separator for positional args in bd/cass commands (@Dicklesworthstone)
- e36c18f: fix(cli): use correct agent icon in profile header and remove dead code (@Dicklesworthstone)
- e59f6ed: fix(cli): use robust path handling in changes command and restore mail inbox tests (@Dicklesworthstone)
- 23de2cd: fix(context): add nil monitor checks to prevent panics (@Dicklesworthstone)
- 9066a14: fix(context): address code review findings in history.go (@Dicklesworthstone)
- 536db23: fix(context): correct rotation history bugs found in code review (@Dicklesworthstone)
- bcedd1e: fix(context): correct tryCompaction enter logic and method tracking (@Dicklesworthstone)
- 0c36816: fix(context): correct typo and logic bug in monitor.go (@Dicklesworthstone)
- 92290f9: fix(context): correct unit mismatch in compaction result evaluation (@Dicklesworthstone)
- 5a33a42: fix(context): fix pane matching and remove unused parameter (@Dicklesworthstone)
- 7f9191f: fix(context): prevent ManualRotate panic and remove dead code (@Dicklesworthstone)
- 3338afa: fix(context): remove duplicate *100 in PreRotationCheck freed percentage (@Dicklesworthstone)
- bdf245e: fix(dashboard): graceful beads panel UX for uninitialized projects (@Dicklesworthstone)
- 4456616: fix(dashboard): increase tmux operation timeouts to prevent deadline exceeded errors (@Dicklesworthstone)
- 247955d: fix(dashboard): reduce UBS scan frequency from 1s to 30s (@Dicklesworthstone)
- 030cccc: fix(history): ensure directory exists before appending (@Dicklesworthstone)
- 8b0a0d3: fix(install): support macOS universal binary (darwin_all) (@Dicklesworthstone)
- 4dcfcfd: fix(mail): add missing agg variable declaration and cleanup duplicates (@Dicklesworthstone)
- 174d6ad: fix(persona): audit fixes for slice aliasing and test assertions (@Dicklesworthstone)
- 8792451: fix(pipeline): audit fixes for pipeline CLI and execution engine (@Dicklesworthstone)
- 62d2a11: fix(pipeline): correct cycle detection state corruption bug (@Dicklesworthstone)
- 64b841e: fix(pipeline): include loop sub-steps in cycle detection (@Dicklesworthstone)
- 1657ea0: fix(pipeline): normalize agent types (ntm-l15f) (@Dicklesworthstone)
- 1734d8e: fix(pipeline): validate variable refs in loop sub-steps (@Dicklesworthstone)
- c25c29e: fix(resilience): fix race condition in test hook functions (@Dicklesworthstone)
- 7f3d066: fix(resilience): implement persistent auto-restart monitor (ntm-p8bt) (@Dicklesworthstone)
- c6dd9fa: fix(resilience): protect hook accesses with mutex in monitor (@Dicklesworthstone)
- f845778: fix(robot): correct context usage thresholds and hints (@Dicklesworthstone)
- 33b98dc: fix(robot): correct typos and missing assertions in activity tests (@Dicklesworthstone)
- d45af6e: fix(robot): correctly test idle threshold boundary with matches (@Dicklesworthstone)
- 6746745: fix(robot): deterministic output and UTF-8 safe truncation (@Dicklesworthstone)
- 2d49f76: fix(robot): enable immediate state detection on first classification (@Dicklesworthstone)
- f49f941: fix(robot): fix stall detection never triggering for empty panes (@Dicklesworthstone)
- 0fe1e6f: fix(robot): rename misleading test and clarify comments (@Dicklesworthstone)
- fffe4de: fix(robot): replace custom string helper with strings.Contains (@Dicklesworthstone)
- fcd952c: fix(send): include RoutedTo in smart routing JSON output (@Dicklesworthstone)
- 3b2c0ac: fix(spawn): only track max stagger delay when prompt is scheduled (@Dicklesworthstone)
- d84c122: fix(spawn): wait for staggered prompts before returning (@Dicklesworthstone)
- 7da5a83: fix(status): improve ANSI escape sequence stripping (@Dicklesworthstone)
- 0c74578: fix(test): add error handling for EvalSymlinks in loader tests (@Dicklesworthstone)
- 86c7e70: fix(test): resolve symlinks in templates path comparison (@Dicklesworthstone)
- 42f00ff: fix(tests): FlexTime type + TokenVelocity setup in dashboard tests (@Dicklesworthstone)
- 7193333: fix(tests): reset config cache in mail tests for env var support (@Dicklesworthstone)
- fdd873a: fix(tmux): change field separator to avoid parsing conflicts (@Dicklesworthstone)
- 38f7c64: fix(tmux): prevent UTF-8 corruption in SendKeys chunking (ntm-owho) (@Dicklesworthstone)
- 135e0c5: fix(tmux): prevent panic in SendKeys on chunk boundary (@Dicklesworthstone)
- 8799a90: fix(tmux): use correct pane option allow-set-title instead of allow-rename (@Dicklesworthstone)
- bfb851f: fix(tui): align table header columns with row border indicators (@Dicklesworthstone)
- 39dc1f5: fix: address code review findings across multiple packages (@Dicklesworthstone)
- 6afcbce: fix: align checkDiskSpace signature across platforms (@Dicklesworthstone)
- 013f28a: fix: code quality issues in send.go and auth/restart.go (@Dicklesworthstone)
- 42c45c5: fix: code review fixes from fellow agent audit (@Dicklesworthstone)
- 80501a2: fix: fresh-eyes code review - sanitization bug and infinite loop guard (@Dicklesworthstone)
- 043b8e6: fix: improve TTL parsing and deterministic task type inference (@Dicklesworthstone)
- 17f17bd: fix: improve code quality across multiple modules (@Dicklesworthstone)
- 82c2478: fix: make process detachment platform-specific for Windows build (@Dicklesworthstone)
- b4b7dbf: fix: prevent panics and ensure absolute paths in error fallbacks (@Dicklesworthstone)
- 52534bb: fix: various robustness and correctness improvements (@Dicklesworthstone)
Performance
- 41a0d24: perf(checkpoint): stream git diff directly to file (@Dicklesworthstone)
- b84b444: perf(dashboard): add output render caching and improve timing (@Dicklesworthstone)
- 02871a9: perf(robot): optimize status command and remove broken file tracking (@Dicklesworthstone)
- 79f6416: perf(robot): optimize status graph metrics (ntm-i7az) (@Dicklesworthstone)
- 5c357c1: perf(tmux): add semantic capture helpers with line budgets (ntm-952.6.3) (@Dicklesworthstone)
Documentation
- f9d9541: docs(cli): clarify runeWidth function limitations (@Dicklesworthstone)
- 0f913f6: docs(readme): document defaults behavior, token velocity badges, pane type indicators (@Dicklesworthstone)
- d6a0a9b: docs(readme): expand robot mode, add CASS and Agent Mail sections (@Dicklesworthstone)
- 0750450: docs(robot): R7 - Document null/empty/absent JSON field semantics (@Dicklesworthstone)
- b28dead: docs(tests): clarify agent index comments in stagger tests (@Dicklesworthstone)
Others
- 5a1dcf2: Audit and enhance UX beads with integration guidance (@Dicklesworthstone)
- 5629fb0: Update beads to v0.30.0: add sync-branch config (@Dicklesworthstone)
- 387d372: chore(beads): close ntm-lmy5 conditional step execution (@Dicklesworthstone)
- 892adc5: chore(beads): sync issue tracking state (@Dicklesworthstone)
- fdcf9c0: chore(beads): sync issue tracking updates for completed work (@Dicklesworthstone)
- 872fa20: chore(beads): sync ntm-952.6.3 closure (@Dicklesworthstone)
- 727e62b: chore(beads): sync stale bead closures (@Dicklesworthstone)
- 5a7758a: chore(context): remove dead code in CheckAndRotate loop (@Dicklesworthstone)
- d028f39: chore(gitignore): add .bv/ directory to ignore list (@Dicklesworthstone)
- 36bfc08: close(beads): close 3 EPICs with all subtasks complete (@Dicklesworthstone)
- e67f703: fix(events,pipeline): correct handler unsubscribe and validation bugs (@Dicklesworthstone)
- ef09b16: fix(pipeline,robot): fix race condition and agent type filtering bugs (@Dicklesworthstone)
- 4da7415: fix(robot,tmux): add missing functions to fix build (@Dicklesworthstone)
- e77cb05: fix(tmux,theme): resolve GitHub issues #5 and #6 (@Dicklesworthstone)
- a0a5bda: refactor(beads): comprehensive review and enhancement of 4 orchestration EPICs (@Dicklesworthstone)
- 2521207: refactor(cli): remove unused showRowNums field from StyledTable (@Dicklesworthstone)
- 445e250: refactor(config): simplify Load by initializing from defaults first (@Dicklesworthstone)
- d3603a5: refactor(resilience): run monitor as detached subprocess for survival across parent exit (@Dicklesworthstone)
- 2459476: refactor(robot): consolidate agent detection and export functions (@Dicklesworthstone)
- f2ff7f6: refactor: replace fmt.Printf with log.Printf in library code (@Dicklesworthstone)
- 7adc929: security: harden input validation and output sanitization (@Dicklesworthstone)
- be79503: style(persona): fix struct field alignment in test (@Dicklesworthstone)
- 9084263: test(cli): ntm-3y55 - Add comprehensive unit tests for copy filters (@Dicklesworthstone)
- 308aa76: test(integration): ntm-4cv - Add CLI Add and Kill command tests (@Dicklesworthstone)
- d22bf03: test(persona): comprehensive test coverage for profile system (@Dicklesworthstone)
- a1ebd70: test(robot): add comprehensive edge case tests for activity detection (@Dicklesworthstone)
- 3cb0ee5: test(robot): add comprehensive edge case tests for smart routing (@Dicklesworthstone)
Full Changelog: v1.2.0...v1.3.0
Container Image: ghcr.io/dicklesworthstone/ntm:v1.3.0