Reference
Quick-access reference tables for keyboard shortcuts, condition templates, API endpoints, troubleshooting, and terminology.
Keyboard Shortcuts
| Shortcut |
Action |
Mode |
| Ctrl+S |
Quick Save — overwrite the current config file |
Any (requires a loaded config) |
| Ctrl+Shift+S |
Save As — save to a new file |
Any |
| Ctrl+Shift+L |
Toggle Tool Library drawer |
Edit Mode only |
| Ctrl+R |
Reload — restores last active workflow from session |
Any |
Node Status Colors
| Border Color |
Meaning |
| Gray |
Idle — not yet run |
| Blue (pulsing) |
Running |
| Green |
Completed successfully |
| Red |
Error / failed |
| Yellow |
Warning / partial completion |
Condition Templates
NORA ships with a Condition Library of ready-made templates you can drop onto the canvas. Organize them by adding the appropriate edge labels.
Basic Logic
| Template |
Description |
Edge Labels |
| IF/Else (Status) |
Branch based on the previous node’s exit status |
success, error |
| Has Result? |
Route based on whether a result is present or null |
has-result, no-result |
Comparisons
| Template |
Description |
Edge Labels |
| Compare Values |
Check if two values are equal |
equal, not-equal |
| Threshold Check |
Route based on a metric meeting a threshold |
above-or-equal, below |
| Range Check |
Route based on a value falling inside or outside a range |
in-range, out-of-range |
Time / Date
| Template |
Description |
Edge Labels |
| Time Window |
Route based on whether current time is within a window (default: 9 AM – 5 PM) |
in-window, out-of-window |
| Day Check |
Route based on the day of the week (default: Mon–Fri) |
match, no-match |
Data Quality
| Template |
Description |
Edge Labels |
| Validation Check |
Route based on whether validation errors exist |
valid, invalid |
Display
| Template |
Description |
Edge Labels |
| Media Viewer |
Display images, video, audio, PDFs, or text files |
(none — display only) |
AI
| Template |
Description |
Edge Labels |
| AI Router |
Classify text into categories using AI |
Custom categories (default: summarize, todo, schedule, email, other) |
| AI Agent |
Pick and call a tool using AI |
Per-tool handles + success, error |
| AI Autonomous Agent |
Multi-step autonomous execution |
complete, partial, needs-input, error |
| Custom Script Agent |
Run custom Python/Node.js scripts |
success, error + custom route labels |
Condition Logic Types
| Logic Type |
How It Works |
Required Edge Labels |
| status |
Routes based on the previous node’s exit code (0 = success, non-zero = error) |
success, error |
| time-window |
Checks if the current time falls within a start–end window |
in-window, out-of-window |
| day-check |
Checks if today matches the selected days of the week |
match, no-match |
Note: The condition template library also includes comparison-based templates (Has Result?, Compare Values, Threshold Check, Range Check, Validation Check). These templates use status-based routing — the edge labels describe the logical meaning of the outcome, and routing is determined by the upstream node’s success or failure.
Layout Algorithms
Available via the Layout dropdown in Edit Mode:
| Layout |
Description |
| Hierarchical |
Tree-like structure flowing left to right (default) |
| Vertical |
Nodes stacked top to bottom |
| Horizontal |
Nodes arranged in a single row |
| Zigzag |
Alternating left-right pattern |
| Grid |
Organized in rows and columns |
| Spiral |
Nodes arranged in an outward spiral |
| Force-Directed |
Physics-based layout — connected nodes pull together, unconnected push apart |
API Endpoints
All endpoints run on http://localhost:4000 (default port).
Workflow Config
| Method |
Path |
Description |
| GET |
/config-folders |
Get workflow folder locations |
| GET |
/config-files |
List available config files |
| GET |
/config-file |
Load a specific config file |
| POST |
/save-config |
Save workflow configuration |
Command Execution
| Method |
Path |
Description |
| POST |
/execute |
Execute a shell command |
| POST |
/execute-interactive |
Execute in a new terminal window |
| POST |
/kill-foreground-process |
Kill a running foreground process |
AI Services
| Method |
Path |
Description |
| POST |
/ai-router/classify |
AI text classification |
| POST |
/ai-agent/execute |
AI Agent tool selection |
| POST |
/ai-autonomous-agent/execute |
Autonomous Agent (SSE streaming) |
| POST |
/custom-script-agent/execute |
Custom Script Agent execution |
| POST |
/custom-script-agent/message |
Send message to running script agent |
| POST |
/custom-script-agent/stop |
Stop a running script agent |
| GET |
/custom-script-agent/status/:id |
Get script agent session status |
Background Execution
| Method |
Path |
Description |
| POST |
/run-background |
Run a workflow in the background |
| GET |
/background-jobs |
List background jobs |
| GET |
/background-jobs/:jobId/logs |
Get logs for a background job |
| POST |
/stop-background-job |
Stop a background job |
Scheduling
| Method |
Path |
Description |
| POST |
/schedule-workflow |
Create a cron schedule |
| POST |
/unschedule-workflow |
Remove a schedule |
| GET |
/scheduled-workflows |
List active schedules |
Execution History
| Method |
Path |
Description |
| GET |
/execution-logs |
List all execution history |
| GET |
/execution-logs/:jobId |
Get detailed logs for one execution |
| POST |
/create-workflow-logger |
Create a foreground execution logger |
| POST |
/log-workflow-event |
Log an event during execution |
| POST |
/complete-workflow-logger |
Finalize an execution log |
Gmail
| Method |
Path |
Description |
| GET |
/gmail/has-credentials |
Check if OAuth credentials exist |
| POST |
/gmail/set-credentials |
Save OAuth credentials |
| GET |
/gmail/auth-url |
Get OAuth authorization URL |
| GET |
/gmail/oauth2callback |
OAuth redirect handler |
| GET |
/gmail/status |
Check connection status |
| POST |
/gmail/disconnect |
Disconnect Gmail |
| POST |
/gmail/send-test |
Send test email |
| POST |
/gmail/update-preferences |
Update notification preferences |
| GET |
/gmail/preferences |
Get notification preferences |
Process Management
| Method |
Path |
Description |
| GET |
/active-processes |
List active workflow processes |
| POST |
/kill-process |
Kill a specific process |
| POST |
/kill-workflow-processes |
Kill all processes in a workflow |
| POST |
/cleanup-stale-processes |
Remove stale process entries |
Tool Library
| Method |
Path |
Description |
| GET |
/tool-library/tools |
List installed tools |
| POST |
/tool-library/tools/create-from-node |
Create tool from a node |
| GET |
/tool-library/tools/template |
Get resolved tool template |
| POST |
/tool-library/tools/customize-instance |
Create workflow-local copy |
| POST |
/tool-library/tools/install-from-folder |
Install from folder |
| POST |
/tool-library/tools/delete-version |
Delete a tool version |
| POST |
/tool-library/tools/delete-tool |
Delete all versions of a tool |
| GET |
/tool-library/tools/manifest |
Get tool manifest |
Media & Files
| Method |
Path |
Description |
| GET |
/media/latest-in-folder |
Get latest file in a folder |
| GET |
/media/local |
Serve a local media file |
| POST |
/open-file |
Open file in external editor |
| POST |
/open-directory |
Open folder in file explorer |
| GET |
/file-content |
Read file content |
System
| Method |
Path |
Description |
| GET |
/health |
Server health check |
Troubleshooting
Import Errors
| Error |
Cause |
Fix |
| “Missing required export statement” |
Config file doesn’t use export const workflowBlocks |
Add the correct export syntax to your config file |
| “Error parsing blocks array” |
Malformed JSON: single quotes, trailing commas, unquoted properties |
Use double quotes for all strings; remove trailing commas |
| “No valid workflow blocks found” |
Empty blocks array or incorrect file structure |
Verify the file contains a non-empty workflowBlocks array |
| “Please select a JavaScript (.js) or JSON (.json) file” |
Wrong file type selected |
Only .js and .json config files are supported |
Save Errors
| Error |
Cause |
Fix |
| “Cannot modify the default workflow” |
Trying to quick-save the default workflow |
Use Save As (Ctrl+Shift+S) to save a copy |
| “No configuration file loaded” |
No config imported and trying to quick-save |
Import a config first, or use Export Config |
Workflow Execution Issues
| Problem |
Cause |
Fix |
| Condition node routes to wrong path |
Edge labels don’t match condition outputs |
Label edges with the correct terms (e.g., success/error, in-window/out-of-window) |
| Condition node has no routing |
Missing logicType on the condition |
Set logicType explicitly in the node properties |
| Orphaned edge warnings |
Connections reference deleted nodes |
Remove stale connections from the canvas |
| Node shows red but no output |
Command failed immediately |
Check the working directory and command path exist |
| Tool parameter prompt not appearing |
No parameters defined on the node |
Add parameter definitions in the node’s edit form |
AI Node Issues
| Problem |
Cause |
Fix |
| “API key not configured” |
No key saved for the selected provider |
Add the key in Settings → System → AI Provider Keys |
| AI returns wrong category |
Prompt too vague or categories ambiguous |
Refine the custom prompt; use distinct, descriptive category names |
| Autonomous Agent runs too long |
Max iterations or timeout too high |
Lower Max Iterations and Timeout Minutes |
| Autonomous Agent cost too high |
Expensive model or too many iterations |
Use a cheaper model; set a Budget Limit |
| Custom Script Agent hangs |
Script not flushing stdout |
Add sys.stdout.flush() (Python) after every print() |
Tool Library Issues
| Problem |
Cause |
Fix |
| “Failed to install tool” |
Source folder missing tool.json |
Ensure the folder contains a valid tool.json manifest |
| Tool not appearing after install |
Tool Library not refreshed |
Click the Refresh button in the drawer |
| “Customize on insert” disabled |
Workflow not saved to a file |
Save the workflow first, then enable customization |
Connection Issues
| Problem |
Cause |
Fix |
| Server not responding |
Server not started or wrong port |
Run npm run server and check the port in Settings |
| “Failed to fetch” errors |
Server crashed or port conflict |
Restart the server; check for port conflicts |
| Gmail OAuth fails |
Wrong redirect URI |
Ensure redirect URI is http://localhost:4000/gmail/oauth2callback |
File Locations
| Data |
Path |
| App settings |
~/.workflow-dashboard/config/settings.json |
| Gmail credentials |
~/.workflow-dashboard/email-credentials.json |
| Scheduled workflows |
~/.workflow-dashboard/config/schedules.json |
| Execution logs |
~/.workflow-dashboard/logs/ |
| Agent session logs |
~/.workflow-dashboard/agent_logs/ |
| Tool Library |
~/.workflow-dashboard/tools/ |
~ = your home directory (e.g., C:\Users\{YourName} on Windows)
Glossary
| Term |
Definition |
| Node |
A single step in a workflow — a command, condition, AI agent, or display element |
| Edge |
A connection between two nodes that defines execution flow |
| Edge Label |
A string on an edge that determines which path a condition or AI node takes |
| Canvas |
The visual workspace where you build workflows by placing and connecting nodes |
| Edit Mode |
UI mode for building — adding nodes, editing properties, making connections |
| Run Mode |
UI mode for executing — running nodes, monitoring progress, viewing output |
| Config File |
A .js or .json file containing the workflow’s nodes and connections |
| Quick Save |
Overwriting the current config file in-place (Ctrl+S) |
| Save As |
Saving to a new file location (Ctrl+Shift+S) |
| Background Job |
A workflow execution running on the server without the UI open |
| Foreground Execution |
A workflow running in the dashboard with real-time visual status |
| Cron Schedule |
A time-based schedule using cron syntax to auto-run workflows |
| Tool |
A packaged, versioned script that AI agents can execute |
| Tool Library |
A local repository of reusable tools stored at ~/.workflow-dashboard/tools/ |
| Tool Ref |
A reference to a specific tool and version in the Tool Library |
| Source Handle |
A connection point on a node’s right side where outgoing edges originate |
| Target Handle |
A connection point on a node’s left side where incoming edges arrive |
| Orphaned Edge |
A connection whose source or target node has been deleted |
| Process Monitor |
A panel showing active OS processes spawned by running workflows |
| SSE |
Server-Sent Events — streaming protocol used for real-time agent progress |
| Stop on Error |
A setting that halts workflow execution when a node fails |
| Topological Sort |
The algorithm used to determine node execution order based on connections |
| Working Directory |
The filesystem directory where a node’s command runs |