Skip to content

Workflow Automation

JARVIS includes a full workflow automation engine — think n8n or Zapier, but built into your AI daemon with natural language creation, agent delegation, and self-healing execution.

Workflows are event-driven automations: when X happens, do Y. They’re defined as directed graphs of nodes (triggers, actions, conditions) connected by edges. You can build them four ways:

  1. Chat — tell JARVIS in the main chat: “Create a workflow that checks my email every hour and sends a Telegram summary”
  2. Visual builder — drag-and-drop node graph in the dashboard
  3. AI sidebar — describe what you want in the canvas AI chat panel
  4. API — create programmatically via REST endpoints

The simplest way to create workflows is to ask JARVIS directly in chat. The manage_workflow tool is available to the primary agent and supports these actions:

ActionExample
create”Create a workflow that monitors my project folder and runs tests on changes”
list”List my workflows”
run”Run the daily standup workflow”
describe”Describe workflow X”
enable/disable”Disable the email checker workflow”
delete”Delete the test workflow”

JARVIS uses the NL builder to parse your description into a full workflow definition — picking the right triggers, actions, logic nodes, and wiring them together. The workflow appears immediately in the Workflows dashboard.

Navigate to Workflows in the sidebar. The workflow list shows all your automations with status, execution count, and quick actions (run, pause, delete).

Click a workflow to open the canvas editor:

  • Left panel — Node Palette: draggable nodes organized by category (collapsible)
  • Center — ReactFlow canvas: visual node graph with connections
  • Right panel — tabbed: Config (node properties), Executions (real-time monitoring), Versions (history + diff), AI (NL chat assistant) (collapsible)

Both side panels collapse to thin strips for maximum canvas space.

NodeDescription
trigger.cronCron schedule (e.g., 0 9 * * * for daily at 9am)
trigger.webhookInbound HTTP endpoint with optional HMAC validation
trigger.pollHTTP polling with deduplication
trigger.manualManual execution via API or dashboard
trigger.file_changeFile system changes (create/modify/delete)
trigger.clipboardClipboard content changes
trigger.processProcess start/stop events
trigger.emailEmail received
trigger.calendarCalendar events
trigger.screenScreen context changes (from Awareness)
trigger.gitGit push/commit events
NodeDescription
action.send_messageSend a chat message
action.run_toolExecute any registered tool
action.agent_taskSpawn a sub-agent for complex reasoning
action.http_requestHTTP request with full config
action.file_writeWrite content to a file
action.notificationSend desktop/channel notification
action.gmailSend email via Gmail
action.calendar_actionCreate/update calendar events
action.telegramSend Telegram message
action.discordSend Discord message
action.shell_commandExecute shell commands
action.code_executionRun JavaScript code
NodeDescription
logic.if_elseConditional branching (true/false outputs)
logic.switchMulti-way branching
logic.loopIterate over arrays
logic.delayWait for a duration
logic.mergeCombine multiple inputs
logic.raceFirst-to-complete wins (parallel race)
logic.variable_setSet a variable
logic.variable_getRead a variable
logic.template_renderRender a template string
NodeDescription
transform.json_parseParse JSON string
transform.csv_parseParse CSV data
transform.regex_matchExtract with regex
transform.aggregateSum, average, count, min, max
transform.map_filterMap and filter arrays
NodeDescription
error.error_handlerCatch errors from upstream nodes
error.retryRetry a node with custom policy
error.fallbackProvide fallback value on failure

Node configs support {{...}} template expressions:

{{myVariable}} — Read a workflow variable
{{$trigger.field}} — Access trigger data
{{$node["node-id"].data.field}} — Access another node's output
{{$env.MY_VAR}} — Read environment variable

The trigger manager coordinates all background trigger sources:

