Skip to content

Releases

v3.3.1-rc1 (test build)

Pre-release

Choose a tag to compare

@bsommers bsommers released this 11 Nov 14:03
6249f97

Pre-release test build of main at 6249f97. Not for general use.

v3.3.0 — Beyond Herdr

Choose a tag to compare

@bsommers bsommers released this 10 Nov 04:30
46124f4

[3.3.0] - 2026-11-09

Milestone v3.3.0 "Beyond Herdr": always-on foreground RPC, first-class agent/pane/workspace CLI, semantic agent introspection, worktree swarm DAG runner, Mission Control HUD, and hierarchical D:(W,S,Y,P) coordinates (Phases 65–71, 71 phases total).

Added

  • Phase 65 — Architectural Guardrails (GUARD-01..03): SignalablePid newtype for all signaling, PaneTransport enum (Local/Remote/None), and focus-and-raise mouse isolation.
  • Phase 66 — Always-On Foreground RPC & Instance Discovery (LIVE-01..04): 0600 RPC socket in TUI and GUI, child PTY env injection (BILTERM_SOCKET, BILTERM_INSTANCE_PID, BILTERM_WORKSPACE_ID, BILTERM_PANE_ID) with from_pane attribution, multi-instance registry with --instance <pid|all>, OIA [RPC:LIVE] and :rpc.
  • Phase 67 — Agent/Pane/Workspace CLI (HERDR-01..04): w<N>:p<M> and semantic selectors (@claude, @idle, @blocked, ...), bilterm agent|pane|workspace subcommands, smart prompt injection (bracketed paste aware), zero-polling server-side agent wait.
  • Phase 68 — Semantic Introspection & Context Bus (BEYOND-01..04): agent.last_turn, permission-gate interceptor with approve/deny, per-pane FIFO prompt queue, cross-agent bilterm context bus.
  • Phase 69 — Worktree Swarm & DAG Runner (SWARM-01..04): atomic worktree agent spawner, :swarm run <plan.toml> DAG waves, diff/merge/clean, self-healing verify_cmd retry loop.
  • Phase 70 — Mission Control HUD & Time-Travel (HUD-01..04): :agents hud, per-turn replay scrubber, stall/loop watchdog, full UNI-R01 parity.
  • Phase 71 — Hierarchical Coordinates (COORD-01..04): 5-level D:(W,S,Y,P) addressing, universal parser/resolver, title-bar coordinate badge, :coords, coords.resolve/coords.format RPC, bilterm_coords_resolve MCP tool, [coords] config, tmux pane ids.

v3.2.0: Phases 61–64, Daemon Supervisor & :ssh-tmux TDD Overhaul

Choose a tag to compare

@bsommers bsommers released this 09 Nov 12:45
ec942fb

Highlights of Release v3.2.0

Phase 61: Classic Drawer Two-Line Rows & Zoom Invariants

  • Classic drawer two-line rows (classic_row_lines) with [R:n] header chips and :drawer rows toggle.
  • Effective zoom derived strictly from z_stack.top(), ensuring toggle_zoom is an idempotent toggle and preventing mouse hit-testing from falling through hidden layers.
  • Inactive window focus clicks preserve OIA and prompt chrome (was_active gate); prompt mode, raw mode, copy mode, and scrollback offsets survive stack switches and column reflows.

Phase 62: Nested TUI Selection Override & Vi Copy Mode Ergonomics

  • Shift / Alt mouse drag local selection override when inner TUIs (vim, htop, tmux) capture mouse events.
  • Reassembled split-read inbound OSC 52 sequences across buffer boundaries; added OIA MOUSE->APP and [COPY] badges.
  • Scrollback-absolute selections with Vi/Emacs motions (w, b, e, 0, ^, $, gg, G, H, M, L, /, ?, n, N), double/triple-click word/line selection, and dynamic copy mode hotkey hint bar (src/ui/copy_hints.rs).

