Documentation
Setup, commands, config. Everything in one place.
Quick Start
Three steps. Under 2 minutes. No, really.
Step 1: Connect your messenger
Find mttrly in your messenger: Telegram (@mttrly_bot), Slack (add to workspace), or Discord (invite bot). Start a chat — you'll get your API token right away.
Step 2: Install the agent
SSH into your server and run this. It's a lightweight Go binary (~10MB), no dependencies, no bloat.
Step 3: Say hello
Send /status in your messenger. If you see your server's CPU, RAM, and disk stats — you're done. That was fast.
Commands
Every command mttrly understands, with options and examples.
$ /statusServer health at a glance: CPU, RAM, disk, running services.
Options:
-vVerbose — includes process list-jOutput as JSON (for scripts)
Example:
$ /logsRead logs without SSH. Filter by service, tail in real-time, or show only errors.
Options:
<service>Which service (nginx, app, etc.)-n <lines>How many lines (default: 50)-fFollow — like tail -f--errorsErrors only
Example:
$ /restartRestart a service. Asks you to confirm first (unless you --force it).
Options:
<service>Service to restart--forceSkip confirmation — you're sure
Example:
$ /deployGit pull + restart. The deploy button you always wanted.
Options:
<app>Which app to deploy--branch <name>Git branch (default: main)
Example:
$ /runRun a custom playbook you've defined in config.
Options:
<playbook>Playbook name
Example:
Configuration
One YAML file. Three main sections. Here's what you can tweak.
Config file location: /etc/mttrly/config.yaml
servicesTell mttrly which services it can manage. Only these will show up in commands.
services: - nginx - myapp - redis
playbooksYour own scripts, triggerable via /run. Set confirm: true for anything scary.
playbooks:
cleanup-logs:
script: /opt/scripts/cleanup.sh
confirm: truealertsGet pinged when resource usage crosses a threshold. Set percentages that make sense for your setup.
alerts: cpu_threshold: 80 memory_threshold: 90 disk_threshold: 85
Security
How mttrly keeps your servers safe. The short version: we're paranoid so you don't have to be.
Outbound-only connections
The agent connects to us — not the other way around. No ports to open. Your firewall stays exactly as it is.
Confirmation before anything scary
Restart, deploy, custom scripts — all need you to tap "Confirm" first. No surprises, no accidental nukes.
Minimal permissions
The agent runs as its own user with bare minimum privileges. You decide which commands get sudo. Nothing else does.
Encrypted everything
All traffic between your server and your messenger is encrypted. We don't store your logs or sensitive data. Period.
Token rotation
Think your token leaked? Regenerate it. The old one dies instantly. Takes 10 seconds.
Troubleshooting
Something not working? Start here.
Agent won't connect
- →Make sure outbound WebSocket connections are allowed (port 443)
- →Double-check your API token — copy-paste errors are real
- →Check agent logs: journalctl -u mttrly
Commands timeout
- →Your server might be under heavy load — the agent needs CPU too
- →Check if the server has internet access
- →Try restarting the agent: systemctl restart mttrly
Permission denied
- →The mttrly user needs access to the service you're managing
- →Add specific sudo permissions in /etc/sudoers.d/mttrly