skills/cron/SKILL.md
--- id: cron name: Cron description: Manage reminders and scheduled messages. Actions: list, add, remove. See skill.md for arguments. --- # Cron Manage reminders and scheduled messages: **one-shot** (at a specific time) or **recurring** (every morning, every 5 minutes, etc.). Call **run_skill** with **skill: "cron"**. The **command name** is the operation: use **command** or **arguments.action** set to exactly one of: **list**, **add**, **remove**. **Reply channel:** By default the reminder r
npx skillsauth add bishwashere/cowcode skills/cronInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Manage reminders and scheduled messages: one-shot (at a specific time) or recurring (every morning, every 5 minutes, etc.). Call run_skill with skill: "cron". The command name is the operation: use command or arguments.action set to exactly one of: list, add, remove.
Reply channel: By default the reminder reply is sent to the same channel (WhatsApp chat or Telegram chat) where the user set it up. This is stored with the job and used even when a separate cron process runs the task-no need to specify a channel; it stays attached to where it was created.
0 8 * * 1) in the reply - always convert to human-readable form (e.g. "Every Monday at 8:00 AM"). Use the stored human-readable message and the schedule kind (at/cron) to produce a natural description.{ "kind": "at", "at": "<future ISO 8601>" }. Always use an exact full ISO 8601 timestamp (e.g. 2026-02-19T08:00:00.000Z). Schedules are saved and run at that exact time. For "in 1 hour" or "tomorrow 8am" compute the exact datetime and pass it as ISO 8601.{ "kind": "cron", "expr": "<cron expression>", "tz": "optional IANA timezone" }. Use the expr values below for common setups. Never invent message text. If the user does not specify how often to check, use a sensible default (e.g. every 10 minutes: */10 * * * *), create the job, then say they can change the interval or remove it later.job.url + job.notifyWhen, or job.conditional: { "notifyWhen": "non_empty_response", "url": "<url>", "label": "<short label>" }. Keep job.message human-readable, but the structured condition is what suppresses empty responses. Empty means empty body, [], {}, or null.list first to get the numbered list (1-indexed from top), find the job at that exact position across the full combined list (one-time + recurring in the order shown), then call remove with that job's id. Confirm what was removed by name and position.You can pass the command at the top level (command: "list") or inside arguments (arguments.action: "list"). Never omit the command/action.
Cron expr is usually 5 fields: minute hour day-of-month month day-of-week. For second-level direct polling only, Croner also accepts 6 fields: second minute hour day-of-month month day-of-week. Use these for natural-language requests:
| User says | expr | Meaning |
|-----------|----------|---------|
| every 20 seconds | */20 * * * * * | Every 20 seconds |
| every 5 minutes | */5 * * * * | Every 5 minutes |
| every minute | * * * * * | Every minute |
| every hour | 0 * * * * | At minute 0 of every hour |
| every morning / every day at 8am | 0 8 * * * | 8:00 daily |
| every day at 9am | 0 9 * * * | 9:00 daily |
| every Monday at 8am | 0 8 * * 1 | 8:00 on Mondays (1 = Monday, 0 = Sunday) |
| every weekday at 8am | 0 8 * * 1-5 | 8:00 Mon–Fri |
Optional tz for timezone (e.g. "America/New_York"). Example job for "every morning at 8": { "message": "Good morning reminder", "schedule": { "kind": "cron", "expr": "0 8 * * *", "tz": "America/New_York" } }.
cron_list
description: List all scheduled jobs/reminders. No parameters.
cron_add
description: Create a reminder or direct conditional HTTP poll. Set job with message and schedule (kind at|cron, at or expr, tz). For direct HTTP polls, set job.notifyWhen="non_empty_response" and job.url, or job.conditional.
parameters:
job: object
cron_remove
description: Remove a scheduled job by id (from list result).
parameters:
jobId: string
tools
Policy-gated command execution for package managers, project generators, build/test scripts, dev servers, and one-off CLIs. Disabled by default; add "exec" to skills.enabled to expose it. Prefer go-read/go-write for stable filesystem primitives.
data-ai
Plain HTTP fetch (GET/POST/etc.) for JSON or text endpoints, including localhost / LAN / Pasture's own dashboard. Use this instead of browse for non-rendered URLs.
testing
Bridge conversation to dashboard Projects and Missions — list configured projects, register new ones with setup details, health-check, propose tasks, create missions after user approval, log progress, and update task status. Use when the user wants to work on, track, or manage a project.
documentation
GitHub integration. Read repos, list/read issues and PRs, create branches, post comments, create PRs. Requires GitHub token in ~/.pasture/secrets.json or GITHUB_TOKEN env var.