Skip to main content

What is the Built-in UI?

The built-in UI provides an interactive text-based interface for managing multiple Undying Terminal sessions from a single client instance. Before v1.1.0: Each session required a separate terminal window and manual credential tracking. With v1.1.0+: Launch the UI and manage all your sessions from one place.

Launching the UI

./undying-terminal.exe --ui
You’ll see the UI prompt:
Undying Terminal built-in UI
Built-in UI commands:
  help
  add <name> <host> <port> <client_id> <passkey>
  set-tunnel <name> <spec>
  set-flag <name> <noexit|tunnel-only|predictive-echo> <on|off>
  start <name>
  stop <name>
  remove <name>
  list
  quit
ut-ui>

UI Commands

add - Create a Session Profile

Create a named profile with connection details:
ut-ui> add dev localhost 2022 abc123 mysecretkey
Profile 'dev' added

ut-ui> add prod prod-server.com 2022 xyz789 productionkey
Profile 'prod' added
Parameters:
  • name - Unique profile name
  • host - Server hostname or IP address
  • port - Server port (usually 2022)
  • client_id - Client ID from terminal
  • passkey - Passkey from terminal

set-tunnel - Configure Port Forwarding

Add tunnel specifications to a profile:
ut-ui> set-tunnel dev 5432:db-server:5432
Tunnel '5432:db-server:5432' added to profile 'dev'

ut-ui> set-tunnel prod 8080:internal-api:80
Tunnel '8080:internal-api:80' added to profile 'prod'
Tunnel Format: local_port:remote_host:remote_port

set-flag - Configure Options

Enable/disable session options:
ut-ui> set-flag dev noexit on
Flag 'noexit' set to 'on' for profile 'dev'

ut-ui> set-flag prod predictive-echo on
Flag 'predictive-echo' set to 'on' for profile 'prod'

ut-ui> set-flag prod tunnel-only on
Flag 'tunnel-only' set to 'on' for profile 'prod'
Available Flags:
  • noexit - Keep session alive after command execution
  • predictive-echo - Enable local echo for high-latency connections
  • tunnel-only - Port forwarding without terminal (v1.1.0+)

start - Launch a Session

Start a session in a new console window:
ut-ui> start dev
started 'dev' (pid=12345)

ut-ui> start prod
started 'prod' (pid=12346)
Each session runs in its own console window. Switch between sessions via your taskbar or Alt+Tab.

stop - Stop a Running Session

Gracefully terminate a session:
ut-ui> stop dev
stopped 'dev'
This terminates the process. Any running commands in that session will be interrupted.

remove - Delete a Profile

Remove a profile from the UI:
ut-ui> remove dev
removed profile 'dev'
You must stop a session before removing its profile.

list - Show All Profiles

View all profiles and their status:
ut-ui> list
- dev host=localhost port=2022 running=yes tunnel-only=off predictive-echo=off
- prod host=prod-server.com port=2022 running=no tunnel-only=off predictive-echo=on

help - Show Available Commands

ut-ui> help
Built-in UI commands:
  help
  add <name> <host> <port> <client_id> <passkey>
  set-tunnel <name> <spec>
  set-flag <name> <noexit|tunnel-only|predictive-echo> <on|off>
  start <name>
  stop <name>
  remove <name>
  list
  quit

quit - Exit the UI

ut-ui> quit
Quitting the UI does not stop running sessions. They continue in their own windows.

Complete Workflow Example

Scenario: Managing dev, staging, and production environments.
# Launch UI
./undying-terminal.exe --ui

# Create profiles
ut-ui> add dev localhost 2022 dev-client-id dev-passkey
ut-ui> add staging staging.example.com 2022 staging-id staging-key
ut-ui> add prod prod.example.com 2022 prod-id prod-key

# Configure tunnels for database access
ut-ui> set-tunnel dev 5432:localhost:5432
ut-ui> set-tunnel staging 5433:staging-db:5432
ut-ui> set-tunnel prod 5434:prod-db:5432

# Enable predictive echo for remote connections
ut-ui> set-flag staging predictive-echo on
ut-ui> set-flag prod predictive-echo on

