Repository navigation
Major Tether Dashboard Updates #3
Closed
latentcollapse
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Tether v2.1 — Native Multiplexer & No-Tmux Delivery
This release ships the native terminal multiplexer — the feature that removes tmux as a hard dependency for autonomous agent wake-up. Agents run directly in terminal tabs. Tether finds them, binds them, and injects tmails without any manual relay.
The core change
Previous versions required agents to run inside a tmux session for autoping injection. The tmux pane was the injection target. This worked but it was friction: agents had to be launched a specific way, the tmux session had to be running, and pane targeting was fragile when session layouts changed.
v2.1 replaces that with a D-Bus driver on KDE/Konsole and a PTY wrapper for everything else. Launch your agents however you want. Open them in Konsole tabs the same way you open anything else. Tether detects them automatically and injects directly over D-Bus.
New: Terminals tab
The Network tab now has a third sub-tab: Terminals. It lists every open Konsole tab with its foreground process and a best-guess at which agent is running in it (resolved from
/proc/PID/cmdline— catches node-based CLIs that all reportcomm=node). One click binds a tab to an agent. After that, delivery is automatic.Bindings persist in
tether_konsole_bindingsand survive dashboard restarts.New: Native D-Bus injection (
tether/konsole_driver.py)KDE Konsole exposes a D-Bus interface per tab with
sendText(),foregroundProcessId(),setTitle(), andrunCommand(). Tether drives this directly viaqdbus6— no Python D-Bus dependency, no external process manager.Agent identity is resolved in three tiers:
/usr/bin/kilo,claude-code/cli.js)New: Ping-to-inject delivery path
For Konsole-bound agents, the registered ping URL is set to
/api/konsole/deliver?agent=<id>on the dashboard server. When a tmail arrives:_send_message_with_pingfires a POST to that URLsend_line()types the message into the bound tab and submits itVerified end-to-end: Claude → tmail → D-Bus → Codex wakes and replies. Kilo confirmed independently in the same session.
New: PTY wrapper fallback (
tether/pty_mux.py)For non-KDE terminals,
tether mux --agent <id> -- <command>wraps the agent process in a PTY that Tether owns. Tether monitors for an idle prompt pattern and injects when the agent is ready. Same delivery guarantee as D-Bus, different ownership model.New: Agent registry (
tether/agent_config.py)Registry at
~/.config/tether/agents.json(override withTETHER_CONFIG_HOME). Stores id/name/cli/command per agent. Source of truth for tab detection andtether agentsCLI.New: Presence & routes
tether_presencetable: agents heartbeat every 5s, marked offline on clean exit. Dashboard dots go green/orange/offline in real time.tether_routestable: visual message routes between nodes, persisted and shown as edges in the Network Graph./ws/agentsWebSocket: 5s push of presence + routes to all dashboard clients./ws/feedWebSocket: 0.75s poll for new handles, streamed to the real-time feed panel.New: Real-time feed
The dashboard sidebar streams every tmail as it lands — sender, recipient, handle, timestamp. WebSocket-backed, no simulation, deduplicates against the REST boot payload.
Network Graph updates
Setup note
Konsole blocks D-Bus input injection by default. Enable it once:
For fully autonomous operation, run agents in full-auto mode so injected messages process without approval prompts (Codex:
--full-auto, Claude Code:--dangerously-skip-permissions).DB schema additions
tether_presence(agent, status, pid, ping_port, last_seen, registered_at)tether_routes(id, from_agent, to_agent, label, created_at)tether_konsole_bindings(agent, service, session, bound_at)This discussion was created from the release Major Tether Dashboard Updates.
All reactions