Phase 63: Cross-Platform Primary Modifier, Sticky Window Mode & Key Conflict Engine

  • Cross-platform Primary modifier (Cmd on macOS GUI, Ctrl+Shift on Linux/Windows) and per-OS key profiles (mac, windows, linux, portable, legacy).
  • Fixed macOS Option dead-key navigation and Windows AltGr compose handling; replaced conflicting Alt+M global chords.
  • Sticky Window mode (leader w / Primary+O) with which-key visual overlay (src/ui/which_key_ui.rs).
  • Keyboard-operable top menu bar across all 9 categories with mnemonics, hotkeys, and computed accelerators.
  • Key collision detection engine (src/input/keyconflict.rs), :keys check|list|explain|profile commands, keys.* JSON-RPC methods, and bilterm_keys MCP tool.

Phase 64: Byte-Boundary Traffic Telemetry & Traffic Monitor

  • Leaf module src/traffic/ providing lock-free zero-allocation ring-buffer metrics across all 33 byte boundaries (H01..H33).
  • Live classification of escape sequences, control bytes, and printable text payloads.
  • Floating TRAFFIC MONITOR window in TUI and GUI (src/ui/traffic_monitor_ui.rs).
  • :traffic colon commands, traffic.* JSON-RPC methods, and bilterm_traffic MCP tool.

Daemon Supervisor & Process Fixes

  • Fixed spawn_daemon / ensure_started returning PID 0; now tracks real child OS process IDs, acquires lockfile, and registers in DaemonRegistry under -d / --headless flags.
  • Floating DAEMON SUPERVISOR management window in both TUI & GUI (src/wm/daemon_window.rs, src/ui/daemon_window_ui.rs).
  • Wired :daemon list|status|start|stop|switch and the top menu Daemon items to open and refresh the supervisor dialog.

:ssh-tmux Remote Pane Overhaul (TDD)

  • Remote panes now run PTY-less, eliminating local shell double-echo and unintended local command execution.
  • Added link_raw_input to mask SSH passwords and credentials from echoing on screen or recording into shell history.
  • Implemented immediate fallback binding (primary_pane <-> %0) with background list-panes reconciliation on idle tmux -CC attach, eliminating "Link down" errors.
  • Fixed :ssh-tmux prefill to close active modals, exit raw/copy modes, and force open the prompt populated with :ssh-tmux and cursor at the end.

Bilterm v3.1.0

Choose a tag to compare

@bsommers bsommers released this 08 Nov 18:27
8b6662c

Feature release delivering Drawer Window Peek & Live Preview (Phase 56), Smart MIME-Aware Clipboard Paste & Filterable Clipboard Viewer Window (Phase 57), Local AI Speech-to-Text (STT) Dictation (Phase 58), Embedded Chrome CDP Browser & 60fps Video Player Canvases (Phase 59), and the Multi-Surface Web Frontend Backend & @agent-manager/protocol v1 Bridge (Phase 60).

