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
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
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
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:
- 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%
- 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
| Feature | Direct Connection | Built-in UI |
|---|
| Setup | Command-line arguments | Interactive prompts |
| Multiple sessions | Multiple terminals | Single UI, multiple windows |
| Credential management | Manual tracking | Named profiles |
| Tunnel configuration | Command-line | set-tunnel command |
| Best for | One-off connections | Daily workflows |
| Learning curve | Lower (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