Sentinella 🐦⬛
Cross-platform system monitor with TUI, web dashboard, and remote monitoring
Sentinella is a cross-platform, open-source system monitor written in Python that works on Linux, BSD, macOS, and Windows.
✨ Features
- 🖥 Interactive TUI Dashboard: A beautiful terminal dashboard powered by Textual. Inspect CPU, memory, disk, network, active processes, users, sensors, and containers. Supports instant runtime theme toggling (
tkey: dark/light), dynamic process re-sorting (pkey), force refresh (rkey), and clear visual stale-state indicators during collection hiccups. - 🌐 Modern Web Dashboard: A real-time browser interface powered by FastAPI and WebSockets via a high-performance, capped
BroadcastHub. Features 100% offline/air-gapped vendorized assets, persistent light/dark themes, dynamic thresholds and process ranking matching agent config, snapshot payload wire trimming (~70% payload reduction), an accessible (ARIA, keyboard focus-trapped) authentication modal with XOR obfuscation for client-side storage, and reconnection backoff with manual retry. - 📡 Remote Monitoring Agent: Run Sentinella as a remote server agent (
servemode) and monitor hosts securely viaRemoteCollectorover HTTP/WebSockets from a centralized Sentinella instance, or fetch console summaries remotely. - 🚀 Quick Summary (
fetch): A quick,neofetch-style console summary of system hardware, OS, and resource utilization, available locally or queried from a remote agent (sentinella --remote HOST:PORT fetch). - 📊 Structured Exports (
print): Print snapshots of system metrics to stdout in Text, CSV, or JSON formats with module name validation, ideal for scripting, integrations, or cron jobs. - 📦 Container Support: Native monitoring for Docker and LXC containers (memory, CPU, status, and metadata) with streaming bounded output readers to avoid memory exhaustion.
- 🔒 Security-First: Constant-time API key verification, security headers (
Content-Security-Policy,X-Content-Type-Options,X-Frame-Options,Referrer-Policy: no-referrer) applied to all HTTP responses, automatic warnings for insecure open network binds across IPv4/IPv6 without authentication, CSV formula-injection sanitization, and permission warnings (chmod 600) for config files holding plaintext credentials.
🚀 Quick Start
Prerequisites
- Python:
3.11or higher. - Package Manager: uv (recommended) or
pip.
Installation
-
Clone the repository:
git clone https://github.com/salvatorecorvaglia/sentinella.git cd sentinella
-
Sync the workspace (using
uv):uv sync --all-extras --dev
-
Install the package (using
pip):pip install -e .
🖥 Command Line Usage
Once installed, the sentinella executable will be available on your system path.
# Start the interactive TUI Dashboard (default)
sentinella
# Run the TUI connected to a remote Sentinella agent
sentinella --remote 127.0.0.1:9090
# Print a quick neofetch-style system summary
sentinella fetch
# Fetch a system summary from a remote Sentinella agent
sentinella --remote 127.0.0.1:9090 fetch
# Start the Web Dashboard server (default: port 8080)
sentinella web
# Start the Remote Monitoring Agent server (default: port 9090)
sentinella serve
# Print system stats directly to stdout (JSON format)
sentinella print --format json
# Print specific modules' metrics (e.g. cpu, memory)
sentinella print cpu memory
# Print metrics from a remote Sentinella agent
sentinella --remote 127.0.0.1:9090 print
⌨️ TUI Keyboard Controls
| Key | Action |
|---|---|
q / Ctrl+C |
Quit Sentinella |
t |
Toggle theme on the fly (Dark ⇄ Light) |
p |
Cycle process sorting order (cpu → memory → pid → name) |
r |
Force immediate metric refresh |
Global CLI Options
-c PATH,--config PATH: Path to a customsentinella.tomlconfiguration file.-v,--verbose: Enable verbose debug logging.-r HOST:PORT,--remote HOST:PORT: Connect to a remote Sentinella agent instead of inspecting the local system (applicable to TUI,fetch, andprint).
🛠 Configuration
Sentinella can be configured using a sentinella.toml file. The search order for configuration is:
--config/-cCLI flag (explicit path)../sentinella.toml(current working directory).~/.config/sentinella/sentinella.toml(user profile configuration).- Default built-in values.
A default configuration template is available in sentinella.example.toml.
Configuration Options Reference
[general]
refresh_interval = 2 # Seconds between updates (minimum: 1)
theme = "dark" # Theme to apply: "dark" or "light"
[modules]
cpu = true # Enable/disable specific monitoring modules
memory = true
disk = true
network = true
processes = true
users = true
sensors = true
containers = true
[web]
enabled = false # Automatically run web server in TUI background
host = "127.0.0.1" # Host address to bind the web server
port = 8080 # Port for the web server (1-65535)
api_key = "" # API key for the dashboard (empty = no authentication)
[remote]
enabled = false # Automatically run remote agent in TUI background
host = "127.0.0.1" # Host address to bind the agent server
port = 9090 # Port for the remote agent (1-65535)
api_key = "" # API key for agent connection security
[export]
format = "text" # Default export format: "text", "csv", or "json"
[processes]
max_display = 25 # Max processes to display in TUI and print output
sort_by = "cpu" # Sort criteria: "cpu", "memory", "pid", "name"
🤝 Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
📜 Changelog
Detailed release history and version changes can be found in CHANGELOG.md.
🔐 Security
If you discover a security vulnerability, please see our Security Policy.
📝 License
Distributed under the MIT License. See LICENSE for more information.
Author: Salvatore Corvaglia
Metadata
Release files for sentinella-monitor 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sentinella_monitor-1.0.0.tar.gz | 185.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sentinella_monitor-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 357.9 kB
Release files / sentinella_monitor-1.0.0.tar.gz
| Download URL | sentinella_monitor-1.0.0.tar.gz |
|---|---|
| Size | 185.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7bd3e7acb66f9e8d3f4a0a8e547d82930592dc473675992c03939fd845c63316
|
|
BLAKE2b-256 checksum How to use checksums |
72b1f2df4fd0f3bc508417613724e93d8b1b31f1bf49b3bf50131ac54d582f16
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.
Transparency logRelease files / sentinella_monitor-1.0.0-py3-none-any.whl
| Download URL | sentinella_monitor-1.0.0-py3-none-any.whl |
|---|---|
| Size | 172.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1507f9b7303f84ac5b16e872c68e254dcb47b74c136be180a97b474615476d57
|
|
BLAKE2b-256 checksum How to use checksums |
39cf3432c044990328e5585d13831e5052b0853ef1edacfb7eead8f23e8191a1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.
Transparency log