What it is
Hermes Workflow adds a visual designer for agent workflows: five node kinds on a canvas, executed by a plugin-owned sequential runner. Designs are plain JSON, runs are resumable state on disk, and agent steps execute through the host’s own model seams — never through a second scheduler or a background thread.
You can build the graph in the canvas, save it, run it from chat or from the dashboard, and answer an approval gate from either. A run that pauses survives a restart, a closed browser and a fresh process.
| Piece | Role |
|---|---|
| Canvas (three copies) | Drag-and-drop editor for trigger, agent, condition, approval and output nodes, plus sticky notes |
/workflow command | Create, list, open, save, validate, run and approve from chat |
| Five tools | workflow_design_{save,load,validate,run,respond} for the agent |
| Dashboard API | REST routes the web and Desktop canvases call |
| Runner | Sequential, resumable execution with gates, retries, deadlines and delivery |
| Scheduler | Recurring runs as real Hermes cron jobs, never an in-process timer |
The five node kinds
There are exactly five runnable kinds, and the schema, the validator, every canvas and the runbook all agree on them. A sixth canvas node, the note, is a sticky label for the person reading the canvas — it has no ports, takes no edges, and is dropped by the converter.
| Kind | Required | Optional | Behaviour |
|---|---|---|---|
trigger | trigger_mode | schedule | Exactly one per design; manual or schedule |
agent | prompt | profile, model, schema, inputs, timeout, retries | A model call through the host’s spawn seam |
condition | expression | — | Evaluates an upstream output; false prunes the branch |
approval | question | context, options, timeout_minutes, on_timeout | Parks the run until a person answers, or the deadline passes |
output | — | deliver, target | Collects parents’ outputs; optionally delivers them |
note | — | text, color | Canvas annotation only; never reaches the runner |
Edges are after: [<parent-id>...]: a node runs once all of its parents have run. x and y are widget-only coordinates and never affect execution order.
Install
hermes plugins install https://github.com/Printaga/Hermes-Workflow.git
hermes plugins enable visual-workflow
hermes plugins doctor . To develop on a checkout in place, clone it into the plugin directory and adopt it, because a symlink is discoverable but cannot be tracked:
git clone https://github.com/Printaga/Hermes-Workflow.git ~/.hermes/plugins/visual-workflow
hermes plugins adopt visual-workflow Quick start
Start from a template
examples/*.designer.jsonholds four working designs:hello-world,daily-digest,approval-demoandreview-gate. The canvas’s start from a template picker loads one as an unsaved draft;GET /designs/templatesreturns the same list with the graph inline for scripting.Build and validate
Click a palette kind to add a node, drag to arrange, and drag from an output port to another node to add an edge. Press Validate until it reports
valid.Save it
Copy JSON, then
/workflow save <name> <json>, or use theworkflow_design_savetool. Names must match^[a-z0-9][a-z0-9_.-]{0,63}$because the name becomes a filename.Run it
workflow_design_validateon the stored graph, thenworkflow_design_runwith the design name. The result tells you whether it finished, paused at a gate, or failed and why.
::preview{file="<REPO_ABS>/widgets/designer.html"}