Trigger TypeBackendDescription
CronCronSchedulerUses cron expressions (0 9 * * *). Handles timezone, next-run calculation, graceful stop.
WebhookWebhookManagerRegisters HTTP endpoints at /api/webhooks/:id. Supports GET/POST, optional HMAC signature validation.
PollPollingEnginePolls HTTP endpoints on configurable intervals. Deduplicates via response hashing.
Filefs.watchWatches file paths for create/modify/delete events.
ScreenObserverBridgeConnects to the Awareness system. Evaluates screen conditions (text present, app active, LLM visual check).
ClipboardObserverFires on clipboard content changes.
ProcessObserverFires on process start/stop events.

Triggers are registered automatically when a workflow is enabled and unregistered when disabled or deleted.

Workflows execute as a topological sort of the node graph. The engine:

  1. Loads the latest version definition
  2. Builds a dependency graph via topological sort
  3. Executes nodes level-by-level (parallel or sequential, per settings)
  4. Each step: collects input → resolves templates → executes → routes output
  5. Emits real-time WebSocket events (step_started, step_completed, step_failed)
  6. Records execution history with per-step timings and outputs

Three modes via onError setting:

  • stop — halt workflow on first failure
  • continue — skip failed node, continue execution
  • self_heal — after retries exhaust, the AI diagnoses the failure, analyzes node config, and auto-fixes (e.g., corrects a malformed URL, fixes an auth header, adjusts a regex)

Retry policy per node: max retries, delay, backoff (fixed or exponential).

When onError: "self_heal" is set and a node fails after all retries:

  1. The engine sends the error message + node config to the LLM
  2. The LLM analyzes the failure and returns a corrected config
  3. The node is re-executed with the fixed config
  4. If the fix works, the corrected config is persisted for future runs

Two scopes:

  • Execution variables — in-memory, scoped to a single run
  • Persistent variables — stored in vault, survive across executions

Use logic.variable_set / logic.variable_get nodes or the Variables API.

Export workflows as YAML for version control or sharing:

Terminal window
# Export
curl http://localhost:3142/api/workflows/{id}/export
# Import
curl -X POST http://localhost:3142/api/workflows/import \
-H "Content-Type: application/json" \
-d '{"yaml": "..."}'
MethodEndpointDescription
GET/api/workflowsList all workflows
POST/api/workflowsCreate workflow
GET/api/workflows/:idGet workflow
PATCH/api/workflows/:idUpdate workflow
DELETE/api/workflows/:idDelete workflow
GET/api/workflows/:id/versionsVersion history
POST/api/workflows/:id/versionsCreate version
POST/api/workflows/:id/executeRun workflow
GET/api/workflows/:id/executionsExecution history
GET/PATCH/api/workflows/:id/variablesPersistent variables
GET/api/workflows/:id/exportYAML export
POST/api/workflows/importYAML import
GET/api/workflows/nodesNode catalog
POST/api/workflows/nl-chatNL builder chat
GET/api/workflows/suggestAuto-suggestions
POST/GET/api/webhooks/:idInbound webhooks

JARVIS analyzes your behavior patterns (from the Awareness system) and suggests workflows you haven’t thought of:

  • Repeated app switches — detected copy-paste patterns between apps (e.g., “You switch between Chrome and VS Code 15 times/day”)
  • Recurring errors — same app failing repeatedly (e.g., “Docker has had 7 errors today — set up auto-restart?”)
  • Scheduled behavior — actions you do at the same time daily (e.g., “You check Slack at 9am every day — automate your morning routine?”)
  • Complex patterns — AI-analyzed behavioral trends across 100+ events

Suggestions appear in the dashboard with preview definitions you can accept with one click or dismiss. The suggestion engine respects a 5-minute cooldown between analyses and maintains the last 500 events in memory.

"Every morning at 9am, summarize my GitHub PRs, check for
urgent issues, and post a summary to Slack. If anything is
critical, also send me a Telegram alert."
"When any file in ~/projects/myapp/src changes, run the
test suite. If tests fail, send me a notification with
the error output."
"Every hour, check my Gmail for new emails. Summarize
them and send me a Telegram message with the digest."
"When I have VS Code open and the terminal shows a build
error, automatically research the error and suggest a fix."

Video tutorial placeholder: creating workflows from chat and from the visual builder.

Add your future video link here.