cron-briefing-script

Build scheduled multi-source briefing scripts delivered via Hermes cron in no_agent mode.

Updated May 28, 2026
One-click install
npx skills add https://github.com/patty-chow/the-stable --skill cron-briefing-script-patty-chow
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: cron-briefing-script
Source: https://github.com/patty-chow/the-stable/tree/main/skills/devops/cron-briefing-script
Command: npx skills add https://github.com/patty-chow/the-stable --skill cron-briefing-script-patty-chow

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Recurring digests (morning briefings, end-of-day snapshots, health checks) often burn LLM tokens on deterministic data stitching, or silently fail when OAuth sessions expire between scheduled runs. This Skill provides a proven pattern for building scheduled scripts that fetch multiple data sources, assemble a markdown briefing, and deliver it to Discord or Telegram with zero LLM involvement at run time. ## Core Features & Use Cases - Deterministic multi-source briefings: A template script with isolated src_*() functions per data source (weather, Google Calendar, Apple Calendar, Reminders, Gmail, Reddit news), each failing independently without killing the whole briefing. - Hermes cron integration: Correct scheduling conventions for no_agent=true jobs, including the bare-filename script path requirement, the 120s script timeout, and silent-on-empty-stdout behavior. - Scripted editorial synthesis: A fix for the fragile hybrid pattern — call Nous models directly with a static NOUS_API_KEY inside the script instead of relying on expiring OAuth sessions. - Use Case: Create a 7 AM daily briefing that pulls weather, calendar events, open reminders, and unread Gmail, composes a chief-of-staff style summary, and posts it to a Discord channel every morning without burning agent tokens. ## Quick Start Ask the agent to use the cron-briefing-script skill to create a daily 7am morning briefing script that pulls weather, calendar, and unread Gmail and delivers it to your Discord channel.

Frequently Asked Questions about cron-briefing-script

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I schedule a daily briefing script with Hermes cron?▼

Create the script under ~/.hermes/scripts/, then call the cron tool with action='create', a cron schedule, no_agent=True, and deliver set to your Discord channel. The script parameter must be the bare filename only — absolute or ~/-prefixed paths are rejected.

How do I combine multiple data sources into one scheduled briefing?▼

Write one src_*() function per source that returns a markdown string and catches its own exceptions, then register them in an ordered SECTIONS list stitched by a build_briefing() function. Test each source individually with the --source flag before running the full briefing.

Why does my scheduled Hermes cron briefing silently stop delivering?▼

The usual cause is an expired Nous OAuth session when the composition step runs as an agent on provider: nous. Fix it by switching to no_agent=true and calling the Nous API directly inside the script with the static NOUS_API_KEY instead of the rotating session token.

Why does my cron script time out when calling multiple models?▼

Hermes cron scripts default to a 120s timeout, so serial calls to several slow models exceed it. Run the calls concurrently with ThreadPoolExecutor, make lazy global credential caches thread-safe with a lock, and raise cron.script_timeout_seconds if needed.

Can I parse Apple Calendar dates from osascript in Python?▼

Yes, but macOS inserts U+202F (narrow no-break space) between the time and AM/PM, which breaks naive string splitting. Normalize the string with replace("\u202f", " ") before parsing any date returned from osascript.

When should I not use a no_agent briefing script?▼

Avoid it when the job needs reasoning over the data — picking interesting items, drafting contextual summaries with tool access, or taking conditional actions. Those cases need an agent-mode cron (no_agent=false) so the model can think and use Hermes toolsets.