Rootly Morning Brief
v1.0.0Generate 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...
MIT-0
Security Scan
OpenClaw
Benign
high confidencePurpose & 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.
latest
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(defaulthttps://api.rootly.com)ROOTLY_TIMEZONE(defaultAmerica/Toronto)ROOTLY_INCLUDE_PRIVATE(true/false, defaultfalse)ROOTLY_API_KEY_FILE(path to a file containing only the API key)ROOTLY_BRIEF_LOG_LEVEL(WARNINGdefault; set toINFOorDEBUGfor 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
- Always run
scripts/rootly_morning_brief.pylocated in therootly-morning-briefskill directory; do not reimplement the digest manually. - Return script stdout as-is for delivery; do not paraphrase or rewrite the section structure.
- If
--mock-data-diris set, run entirely from local mock files. - If
--mock-data-diris not set, useROOTLY_API_KEY, thenROOTLY_API_KEY_FILE, then standard OpenClaw secret-file paths. - Use timezone
America/Torontounless the user asks otherwise. - Default to public-only incidents.
- Only include private incidents if the user explicitly opts in.
- Keep output short and readable on a phone screen.
- If one section has no data, include a clear "none" line instead of omitting the section.
Files
8 totalSelect a file
Select a file to preview.
Comments
Loading comments…
