NTM v1.7.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.7.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
- d878a1b: feat(agent): add Ollama as a recognized agent type (@Dicklesworthstone)
- d0d6655: feat(bundle): add support bundle manifest schema and verification (bd-2rk09) (@Dicklesworthstone)
- d4de897: feat(cli): add ntm preflight command for prompt validation (@Dicklesworthstone)
- 9fdffd5: feat(cli): add ntm support-bundle command (bd-1a542) (@Dicklesworthstone)
- 0676692: feat(cli): add shell completions for ensemble commands (@Dicklesworthstone)
- 5e78569: feat(cli): integrate redaction engine with send command (@Dicklesworthstone)
- e28ff33: feat(cli): redact agent mail send (bd-3a7yx) (@Dicklesworthstone)
- c30f971: feat(cli): redact copy/save outputs (bd-1kbjc) (@Dicklesworthstone)
- 8ff4a21: feat(dashboard): smart animation with adaptive tick rate (fixes #32) (@Dicklesworthstone)
- 2c0e53c: feat(e2e): add E2E tests for ntm activity and metrics commands (@Dicklesworthstone)
- b86b558: feat(e2e): add E2E tests for ntm checkpoint and rollback (@Dicklesworthstone)
- eeb67b4: feat(e2e): add E2E tests for ntm config validate command (@Dicklesworthstone)
- a8377fa: feat(e2e): add E2E tests for ntm doctor command (@Dicklesworthstone)
- 6a4ff17: feat(e2e): add E2E tests for ntm init workflow (@Dicklesworthstone)
- b91845d: feat(e2e): add E2E tests for ntm logs and history commands (@Dicklesworthstone)
- 6728136: feat(e2e): add E2E tests for ntm summary and profiles commands (@Dicklesworthstone)
- 519831d: feat(e2e): add E2E tests for ntm watch and robot-monitor (@Dicklesworthstone)
- fb15a11: feat(e2e): add comprehensive E2E tests for ntm git operations (@Dicklesworthstone)
- 9a6c45c: feat(e2e): add comprehensive E2E tests for ntm guards (@Dicklesworthstone)
- 5145d94: feat(events): publish coordinator state transitions (bd-2c8y) (@Dicklesworthstone)
- 26ca5d3: feat(history): regex search + history replay (bd-zrxb) (@Dicklesworthstone)
- 3447683: feat(lint): add main Linter orchestrator with PII detection (@Dicklesworthstone)
- 8c8427f: feat(lint): add prompt linting types for preflight system (@Dicklesworthstone)
- 61df05f: feat(lint): implement core lint rules and checkers (@Dicklesworthstone)
- 577f9bb: feat(privacy): add privacy mode spec + config/flags (bd-2u3tv) (@Dicklesworthstone)
- d270fb7: feat(privacy): implement privacy mode gating for persistence (bd-26364) (@Dicklesworthstone)
- 5c50070: feat(quota): Add unit tests for provider-specific usage/status parsers (@Dicklesworthstone)
- 64892e0: feat(redaction): add config + flags plumbing (bd-20xv1) (@Dicklesworthstone)
- b5d45e2: feat(redaction): add redaction middleware for REST/WS and persistence (@Dicklesworthstone)
- 31077eb: feat(robot): add swarm orchestration snapshot to system state output (@Dicklesworthstone)
- 8ca6ed7: feat(robot): dcg check preflight (bd-297mu) (@Dicklesworthstone)
- 27a91f0: feat(robot): integrate redaction engine with send-and-ack API (@Dicklesworthstone)
- f626ef6: feat(safety): add profiles + robot support bundle flag (@Dicklesworthstone)
- 39c07c4: feat(status): add context usage and token count to AgentStatus (@Dicklesworthstone)
- 5f80f0a: feat(status): propagate context usage metrics through status pipeline (@Dicklesworthstone)
- 07f7275: feat(supportbundle): add manifest schema for support bundle indexing (@Dicklesworthstone)
- ef8ade8: feat(tests): add pure-function tests for dashboard helpers (@Dicklesworthstone)
- 492053a: feat(tests): add pure-function tests for dashboard panels (@Dicklesworthstone)
- dc9d90c: feat(tui): cost panel + scrub tests (bd-2px8 bd-1twa4) (@Dicklesworthstone)
- fc44ca7: feat(tui): enhance history panel with filtering, copy, and replay (@Dicklesworthstone)
- a68067d: feat(watcher): Recursive remove support + E2E and watcher tests (@Dicklesworthstone)
- 6b1b107: feat(webhook): add built-in formatters for Slack, Discord, and Teams (@Dicklesworthstone)
- 82c361c: feat: DCG consult + CAAM rotator updates (bd-1cltc, bd-3d4i9) (@Dicklesworthstone)
- 44dd743: feat: add agent type hints to parser and multi-window session restore (@Dicklesworthstone)
- 47870a1: feat: add e2e tests for ntm doctor command (@Dicklesworthstone)
- 0f7447f: feat: add e2e tests for ntm grep command (@Dicklesworthstone)
- ce3f4e9: feat: add safety redaction system and fix Codex web search flag (@Dicklesworthstone)
- 35e2965: feat: ntm scrub + redact outbound notifications/webhooks (@Dicklesworthstone)
- 602fe8a: feat: use MCP resource view for listing file reservations (@Dicklesworthstone)
Bug Fixes
- ce579ab: fix(am): add http client timeout to HealthCheck for consistency (@Dicklesworthstone)
- 340d5b8: fix(checkpoint): Prevent panic on short git hashes + supervisor tests (@Dicklesworthstone)
- 758c8e0: fix(coordinator): handle wildcard suffixes in ** glob patterns (@Dicklesworthstone)
- 709a77a: fix(coordinator): support ** wildcard suffix patterns (@Dicklesworthstone)
- c55d636: fix(e2e): correct supportsCommand to actually run the command (@Dicklesworthstone)
- b48002c: fix(e2e): fix monitor test flag detection and help text assertion (@Dicklesworthstone)
- 481b63a: fix(e2e): update synthetic secrets to match redaction patterns (@Dicklesworthstone)
- 1d0398e: fix(redaction): --allow-secret should downgrade block to warn, not disable scanning (@Dicklesworthstone)
- 4b08734: fix(redaction): improve overlap deduplication with priority-first sorting (@Dicklesworthstone)
- b10afee: fix(robot): use descriptive names for empty test case values (@Dicklesworthstone)
- 0ac248f: fix(serve): make Content-Type check case-insensitive per RFC 2616 (@Dicklesworthstone)
- 548eab1: fix(spawn): avoid IsJSONOutput in signal goroutine (@Dicklesworthstone)
- 8b8af4a: fix(status): idle prompts take priority over historical errors (@Dicklesworthstone)
- d206aa6: fix(status): invert context remaining to context usage percentage (@Dicklesworthstone)
- 07838f3: fix(supervisor): add proper HTTP client timeouts for health checks (@Dicklesworthstone)
- 291e9e6: fix(supervisor): use correct health endpoints for Agent Mail (@Dicklesworthstone)
- a76634b: fix(swarm): bug fixes from code review (@Dicklesworthstone)
- 459176b: fix(tmux): buffer-based paste for Gemini multi-line prompts (bd-2od5.3.4) (@Dicklesworthstone)
- 44f4a12: fix(tmux): use unique buffer names to prevent race conditions (@Dicklesworthstone)
- e9142bf: fix(tui): align NTM_REDUCE_MOTION parsing with styles.reducedMotionEnabled() (@Dicklesworthstone)
- d728f66: fix(windows): add stub for createFIFO on Windows (@Dicklesworthstone)
- 9a73d3a: fix: checkpoint JSON + ensemble redundancy (bd-es4x7) (@Dicklesworthstone)
- 7f5b872: fix: handle bv not installed case in drift detection tests (@Dicklesworthstone)
- 541d8a4: fix: multiple bug fixes from deep code review (@Dicklesworthstone)
- 2f9cb96: fix: respect --json flag in palette subcommand (@Dicklesworthstone)
- 86750a7: fix: update mail tests to use FlexTime wrapper for CreatedTS (@Dicklesworthstone)
Performance
- a96d431: perf(coordinator): reduce lock contention during agent state updates (@Dicklesworthstone)
Documentation
- 6370bc6: docs(redaction): update spec and improve redaction implementation (@Dicklesworthstone)
Others
- 3ac08e0: Add E2E test for unlock --all flag (@Dicklesworthstone)
- 2ac8c44: Add comprehensive conflict detection tests (@Dicklesworthstone)
- 1826969: Add comprehensive unit tests for tracker package coverage (@Dicklesworthstone)
- 64de8d9: Add configurable help verbosity for CLI and TUI dashboard (@Dicklesworthstone)
- 942a97b: Add cross-process lock for parallel tmux test execution (@Dicklesworthstone)
- bb006f6: Add edge case tests for acknowledgment detection (@Dicklesworthstone)
- 16ee8f8: Add unit tests for min() and findOverlap() helpers (@Dicklesworthstone)
- b3d2cf9: Close bd-2ibgg (@Dicklesworthstone)
- 4b29e62: Close bd-2jyec (beads dependency cycle) (@Dicklesworthstone)
- 8cb5ea6: Close bd-2pgo6 (@Dicklesworthstone)
- 5827862: Close bd-3sha (dashboard help verbosity) (@Dicklesworthstone)
- 9a0f156: Close bd-3vfhb (@Dicklesworthstone)
- 9cc8436: Close bd-mthe9; add internal/tools adapter tests (@Dicklesworthstone)
- d6a20d2: Close bd-rqg47 (@Dicklesworthstone)
- 3064d38: Fix lock/unlock E2E test to verify per-agent reservation state (@Dicklesworthstone)
- 92775de: Fix swarm pane targeting base indices (bd-1mx4h) (@Dicklesworthstone)
- 7c98598: Fix swarm plan pane index mapping (bd-32ju2) (@Dicklesworthstone)
- 33093c6: Rename err to unmarshalErr in ListReservations to avoid shadowing (@Dicklesworthstone)
- 621237c: Rename err variables in lock_unlock_test to avoid shadowing (@Dicklesworthstone)
- 90f36f6: Strengthen test assertions and coverage across test suites (@Dicklesworthstone)
- f59ad98: Sync beads issue tracker state (@Dicklesworthstone)
- fd7e1e7: Update beads (@Dicklesworthstone)
- 1927744: Update beads: close bd-2c8y (@Dicklesworthstone)
- f492728: Update beads: close bd-3q3u (@Dicklesworthstone)
- 341697c: Update beads: close bd-3qk5a (@Dicklesworthstone)
- 88afccf: Update dashboard layout tests for help verbosity changes (@Dicklesworthstone)
- 3e0a4b9: Update tests for help verbosity and fix robot test assertions (@Dicklesworthstone)
- d7a285f: agentmail: filter ListReservations client-side (@Dicklesworthstone)
- 5289036: bd-1wvl6: Fresh-eyes fixes for locks/reservations (@Dicklesworthstone)
- 543434d: bd-2c8y: webhook bus bridge + event emitter (@Dicklesworthstone)
- d94e3f9: bd-3qk5a: enforce privacy/redaction for prompt persistence (@Dicklesworthstone)
- 24d0640: bd-852e: spawn --local/--ollama (Ollama) agents (@Dicklesworthstone)
- aefeaaa: beads: claim bd-297mu (@Dicklesworthstone)
- cff22d8: beads: close bd-297mu (@Dicklesworthstone)
- 80d9068: beads: close bd-2vm8z (@Dicklesworthstone)
- 4cf038d: beads: close bd-32ju2 (@Dicklesworthstone)
- 95ee71d: beads: close bd-3cdsi (@Dicklesworthstone)
- 29f520f: beads: close bd-3vkzo (@Dicklesworthstone)
- 87a806d: beads: close bd-f8ikz (@Dicklesworthstone)
- c37c769: beads: close bd-kjihq (@Dicklesworthstone)
- 3d74555: beads: close bd-ubhl (@Dicklesworthstone)
- f53e730: beads: privacy/redaction + support bundle + prompt preflight (@Dicklesworthstone)
- 89e6a21: beads: refine privacy/safety plan (E2E harness + support bundle deps) (@Dicklesworthstone)
- a73e8c6: beads: refine privacy/safety plan (tests + deps) (@Dicklesworthstone)
- 6894467: beads: sync (@Dicklesworthstone)
- 986cf92: beads: sync (@Dicklesworthstone)
- 79f2445: beads: sync (@Dicklesworthstone)
- 8761f9f: beads: sync issues export (@Dicklesworthstone)
- 6c16910: beads: sync issues export (@Dicklesworthstone)
- eefec61: beads: sync issues export (@Dicklesworthstone)
- 7fed2bd: beads: sync issues export (@Dicklesworthstone)
- 6d26fd4: beads: sync updates; add e2e lock tests (@Dicklesworthstone)
- 24372ee: chore(beads): Close bd-ubhl E2E init workflow tests (@Dicklesworthstone)
- 86cbcf5: chore(beads): close bd-19t9x (@Dicklesworthstone)
- 0f53fc6: chore(beads): close bd-1fvt7 (@Dicklesworthstone)
- d367071: chore(beads): close bd-20xv1 - redaction config complete (@Dicklesworthstone)
- 4ac8012: chore(beads): close bd-2foqi + bd-in4ac; start bd-3sl0s (@Dicklesworthstone)
- 6a7cf77: chore(beads): close bd-2oc4s - tests complete (@Dicklesworthstone)
- f121fe3: chore(beads): close bd-32ie0 (@Dicklesworthstone)
- aa281f1: chore(beads): close bd-349x (@Dicklesworthstone)
- 390f986: chore(beads): mark bd-349x in progress (@Dicklesworthstone)
- c4602de: chore(beads): mark bd-oqlqm in progress (@Dicklesworthstone)
- 88e3716: chore(beads): start bd-ktyql (@Dicklesworthstone)
- 4177260: chore(beads): sync (@Dicklesworthstone)
- 422a0a3: chore(beads): sync (@Dicklesworthstone)
- dea575b: chore(beads): sync (@Dicklesworthstone)
- dd4aa8c: chore(beads): sync issue state (@Dicklesworthstone)
- d259edd: chore(beads): sync issue tracker state (@Dicklesworthstone)
- 50b1de4: chore(beads): sync issue tracker state (@Dicklesworthstone)
- 419945c: chore(beads): sync issue tracker state (@Dicklesworthstone)
- 9bc122e: chore(beads): sync issue tracker state (@Dicklesworthstone)
- 6601c75: chore(beads): sync issue tracker state (@Dicklesworthstone)
- fd11327: chore(beads): sync issue tracker state (@Dicklesworthstone)
- 7215f47: chore(beads): sync issue tracker state (@Dicklesworthstone)
- 33b30f3: chore(beads): sync issue tracker state (@Dicklesworthstone)
- 9bcb74a: chore(beads): update issue bd-1x9x8 status to in_progress (@Dicklesworthstone)
- da03a18: cli(send): add --dry-run preview (@Dicklesworthstone)
- 4696ad9: cli: stabilize send smart-route test (bd-1l4tx) (@Dicklesworthstone)
- ee6f688: config/handoff: validate redaction + truncate bounds (bd-20xv1 bd-765vk bd-1d8qk) (@Dicklesworthstone)
- de99ecf: config: normalize safety profile on load (@Dicklesworthstone)
- 33bb619: feat(support-bundle): add privacy mode enforcement (bd-2yi1i) (@Dicklesworthstone)
- 937bfed: redaction: internal/redaction engine (bd-2eph9) (@Dicklesworthstone)
- 4861307: refactor(e2e): rename history types to avoid conflicts with other tests (@Dicklesworthstone)
- 8a9cc78: refactor(redaction): avoid push-protection false positives on pattern constants (@Dicklesworthstone)
- 7da45af: refactor(test): consolidate send redaction tests into single test function (@Dicklesworthstone)
- a679909: refactor: continue stderr to slog migration in archive, checkpoint, scanner (@Dicklesworthstone)
- 07c00e9: refactor: migrate duration utility deprecation warning to slog (@Dicklesworthstone)
- bc699e0: refactor: migrate events and persona modules to structured slog logging (@Dicklesworthstone)
- 374b576: refactor: migrate warning output from stderr to structured slog logging (@Dicklesworthstone)
- 6821335: refactor: use slog for assignment store recovery (@Dicklesworthstone)
- 148ff93: refactor: use slog for checkpoint/scanner warnings (@Dicklesworthstone)
- b383d1a: send: dry-run safety + batch interrupt fixes (bd-3ffb) (@Dicklesworthstone)
- 0fe57f5: serve(ws): allow tool topic namespaces (@Dicklesworthstone)
- e569e34: serve: extract hint from details (@Dicklesworthstone)
- 46536c4: serve: improve accounts endpoint logging (@Dicklesworthstone)
- c795e20: serve: publish WS events for mail/reservations/pipeline/approvals (bd-1kq4p) (@Dicklesworthstone)
- 29fcb6d: style(e2e): complete privacy test logging standardization (@Dicklesworthstone)
- 3f5c8ad: style(e2e): standardize privacy test logging to E2E format (@Dicklesworthstone)
- 972b9cb: style(lint): fix struct field alignment in tests (@Dicklesworthstone)
- 842ab81: swarm: add --auto-rotate-accounts (bd-3ixg4) (@Dicklesworthstone)
- 54b3153: swarm: implement graceful shutdown support (bd-20q09) (@Dicklesworthstone)
- ceb8975: swarm: inject initial prompt (--prompt) (@Dicklesworthstone)
- d0338ba: swarm: orchestrator + status health (bd-3uda9) (@Dicklesworthstone)
- f8a866a: swarm: persist account rotation history (bd-2b0eb) (@Dicklesworthstone)
- 6a2ea1e: test(agentmail): Add unit tests for FlexTime, ReservationConflict, FetchInbox (@Dicklesworthstone)
- e82e93d: test(archive): add pure-function tests improving coverage to 68% (@Dicklesworthstone)
- d328eec: test(bundle): add comprehensive unit tests for generator (bd-2hj9x) (@Dicklesworthstone)
- bb3945b: test(cli): add installGitHooks unit tests (@Dicklesworthstone)
- 535ecb0: test(cli): add preflight unit tests (bd-3cq2w) (@Dicklesworthstone)
- c0dbaa0: test(cli): add spawn command test coverage (@Dicklesworthstone)
- bf47e0d: test(cli): add unit tests for redaction config/flag precedence (@Dicklesworthstone)
- a317a51: test(cli): expand preflight tests (bd-2yws9) (@Dicklesworthstone)
- f72a47c: test(cli): init recovery scenarios (bd-6fek) (@Dicklesworthstone)
- 09850d6: test(completion): add tests for edge cases and error paths (@Dicklesworthstone)
- 22f5e5a: test(config): cover safety profile normalization (@Dicklesworthstone)
- c849c59: test(e2e): Add version-aware guards and helpers for init tests (@Dicklesworthstone)
- bb636e9: test(e2e): add comprehensive E2E tests for copy command (@Dicklesworthstone)
- 4e3266f: test(e2e): add comprehensive E2E tests for hooks command (@Dicklesworthstone)
- 3b5a9fb: test(e2e): add diff command tests (@Dicklesworthstone)
- 01428b3: test(e2e): add plugins list coverage (bd-o2dl4) (@Dicklesworthstone)
- f880636: test(e2e): add privacy mode E2E tests (bd-3vnmq) (@Dicklesworthstone)
- aa0a3ec: test(e2e): add quota and upgrade command tests (@Dicklesworthstone)
- b16f309: test(e2e): add redaction E2E test suite (@Dicklesworthstone)
- 71f343b: test(e2e): add scan command (UBS) tests (@Dicklesworthstone)
- ba1291f: test(e2e): cover ensemble CLI json + tier gating (bd-3vkzo) (@Dicklesworthstone)
- a04ed16: test(e2e): persona/memory + recipes/kernel; verify redaction persistence (@Dicklesworthstone)
- b9fdefa: test(e2e): policy enforcement (bd-10n4m) (@Dicklesworthstone)
- 9db15b1: test(e2e): preflight E2E + ollama spawn parsing (bd-2foqi, bd-852e) (@Dicklesworthstone)
- 4093a23: test(e2e): robot env/diagnose + history replay; harden swarm stop (@Dicklesworthstone)
- 81c97f0: test(e2e): swarm orchestration; close bd-u4cfd (@Dicklesworthstone)
- b405f3b: test(e2e): work + workflows (bd-12nj9) (@Dicklesworthstone)
- c799508: test(events): add comprehensive tests for logger replay and query functions (@Dicklesworthstone)
- be9b6c5: test(handoff): add pure-function tests improving coverage to 83.8% (@Dicklesworthstone)
- 97cf330: test(lint): add comprehensive unit tests for lint package (@Dicklesworthstone)
- 8e1858a: test(rano): add tests for PID map functions and edge cases (@Dicklesworthstone)
- 2acdc56: test(redaction): add comprehensive test coverage for redaction modes (@Dicklesworthstone)
- e637582: test(redaction): add fuzz tests for redaction engine (@Dicklesworthstone)
- cfc526d: test(redaction): add performance benchmarks for redaction engine (@Dicklesworthstone)
- 211844f: test(redaction): add tests for overlapping matches and deduplication (@Dicklesworthstone)
- fd0707a: test(robot): improve getNewContent coverage to 92.3% (@Dicklesworthstone)
- 30a6be1: test(robot): improve test coverage for pure functions (@Dicklesworthstone)
- 7ed9718: test(send): UBS err-shadow cleanup (bd-3anr4) (@Dicklesworthstone)
- 3c7c14f: test(serve): add case-insensitivity tests for Content-Type detection (@Dicklesworthstone)
- 64ebc58: test(serve): cover account rotation endpoints (@Dicklesworthstone)
- 59f4384: test(swarm): comprehensive AutoRespawner integration tests (bd-2oc4s) (@Dicklesworthstone)
- ff1cb40: test(tmux): add tests for pure parsing functions (@Dicklesworthstone)
- 21e2d8a: test(webhook): ensure redaction in slack/template payloads (@Dicklesworthstone)
- 0a06b3d: tmux: retry SetPaneTitle for transient panes (@Dicklesworthstone)
- 98527c6: tmux: treat missing server as empty panes (@Dicklesworthstone)
Full Changelog: v1.6.0...v1.7.0
Container Image: ghcr.io/dicklesworthstone/ntm:v1.7.0