Home / Docs / Features

Features

A tour of everything Servonaut can do. Each feature is available three ways: interactively in the terminal UI (the recommended way to work day-to-day), as scriptable CLI commands for automation, and as MCP tools your AI agent can call.

Interactive TUI

Launch servonaut with no arguments to open the TUI — a rich terminal application (built on Textual) with full mouse and keyboard support, searchable lists, and modal overlays.

The app opens to a unified instance list: AWS EC2 instances from every region, OVHcloud and Hetzner Cloud servers, and your custom servers, merged into one searchable table with a provider column. A collapsible left sidebar groups everything else — Core (Instances, Custom Servers, SSH Keys), Logs & Security (CloudWatch, IP Ban Manager, CloudTrail), Tools (Fleet Memory, Memory Sync, Sync Config, Settings), per-provider OVH and Hetzner sections (shown only when those providers are configured), and Account (Login, Teams, Bug Reports).

The instance list is cached so startup is instant: cached results show immediately and refresh in the background (default cache lifetime is one hour; press R to force-refresh). Selecting any row with text — or dragging with the mouse — copies it, and the first time you connect to a server a banner offers to build its Server Memory snapshot.

Server Actions dashboard

Click any instance (or press Enter on it) to open a per-server dashboard. The detail pane shows the server's identity, an at-a-glance memory snapshot (OS, disk, web stack, databases, runtimes, containers), and an opt-in live resource monitor — press L to poll CPU, RAM, load, disk, and uptime over SSH. Polling runs only while the pane is open, never in the background.

A sectioned action rail puts every per-server operation one keypress away: Browse Files (inline), Run Command, SSH Connect, SCP Transfer, View Scan Results, View Logs, AI Analysis, Ban IP, and SSH-key reference management. Press 18 to run the numbered action, Esc to close an inline view or go back.

Run Command overlay

Press C on an instance to run a remote command over SSH with real-time streaming output. Command history persists across sessions, and you can save favorites: Ctrl+R opens a picker of saved and recent commands, Ctrl+S saves the current one, Up/Down walk the history, and Ctrl+C stops a running command.

Commands run in an interactive login shell, so version managers like nvm, rbenv, and pyenv work as they do in a normal session. Fully interactive programs (vim, htop, tmux) are detected and blocked with a hint to use SSH Connect instead.

Demo mode

Launch with servonaut --demo (or toggle with Ctrl+Shift+D at any time) to make every screen safe to record or screenshot. IPs, ARNs, AWS account IDs, secrets, tokens, home paths, URLs, emails, log-group and bucket names, hostnames, and instance names are replaced with deterministic fake equivalents that stay consistent within a session, and a [DEMO] badge appears in the status bar so you always know it's on.

Keyboard shortcuts

Shortcuts are screen-specific. The footer always shows the keys available in the current context; the tables below cover the screens you'll spend the most time on. Press ? from any screen for the in-app reference.

Instance list (the main screen)

KeyAction
Enter / OOpen the Server Actions dashboard for the selected instance
SSSH into the selected instance
TSCP file transfer overlay
BBrowse remote files
CRun a remote command
LOpen the log viewer
AAI analysis of the selected instance
MOpen Server Memory for the row
KManage the SSH key reference
VVerify SSH connectivity
YCopy the selected row
RRefresh the instance list
/Focus the search / filter input

Log viewer

KeyAction
AAnalyze the current log with AI
/Search within the log
PPause / resume live streaming
CClear the output
LSwitch to another configured log file
EscClose the viewer

Global

KeyAction
TabCycle between panels
F2Toggle the AI chat panel
?Show the shortcut help overlay
UUpdate Servonaut (main menu, when an update is available)
Ctrl+Shift+DToggle demo mode
QQuit Servonaut
EscClose the current overlay / cancel

SSH & SCP

SSH sessions

Select any server from the list and press S to open an SSH session. Servonaut spawns your configured terminal emulator with the correct SSH command, including your key file and any ProxyJump settings.

Terminal emulator

Set ssh.terminal in your config to specify your preferred terminal. Use "auto" to let Servonaut detect it.

The SSH Keys screen in the sidebar manages your default key and per-instance key mappings, shows SSH agent status, and auto-discovers keys from ~/.ssh.

SCP file transfer

Press T to open the SCP overlay. Pick a direction, then upload files to the remote server or download files from it — single files, directories, or glob patterns for batch transfers.

Bastion / jump host support

Set ssh.proxy_jump in your config to route all SSH connections through a bastion host. Servonaut generates the correct -J user@bastion argument automatically.

AWS integration

EC2 instance management

