TUI Dashboard

goshs ships with an optional interactive terminal dashboard built on Bubble Tea. Enable it with --tui and you get a live full-screen view of all server activity — no browser, no port-forwarding required. This is especially useful when running goshs headless over SSH.

goshs --tui
goshs --tui -s -ss -b admin:secret --catcher -dns -dns-ip 10.10.14.5

Overview

The TUI subscribes to the same WebSocket broadcast stream as the browser Collaboration tab, so every event that would appear in the web UI also appears in the terminal in real time. All 8 panes are available:

Pane What it shows
HTTP Incoming HTTP requests — method, status, source IP, URL, headers, body
DNS DNS queries received by the built-in DNS server
SMB NTLM hashes captured by the SMB server (including cracked passwords)
LDAP LDAP bind credentials and NTLM hashes (including cracked passwords)
SMTP Emails received by the SMTP server — with attachment metadata
SHELLS Reverse shell listeners and connected sessions
GENERATOR Reverse shell payload generator — same payloads as the browser Catcher tab
CLIPBOARD Shared clipboard entries

The banner at the top shows the active server addresses. If --ttl is set, a countdown timer is displayed in the status bar.

Key Action
Tab / / l Switch to the next pane
Shift+Tab / / h Switch to the previous pane
/ k Move selection up
/ j Move selection down
g / Home Jump to the newest event
G / End Jump to the oldest event
Enter Open / close the detail view for the selected row
Esc Close the detail view
PgUp / Ctrl+U Scroll detail view up
PgDn / Ctrl+D / Space Scroll detail view down
e Export active pane to goshs-<proto>-log.json
E Export all panes to goshs-all-logs.json
q / Ctrl+C Quit the dashboard (triggers a graceful shutdown)

SHELLS pane

The SHELLS pane gives you full control over reverse shell listeners and connected sessions without leaving the terminal.

Key Action
a Start a new listener — prompts for ip:port or a bare port
d Stop the selected listener
r Restart the selected listener on the same address
Enter / i Attach to the selected session (interactive terminal)
u Upgrade the selected session to a Unix PTY
U Upgrade the selected session via Windows ConPtyShell

When attached to a session, Ctrl+] detaches and returns you to the dashboard.

Info

Shell upgrade (u / U) and the interactive attach (i) work the same way as the browser Catcher tab. For the Windows upgrade (U), goshs serves ConPtyShell.ps1 from the webroot if present, otherwise downloads it from GitHub on first use — see the Reverse Shell Catcher page for details.

GENERATOR pane

The GENERATOR pane builds reverse shell commands from the same payload database as the browser Catcher tab — pick a payload, set LHOST/LPORT and an encoding, and copy the finished one-liner straight to your clipboard.

Key Action
/ k, / j Select a payload
g / G Jump to the first / last payload
i Set LHOST
p Set LPORT
n Cycle the output encoding (noneurlbase64)
y / c Copy the generated command to your clipboard

Copying to your clipboard

Because the TUI is usually driven headless over SSH, “your clipboard” means the clipboard on the machine where your terminal runs, not the box goshs runs on. goshs writes the command through two complementary paths, and which one applies depends on where goshs is running:

  • goshs running locally — goshs shells out to a native clipboard tool and fills both the CLIPBOARD selection (Ctrl+V / Ctrl+Shift+V) and the X11 PRIMARY selection (middle-click / Shift+Insert).
  • goshs running remotely (over SSH) — goshs emits an OSC 52 escape sequence that your terminal emulator turns into a clipboard write. Both the system clipboard and the primary selection are targeted.
Warning

Clipboard copy is best-effort and depends on your environment:

  • Native (local) path needs a clipboard helper installed: xclip or xsel on X11, wl-copy on Wayland, pbcopy on macOS, clip on Windows. It only runs when a local display ($DISPLAY / $WAYLAND_DISPLAY) is present.
  • OSC 52 (remote) path needs a terminal emulator that honours OSC 52 — e.g. kitty, iTerm2, WezTerm, foot, or recent xterm (with allowWindowOps). Terminals that ignore it — notably default GNOME Terminal and Konsole — will silently copy nothing.
  • Inside tmux: set set -g set-clipboard on in your ~/.tmux.conf. tmux’s default (external) blocks applications inside a pane from setting the clipboard, so without this the copy is dropped.
  • Inside GNU screen: works out of the box (goshs wraps the sequence in screen’s passthrough).
  • kitty → SSH → tmux: connect with kitten ssh <host> so the xterm-kitty terminfo entry exists on the remote; otherwise tmux refuses to start with “missing or unsuitable terminal: xterm-kitty”.

CLIPBOARD pane

Key Action
a Add a new clipboard entry
d Delete the selected entry
C Clear all clipboard entries

SMTP pane

Key Action
s Save the selected mail’s attachments to goshs-attachments/ in the working directory

CLI flag

--tui    Run the interactive terminal dashboard  (default: false)

Config file

{
  "tui": true
}

Example

# TUI with catcher and DNS
goshs --tui -s -ss -b admin:secret --catcher -dns -dns-ip 10.10.14.5

# Combined with a self-destruct timer
goshs --tui -s -ss -b admin:secret --catcher --ttl 4h