Scheduled Reports
by @0xvespertine
Define, preview, approve, and manage recurring reports for OpenClaw. Use when the user asks for a scheduled report, daily or weekly report, automatic report,...
clawhub install scheduled-reportsπ About This Skill
name: scheduled-reports version: 1.4.0 description: Define, preview, approve, and manage recurring reports for OpenClaw. Use when the user asks for a scheduled report, daily or weekly report, automatic report, or wants to convert an ad hoc report into a repeatable OpenClaw cron. Also use when the user needs to update, pause, resume, or retire an existing recurring report. This skill sharpens the report definition and creates the cron; it is not a custom execution runner. metadata: openclaw: emoji: "SR" requires: bins: - python3
Scheduled Reports
Use this skill to turn a conversational reporting request into an approved recurring-report definition and an OpenClaw cron.
Core doctrine
MEDIA: line.messageTemplate); never deliver a bare artifact.enabled.Use this workflow
1. Confirm that the user wants a recurring report, not a one-off analysis.
2. Gather the fields required for the saved definition. If the schedule phrasing contains conflicting cues (e.g., "every hour at 19:40" β hourly vs. daily), ask exactly one short clarification question before drafting the trigger. Never silently pick one interpretation.
3. Lock the approved data sources, queries, exclusions, delivery target, and runtime guards. When delivery.channel is conversation or thread, default target.conversationId (or threadId) to the conversation where the user framed the request. Confirm with the user before targeting a different conversation.
4. Draft the uiDefinition and the final executionPrompt.
5. Preview = generate, attach, and ask in one turn:
a. Generate the preview artifact on disk first by calling the appropriate rendering skill (pdf-report, chart-mpl, etc.). Do not emit any user-facing text until the artifact file exists on disk.
b. Send the artifact inline using the same output contract as cron runs: caption block (which is the approval ask, for example "AperΓ§u du rapport. RΓ©pondez OK pour activer.") on the first line(s), followed by exactly one MEDIA: line pointing at the generated file.
c. If the user signals the preview is missing, re-check the artifact on disk (regenerate if absent) and re-send it with the MEDIA: line. Never re-emit the caption text without the file.
6. Compute integrity hashes for the locked subtree and any referenced query files.
7. Validate and save the definition.
8. Run one activation check in the target cron mode and persist the verification metadata.
9. Create, update, pause, resume, or retire the OpenClaw cron and persist its metadata back into the definition.
Required fields
Every scheduled report definition must contain at least:
schemaVersionreportIdnamepurposeownerstatusscheduledeliveryoutputdataSourcesuiDefinitionexecutionPromptruntimeGuardsFor enabled and paused reports, the definition must also include:
previewapprovalintegrityautomationverificationRead references/REPORT_DEFINITION.md for the canonical shape and field rules.
Validation
Validate every final definition with:
python3 skills/scheduled-reports/scripts/validate_report_definition.py \
--input config/scheduled-reports/weekly-sales-summary.json
Do not activate or resume a report definition that fails validation.
Lifecycle rules
create: gather, draft, preview, approve, hash, validate, activation-check, save, create cronupdate: edit the saved definition, regenerate the preview when behavior changes, re-approve, refresh hashes, re-run the activation check, validate, update cronpause: set status to paused and pause the OpenClaw cronresume: restore status to enabled only after validating the saved definition, refreshing integrity data if needed, and re-running the activation checkretire: move to archived and remove or disable the cron only when the user explicitly asksOpenClaw cron rules
messageTemplate), not as a bare media reference.messageTemplate for chat, or subject + body for email) followed by a single MEDIA: line. No other text, no other media tokens, no splitting across responses.sessionTarget as the real cron.Runtime rules
mssql, chart-mpl, pdf-report, excel-export, and imap-smtp-mail.runtimeGuards as host-enforced rules, not decorative metadata.environmentFingerprint as a runtime-produced manifest string, not free text.skills:[,...] with ascending lexicographic ordering and no duplicates.Operational boundaries
queryFile references without a matching content hash.schedule.summary drift from the machine-readable trigger.Known limitations
Schedule clarification and chat-targeting rules in this skill are workflow requirements, not validator-enforced guarantees. The saved definition records the chosen trigger and delivery target, but it does not independently prove that an ambiguous schedule was clarified with the user or that a chat target matches the inbound conversation. Reliable enforcement for those behaviors must happen in the host runtime before the definition is saved.
Recommended storage conventions
These are recommendations, not hard requirements:
config/scheduled-reports/.json exports/reports/previews// exports/reports// Adjust the exact paths to the host agent's workspace conventions.
π Constraints
Validate every final definition with:
python3 skills/scheduled-reports/scripts/validate_report_definition.py \
--input config/scheduled-reports/weekly-sales-summary.json
Do not activate or resume a report definition that fails validation.