netssh multi opens one pane per host in a tmux window or zellij tab.
Hosts come from names, tag:TAG (NetBox and static hosts), cluster:NAME
(NetBox virtualization clusters; devices by default, --kind vm|all),
and groups from the config (@name, nested, with cycle detection).
Every pane runs netssh HOST, so lookup, rules, and jump hosts apply.
- tmux: a new window inside tmux, else a new session that is attached;
tiled layout, pane borders with the host and a [SYNC] marker.
- zellij: a generated grid layout; a new tab inside zellij, else a new
session.
- --sync broadcasts typing to all panes; netssh sync toggles it in the
current tmux window or zellij tab.
- TUI: Space marks hosts, Ctrl+A marks all, Enter opens them together.
- Configurator: multiplexer, panes per window, groups.
NetBox SearchAll gains a cluster filter (name to cluster IDs per
instance), and cache entries keep the host's cluster for completion
and an offline fallback. Panes skip the 24-hour background refresh
(checked once by multi) and get HOME/XDG paths but no NETSSH_* values,
which would expose tokens in the process list.
testenv/tests/15-multi.sh checks real tmux and zellij sessions,
including a broadcast command arriving on all three cluster nodes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Found by the new Docker test environment against a real NetBox 4.7:
- The interface_name strategy filtered IP addresses with interface_name
and vminterface_name, which NetBox ignores, so it returned the first
address of the host instead of the named interface's. Use the real
filters interface and vminterface; a missing interface (HTTP 400)
falls through to the next strategy.
- sftp and scp took instance-qualified hosts (prod/web01:/path) for
local paths, because a "/" comes before the ":". Such arguments are
remote when the prefix is a configured NetBox instance.
- Shell aliases of instance-qualified hosts ran the shortcut rules on
"instance/host", so anchored rewrite rules never matched.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- **Strategies**: Add resolver strategy input validation and parsing in setup wizard. Support comma-separated input with known strategy mapping.
- **Client**: Extend Search and SearchAll to include kind and tag filters. Add pagination for full cache refresh handling large datasets.
- **Cache**: Introduce `RecentlyUsed` and `MarkUsed`. Persist `LastUsed` timestamps for entries.
- **TUI**: Add recent hosts view, tag/kind filters, and inline editor for user/port override.
- **Tests**: Comprehensive unit tests for new features, including strategy validation, cache behavior, and client filtering.
- **Docs**: Update README with new TUI features and cache subcommands.
- TokenVersion() distinguishes nbt_-prefixed v2 tokens from legacy v1
- 403 errors now say "check token permissions" + v1 hint if applicable
- Setup wizard prints a note after saving if a v1 token was entered
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>