← Back to blog

Hermes Agent Automation Blueprints Turn Cron Jobs Into Conversational Workflows

hermesautomationcronblueprintsworkflows
Hermes Agent Automation Blueprints Turn Cron Jobs Into Conversational Workflows

Hermes Agent now has Automation Blueprints, a system that replaces raw cron configuration with parameterized templates rendered natively across every interaction surface. The feature shipped in PR #41309, adding 3,582 lines across 30 files. The announcement from @NousResearch on June 11 accumulated 1,994 likes and 166 retweets in its first 24 hours.

What changed

Before Automation Blueprints, scheduling a cron job in Hermes meant writing a raw cron expression with slot=value parameters - a surface that exposed implementation details to the user. Blueprints invert this. Users pick from a curated catalog, fill in human-readable fields, and the system generates the cron job. No cron syntax required.

The system has three layers:

Suggested Cron Jobs - Hermes can propose automations based on a curated catalog, blueprint-carrying skills, or usage patterns. Users accept a suggestion with one tap via /suggestions. Nothing schedules without explicit acceptance, and dismissals are latched so the same suggestion does not reappear.

Automation Blueprints - 14 parameterized templates with typed slots. Each slot is one of four types: time, enum, text, or weekdays. The slot schema in cron/blueprint_catalog.py is the single source of truth. Four renderers consume it to produce native interfaces on every surface.

Conversational fill - The /blueprint <name> command (aliased to /bp) name-matches a blueprint and seeds the agent to ask for each value one at a time. The agent fills any blank or ambiguous slots, then calls the existing cron.jobs.create_job tool. There is no second job engine.

The 14 blueprints

Blueprint Description Cadence
morning-brief Today's weather, calendar, and top priorities Daily
important-mail Inbox monitor for flagged senders only Periodic
weekly-review What got done, what carried over, what's next Weekly
workday-start Weekday agenda and top priorities Weekdays
custom-reminder Recurring reminder in your own words Custom
evening-winddown End-of-day check-in, tomorrow's agenda Daily
news-digest Recurring digest on a topic, deduped across runs Custom
bill-renewal-watch Heads-up before recurring payments Custom
habit-checkin Recurring nudge to keep a habit on track Daily
hydration-move Periodic nudge to drink water and stand up Periodic
meal-plan Weekly meal plan with consolidated grocery list Weekly
learn-daily One bite-sized lesson per day on a topic Daily
gratitude-journal Gentle evening prompt to reflect on the day Daily
on-this-day Notable historical event, discovery, or fact Daily

One schema, four surfaces

The architecture centers on a single slot schema in cron/blueprint_catalog.py. Four renderers consume it to produce different UIs for different contexts:

  • Dashboard / desktop app - A Blueprints tab renders each blueprint's slots as a form. Submitting the form calls POST /api/cron/blueprints/instantiate, which fills the slots and creates the job directly - no agent turn needed.

  • CLI / TUI / messenger - Each blueprint renders as a slash command with pre-filled slot values. Power users can use the deterministic slot=value one-liner without going through a conversation.

  • Agent conversation - The /blueprint command seeds the agent to ask for each value one at a time. The agent validates user-supplied values and fills any blank or ambiguous slots before calling cron.jobs.create_job.

  • Docs catalog - A generated page lists every blueprint with its slots, defaults, and a copy-paste command. Desktop users also get a hermes://blueprint/<key>?slot=val deep link that routes into the chat composer pre-filled.

All four paths converge on the same cron.jobs.create_job call. There is no second job engine, no divergence between the form-fill path and the conversational path.

Typed slots and validation

Each blueprint slot belongs to one of four types:

Slot type What it accepts Example
time HH:MM in 24-hour or 12-hour format 08:00, 6:30pm
enum One of a fixed set of options discord, slack, email
text Free-form string "Check for pull request reviews"
weekdays Named preset or custom day set weekdays, everyday, Mon-Wed-Fri

enum slots have a strict flag. When strict=True, only the listed options are accepted. When strict=False, the options are suggestions and any value passes - useful for slots like the delivery platform, where the set of valid values depends on the user's configured gateways and is validated downstream by the cron scheduler.

weekdays slots accept named presets (everyday, weekdays, weekends) or custom day combinations. The preset weekdays maps to cron 1-5, weekends maps to 0,6, and everyday maps to *.

The fill_blueprint function validates supplied values against the slot schema and raises BlueprintFillError on rejection. A separate cron/scripts/classify_items.py module (226 lines) handles the suggestion pipeline - scanning blueprint-carrying skills, matching installation/integration patterns, and populating the suggestion catalog.

Invariant-safe conversational fill

The conversational fill path runs through a shared handler that returns both display text and an agent seed. The seed enters as a normal user turn - never a synthetic injection. This prevents the agent from treating the blueprint context as instructions it must follow.

Two code paths consume the shared handler:

  • Gateway - Dispatch rewrites event.text to the seed and falls through to the agent. This is the same pattern /steer uses.

  • CLI - The handler sets a one-shot _pending_agent_seed attribute. The interactive loop consumes it immediately after process_command() and runs it as the next turn.

Both paths produce the same behavior: the agent asks for missing values, validates the answers, and calls cron.jobs.create_job. The user never types a cron expression.

Consent-first design

Suggestions are never auto-scheduled. Three design decisions enforce this:

  1. Explicit acceptance required - Every suggestion must be explicitly accepted before a job is created.

  2. Dismissals latch - Dismissing a suggestion permanently suppresses it. The same suggestion does not reappear in future /suggestions output.

  3. Pending cap - The suggestion store enforces a maximum number of pending suggestions to prevent notification fatigue.

The suggestion pipeline draws from three sources: a curated catalog of common automations, skills that carry blueprint definitions, and (reserved) usage and integration detectors that identify patterns a user might want to automate.

What this replaces

Before blueprints, setting up a cron job in Hermes required writing raw slot schemas - a workflow that asked users to think in implementation terms. The blueprints system moves all of that complexity into the catalog. Users name what they want, the system asks what it needs, and the job is created from a validated template.

The 3,582-line PR touched cron/, hermes_cli/, gateway/, apps/desktop/, tools/, and the dashboard API surface. Every render path shares the same slot schema, and every job creation call routes through the same cron.jobs.create_job function. The feature adds complexity to the catalog layer while removing it from the user experience.

[^1]: Nous Research. "Automation Blueprints announcement." X. June 11, 2026. [^2]: Nous Research. "feat(cron): Automation Blueprints - parameterized automation templates across every surface." GitHub. Merged June 11, 2026.

Termagotchi
_

Ryan Underdown

Autodidact. Rarely listens to advice.

Follow on X @catamarammed or GitHub @underdown