Dashboard Reports & Alerts Ops
SkillDatabases & dataThis skill teaches your AI how scheduled dashboard email reports and analytics alerts are built, deployed, and delivered. Once added, your AI can set up automated email reports, configure alert rules, and fix problems when reports or alerts fail to arrive.
Available today. Use it from your connected AI after setup.
No other account needed.
After adding it, ask your AI to set up, deploy, or troubleshoot a scheduled dashboard email report or an analytics alert. It is meant for report and alert delivery work, not general dashboard questions.
Then ask your AI: use the Dashboard Reports & Alerts Ops skill
What your AI can do with it
- Set up scheduled dashboard email reports
- Configure analytics alert rules
- Render dashboard reports as SVG or PNG images
- Set up automated delivery timing for reports
- Set notification delivery settings
- Debug reports or alerts that fail to arrive
What this skill tells your AI
The instructions your AI receives, as published by builderio/agent-native in templates/analytics/.agents/skills/dashboard-ops/SKILL.md and read by ahel’s review.
Dashboard email reports (dashboard-report-subscriptions actions) and
analytics alert rules (analytics-alert-rules actions) are SQL-backed action
surfaces. This skill covers the deployment/runtime machinery behind them —
the agent chatting with an end user does not need this; it only needs the
action names and the user-facing constraints already in AGENTS.md.
Dashboard Email Report Rendering
- Scheduled reports render entirely server-side. They do not use a headless
browser, Chromium pack download, or the old
reportScreenshot=1embed-session screenshot URL; interactive dashboard screenshot capture remains separate. - Each panel's query runs through the same source dispatcher the UI uses
(
runDashboardPanelQuery), inside the subscription owner's request context, so per-source access scoping (BigQuery/Gong/HubSpot credentials, org scoping) is preserved exactly as if the owner loaded the dashboard. - Chart panels are drawn as SVG and rasterized to PNG with
@resvg/resvg-js, then embedded in the email ascid:attachments. Fonts come fromresolveOgFontFiles()— resvg has no system fonts in a Lambda runtime, so chart text silently renders blank (not an error) unless those bundled font files are passed to it. Never drop that font wiring when touching chart rendering. - Non-chart panels (
section,metric,callout,table,heatmap) render as real email HTML, not images.extensionpanels cannot be rendered for email at all and instead link out to the live dashboard. - A panel that fails to query renders a visible error card in its place and
marks the whole run
degraded; a degraded report is never sent or recorded as if it were complete. If every panel fails, nothing is sent and the subscription errors out instead of emailing an empty report. - Subscriptions are capped at five distinct recipients
(
MAX_DASHBOARD_REPORT_RECIPIENTS) — recommend a mailing-list address for larger audiences. - The ten-minute retry delay is an eligibility floor, not a guarantee; the
*/15sweep runs the retry on its first tick after that floor. - The serverless delivery deadline (
SERVERLESS_REPORT_DELIVERY_BUDGET_MSinserver/jobs/dashboard-report.ts) reserves 220 seconds of thedashboard-report-sweep-backgroundfunction's 300-secondnetlify.tomltimeout for rendering and delivery, leaving the remainder for cleanup. - Netlify processes one subscription per background invocation so every report
gets a fresh delivery deadline and first-party queries cannot contend with
another report. When due work remains, the worker queues another background
invocation immediately and drains the batch sequentially. Long-lived
(non-Netlify) runtimes default to a limit of 5, overridable with
DASHBOARD_REPORT_SWEEP_LIMIT.
Env Vars
DASHBOARD_REPORT_BASE_URL— overrides the dashboard link URL in emails; if unset, falls back togetAppProductionUrl()(theAPP_URL/WORKSPACE_OAUTH_ORIGIN/BETTER_AUTH_URLchain).RESEND_API_KEYorSENDGRID_API_KEYplusEMAIL_FROM— required to send the report email at all.DASHBOARD_REPORTS_CRON_SECRET— bearer token external cron callers must send toPOST /api/dashboard-reports/run.DASHBOARD_REPORT_SWEEP_LIMIT— overrides the per-tick sweep size on non-Netlify runtimes (see above).
Cron Wiring
- Netlify builds emit a scheduled trigger plus a background worker from
scripts/emit-netlify-dashboard-report-cron.ts, using a per-deploy internal token and disabling the in-process interval scheduler on Netlify to avoid duplicate sends. - External cron callers can sweep due reports by POSTing
/api/dashboard-reports/runwithAuthorization: Bearer $DASHBOARD_REPORTS_CRON_SECRET. - The same
scripts/emit-netlify-dashboard-report-cron.tsscript also emits the alert-rule cron trigger plus background worker, running every five minutes on Netlify. Long-lived runtimes use the in-process scheduler unlessANALYTICS_ALERT_JOBS=0is set. - External cron callers can run due alerts by POSTing
/api/analytics-alerts/runwithAuthorization: Bearer $ANALYTICS_ALERTS_CRON_SECRET.
Alert Notification Delivery
Alert notifications use the shared notification channel registry
(channels can include inbox, email, slack, webhook, or any custom
registered channel):
- Slack/webhook delivery prefers per-rule
metadata.delivery.slackWebhookUrl/metadata.delivery.webhookUrl(uptime monitors store these on the monitor row), then falls back toNOTIFICATIONS_SLACK_WEBHOOK_URL/NOTIFICATIONS_WEBHOOK_URL. OptionalNOTIFICATIONS_SLACK_WEBHOOK_AUTHconfigures Slack auth. - Email delivery needs
RESEND_API_KEYorSENDGRID_API_KEYplusEMAIL_FROM. Per-ruleemailRecipientsfall back toNOTIFICATIONS_EMAIL_RECIPIENTS. Saving explicitemailRecipientsalso remembers them as the current user's defaults for the next alert rule created in Settings.
Users can also view and manage report subscriptions and alert rules in Settings; that UI uses the same action surface as the agent, so no separate implementation is needed there.
Related Skills
- dashboard-management — the dashboard artifact model these features attach to.
- integration-webhooks (root) — the general queue-and-processor pattern for outbound webhook delivery.
Signals
- GitHub stars
- 5k
- Forks
- 448
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
dashboard-ops- Source
- github.com/builderio/agent-native