-
Notifications
You must be signed in to change notification settings - Fork 0
Features
This page is a complete catalog of Vantyr's capabilities, grouped by area, with pointers to the underlying routes and APIs where helpful. For setup see Usage and Deployment; for environment variables see Configuration.
Warning: Vantyr includes powerful monitoring and remote-control capabilities. Use only on machines you own or manage, and only where you have handled consent, privacy, and security requirements. Several features (remote scripts, interactive terminal, internet blocking) are inherently high-risk and are gated behind roles and server config.
| Area | Route / location | Purpose |
|---|---|---|
| Agents (overview) | / |
Lists agents with online/offline status and shortcuts into each agent's detail view. |
| Rules | /rules |
Unified hub for alert rules, app blocking, internet access, scheduled scripts, and the cross-agent Events feed. |
| Groups | /groups |
Organize agents into groups; rules and policies can be scoped per group (admin). |
| Users | /users |
Dashboard user and role management (admin). |
| Settings | /settings |
Retention, URL categorization, agent-enrollment tokens, integrations, two-factor auth, and preferences. |
| Logs | /logs |
Server-side / cross-agent log views (where implemented). |
/notifications redirects to /rules (legacy path). Admin routes (/rules, /groups, /users) require the admin role.
The agent detail page (/agents/:agentId) shows a header, a side-by-side live screen + vitals panel, and a two-level tab navigation: five primary sections, each with its own sub-tabs (driven by frontend/src/lib/agentTabNav.ts). Tabs are capability-aware - unsupported features (e.g. URL tracking on Linux, keystrokes on Wayland) render a blank/disabled state via CapabilityNotice.
| Section | Sub-tabs |
|---|---|
| Activity | Timeline, Analytics |
| Telemetry | URLs, Keystrokes, Windows, Events |
| System | Specs, Software, Scripts, Files |
| Control | Control, Terminal, Logs |
| Settings | Settings |
| Sub-tab | Description |
|---|---|
| Timeline | Session-oriented history of foreground apps and windows with durations. "View in Timeline" from an alert event deep-links with a highlight. |
| Analytics | URL analytics: category mix over time, top sites, and browsing sessions (/api/agents/:id/analytics/...). Requires URL history and, for categories, URL-categorization data. |
The live Screen + activity view (demand-driven MJPEG) is embedded at the top of the page alongside agent vitals; screen capture only starts when a viewer connects (see Live screen below).
| Sub-tab | Description |
|---|---|
| URLs | Raw browser-URL history (Windows only; captured via UI Automation). |
| Keystrokes | Captured keystroke events, when keystroke capture is enabled. Not available on Wayland. |
| Windows | Foreground window-focus history (application + window title). |
| Events | Alert-rule hits for this agent (rule name, channel, matched snippet); some rows attach screenshot evidence. |
| Sub-tab | Description |
|---|---|
| Specs | Hardware / OS / agent-version metadata, plus the Resource health history charts (CPU / memory / disk). |
| Software | Installed-software inventory; operators can trigger a fresh collection run. Source varies by platform (Registry on Windows; dpkg/rpm/pacman/flatpak on Linux). |
| Scripts | Ad-hoc remote scripts - only if ALLOW_REMOTE_SCRIPT_EXECUTION=true on the server. This is remote code execution; keep off unless you trust the deployment. |
| Files | Remote file browser and downloads; typically starts under the user's Documents folder, with navigation to other drives. |
| Sub-tab | Description |
|---|---|
| Control | Remote mouse/keyboard plus lock / restart / shutdown of the host. Role-gated: viewers receive telemetry but cannot send control commands. Links to internet-access policy in Rules. |
| Terminal |
Interactive remote shell (ConPTY on Windows / PTY on Unix). Gated by operator role and ALLOW_REMOTE_SCRIPT_EXECUTION; per-session audited. |
| Logs | Tail selected Windows log channels / log sources forwarded by the agent (when available). |
Per-agent options such as retention overrides, auto-update preferences, the local UI password (when used), and other agent-specific configuration exposed by the server.
Screen capture is demand-driven to avoid constant overhead. Opening the live view (GET /api/agents/:id/mjpeg?session=<uuid>) increments a per-agent viewer refcount; crossing 0→1 sends start_capture to the agent, which streams JPEG Binary frames over /ws/agent. The server caches the latest frame and serves an MJPEG multipart stream; when the last viewer leaves (1→0), stop_capture is sent. Screen streaming works on Windows and Linux X11; Wayland requires a portal + PipeWire.
From the Control tab, operators and admins can drive the endpoint:
-
Mouse and keyboard input - forwarded over
/ws/view→ allowlist + RBAC check → the agent's input subsystem. - Power actions - lock, restart, and shutdown the host.
All control commands are validated server-side against a strict allowlist and require the operator (or admin) role. Viewer-role users receive telemetry only.
The agent samples CPU, memory, and disk usage with a lightweight collector and streams a metrics frame on a 60-second ticker. The server persists these to the agent_metrics table and exposes bucketed averages via GET /api/agents/:id/metrics. The Specs tab renders dependency-free SVG area charts with selectable ranges (1h / 6h / 24h / 7d). Retention is governed by METRICS_RETENTION_DAYS (default 90; 0 disables). Resource metrics are available on Windows and Linux.
A live shell from the dashboard, opened in the Terminal sub-tab under Control. The frontend uses @xterm/xterm; it connects to GET /ws/terminal?agent_id=&cols=&rows=.
-
Windows: one ConPTY shell per session (
CreatePseudoConsole) spawningpowershell.exein the user session. - Unix/Linux: a PTY shell.
-
Gating: requires the operator role and
ALLOW_REMOTE_SCRIPT_EXECUTION=true, enforced server-side. -
Routing & safety: output is routed to the single owning browser via per-session routing; terminal frames are never persisted and never broadcast to other viewers. Each session is audited (
terminal_sessionstarted/ended).
The ConPTY path is compile-verified; treat it as experimental on real Windows agents.
- System info / Specs - CPU/GPU, memory, disk, OS, hostname, and agent version, collected by the agent and shown in the Specs tab.
-
Software inventory - the installed-software list, collected on demand (operators can request a fresh
CollectSoftwarerun). Inventory source is the Windows Registry, or dpkg/rpm/pacman/flatpak on Linux.
URL capture is Windows-only (UI Automation reads the active browser URL).
- Raw URLs - the URLs telemetry tab lists captured URLs as-is.
-
Analytics - the Analytics tab derives a category mix over time, top sites, and browsing sessions from captured URLs (
/api/agents/:id/analytics/url-categories,.../url-sites,.../url-sessions). -
URL categorization - server-side category lists, site→category mappings, and manual overrides are managed under Settings → URL categorization (
/api/settings/url-categorization/*). The categorizer is the one server module with unit tests.
The Rules page is a unified hub with five tabs. Rules can be scoped to all agents, a group, or a single agent.
| Tab | Label | What it does |
|---|---|---|
alert-rules |
Alert Rules | Create alert rules across several channels - see Alerting & monitoring. Substring or regex match for content channels; threshold/duration for monitoring channels. Matches feed the Events feed and optional notifications. |
app-blocking |
App Blocking | Block executables/processes by pattern (the agent kills matching processes); optional schedules (time windows). Actions appear in Events and per-agent app-block views. |
internet-access |
Internet Access | Restrict outbound internet on the endpoint via firewall policy (Windows Firewall / nftables/firewalld on Linux via a helper). The agent's own connection to Vantyr stays allowed. Optional schedules. |
scheduled-scripts |
Scheduled Scripts | Server-side cron-style schedules that run scripts on agents at fire windows. Requires ALLOW_REMOTE_SCRIPT_EXECUTION=true and trusted operators. |
events |
Events | Cross-agent timeline: alert matches, app-block actions, scheduled-script runs, and related connection events, with filtering. |
Deep links use query parameters, e.g. /rules?tab=internet-access.
The alert engine (server/src/alert_rules.rs) evaluates rules as telemetry arrives and fires through a shared notify hub with per-rule cooldowns. Alert-rule channels:
| Channel | Trigger |
|---|---|
url |
A captured browser URL matches the pattern (substring or regex). |
url_category |
The categorized URL matches a target category. |
keys |
Captured keystroke content matches the pattern. |
resource |
Resource threshold - a metric (CPU/memory/disk) crosses a comparator/threshold (0–100%), optionally sustained for duration_secs. Evaluated on each metrics frame. |
agent_offline |
An agent has not been seen for N minutes. Evaluated by a periodic 60s task (no-op unless offline rules exist). |
Additional behavior:
- Screenshot on match - content-channel matches can optionally attach a screenshot as evidence, viewable from the Events row.
- External notifications - matches fan out to every configured channel: email (SMTP), Slack, Discord, Microsoft Teams, Telegram, ntfy, Pushover, a generic webhook, and Home Assistant. Channels are configured by server environment variables (secrets stay on the server); Settings → Alert notification channels shows live status and a Send test button. See Notifications (and Home Assistant for the HA blueprint).
- Every match is recorded to
alert_rule_eventsand surfaced in both the per-agent Events tab and the cross-agent Events feed.
Opt-in per-user TOTP, layered on top of password login (OIDC SSO already covers MFA separately).
-
Setup - Settings → Two-Factor card (
GET /api/2fa/status,POST /api/2fa/setup|enable|disable). Enabling issues single-use recovery codes, shown once and stored Argon2-hashed. -
Login - after password verification, if TOTP is enabled the server returns
401 { totp_required: true }; the login page then prompts for a TOTP code or a recovery code. - Enable/disable actions are audited.
Agents join through an approval-gated enrollment flow:
- An operator generates a 6-digit pairing code or invite under Settings → Agent enrollment tokens.
- The agent auto-discovers the server via mDNS (or is given the URL) and POSTs an enrollment claim with its stable
install_id(+ optional pairing code) to rate-limited enroll routes. - On approval (auto for
quick_pair/invite codes), the server issues a 256-bit per-device agent token, stored only as an Argon2 hash, which the agent uses as its/ws/agentbearer.
See Usage for the step-by-step.
| Feature | Description |
|---|---|
| Auto-update | The server can push set_auto_update so agents update themselves; per-agent preference in the agent Settings tab. |
| Retention controls | Age-based pruning for telemetry, resource metrics (METRICS_RETENTION_DAYS), and script-execution history (SCRIPT_EXECUTION_RETENTION_DAYS); configurable in Configuration. |
| RBAC roles | admin (full management), operator (control + scripts), viewer (read-only telemetry). Control and admin routes are role-gated. |
| Demo mode | A complete offline experience (npm run demo / VITE_VANTYR_DEMO_MODE) backed by scripted data - no server required. |
| Health & metrics |
GET /healthz, GET /readyz, and an optional Prometheus GET /metrics endpoint. |
Vantyr's agent targets Windows first; Linux support is experimental (X11 generally works better than Wayland). Capability summary:
| Feature | Windows | Linux X11 | Linux Wayland |
|---|---|---|---|
| Online / token auth | Yes | Yes | Yes |
| Resource metrics | Yes | Yes | Yes |
| System info / logs | Yes | Yes | Yes |
| Software inventory | Yes | Yes | Yes |
| Screen streaming | Yes | Yes | Portal + PipeWire |
| Remote mouse/keyboard | Yes | Yes | If supported (libei/portal) |
| Active window/app | Yes | Yes | Desktop-specific / limited |
| URL tracking | Yes | Browser extension | Browser extension |
| Keystroke capture | Yes | Possible | Not generally available |
| App / internet blocking | Yes | Helper | Helper |
| Terminal | ConPTY | PTY | PTY |
| Script execution | Yes | Yes | Yes |
The REST surface is defined in server/src/api/mod.rs. Examples:
- Telemetry:
GET /api/agents/:id/windows,/keys,/urls,/activity,/metrics - URL analytics:
GET /api/agents/:id/analytics/url-categories,.../url-sites,.../url-sessions - Screen:
GET /api/agents/:id/mjpeg,GET /api/agents/:id/screen - Rules:
/api/alert-rules,/api/app-block-rules,/api/internet-block-rules,/api/scheduled-scripts - Two-factor:
GET /api/2fa/status,POST /api/2fa/setup|enable|disable - Terminal:
GET /ws/terminal?agent_id=&cols=&rows=
Unauthenticated paths include GET /healthz, GET /readyz, GET /metrics (if enabled), GET /ws/agent (token-authenticated), and auth endpoints under /api/login and /api/auth/*. A dashboard session is required for all other /api/* routes and for /ws/view and /ws/terminal.
Install and configure
Day to day
Integrations
Developers and security