Rootly Morning Brief

v1.0.0

Generate and deliver a Rootly morning incident digest for on-call operations. Use when the user asks for a daily Rootly briefing, incident summary, on-call s...

0· 130·0 current·0 all-time
MIT-0
Download zip
LicenseMIT-0 · Free to use, modify, and redistribute. No attribution required.
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
Name/description match the code and runtime instructions. The script fetches incidents, on-calls, and action items from Rootly and formats a short digest. The only required credential is ROOTLY_API_KEY, which is appropriate and declared as the primaryEnv.
Instruction Scope
SKILL.md instructs the agent to run the included script and return stdout; it documents mock-data usage and the exact env-file fallback behavior. The runtime rules are narrowly scoped to building and printing the digest and explicitly avoid sending to Slack themselves (OpenClaw cron handles delivery).
Install Mechanism
There is no install spec (instruction-only with an included script), so nothing arbitrary is downloaded or installed. The script is pure Python and relies on the stdlib (urllib, zoneinfo, pathlib, etc.), which is proportionate.
Credentials
The skill declares only ROOTLY_API_KEY as required, which is appropriate. The script also optionally reads ROOTLY_API_KEY_FILE plus OpenClaw-specific paths (OPENCLAW_STATE_DIR, OPENCLAW_HOME) to find a secret file — these extra env vars are only used as fallback locations and are reasonable for cron runs, but they are not declared in requires.env. No unrelated credentials are requested.
Persistence & Privilege
always is false and the skill does not request persistent system presence or modify other skills. It only reads its own files and (optionally) secret files in OpenClaw state/home locations.
Assessment
This skill appears to do exactly what it says: fetch Rootly data and print a short, phone-friendly digest. Before installing, be aware of two things: (1) it requires a Rootly API key (ROOTLY_API_KEY) or a file containing the key; the script will search standard OpenClaw secret paths and user home locations as fallbacks — that's intentional to support cron runs but means a secret file named rootly_api_key in those paths would be read if present; (2) the script is local Python code (no external install), so review and test it in a safe context (use --mock-data-dir to exercise formatting) before wiring it into a production cron/Slack announcement. Note: there's a small bug in the script (a likely typo where an undefined variable 'tar' is referenced) that could cause a runtime error; you may want to run the tests or a mock run to confirm runtime stability before scheduling daily runs.

Like a lobster shell, security has layers — review code before you run it.

latestvk971qtpza31rrjqjhn6nkng2hd82zf3q

License

MIT-0
Free to use, modify, and redistribute. No attribution required.

Runtime requirements

EnvROOTLY_API_KEY
Primary envROOTLY_API_KEY

SKILL.md

Rootly Morning Brief

Run scripts/rootly_morning_brief.py to print a short Rootly digest to stdout. OpenClaw cron --announce handles Slack delivery.

The output is phone-friendly by default: one line per item, Slack deep links for drill-down, and --max-items defaults to 3.

Required Inputs

  • ROOTLY_API_KEY: Rootly API key (or a readable secret file fallback)

Optional Inputs

  • ROOTLY_BASE_URL (default https://api.rootly.com)
  • ROOTLY_TIMEZONE (default America/Toronto)
  • ROOTLY_INCLUDE_PRIVATE (true/false, default false)
  • ROOTLY_API_KEY_FILE (path to a file containing only the API key)
  • ROOTLY_BRIEF_LOG_LEVEL (WARNING default; set to INFO or DEBUG for troubleshooting)
  • ROOTLY_MOCK_DATA_DIR (optional local mock data directory)

Run Commands

Manual test:

python3 scripts/rootly_morning_brief.py

Include private incidents (opt-in):

python3 scripts/rootly_morning_brief.py --include-private

Run with local sandbox data (no Rootly account needed):

python3 scripts/rootly_morning_brief.py --mock-data-dir ./mock-data

Machine-readable output:

python3 scripts/rootly_morning_brief.py --json

Cron Setup (Daily 8:00 AM Toronto)

openclaw cron add \
  --name "Rootly morning brief" \
  --cron "0 8 * * *" \
  --tz "America/Toronto" \
  --session isolated \
  --message "Use rootly-morning-brief. Run scripts/rootly_morning_brief.py and print the full digest." \
  --announce

To pin delivery to a specific Slack channel, add:

  • --channel slack --to "channel:CXXXXXXX"

Example stdout

*Rootly Morning Brief* — Sun Mar 15
At a glance: 2 active (1 SEV0/SEV1) · 1 resolved in 24h · 2 on-call now · 1 overdue

*Active now*
• 🚨 <https://root.ly/gsif-3|Global sign-in failures after OIDC key rotation> — [SEV0] · [OPEN] · started Sun 6:42 AM
• 🟧 <https://root.ly/clsf-2|Checkout latency spike during us-east database failover> — [SEV2] · [OPEN] · started Sun 5:25 AM

*On-call now*
• Nicole Bu — L1 primary
• Jordan Patel — L2 secondary

*Overdue actions*
• ⚠️ <https://root.ly/gtb2es|Rotate CI deploy tokens and verify revocation in every production region.> — [P1] · due Sat 7:30 AM · Nicole Bu · SEC-742

*Resolved (24h)*
• <https://root.ly/ubaa-1|Unauthorized bastion access attempt blocked> — resolved Sun 12:02 AM

Agent Execution Rules

  1. Always run scripts/rootly_morning_brief.py located in the rootly-morning-brief skill directory; do not reimplement the digest manually.
  2. Return script stdout as-is for delivery; do not paraphrase or rewrite the section structure.
  3. If --mock-data-dir is set, run entirely from local mock files.
  4. If --mock-data-dir is not set, use ROOTLY_API_KEY, then ROOTLY_API_KEY_FILE, then standard OpenClaw secret-file paths.
  5. Use timezone America/Toronto unless the user asks otherwise.
  6. Default to public-only incidents.
  7. Only include private incidents if the user explicitly opts in.
  8. Keep output short and readable on a phone screen.
  9. If one section has no data, include a clear "none" line instead of omitting the section.

Files

8 total
Select a file
Select a file to preview.

Comments

Loading comments…