Skip to content

A Daily Briefing with Cron and Channels

This tutorial schedules a recurring job that posts a briefing to a channel every morning. You will build a skill that produces the briefing, schedule it with cron, and verify it runs. The schedule shape is identical whether you create it in the desktop app or with the wayland-core CLI, so this covers both.

A skill is a named prompt snippet the agent invokes on demand. Create one that produces your morning briefing. From the desktop, use the Build Skill modal in Settings -> Skills. From the CLI, write a SKILL.md under your skills directory:

---
name: morning-briefing
description: Produce a short morning briefing
---
Write a short morning briefing covering:
- Today's calendar at a glance
- Any overnight messages that need a reply
- The single most important thing to do first
Keep it under 150 words.

You can pull live context into the body with shell expansion, for example a line like !`date`, which runs the command and substitutes its output. See Skills for variables and shell expansion.

Open the Scheduled Tasks page and create a task.

The scheduled tasks page

In the create dialog, choose a target:

  • A channel-message target posts a fixed text to a named channel on the schedule.
  • A skill target invokes a skill on the schedule, so the briefing is generated fresh each time.

For a daily briefing, pick the skill target and point it at morning-briefing. Set the cron expression to 0 8 * * * for 8am every day. Save and make sure the task is enabled.

The CLI writes to the same scheduler. The three target kinds match the dialog: exactly one of --slash, --channel, or --skill.

Terminal window
# Run a skill every morning at 08:00
wayland-core cron add "0 8 * * *" --skill morning-briefing
# Post fixed text to a channel every Monday at 08:00
wayland-core cron add "0 8 * * 1" --channel team --text "Good morning"

Cron expressions accept the 5-field crontab shape or the 6-field form. Jobs persist to $WAYLAND_HOME/cron/jobs.json. List, inspect, and toggle them:

Terminal window
wayland-core cron list
wayland-core cron status <id>
wayland-core cron disable <id>

The runner picks up changes on its next tick and re-reads the job file on every list, so a freshly added job is live without a restart. To confirm a job actually fired, check its history:

Terminal window
wayland-core cron history <id> --limit 10

Each record shows the timestamp, the outcome, the duration, and an error message if one occurred. In the desktop app, open the task detail page to see the same fire records and the current status tag.

So the briefing reaches you, route the channel-message target at a channel you watch, and turn on the channel-message notification in Settings -> Notifications. Set quiet hours if you do not want the 8am post to alert before you are awake.

You built a briefing skill, scheduled it to run every morning against a channel, confirmed the runner fired through the history, and wired a notification so the result reaches you.