If AWS CLI credentials are configured, Servonaut auto-discovers all running EC2 instances across your configured regions on startup. Instances appear alongside custom servers in the same TUI list, tagged with their region, instance type, and AWS tags.

Required IAM permissions

Your AWS credentials need at minimum: ec2:DescribeInstances for EC2 discovery.

CloudTrail event explorer

Open the CloudTrail browser from the sidebar (Logs & Security) to browse, filter, and inspect API call events for your AWS account — filter by region, time range, event name, and user, then drill into the full JSON of any event. Useful for auditing, incident investigation, and spotting unusual activity.

Required IAM permission: cloudtrail:LookupEvents

CloudWatch log analysis

The CloudWatch screen browses your log groups and streams and displays them in the built-in log viewer. AI analysis works on CloudWatch logs the same way as SSH-fetched logs.

For WAF and ALB structured logs there's a Top IPs view: it ranks the busiest source IPs, lets you filter by action (All / Allowed / Blocked), and — when you select a row — shows that IP's geolocation and AbuseIPDB abuse score inline, so you can decide whether to ban it without leaving the screen.

Required IAM permissions: logs:DescribeLogGroups, logs:DescribeLogStreams, logs:GetLogEvents

WAF / IP-ban management

Open the IP Ban Manager from the sidebar, or choose Ban IP from a server's action rail. When a log analysis (or manual review) identifies a malicious IP, you can block it through one of three backends — pick whichever your environment already uses:

  • AWS WAF — adds the IP to an existing WAF IP set referenced by your web ACL (fastest, no EC2 round-trip required).
  • Security Groups — tracks the banned IP via a tagged ingress entry on the instance's security group; unban removes it again.
  • Network ACLs (NACLs) — adds an explicit DENY rule to the subnet NACL, blocking the IP at the VPC level.

Every ban and unban is recorded in a persistent local audit trail at ~/.servonaut/ip_ban_audit.json, so you can always reconstruct who blocked what and when.

Required IAM permissions vary by backend — at a minimum your credentials need the matching wafv2:*, ec2:*SecurityGroup*, or ec2:*NetworkAcl* actions for the strategy you enable.

For AI agents

The whole AWS surface is also exposed as MCP tools, so an agent can run the same investigation loop you would: rank abusive IPs from WAF/ALB logs (cloudwatch_top_ips), run CloudWatch Logs Insights queries (cloudwatch_insights), audit API activity (cloudtrail_lookup_events), and ban an IP (ip_ban_set) through the same typed, audited tool surface. EC2 lifecycle (start / stop / reboot / terminate / launch), S3 object storage, and a generic aws_call passthrough are available too — destructive calls sit behind the dangerous guard tier, and destructive aws_call use additionally requires a mandatory two-phase confirmation. See the MCP Server docs for guard levels and the full tool list.

OVH Cloud

OVH Cloud is a first-class provider — Public Cloud, VPS, and dedicated servers all merge into the unified instance list with a provider: ovh tag. The dedicated OVH → ⚙ Manage sidebar entry opens a per-provider screen with a state-aware lifecycle toolbar (Create / Start / Stop / Reboot / Delete) that routes to the right API based on whether the row is Cloud, VPS, or dedicated.

The redesigned create wizard is region-first: pick a region, and the flavor and image pickers refilter to only what's actually deployable there. Flavor pricing is fetched live from the OVH catalog API, and regions / flavors with no deployable offers are hidden from the picker so you can't pick a dead combination.

In the TUI

  • OVH Manager screen — table of all OVH instances with bulk lifecycle actions and a state-aware toolbar.
  • SSH Keys — project-level SSH key registry (the wizard injects from this set on create).
  • DNS zones, IP management, block storage, snapshots, billing & invoices — browse from the OVH sidebar.

Via MCP

The MCP surface exposes lifecycle (create, start, stop, reboot, delete) plus read access to monitoring, IPs, firewall rules, SSH keys, snapshots, DNS records, billing summary, and invoices. ovh_monitoring returns CPU, RAM, and network metrics for Public Cloud instances, VPS, and even OVH servers you registered manually as custom servers. Mutations beyond instance lifecycle (editing DNS records, swapping a failover IP, attaching block storage, downloading invoice PDFs) currently live in the TUI only.

Setup, full CLI reference, and MCP tool list: OVH Cloud docs.

Hetzner Cloud

Hetzner Cloud is supported end-to-end. Freshly created servers auto-register into the fleet, so log viewing, remote commands, and the rest of the per-server toolset work seconds after spin-up — no manual "add server" step.

