Skip to main content
Commands, package names, and image names on this page come from the open-source project that Mibyan Desktop is built on, and can differ from the Mibyan Desktop installer. For the supported Mibyan install and update path, see Install and update.
The daily briefing bot tutorial covers the basics. This guide goes further — five real-world automation patterns you can adapt for your own workflows. For the full feature reference, see Scheduled Tasks (Cron).
Key ConceptCron jobs run in fresh agent sessions with no memory of your current chat. Prompts must be completely self-contained — include everything the agent needs to know.
Don’t need the LLM? You have two zero-token options.
  • Recurring watchdog where the script already produces the exact message (memory alerts, disk alerts, heartbeats): use script-only cron jobs. Same scheduler, no LLM. You can ask Mibyan to set one up for you in chat — the cronjob_manage tool knows when to pick no_agent=True and writes the script for you.
  • One-shot from a script that’s already running (CI step, post-commit hook, deploy script, externally-scheduled monitor): use mibyan send to pipe stdout or a file straight to Telegram / Discord / Slack / etc. without setting up a cron entry.

Pattern 1: Website Change Monitor

Watch a URL for changes and get notified only when something is different. The script parameter is the secret weapon here. A Python script runs before each execution, and its stdout becomes context for the agent. The script handles the mechanical work (fetching, diffing); the agent handles the reasoning (is this change interesting?). Create the monitoring script:
~/.mibyan/scripts/watch-site.py
Set up the cron job:
The [SILENT] TrickFor cron monitoring jobs, instruct the agent to respond with only [SILENT] when nothing changed. Cron delivery treats [SILENT] as the quiet marker, so you only get notified when something actually happens — no spam on quiet hours.
Keeping failure notices out of shared channels[SILENT] only applies to successful runs — when a job hard-fails, the engine posts a ⚠️ Cron 'X' failed… notice to the job’s delivery target. For jobs that deliver into busy shared channels, set --failure-deliver local to suppress those notices entirely (run state stays visible in mibyan cron list and run history), or point failures at an ops channel with --failure-deliver slack:C_OPS. Same grammar as --deliver; omit it and failures follow --deliver as before.

Pattern 2: Weekly Report

Compile information from multiple sources into a formatted summary. This runs once a week and delivers to your home channel.
From the CLI:
The 0 9 * * 1 is a standard cron expression: 9:00 AM every Monday.

Pattern 3: GitHub Repository Watcher

Monitor a repository for new issues, PRs, or releases.
Self-Contained PromptsNotice how the prompt includes the exact gh commands. The cron agent has no conversation history from previous runs — spell everything out. (Persistent memory does load, so durable preferences saved to MEMORY.md carry over, but don’t rely on it for job-critical details.)

Pattern 4: Data Collection Pipeline

Scrape data at regular intervals, save to files, and detect trends over time. This pattern combines a script (for collection) with the agent (for analysis).
~/.mibyan/scripts/collect-prices.py
The script does the mechanical collection; the agent adds the reasoning layer.

Pattern 5: Multi-Skill Workflow

Chain skills together for complex scheduled tasks. Skills are loaded in order before the prompt executes.
From the tool directly:
Skills are loaded in order — arxiv first (teaches the agent how to search papers), then obsidian (teaches how to write notes). The prompt ties them together.

Managing Your Jobs


Delivery Targets

The --deliver flag controls where results go:

Bot Chat delivery

bot-chat targets deliver the job’s output into a profile’s canonical “Bot Chat” session as a real message — the bot receives it like any other message, acts on anything that needs action, and responds in that chat. This is the target to use when you want a bot to see and react to scheduled output instead of just having it archived in Run history. Things to know:
  • Machine-local. The profile must exist on the machine running the scheduler (mibyan profile list). Names are validated at create time; profiles on other gateways/machines cannot be targeted.
  • Costs a bot turn. Each delivery runs a full agent turn in the target bot’s Bot Chat — budget accordingly for high-frequency jobs.
  • Combinable. --deliver bot-chat,telegram posts to the bot AND your Telegram home channel. The all token never expands to bot-chat targets.
  • The delivered message is prefixed so the bot knows it came from a scheduled job, not from you.

Tips

Make prompts self-contained. The agent in a cron job has no memory of your conversations. Include URLs, repo names, format preferences, and delivery instructions directly in the prompt. Use [SILENT] deliberately. For monitoring jobs, include instructions like “if nothing changed, respond with only [SILENT].” Do not ask the agent to explain the token in quiet cases — cron treats [SILENT] as the delivery-suppression marker. Use scripts for data collection. The script parameter lets a Python script handle the boring parts (HTTP requests, file I/O, state tracking). The agent only sees the script’s stdout and applies reasoning to it. This is cheaper and more reliable than having the agent do the fetching itself. Test with /cron run. Before waiting for the schedule to trigger, use /cron run <job_id> to execute immediately and verify the output looks right. Schedule expressions. Supported formats: relative delays (30m), intervals (every 2h), standard cron expressions (0 9 * * *), and ISO timestamps (2025-06-15T09:00:00). Natural language like daily at 9am is not supported — use 0 9 * * * instead.
For the complete cron reference — all parameters, edge cases, and internals — see Scheduled Tasks (Cron).