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 1–8 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)
| Key | Action |
|---|---|
| Enter / O | Open the Server Actions dashboard for the selected instance |
| S | SSH into the selected instance |
| T | SCP file transfer overlay |
| B | Browse remote files |
| C | Run a remote command |
| L | Open the log viewer |
| A | AI analysis of the selected instance |
| M | Open Server Memory for the row |
| K | Manage the SSH key reference |
| V | Verify SSH connectivity |
| Y | Copy the selected row |
| R | Refresh the instance list |
| / | Focus the search / filter input |
Log viewer
| Key | Action |
|---|---|
| A | Analyze the current log with AI |
| / | Search within the log |
| P | Pause / resume live streaming |
| C | Clear the output |
| L | Switch to another configured log file |
| Esc | Close the viewer |
Global
| Key | Action |
|---|---|
| Tab | Cycle between panels |
| F2 | Toggle the AI chat panel |
| ? | Show the shortcut help overlay |
| U | Update Servonaut (main menu, when an update is available) |
| Ctrl+Shift+D | Toggle demo mode |
| Q | Quit Servonaut |
| Esc | Close 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.
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.
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.
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--streamfor live token streaming or--toolsto 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 -fequivalent) with pause / resume - Pattern search and highlighting within the viewer
- Quick-jump to configured log paths (from
log_pathsin 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.