ID Open Smooth in Telegram

DocsSmooth Agent (self-hosted)

Automation and running 24/7

Scheduled jobs that survive restarts, cheap script watchers, delivery to your chat, and running the daemon as a service or in Docker.

Scheduled jobs

bash
smooth-agent cron add morning "daily 07:00" "Summarise the top tech news for me" --deliver telegram
smooth-agent cron add weekly "weekly mon 08:00" "Plan my week from my notes" --skill weekly-review
smooth-agent cron list
smooth-agent cron run morning      # run it now
smooth-agent cron pause morning
smooth-agent cron remove morning

Schedules: daily 07:00, weekdays 08:30, weekly fri 17:00, every 2h, every 15m, at 2026-11-30 09:00, @daily, or a cron expression (*/15 * * * *). Times use [agent] timezone. Add --repeat N to stop after N runs and --model to use a cheaper model for one job.

The agent can create jobs itself with the cronjob tool: "every morning at 7 send me the BTC price".

Script watchers

A watcher runs a shell command first and only wakes the model when the command prints something, so checking every few minutes costs nothing when nothing changed:

bash
smooth-agent cron add hn "*/15 * * * *" --script "python3 watch_rss.py --name hn --url https://news.ycombinator.com/rss"

Watchers need [tools] terminal = true.

Delivery

--deliver telegram sends the result to you (the channel owner); telegram:<chat_id> picks a chat. A failed run arrives marked "⚠️ cron failed". Results also stay in the job queue: smooth-agent jobs.

The daemon

smooth-agent daemon runs the chat channels and the scheduler together. Jobs are leased and retried with backoff, so a crash or restart never runs a job twice or loses it. --no-channels runs only the scheduler.

Run it as a service

bash
smooth-agent service --install          # systemd user unit on Linux, launchd agent on macOS
systemctl --user enable --now smooth-agent
loginctl enable-linger $USER            # servers: keep running after you log out
journalctl --user -u smooth-agent -f    # logs

Use --name for a second install on the same machine.

Docker

bash
docker compose up -d       # restarts on reboot
docker compose logs -f

Data lives in ./data (mounted at /data); the container runs as an unprivileged user with a health check.

Last updated: