
Research
/Security News
Critical Vulnerability in NestJS Devtools: Localhost RCE via Sandbox Escape
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
Ultimate command monitoring & notification system: Telegram, Slack, Discord, Teams, Pushover, Email, desktop & more. Monitor Python code and CLI tasks with context managers, decorators, and webhooks.
English | हिन्दी | 中文 (简体) | Español
Version 0.2.5
Telert is a lightweight utility for multi-channel notifications for alerting when terminal commands or Python code completes. It also extends this notification capability to easily monitor processes, log files, and HTTP endpoints uptime. The tool supports multiple notification channels:
Simple to use:
# Run a command and get notified when it finishes
telert run npm build
# Or pipe any command output for notification
find . -name "*.log" | telert "Log files found!"
# Monitor a log file and notify on error
telert monitor log --name "postgres" --file "/var/log/postgresql/postgresql-15-main.log" --pattern "ERROR|FATAL"
# Monitor a process and notify on high memory usage
telert monitor process --command-pattern "ps aux | grep postgres" --memory-threshold 2G
# Monitor a network endpoint and notify on failure
telert monitor network --name "myapp-health" --host "myapp.com" --port 80 --type http --interval 60 --timeout 5 --expected-status 200 --expected-content "healthy"
Perfect for long-running tasks, remote servers, CI pipelines, monitoring critical code, processes, logs, and network services.
Use it as a CLI tool, Python library, or a notification API. Telert is available:
pip install telert
docker pull ghcr.io/navig-me/telert:latest
For more detailed information, please refer to the docs directory:
Install and configure in seconds:
pip install telert
# Interactive setup wizard - easiest way to get started
telert init
# Or configure a notification provider manually
telert config desktop --app-name "My App" --set-default
Use in your shell directly or wrap any command:
# Pipe command output for notification
long_running_command | telert "Command finished!"
# Wrap a command to capture status and timing
telert run --label "Database Backup" pg_dump -U postgres mydb > backup.sql
# Get notified for any command taking longer than 30 seconds
eval "$(telert hook -l 30)"
Or use in your Python code:
from telert import send, telert, notify
# Simple notification
send("Script completed successfully!")
# Using the context manager
def process():
with telert("Data processing", provider="telegram"):
# Your long-running code here
process_large_dataset()
# Using the function decorator
@notify("Database backup", provider="email")
def backup_database():
# Backup code here
return "Backup completed"
Or monitor processes, log files, and network endpoints:
# Monitor a process
telert monitor process --name "postgres" --command "ps aux | grep postgres" --memory-threshold 2G
# Monitor a log file
telert monitor log --file "/var/log/app.log" --pattern "ERROR|CRITICAL" --provider telegram
# Monitor a network endpoint
telert monitor network --host "myapp.com" --port 80 --type http --interval 60 --timeout 5 --expected-status 200 --expected-content "healthy"
Telert supports multiple notification services. Choose one or more based on your needs:
Telegram uses the official Bot API for reliable delivery. Messages exceeding Telegram's character limit (4096 characters) are automatically sent as text files.
# After creating a bot with @BotFather and getting your chat ID
telert config telegram --token "<token>" --chat-id "<chat-id>" --set-default
telert status # Test your configuration
Teams integration uses Power Automate (Microsoft Flow) to deliver notifications.
# After creating a HTTP trigger flow in Power Automate
telert config teams --webhook-url "<flow-http-url>" --set-default
telert status # Test your configuration
Detailed Microsoft Teams Setup Guide
Slack integration uses incoming webhooks for channel notifications.
# After creating a webhook at api.slack.com
telert config slack --webhook-url "<webhook-url>" --set-default
telert status # Test your configuration
Discord integration uses webhooks to send messages to channels.
# After creating a webhook in Discord
telert config discord --webhook-url "<webhook-url>" --set-default
telert status # Test your configuration
# Optionally customize the bot name and avatar
telert config discord --webhook-url "<webhook-url>" --username "My Bot" --avatar-url "<avatar-image-url>" --set-default
Email integration uses standard SMTP protocol to send notifications.
# Basic configuration
telert config email --server smtp.example.com --port 587 --username user@example.com --password mypassword --to recipient@example.com --set-default
telert status # Test your configuration
# Advanced configuration
telert config email \
--server smtp.example.com \
--port 587 \
--username user@example.com \
--password mypassword \
--from "Telert Notifications <alerts@example.com>" \
--to "admin@example.com,alerts@example.com" \
--subject-template "Telert Alert: {label} - {status}" \
--html \
--set-default
Pushover provides mobile notifications to Android and iOS devices.
# After signing up at pushover.net and creating an app
telert config pushover --token "<app-token>" --user "<user-key>" --set-default
telert status # Test your configuration
Send to any HTTP service with configurable URLs, headers, and payload templates.
# Basic configuration
telert config endpoint --url "https://api.example.com/notify" --set-default
# Advanced configuration example
telert config endpoint \
--url "https://api.example.com/notify/{status_code}" \
--method POST \
--header "Authorization: Bearer abc123" \
--payload-template '{"text": "{message}"}' \
--name "My Service" \
--set-default
Detailed Custom Endpoint Guide
Play a sound notification when your command completes.
# Use the built-in sound
telert config audio --set-default
# Or use a custom sound file with volume control
telert config audio --sound-file "/path/to/alert.wav" --volume 0.8 --set-default
Works on all platforms; for MP3 support on Windows: pip install telert[audio]
Show notifications in your operating system's notification center.
# Configure with default icon
telert config desktop --app-name "My App" --set-default
# Or with custom icon
telert config desktop --app-name "My App" --icon-path "/path/to/icon.png" --set-default
macOS users: Install terminal-notifier for better reliability: brew install terminal-notifier
Linux users: Install notify-send: sudo apt install libnotify-bin
(Debian/Ubuntu)
Configure and use multiple notification services at once:
# Set multiple default providers in priority order
telert config set-defaults --providers "slack,desktop,audio"
# Add a provider to existing defaults without replacing them
telert config audio --sound-file "/path/to/sound.mp3" --add-to-defaults
# Send to multiple providers
telert send --provider "slack,telegram" "Multi-provider message"
# Send to all configured providers
telert send --all-providers "Important alert!"
Configuration is stored in ~/.config/telert/config.json
and can be overridden with environment variables.
Mode | What it does | Example |
---|---|---|
Run | Wraps a command, times it, sends notification with exit code. | telert run --label "RSYNC" rsync -a /src /dst |
Filter | Reads from stdin so you can pipe command output. | long_job | telert "compile done" |
Hook | Generates a Bash snippet so every command > N seconds notifies automatically. | eval "$(telert hook -l 30)" |
Monitor | Watches processes, log files, and network endpoints. | telert monitor process --name "nginx" --notify-on stop |
Send | Low-level "send arbitrary text" helper. | telert send --provider slack "Build complete" |
Python API | Use directly in Python code with context managers and decorators. | from telert import telert, send, notify |
GitHub Action | Run commands in GitHub Actions with notifications. | uses: navig-me/telert/actions/run@v1 |
CI Integration | GitLab CI templates and CircleCI orbs for notifications. | extends: .telert-notify |
Docker | Run as CLI tool or notification API server in Docker. | docker run ghcr.io/navig-me/telert:latest |
Multi-provider | Configure and use multiple notification services (Telegram, Teams, Slack, Pushover, Audio, Desktop). | telert config desktop --app-name "My App" |
Telert provides a simple way to monitor processes, log files, and HTTP endpoints, sending notifications through any configured provider when important events occur.
Note: While monitors are stored in a persistent configuration, they need to be explicitly started after a system restart. To ensure monitors run continuously, consider setting up an autostart mechanism using your system's init system (systemd, cron, etc.). Configuration details are provided in the Persistence and Startup Behavior section.
Monitor system processes by name, command, or PID and get notified on state changes or resource usage thresholds:
# Monitor a process by name
telert monitor process --name "nginx" --notify-on stop,high-cpu --provider slack
# Monitor with resource thresholds
telert monitor process --name "postgres" --cpu-threshold 80 --memory-threshold 2G --provider telegram
# Monitor with custom action on state change
telert monitor process --command-pattern "python worker.py" --notify-on crash --action "systemctl restart worker"
# List all monitored processes
telert monitor process --list
# Stop monitoring a process
telert monitor process --stop <monitor-id>
Watch log files for specific patterns and receive notifications with context when matches are found:
# Monitor a log file for patterns
telert monitor log --file "/var/log/app.log" --pattern "ERROR|CRITICAL" --provider telegram
# Advanced monitoring with context
telert monitor log \
--file "/var/log/nginx/error.log" \
--pattern ".*\[error\].*" \
--context-lines 5 \
--cooldown 300 \
--provider slack
# List all log monitors
telert monitor log --list
# Stop monitoring a log file
telert monitor log --stop <monitor-id>
Monitor network connectivity and services with different check types:
# Basic ping monitoring
telert monitor network --host example.com --type ping --interval 60 --provider slack
# HTTP endpoint monitoring
telert monitor network \
--url https://api.example.com/health \
--expected-status 200 \
--timeout 5 \
--provider telegram
# TCP port monitoring
telert monitor network --host db.example.com --port 5432 --provider email
# List all network monitors
telert monitor network --list
For detailed documentation on monitoring features, see the Monitoring Guide.
Note: When using the
run
command, do not use double dashes (--
) to separate telert options from the command to run. The correct syntax istelert run [options] command
, nottelert run [options] command
.
Wrap any command to receive a notification when it completes:
# Basic usage - notify when command finishes (uses default provider)
telert run npm run build
# Add a descriptive label
telert run --label "DB Backup" pg_dump -U postgres mydb > backup.sql
# Show notification only when a command fails
telert run --only-fail rsync -av /src/ /backup/
# Send to a specific provider
telert run --provider teams --label "ML Training" python train_model.py
# Send to multiple specific providers
telert run --provider "slack,telegram" --label "CI Build" make all
# Send to all configured providers
telert run --all-providers --label "Critical Backup" backup.sh
# Custom notification message
telert run --message "Training complete! 🎉" python train_model.py
# Run in silent mode (output only in notification, not displayed in terminal)
TELERT_SILENT=1 telert run python long_process.py
Command output is shown in real-time by default. Use TELERT_SILENT=1
environment variable if you want to capture output for the notification but not display it in the terminal.
Perfect for adding notifications to existing pipelines:
# Send notification when a pipeline completes (uses default provider)
find . -name "*.log" | xargs grep "ERROR" | telert "Error check complete"
# Process and notify with specific provider
cat large_file.csv | awk '{print $3}' | sort | uniq -c | telert --provider slack "Data processing finished"
# Send to multiple providers
find /var/log -name "*.err" | grep -i "critical" | telert --provider "telegram,desktop" "Critical errors found"
# Send to all providers
backup.sh | telert --all-providers "Database backup complete"
Note: In filter mode, the exit status is not captured since commands in a pipeline run in separate processes. For exit status tracking, use Run mode or add explicit status checking in your script.
Send custom messages from scripts to any provider:
# Simple text message (uses default provider(s))
telert send "Server backup completed"
# Send to a specific provider
telert send --provider teams "Build completed"
telert send --provider slack "Deployment started"
# Send to multiple specific providers at once
telert send --provider "telegram,slack,desktop" "Critical alert!"
# Send to all configured providers
telert send --all-providers "System restart required"
# Show details of message delivery with verbose flag
telert send --all-providers --verbose "Message sent to all providers"
# Send status from a script
if [ $? -eq 0 ]; then
telert send "✅ Deployment successful"
else
# Send failure notification to all providers
telert send --all-providers "❌ Deployment failed with exit code $?"
fi
Get notifications for ALL commands that take longer than a certain time:
# Configure Bash to notify for any command taking longer than 30 seconds
eval "$(telert hook -l 30)"
# Add to your .bashrc for persistent configuration
echo 'eval "$(telert hook -l 30)"' >> ~/.bashrc
# View all available commands
telert --help
# Get help for a specific command
telert run --help
When using telert run
with shell built-in commands like source
, you'll need to wrap them in a bash call:
# This will fail
telert run source deploy.sh
# This works
telert run bash -c "source deploy.sh"
For convenience, we provide a wrapper script that automatically handles shell built-ins:
# Download the wrapper script
curl -o ~/bin/telert-wrapper https://raw.githubusercontent.com/navig-me/telert/main/telert-wrapper.sh
chmod +x ~/bin/telert-wrapper
# Now you can use shell built-ins directly
telert-wrapper run source deploy.sh
Telert provides a comprehensive Python API for notification management that includes:
send()
function for quick notificationswith telert():
for timing code execution@notify()
for monitoring function calls# Simple example of sending a notification
from telert import send
send("Script completed successfully!")
# Using the context manager
from telert import telert
with telert("Data processing"):
# Your long-running code here
process_large_dataset()
# Using the function decorator
from telert import notify
@notify("Database backup")
def backup_database():
# Backup code here
return "Backup completed" # Result included in notification
View the complete Python API reference
Telert is available as a Docker image that can be used in both CLI and server modes.
docker pull ghcr.io/navig-me/telert:latest
# Test telert status
docker run --rm ghcr.io/navig-me/telert:latest status
# Configure and send a notification
docker run --rm \
-e TELERT_TELEGRAM_TOKEN=your_token \
-e TELERT_TELEGRAM_CHAT_ID=your_chat_id \
ghcr.io/navig-me/telert:latest send "Hello from Docker!"
# Run telert as a notification API server
docker run -d --name telert-server \
-p 8000:8000 \
-e TELERT_TELEGRAM_TOKEN=your_token \
-e TELERT_TELEGRAM_CHAT_ID=your_chat_id \
ghcr.io/navig-me/telert:latest serve
# Send a notification via the API
curl -X POST http://localhost:8000/send \
-H "Content-Type: application/json" \
-d '{"message": "Hello from the API!"}'
For more detailed information on Docker usage, including configuration persistence and API endpoints, see the Docker documentation.
Telert can be used in GitHub Actions workflows to run commands and receive notifications when they complete:
- name: Run tests with notification
uses: navig-me/telert/actions/run@v1
with:
command: npm test
label: Run Tests
provider: telegram
token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
chat-id: ${{ secrets.TELEGRAM_CHAT_ID }}
Input | Description | Required |
---|---|---|
command | The command to run | Yes |
label | Label to identify the command | No |
provider | Notification provider to use | No |
all-providers | Send to all configured providers | No |
only-fail | Only notify on failure | No |
message | Custom notification message | No |
token | Telegram/Pushover token | No |
chat-id | Telegram chat ID | No |
webhook-url | Webhook URL for Teams/Slack/Discord | No |
user-key | Pushover user key | No |
For more examples and detailed usage, see the CI/CD Integrations documentation.
Telert provides a GitLab CI template for easy integration:
include:
- remote: 'https://raw.githubusercontent.com/navig-me/telert/main/.github/actions/run/gitlab-ci-template.yml'
build:
extends: .telert-notify
variables:
TELERT_COMMAND: "npm run build"
TELERT_LABEL: "Build Project"
TELERT_PROVIDER: "telegram"
script:
- npm run build
Telert is also available as a CircleCI Orb:
version: 2.1
orbs:
telert: telert/notify@1.0.0
jobs:
build:
docker:
- image: cimg/node:16.13
steps:
- checkout
- telert/run-notify:
command: "npm run build"
label: "Build Project"
provider: "telegram"
Telert can be deployed as a notification API on cloud platforms like Replit, Railway, Render or Fly.io. This is useful for CI/CD pipelines or services that can make HTTP requests but can't install Python.
Click on any of the buttons above or use the Deployment Templates to deploy your own instance.
Once deployed, you can send notifications by making HTTP requests to your API:
curl -X POST https://your-deployment-url.example.com/send \
-H "Content-Type: application/json" \
-d '{"message": "Build complete!"}'
For more details on deployment options and configuration, see the telert-notifier repository.
Telert can be configured using environment variables, which is especially useful in CI/CD pipelines or containerized environments. Key variables include:
TELERT_DEFAULT_PROVIDER
- Set default provider(s) to useTELERT_SILENT=1
for output controlEnvironment variables take precedence over the configuration file, making them perfect for temporary overrides.
macOS: If desktop notifications aren't working:
brew install terminal-notifier
Linux:
sudo apt install libnotify-bin
(Debian/Ubuntu)Windows:
pip install telert[audio]
telert status
Telert’s process monitoring depends on the psutil
library. If you encounter errors related to psutil (such as ImportError, build failures, or missing wheels), follow these platform-specific tips:
Apple Silicon (M1/M2):
arch -arm64 pip install --no-cache-dir psutil
arch -x86_64 pip install --no-cache-dir psutil
xcode-select --install
Linux:
sudo apt-get install python3-dev gcc
pip install --upgrade --force-reinstall psutil
Windows:
pip install --upgrade --force-reinstall psutil
General:
pip install --upgrade pip setuptools wheel
Note: psutil is required for all process monitoring features in Telert. If import fails, you’ll see a detailed error with platform-specific help.
Telert provides formatting options for messages with different levels of support across providers:
Telert intelligently handles the formatting based on each provider's capabilities. You only need to format your message once, and Telert ensures it displays properly across all providers.
Learn more about message formatting
Telert is versatile and useful in various scenarios:
Explore all use cases and examples
The project is automatically published to PyPI when a new GitHub release is created:
pyproject.toml
, README.md
and telert/__init__.py
v0.1.34
To manually publish to PyPI if needed:
# Install build tools
pip install build twine
# Build the package
python -m build
# Upload to PyPI
twine upload dist/*
PRs & issues welcome!
Licensed under the MIT License – see LICENSE
.
This project has been improved with help from all contributors who provide feedback and feature suggestions. If you find this tool useful, consider supporting the project on Buy Me a Coffee ☕
Try these providers with generous free credits:
FAQs
Ultimate command monitoring & notification system: Telegram, Slack, Discord, Teams, Pushover, Email, desktop & more. Monitor Python code and CLI tasks with context managers, decorators, and webhooks.
We found that telert demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
/Security News
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
Product
Customize license detection with Socket’s new license overlays: gain control, reduce noise, and handle edge cases with precision.
Product
Socket now supports Rust and Cargo, offering package search for all users and experimental SBOM generation for enterprise projects.