In the TUI

  • Hetzner Manager screen — full lifecycle toolbar (Create / Power on / Shutdown / Reboot / Delete) with state-aware enable/disable.
  • Project SSH key registry — register, list, and delete Hetzner Cloud SSH keys without leaving the TUI.
  • Setup wizard — Settings → Hetzner Setup walks you through token + defaults; subsequent edits are API-backed dropdowns (locations, server types, images).
  • Disposable-fleet workflow — by default the create flow refuses to spin up a server with no SSH keys, preventing billed unreachable boxes.

Automating with the CLI

The servonaut hetzner command group covers the same lifecycle for scripts and CI: list, create (refuses keyless creation by default), destroy (typed confirmation, or --yes for scripts), ssh-keys list / add, server-types (with EUR prices), and test-connection. Every subcommand takes --json for machine-readable output.

Via MCP

Agents get the full surface too: listing servers, server types, and SSH keys is read-only; registering an SSH key and power actions (on / off / shutdown / reboot) sit at the standard guard tier; creating and deleting servers require the dangerous tier.

Setup, full CLI reference, and MCP tool list: Hetzner Cloud docs.

AI log analysis

With an AI provider configured, press A in the log viewer to send the current log content to your chosen AI model. AI Analysis is also on every server's action rail, with a cost estimate shown before anything is sent. Servonaut prompts the model to identify:

  • Error patterns and root causes
  • Security threats (brute force attempts, suspicious IPs, injection attacks)
  • Performance bottlenecks
  • Actionable remediation steps

Supports four providers: Anthropic (Claude), OpenAI (GPT-4o and others), Google Gemini, and Ollama — local install or Ollama Cloud. Each provider has its own API-key slot in config.json, so they coexist; switch from the chat-panel header without editing config. See AI configuration for setup.

Servonaut AI — hosted gateway

On Solo and Teams plans, the chat panel can route through the hosted Servonaut AI gateway — no personal API key needed. Each plan comes with a usage allowance; current limits are listed on the pricing page, and you can top up from the TUI or with servonaut ai topup. Free-tier users can still wire up any supported provider with their own key.

AI chat panel

Press F2 on any screen to open the built-in AI chat panel. It's not just chat: the assistant can call Servonaut's own tools against your instances — checking status, reading logs, querying server memory, and more — using the same guarded tool surface as the MCP server. The active server's memory snapshot is injected into the conversation automatically (with a staleness banner if it's old), your quota and top-up balance show inline, and you can switch provider per-session from the panel header.

Tools are filtered by guard level and by your plan: tools at the dangerous tier (for example deleting a server) never appear in chat unless your account has explicitly opted in to dangerous AI tools on the website. See the MCP Server docs for the guard-level model.

Automating with the CLI

The servonaut ai command group makes the hosted gateway scriptable:

  • servonaut ai chat "<prompt>" — one-shot headless prompt. Buffered by default with tool execution off (safe for cron and CI); add --stream for live token streaming or --tools to re-enable tool execution in buffered mode.
  • servonaut ai quota [--json] — remaining dollar budget, top-up balance, and reset date.
  • servonaut ai conversations list / show / export / archive / delete — manage conversation history from the shell; export to Markdown or JSON.
  • servonaut ai topup [small|medium|large] — purchase a one-time budget top-up via a browser checkout.

Exit codes are documented and stable — 0 success, 1 error, 2 unauthenticated, 3 entitlement, 4 quota, 5 budget — so scripts can branch on exactly why a request was refused. Ctrl+C cancels any running command cleanly with exit code 130, never a traceback.

Remote relay — servonaut connect

Sign in once per machine with servonaut login — a fully headless device flow that prints a URL and short code you can approve from a browser on any device. The session is shared by the TUI, every CLI subcommand, and the MCP server; servonaut logout revokes it and removes local tokens.

Once signed in, the relay keeps a secure outbound connection open from your machine to servonaut.dev, so hosted AI conversations (web chat, headless servonaut ai chat --tools) and team-mates can dispatch tool calls to it over the internet. Your credentials and SSH keys never leave the machine — only tool calls and results travel over the relay.

  • In the TUI — the listener auto-starts after login; the sidebar shows connected (or that an external listener is running).
  • servonaut connect — run the listener in the foreground on a headless box (Ctrl+C to stop).
  • servonaut connect --bg / --stop / --reconnect — detach it into the background, stop it, or heal a stale connection.
  • servonaut connect --status — local and backend connection status, with a warning if they diverge. Your account dashboard shows the same health.

When no human is present to confirm a tool call, approval is policy-driven: the relay.ai_tool_auto_approve key in config.json sets the highest guard tier the listener will auto-approve — readonly, standard (the default), or dangerous (which additionally requires the dangerous-AI-tools opt-in on your account). Calls above the tier are denied with a reason the model can relay back to you, and every execution is recorded in the local audit log at ~/.servonaut/mcp_audit.jsonl.