Added

  • Phase 56 — Drawer Window Peek & Live Preview Pane (DRW-PEEK-01..03, #31): Highlighting any live window or saved session in the Classic or Navigator drawer renders a zero-copy, zero-SIGWINCH floating preview pane (:drawer preview [on|off|toggle|focus|dismiss] / :peek, P in Classic drawer, v in Navigator drawer, JSON-RPC drawer.preview, MCP bilterm_drawer_preview) with Enter/click-to-focus and Esc/outside-click dismissal.
  • Phase 57 — Smart MIME-Aware Clipboard Paste & Filterable CLIPBOARD Viewer Window (CLIP-01..04, #31): Pressing Ctrl+V in RawPtyPassthrough / ALT_SCREEN mode probes OS clipboard MIME types and wraps text in DECSET 2004 bracketed paste (\x1b[200~...\x1b[201~), fixing "No image or video found in clipboard" in Herdr and Claude Code while passing 0x16 through for image/video clipboards. Added Shift+RightClick / Shift+MiddleClick SGR mouse bypass, inbound OSC 52 decoding, a 200-entry multi-session ClipboardRegistry with pane::redact secret masking, and a floating, pinnable, dockable CLIPBOARD viewer window (Ctrl+Alt+V, Leader ;, :clipboard / :clips, JSON-RPC clipboard.*, MCP bilterm_clipboard).
  • Phase 58 — Local AI Speech-to-Text (STT) Optional Module (STT-01..03, #33): Independent zero-bloat voice dictation subsystem (src/stt/) supporting OpenAI-compatible Whisper endpoints (whisper.cpp, speaches, LocalAI, vLLM, LM Studio), Ollama audio models, and local CLI pipes (whisper-cli, mlx_whisper) with two-tier audio capture, push-to-talk/VAD, OIA [🎙 REC] telemetry, and safe staging into FloatingCommandPrompt (Ctrl+Alt+S, Leader ,, :voice, JSON-RPC voice.*, MCP bilterm_voice).
  • Phase 59 — GUI Chrome Engine Web Browser Canvas & 60fps Video Player Canvas (WEB-01..02, VID-01..02, #33): Embedded Chromium engine web browser canvas via CDP Screencast (CdpBrowserEngine under private 0700 profile sandboxing) with interactive mouse/keyboard/URL/history/zoom navigation (Ctrl+Alt+B, Leader ., :browser, JSON-RPC browser.*, MCP bilterm_browser), plus a 60fps RGBA hardware-accelerated video player canvas (VideoCanvasEngine via ffmpeg pipe with OSD transport controls and audio sync: Ctrl+Alt+Y, Leader ', :video, JSON-RPC video.*, MCP bilterm_video) across GUI (GuiTextureQuad) and TUI (Kitty/Sixel/HalfBlock).
  • Phase 60 — Multi-Surface Web Frontend Backend & @agent-manager/protocol Bridge (WEB-FE-01..04, #33): RFC 6455 WebSocket GET /ws server implementing @agent-manager/protocol v1 (hello/hello_ack, agent:init_list, agent:output delta streaming with seq/resumeFrom, agent:input/resize/create/kill/update/broadcast/history/approve), atomic workspace.view_model RPC & REST routes (GET /agents, GET /agents/:id, GET /logs/:id, POST /search, GET /tokens.css), multi-client ClientViewRegistry decoupling browser viewports from local TUI/GUI state, and SEC-R01-confined --web-dir static SPA serving with opt-in --cors-origin (Ctrl+Alt+W, Leader @, :web, JSON-RPC web.*, MCP bilterm_web_surface).

v3.0.5

Choose a tag to compare

@bsommers bsommers released this 07 Nov 21:13
afbaf48

Bug-fix release. Thanks to @kitsumiko for the key-repeat fix.

Fixed

  • Holding a WM toggle key no longer flickers it (supersedes #20, thanks @kitsumiko). Key auto-repeat (KeyEventKind::Repeat) of a chord the window manager consumes as a toggle (F7 drawer, Ctrl+P palette, the leader key, user [keybindings] toggles, ...) is now ignored, so a held key fires once. The filter only applies to keys the WM actually handles: keys forwarded to the pane, including Alt+h/t/c/l/x, Ctrl+Space, F2 and F5 in alt-screen apps, keep their auto-repeat.

Bilterm v3.0.4 — agent.wait non-blocking, macOS verify.sh, Linux release script

Choose a tag to compare

@bsommers bsommers released this 07 Nov 20:08
157d98c

Bug-fix and tooling release. Thanks to @kitsumiko for the agent.wait, macOS verify.sh and docs fixes.

Fixed

  • agent.wait no longer blocks the JSON-RPC server (#26). Previously, a client waiting for an agent message stopped every other client's requests until the wait ended, which took up to 10 s. Waits that have no message yet are now parked and checked every 50 ms while the serve loop keeps handling other requests. This applies to the Unix-socket, TCP and HTTP endpoints. The 10 s timeout cap is unchanged, and at most 64 waits can be parked at once.
  • scripts/verify.sh runs under macOS /bin/bash 3.2 (#25). It no longer uses mapfile, empty arrays no longer trip set -u, an unknown --only group or --tier exits 2, and the summary line no longer picks up the extra spaces BSD wc -l adds. The macOS CI job is green again and is now a required check.

Changed

  • scripts/build-release-assets.sh builds only the Linux targets, and builds the tag (#24). It used to try to cross-link the macOS targets, which fails without the Apple SDK, so it aborted before packaging anything. It also copied its windows-gnu zip over the bilterm-x86_64-pc-windows-msvc.zip alias, which an upload would have used to replace the native Windows installer. macOS and Windows archives come from the release-binaries workflow. The script now builds the tag in a clean worktree, and adds --upload, which merges its checksums into the release's SHA256SUMS, and --no-build.

Documentation

  • Current-version references are back in sync with Cargo.toml: README badge, docs hub, user guide, man page, flake.nix and API examples (#27).
  • Fixed the secure_fs path in CLAUDE.md, AGENTS.md and the docs. It is src/secure_fs.rs, not src/util/secure_fs.rs (#27).

Bilterm v3.0.3 — Security Release

Choose a tag to compare

@bsommers bsommers released this 07 Nov 16:18

Security and hardening release. Thanks to @kitsumiko for reporting and fixing all of the issues below.

⚠️ Breaking: TCP listeners now require --token-file

bilterm --headless --listen 127.0.0.1:PORT (also [::1]:PORT and localhost:PORT) no longer starts without a bearer token. Loopback TCP can be reached by every local user and, cross-protocol, by any web page you visit, so it now needs a token just like remote listeners.

To migrate, create a 0600 token file and pass it with -t/--token-file (or BILTERM_TOKEN_FILE):

umask 077; mkdir -p ~/.config/bilterm
head -c 32 /dev/urandom | base64 > ~/.config/bilterm/token   # >= 16 chars, mode 0600
bilterm --headless --listen 127.0.0.1:7370 --token-file ~/.config/bilterm/token
bilterm ctl --token-file ~/.config/bilterm/token 127.0.0.1:7370 workspace.status

Custom clients must send auth.login with the token before any other request. Alternatively, use the default private Unix socket, which checks the peer UID and stays tokenless.

Security

  • GHSA-637v-r3qr-rm5x (high): a tokenless loopback TCP control listener could be driven cross-protocol from a web page or by any local user (#22).
    • TCP listeners now require a token (see above).
    • The JSON-RPC line reader now replies once and closes the connection on any non-JSON or HTTP-shaped line, so an HTTP body is never dispatched. This applies to both TCP and Unix sockets.
  • GHSA-6269-rw3f-9hr4 (high): :record pane <path> wrote to any path and followed symlinks, so a file could be overwritten via RPC/MCP (#23).
    • Under automation confinement, :record pane only accepts a plain file name inside the confine directory, the same as :record and :record workspace.
    • User-chosen recording paths are written atomically with mode 0600. A symlink at the final path is replaced, not followed.
  • OSC 52 clipboard passthrough is sanitized (#16).
    • Each sequence ends at its own terminator, and only well-formed set-clipboard payloads are forwarded.
    • Clipboard read queries are dropped.
  • Kitty graphics and VT side-channel state are bounded (#17).
    • Images are limited to 512 px per side, size arithmetic is checked, and the payload size is capped.
    • Retained notification and image lists drop their oldest entries once full.
  • Session and layout state files are written privately: 0600 files in 0700 directories (#18).
  • The daemon stop command only signals a PID that still holds the daemon lock (#19).
    • PIDs ≤ 1 and PIDs that don't fit in a pid_t are rejected.
    • A stale lock is cleaned up without sending any signal.

Fixed

  • Ctrl/Alt/Shift with arrows, Home/End, Insert/Delete, PageUp/PageDown and F1–F12 now send standard xterm modifier sequences (CSI 1;m X / CSI n;m ~), so word-jump and selection work in shells and editors. Unmodified Insert now sends CSI 2~ (#21).
  • Fixed 21 broken or invalid rustdoc intra-doc links.

CI

  • Added a PR/push CI workflow that runs clippy, a quick verify and cargo-deny. Actions are pinned to commit SHAs and run with least-privilege permissions (#13).
  • Hardened the release-binaries workflow (#14).

Bilterm v3.0.0 — Agent Messaging, Session & Window Management, Session Packing Viewer & Daemon Supervisor

Choose a tag to compare

@bsommers bsommers released this 07 Nov 00:51

Added

  • Agent-to-Agent Messaging & Coordination (Phase 52, AGT-01..03, UNI-R01):
    • Addressing & Bounded Mailboxes (AGT-01): Stable per-pane agent names (:agent name [id] <name>, agent.name, env BILTERM_AGENT) mapped in AgentMailRegistry with ordered per-recipient mailboxes (MAX_INBOX_DEPTH = 64, MAX_BODY_BYTES = 8192).
    • Three Delivery Modes (AGT-02): mailbox (default queued delivery), nudge (one-line notification injected into the target pane only when idle/waiting and automatically suppressed during !ECHO password lock or ALT_SCREEN), and file (0600 private payload file written via secure_fs under agent-mail/<to>/msg-<id>.txt with path attached), plus blocking/polled agent.wait with reply matching and timeout.
    • Coordination, Safety & Surfaces (AGT-03): :agent <name|send|broadcast|inbox|ack|list|enable>, JSON-RPC agent.{name,send,broadcast,inbox,ack,list,wait}, MCP tool bilterm_agent_mail, dynamic MCP resource bilterm://agent/<name>/inbox, /events AutomationEvent::AgentMessage, unread mail badges (✉N) in the AGENTS list window and Navigator drawer, opt-in [api] allow_agent_messaging gate, per-sender rate limit (32/min), and reply_to hop-count loop guard (MAX_HOPS = 8).
  • Session & Window Management (Phase 53, SES-01..05, UNI-R01):
    • Cross-Session Window Move (SES-01): Live window migration between sessions (:window move <session>, Navigator m key, and right-click context menu) preserving the live PTY process, scrollback buffer, running command, and z-order/focus invariants.
    • Window & Session Rename (SES-02): :window rename [id] <new> and :session rename <old> <new> with validate_safe_name/sanitize_display enforcement and deterministic duplicate disambiguation.
    • Multi-Select & Atomic Bulk Operations (SES-03): Multi-select windows in the Navigator (Space, Shift+Up/Down, Ctrl+A, Ctrl+Click, :window select <toggle|range|all|none|invert|id>) with visual [✓] badges and all-or-nothing bulk actions (:window bulk <move|close|force-close|rename-prefix|tile|pin>) honoring exit-guard protection.
    • Single-Step Topology Undo & Persistence (SES-04): TopologyUndoEntry undo stack (:window undo, Navigator u key) restoring placement, name, order, and selection across moves, renames, and bulk operations, persisted across TOML session save/load.
    • Automation API Parity (SES-05): JSON-RPC window.{move,rename,select,bulk,undo} and session.rename, plus MCP tool bilterm_window_manage.
  • Session Packing Viewer & Drag-and-Drop (Phase 54, VIEW-01..04, UNI-R01):
    • Deterministic 2D Squarified Treemap (VIEW-01): Pure layout engine (pack_sessions_treemap) packing sessions and nested sub-sessions into proportional 2D containers with character-cell aspect ratio compensation and zero-panic tiny-rect fallback.
    • Non-Modal SESSION MAP Window (VIEW-02): First-class floating, pinnable ([•]), and dockable ([□]) window (:sessions map, :packing) rendering packed session containers and window cards in both TUI (Borland box-drawing) and --gui vector mode.
    • Mouse Drag-and-Drop & Keyboard Equivalents (VIEW-03, VIEW-04): Drag window cards across session containers by mouse (highlighting valid drop targets, Esc to cancel) or via keyboard pickup/target/drop (Space/m pickup, Tab/arrows target session, Enter drop, Esc cancel), plus JSON-RPC session.map and MCP tool bilterm_session_map.
  • Daemon Supervisor & Multi-Daemon Awareness (Phase 55, DAEM-05..08, UNI-R01):
    • Singleton Lock & Auto-Dispatch (DAEM-05): Exclusive flock/PID DaemonLock (daemon-singleton.lock) under 0700 secure_fs runtime dir with stale-PID verification (kill(pid, 0)) and automatic stale socket recovery; bilterm ctl auto-spawns the singleton daemon on first need.
    • Opt-In Multi-Daemon Isolation (DAEM-06): --daemon --name <name> and [daemon] mode = "multi" isolate each named daemon with its own daemon-<name>.sock, daemon-<name>.lock, and metadata entry.
    • Live Peer Registry, Handshake Safety & Cross-Daemon Find (DAEM-07, DAEM-08): DaemonRegistry with atomic 0600 JSON metadata and dead-peer pruning, CARGO_PKG_VERSION wire handshake check, :daemon <list|status|start|stop|switch|prune>, leader chords Ctrl+X D <L|S|N|Q|W>, Tools > Daemons menubar dropdown, JSON-RPC daemon.*, MCP tool bilterm_daemon, and cross-daemon :find discovery (Origin::Daemon).

Bilterm v2.9.0 — Persistent SSH+tmux, First-Class Utility Windows, Script Studio & Retro/Google Font Engine

Choose a tag to compare

@bsommers bsommers released this 06 Nov 21:04

Added

  • First-Class Utility Windows & Script Studio (Phase 51.2, WIN-01..03, UNI-R01):
    • FONTS Utility Window (WIN-01, :fonts, :font list, :font presets, :font scan): First-class floating, pinnable, and dockable window for live typography configuration. Unpinned mode dismisses on Enter apply; pinned mode (* or [•]) stays open for instant real-time A/B visual comparison while cycling font presets and custom TTF files. Includes +/- point-size stepping, [/] scale percentage stepping, a apply-to-all toggle, s directory rescan, and menubar integration (View -> Fonts Window).
    • Pinnable COMMAND PALETTE Window (WIN-02, :commands, :palette): Searchable command window supporting one-shot execution and persistent workbench mode. Pressing Alt+P or * or clicking [•] inside Modal::Palette (Ctrl+P) promotes the search modal into CommandWindowState with query retained. Records command executions, timestamps, exit status, and return messages into a scrollable OUTPUT / HISTORY bottom pane.
    • SCRIPT STUDIO Window (WIN-03, :script, :studio): Multi-line :colon and shell script editor with live single-step debugging ([⏭ Step (F10)], program counter ▶), full script runner ([▶ Run (F5)]), debugger reset ([↺ Reset]), live action recorder ([● Rec (Ctrl+R)] capturing executed Bilterm commands into the buffer), and secure persistence ([💾 Save] / [📂 Load] under ~/.config/bilterm/scripts/*.bt via secure_fs 0600/0700).
    • Mutual Focus Exclusivity: Opening any utility window or focusing terminal panes automatically blurs other utility windows and releases keyboard ownership cleanly.
  • Bundled Retro Fonts & Online Font Installers:
    • Bundled retro fonts: Lazenby Computer (Smooth & Liquid variants) and Google Font VT323 classic DEC pixel terminal font.
    • On-demand Google Fonts installer: :font google <name-or-url> downloads and activates Google Fonts dynamically.
    • ZIP / URL font archive installer: :font add <path.zip|url> unpacks and loads custom font archives into ~/.config/bilterm/fonts/.
  • Persistent SSH + tmux -CC sessions (:ssh-tmux, Phase 51.1, PST-01..04, UNI-R01):
    • Real PTY transport & macOS PATH: :ssh-tmux <user@host> [session] spawns a dedicated PTY running ssh -tt into tmux -CC new-session -A -s <name> wrapped in a login shell (exec $SHELL -lc ...) that includes macOS Homebrew and MacPorts paths (/opt/homebrew/bin, /usr/local/bin, /opt/local/bin).
    • Honest status & password safety: Status honestly reports connecting until the ESC P 1000 p sentinel arrives. Host-key questions and password prompts render interactively in the primary pane with raw keystroke pass-through, bypassing command prompt history, undo/redo buffers, history.log, and Find search indexing.
    • Supervisor & auto-reconnect with exponential backoff: Deterministic, capped exponential backoff (1s, 2s, 4s, 8s, 16s, 30s; max 20 attempts) automatically reconnects after network drops or transient %exit reasons (server exited unexpectedly, lost tty, too far behind, connection). Never retries fatal auth errors, missing tmux, user disconnects, or cleanly ended sessions.
    • Topology hydration: Reconnecting panes settle 300 ms, run refresh-client -C, and hydrate screen buffers with capture-pane -p -e -J -S -2000 -t %N, holding live output during hydration to prevent interleaved text corruption. Stale unmapped panes are tagged with orphan banners.
    • Held exit banners: Exited remote SSH and tmux panes persist with an interactive status banner displaying return code, exit cause, and last diagnostic output lines rather than closing abruptly; click or r respawns in-place.
    • Honest restore labels: Restoring a saved workspace session no longer marks local shells with remote badges; displays (not connected) until reconnected.
    • SSH keepalive & fresh TCP policy: Passes ServerAliveInterval=15, ServerAliveCountMax=3, TCPKeepAlive=yes, and ConnectTimeout=15. Sets ControlMaster=no and ControlPath=none for persistent links so every reconnect establishes a fresh TCP connection.
    • Structured tracing: Structured bilterm::link tracing events (link.connect, link.up, link.down, link.retry, link.give_up, link.control_exit, link.spawn_failed, link.hydrate, pane.exit) with redacted argv (redact_ssh_argv) and zero secret leakage in bilterm.log.
    • Unified verbs, chords, menu items & API:
      • Verbs: :ssh-tmux reconnect, :ssh-tmux disconnect, :ssh-tmux info, :ssh-tmux prefill.
      • Keybindings: Ctrl+Alt+R (reconnect, reserved in raw passthrough), leader Ctrl+X U (reconnect), Ctrl+X Q (disconnect), Ctrl+X u (prefill).
      • Banner keys: Enter / r (reconnect), x (disconnect), d (detach), left-click on banner row (reconnect).
      • Menu bar: Top menu Tmux dropdown items for all four verbs.
      • Automation: JSON-RPC method remote.link (op: "status" | "reconnect" | "disconnect"), and MCP tool bilterm_remote_link (14th tool).
    • Behaviour changes to note:
      • remote.connect_tmux / remote.connect_ssh{tmux_session} returns status: "connecting" rather than connected_ssh_tmux.
      • TmuxControlBridge::new() starts empty (no longer pre-seeded with %0 -> pane 1).
      • One persistent remote tmux link can be active at a time; starting a second returns an error instructing to disconnect first.
      • :ssh pane OpenSSH connection multiplexing uses ControlPersist=10s (shortened from 60s).
  • Graph edges trace real communication. Edge brightness is a pure function of how often and how recently a pair talked (terminal braille and GUI vector alike). After agents_window.edge_fade_secs (default 60, also :agents fade [secs]) it decays to a floor and never disappears once the pair has spoken.
  • Communication topology. A bounded, session-long record of which pairs communicated (count, first/last event) that survives the 512-event ring: :agents topology (data over RPC/MCP) and :agents topology export <name> (private 0600 file).
  • Find window: :find agent|session|history and Ctrl+Alt+F (Phase 50.1). One fuzzy, ranked search over open agents and panes, live and saved sessions, and command history (View > Find Agents / Find Sessions / Find Command History). Every row shows its source ([live], [saved:<name>], [log:<name>]). Secret-looking commands are never stored or indexed; secret-looking history.log lines are masked on read and only counted (n masked). :finder drives the open window. Read-only automation: RPC find.agents, find.sessions, find.history, and MCP bilterm_find (MCP now has 11 tools). Coverage limits (SSH and tmux, raw-mode input, the tmux -CC bridge not reachable from any command) are documented in user guide chapter 12. Bare :find <text> and :search are unchanged except for the three reserved first words.

v2.8.0

Choose a tag to compare

@bsommers bsommers released this 03 Nov 04:33

Added

  • Pin the MCP window: :mcp pin|unpin or * in the console. A pinned window stays open and stops grabbing the keyboard: Esc (or a click elsewhere) returns focus to the panes, a click inside takes it back, :mcp close unpins and closes. The title shows [PIN].
  • Pin the drawer from the keyboard/commands: * in the focused drawer toggles Fixed/OnDemand; :drawer unpin added (:drawer pin already existed).
  • Interactive panel scale (GUI): Ctrl+wheel over the drawer or MCP window, [ / ] in either, :drawer scale N, :mcp scale N (each panel scales independently; :panel scale 75..200 still sets both).