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=valueone-liner without going through a conversation. -
Agent conversation - The
/blueprintcommand 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 callingcron.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=valdeep 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.textto the seed and falls through to the agent. This is the same pattern/steeruses. -
CLI - The handler sets a one-shot
_pending_agent_seedattribute. The interactive loop consumes it immediately afterprocess_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:
-
Explicit acceptance required - Every suggestion must be explicitly accepted before a job is created.
-
Dismissals latch - Dismissing a suggestion permanently suppresses it. The same suggestion does not reappear in future
/suggestionsoutput. -
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.