In-TUI bug reports

Open Bug Reports from the Account section of the sidebar to file a report without leaving the TUI. It captures the current screen, optionally records the last few interactions, and uploads securely to servonaut.dev — with explicit consent before any screenshot or session recording is sent. Duplicate reports are merged automatically, and the Servonaut team reviews every submission.

Server Memory Solo & Teams

Server Memory is a privacy-first inventory of every server you manage. Each time the CLI probes a box it builds a small structured snapshot — installed runtimes, listening ports, running services, disk usage, container counts, recent log paths — and uploads it as end-to-end encrypted envelopes. Your account dashboard shows what changed since last week, surfaces anomalies, and (only when you ask) lets a model summarise findings on your behalf. Available on Solo and Teams plans.

In the TUI, press M on an instance to open its memory screen: refresh all modules or a single one, pin operator-declared values (summaries show observed vs declared when they differ), open free-form annotations in your editor, and export the summary to Markdown. The Memory Sync sidebar screen handles enrolment, post-restart unlock, and "Sync now" pushes; Sync Config does the same for your encrypted config.json snapshots across machines.

Zero-knowledge by default

Snapshots are encrypted in your browser using a passphrase only you know. The browser derives a key from that passphrase with Argon2id and encrypts the envelope with libsodium's crypto_secretbox before anything leaves the page. The backend then double-wraps the ciphertext under a separate server-held AES-256-GCM key, so a stolen database dump alone isn't enough to attack the outer layer.

The server never decrypts. It identifies snapshots by a SHA-256 hash of the ciphertext, so duplicate submissions are detected without the server ever needing to see plaintext.

Full breakdown of what we can and cannot read is on the Server Memory docs page.

Drift & anomaly detection

A timeline on the dashboard shows every probe and the deltas between them — a new listening port, an upgraded runtime, a service that stopped, a container churn spike, a sudden disk-usage jump. Detection rules operate purely on the safe metadata block, so they run without plaintext exposure. Severity (info / low / medium / high) drives how prominent each event is.

Team sharing

On the Teams plan you can share a server's memory with specific teammates by re-wrapping the decryption key on their device — Servonaut never holds the user passphrase. Grants are revocable and audited. Memory annotations also sync across your own machines and within your team, so notes written on one device are available everywhere annotations appear.

Agent findings

AI agents can persist what they learn about your servers: the remember_server_finding and recall_server_findings MCP tools store and retrieve agent-discovered facts alongside server memory, synced across your machines by default. Recalled findings are framed with a provenance notice so models treat them as reference data — never as instructions — and injected server memory carries the same untrusted-data framing in agent prompts.

AI summaries — opt-in, redacted before send

"Summarise this server" is the one place plaintext crosses the server-to-provider boundary. Before the prompt is sent to the model, a redaction pass replaces IPv4, IPv6, email addresses, URL hosts, *.local names, and AWS-style ip-*-*-*-*.compute.internal hostnames with stable placeholders. See the AI summaries section for the full flow.

Automating with the CLI

The servonaut memory command group runs the whole cycle headlessly: build probes an instance (or --all instances) and persists the results, refresh re-probes regardless of freshness, show prints the stored memory as a summary, full Markdown, or raw JSON, pin / annotate / export / clear manage declared values, notes, Markdown exports, and deletion. Ideal for keeping memory fresh from cron on a bastion or CI box.

Export & retention

Snapshots can be exported for offline review or compliance evidence, and older envelopes age out according to plan-level retention. See the Server Memory docs for the current export formats, signing model, and retention windows.

Turning it off

Memory is opt-in. If you decide to stop using it, the disable flow stops new probes and schedules deletion of stored envelopes.

Full feature reference: Server Memory documentation.

Log viewer

The built-in log viewer fetches log files from remote servers over SSH and displays them with syntax highlighting. Features:

  • Real-time tail mode (tail -f equivalent) with pause / resume
  • Pattern search and highlighting within the viewer
  • Quick-jump to configured log paths (from log_paths in your config) and one-key switching between them
  • Works with custom servers, AWS EC2 instances, and CloudWatch log streams
  • One-key AI analysis of the current view

Custom server support

Beyond AWS, OVH, and Hetzner, Servonaut treats any SSH-reachable server as a first-class citizen — DigitalOcean Droplets, on-prem bare metal, VMware VMs, Raspberry Pis, anything. All get full SSH, SCP, log viewer, run-command overlay, and AI integration.

Add, edit, and remove custom servers from the Custom Servers sidebar screen, including per-server extra SSH options for anything unusual (non-standard ports, cipher constraints, legacy key exchange). Custom servers can be tagged with arbitrary key/value pairs and filtered in the TUI using the / search.

Documentation