# Start development session
ut-ui> start dev
started 'dev' (pid=12345)

# Work in dev, then switch to staging
ut-ui> stop dev
stopped 'dev'
ut-ui> start staging
started 'staging' (pid=12346)

# View all profiles
ut-ui> list
- dev host=localhost port=2022 running=no tunnel-only=off predictive-echo=off
- staging host=staging.example.com port=2022 running=yes tunnel-only=off predictive-echo=on
- prod host=prod.example.com port=2022 running=no tunnel-only=off predictive-echo=on

# Exit UI (sessions continue running)
ut-ui> quit

Tips and Best Practices

Profile Naming

Use clear, consistent naming:
# Good
ut-ui> add web-prod web-server.com 2022 ...
ut-ui> add api-prod api-server.com 2022 ...
ut-ui> add db-prod db-server.com 2022 ...

# Avoid
ut-ui> add server1 ...  # Unclear which server
ut-ui> add test ...     # Which environment?

Secure Credential Storage

The UI stores credentials in memory only (not on disk). For security:
  1. Use environment variables for sensitive data:
# Set credentials in environment
$env:DEV_CLIENT_ID = "abc123"
$env:DEV_PASSKEY = "secretkey"

# Then reference them when adding profiles
ut-ui> add dev localhost 2022 %DEV_CLIENT_ID% %DEV_PASSKEY%
  1. Consider a password manager integration:
# Use 1Password CLI
$Cred = op item get "Undying Terminal Dev" --fields username,password
$ClientID = $Cred[0]
$Passkey = $Cred[1]

./undying-terminal.exe --ui
# Then paste values

Session Persistence

Running sessions survive UI restart:
# Start sessions
ut-ui> start dev
ut-ui> start prod
ut-ui> quit

# Later - sessions still running
./undying-terminal.exe --ui
ut-ui> list
- dev host=localhost port=2022 running=yes ...
- prod host=prod.example.com port=2022 running=yes ...
Profiles are stored in memory and lost when the UI exits. For persistent profiles, consider creating a startup script.

Automation with Scripts

Create a PowerShell script to pre-populate profiles:
# setup-ui.ps1
$Profiles = @(
    @{ Name = "dev"; Host = "localhost"; Port = 2022; ID = "dev123"; Key = "devkey" },
    @{ Name = "staging"; Host = "staging.example.com"; Port = 2022; ID = "staging456"; Key = "stagingkey" }
)

# Start UI with commands
$Commands = $Profiles | ForEach-Object {
    "add $($_.Name) $($_.Host) $($_.Port) $($_.ID) $($_.Key)"
}

# Save to file for manual input or use Expect-like automation
$Commands | Out-File setup-commands.txt

Write-Host "Run: ./undying-terminal.exe --ui"
Write-Host "Then paste commands from setup-commands.txt"

Comparison: UI vs Direct Connection

FeatureDirect ConnectionBuilt-in UI
SetupCommand-line argumentsInteractive prompts
Multiple sessionsMultiple terminalsSingle UI, multiple windows
Credential managementManual trackingNamed profiles
Tunnel configurationCommand-lineset-tunnel command
Best forOne-off connectionsDaily workflows
Learning curveLower (familiar CLI)Higher (new commands)

Troubleshooting

”profile is not running”

ut-ui> stop dev
profile is not running
Cause: Trying to stop a session that isn’t active. Solution: Check list to see which profiles are running.

”stop failed: TerminateProcess error 5”

ut-ui> stop dev
stop failed: TerminateProcess error 5
Cause: Access denied (session may have already exited or requires elevated permissions). Solution:
  • Check if the session window closed manually
  • Run the UI as Administrator if needed

”stop session before removing”

ut-ui> remove dev
stop session before removing
Cause: Attempting to remove a profile with a running session. Solution:
ut-ui> stop dev
ut-ui> remove dev

Next Steps

Basic Usage

Learn more about session management

SSH Bootstrap

Connect to remote servers

Port Forwarding

Configure tunnels for your profiles

Tmux Integration

Combine with tmux for maximum persistence