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 |
Edge Colors
| Edge Color | Meaning |
|---|---|
| Green (animated) | Success path — workflow routing to next node |
| Red (animated) | Error/negative path — error, false, no-output, etc. |
| Purple (animated) | Loop edge — workflow looping back to a prior node |
| Gray (static) | Idle — not yet traversed |
Loop Edge Labels
| Label | Iterations | Notes |
|---|---|---|
loop |
10 (default) | No number = defaults to 10 |
loop:3 |
3 | Explicit iteration count |
loop:50 |
50 | Maximum allowed |
loop:999 |
50 | Clamped to safety cap of 50 |
During execution, the label updates to show progress:
– loop:3 ↺ 1/3 — first iteration
– loop:3 ↺ 2/3 — second iteration
– loop:3 ✓ 3/3 — all iterations complete
The counter resets to the clean loop:N label when the workflow is reset.
Condition Templates
NORA ships with a Condition Library of ready-made templates you can drop onto the canvas. See Node Types — Condition Node for full details on each.
Basic Logic
| Template | Logic Type | Edge Labels |
|---|---|---|
| IF/Else (Status) | status |
success, error |
| Has Output? | output-check |
has-output, no-output |
Output Comparisons
| Template | Logic Type | Edge Labels | Parameters |
|---|---|---|---|
| Output Contains | output-contains |
contains, not-contains |
searchString, caseSensitive |
| Output Matches (Regex) | output-matches |
matches, no-match |
regexPattern, regexFlags |
| Numeric Threshold | numeric-threshold |
above, below |
threshold, operator |
| Numeric Range | numeric-range |
in-range, out-of-range |
rangeMin, rangeMax |
Time / Date
| Template | Logic Type | Edge Labels | Parameters |
|---|---|---|---|
| Time Window | time-window |
in-window, out-of-window |
startTime, endTime |
| Day Check | day-check |
match, no-match |
selectedDays (array) |
Advanced
| Template | Logic Type | Edge Labels | Parameters |
|---|---|---|---|
| JSON Expression | json-expression |
true, false |
expression, variables |
AI Nodes
| Template | Type | Edge Labels |
|---|---|---|
| AI Router | aiRouter |
Custom categories (e.g., summarize, todo, other) |
| AI Agent | aiAgent |
Per-tool handles + success, error |
| AI Autonomous Agent | aiAutonomousAgent |
complete, partial, needs-input, error |
| Custom Script Agent | customScriptAgent |
success, error + custom route labels |
Condition Logic Types
| Logic Type | How It Works | Required Edge Labels |
|---|---|---|
status |
Routes based on exit code (0 = success, non-zero = error) | success, error |
output-check |
Routes based on whether stdout is non-empty | has-output, no-output |
output-contains |
Substring search in stdout | contains, not-contains |
output-matches |
Regex test against stdout | matches, no-match |
numeric-threshold |
Extracts first number, compares with operator | above, below |
numeric-range |
Extracts first number, checks min–max bounds | in-range, out-of-range |
time-window |
Checks if current time is within a window | in-window, out-of-window |
day-check |
Checks if today matches selected days | match, no-match |
json-expression |
Parses JSON stdout, evaluates expression | true, false |
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 |
Custom Script Agent Sessions
The Custom Script Agent maintains persistent sessions for multi-turn interactions:
| Method | Path | Description |
|---|---|---|
| POST | /custom-script-agent/start-session |
Start a new persistent session |
| POST | /custom-script-agent/send-to-session |
Send message to an active session |
| POST | /custom-script-agent/stop-session |
End a session |
| GET | /custom-script-agent/session-status/:id |
Get session state and history |
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 |
System & Startup Issues
| Problem | Cause | Fix |
|---|---|---|
| NORA doesn’t start with Windows | Windows startup shortcut missing or stale | Open Settings → System, toggle Start with Windows OFF then ON again. This recreates the shortcut in your Windows Startup folder. |
| App shows “Start with Windows” enabled but doesn’t auto-start | Shortcut was deleted or points to old exe | Same as above — toggle the setting OFF then ON to refresh the shortcut. |
| Schedules not persisting after restart | ~/.nora/config/schedules.json corrupted or missing |
Check the file exists and contains valid JSON. If corrupted, delete it and recreate schedules via the UI. |
| External schedule edits not appearing | File watcher may not have triggered, or edits made before app started | Click ↻ Refresh in the Scheduler tab to force a reload from disk. External edits are auto-merged when detected. |
Tip (Windows Startup): The startup shortcut is located at:
%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\NORA.lnk
You can manually verify it exists and points to the correct NORA executable.
Scheduler Features
| Feature | Location | Notes |
|---|---|---|
| Pause/Resume | Click ⏸/▶ button on each schedule card | Paused schedules won’t execute until resumed |
| Run Now | Click ▶ Run Now on any schedule card | Triggers immediate execution |
| Edit Schedule | Click ✎ Edit on any schedule card | Change cron expression or label; workflow cannot be changed |
| Refresh | Click ↻ Refresh in scheduler header | Reloads schedules from disk; useful after external edits |
| AI-created schedules | Shows “(by AI)” after creation date | Schedules with createdBy: "agent" are visually marked |
File Locations
| Data | Path |
|---|---|
| App settings | ~/.nora/config/settings.json |
| Gmail credentials | ~/.nora/email-credentials.json |
| Scheduled workflows | ~/.nora/config/schedules.json |
| Execution logs | ~/.nora/logs/ |
| Agent session logs | ~/.nora/agent_logs/ |
| Tool Library | ~/.nora/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 ~/.nora/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 per-schedule setting that halts workflow execution when a node fails without an error-handling edge. Foreground runs always stop on error. |
| Topological Sort | The algorithm used to determine node execution order based on connections |
| Working Directory | The filesystem directory where a node’s command runs |
Developer Tools
NORA includes tools to help you generate workflow configs without writing code by hand.
Workflow Config Converter (Convert UI)
A browser-based tool with three workflow generation utilities.
Location: Documents\NORA\tools\text_workflow\convert-ui.html
Tab 1: Checklist Converter (No AI Required)
Converts a structured checklist into workflow config code using a built-in parser.
Checklist format:
1 Download Sales Report
a Connect to FTP server
b Download latest CSV
c Save to E:\Data\sales
2 Process Data
a python process_data.py
b Validate output
3 Send Notification
a Email team with results
Rules:
– Main steps: Number + space + title (e.g., 1 Step Name)
– Sub-items: Two spaces + letter + space + description (e.g., a Details here)
– Commands are auto-detected (python, node, npm, etc.)
– Paths use double backslashes for Windows (e.g., E:\\Data)
Tab 2: Directory Generator (No AI Required)
Scans a folder and auto-creates workflow nodes for all scripts found.
- Select a project folder
- Configure depth, grid layout, spacing
- Click “Generate Config”
Output includes nodes for .py, .js, .bat, .ps1 files with proper commands and working directories.
Tab 3: AI Chat (Optional, requires proxy)
Conversational AI workflow generation in the browser. For this feature only, you need the AI Proxy Server running.
AI Proxy Server
A local proxy that enables browser-based AI features (Convert UI’s AI Chat tab) to call AI providers without CORS issues.
Location: Documents\NORA\tools\text_workflow\ai-proxy-server.js
Note: The Checklist Converter and Directory Generator do NOT require this. Only needed for the browser-based AI Chat tab.
Start the server:
cd Documents\NORA\tools\text_workflow
node ai-proxy-server.js
Default port: http://127.0.0.1:8787
AI Chat CLI (Recommended for AI Generation)
A standalone terminal chatbot that generates workflow configs through conversation. This is the most powerful AI workflow generator — it uses a comprehensive schema prompt for accurate results.
Location: Documents\NORA\tools\text_workflow\ai-chat-cli.js
Run:
cd Documents\NORA\tools\text_workflow
node ai-chat-cli.js --provider gemini
Options:
| Flag | Description |
|——|————-|
| -p, --provider | AI provider: claude, openai, or gemini |
| -o, --output-dir | Directory to save generated files |
| --auto-save | Auto-save generated configs without prompting |
| --log-history | Save conversation history to JSON |
| -m, --max-tokens | Default max tokens for responses |
Example session:
You: Create a workflow that monitors E:/logs for new files and sends a Slack notification
AI: [generates complete workflow config code]
Save to file? (y/n): y
Filename: log-monitor-workflow.js
Getting an API key:
– Google Gemini (free tier): https://aistudio.google.com/app/apikey
– OpenAI: https://platform.openai.com/api-keys
– Anthropic: https://console.anthropic.com/
VS Code + GitHub Copilot
If you use VS Code, you can leverage GitHub Copilot (or Claude) to help with NORA workflows:
Use cases:
– Generate configs: Describe your workflow in natural language
– Debug scripts: Paste error output, get fixes
– Explain nodes: Ask “What does this aiAutonomousAgent config do?”
– Refactor: Ask “Split this workflow into smaller, reusable parts”
Tip: Open ai-chat-cli.js in VS Code so Copilot learns the workflow schema from its massive system prompt. Then Copilot will understand NORA’s node structure when you ask it to generate configs.
Example prompt to try:
Create a NORA workflow config that:
1. Runs a Python script at E:/scripts/daily-report.py
2. Checks if the script succeeded or failed
3. On success, reads the output file and sends it via Gmail
4. On failure, sends an error notification
Best Practices for AI-Generated Workflows
- Be specific — Include file paths, expected outputs, and tool names
- Start simple — Generate 3-5 nodes first, add complexity incrementally
- Test individually — Run each node in isolation before running the full workflow
- Add documentation — Include notepad nodes to explain your workflow
- Review paths — AI-generated paths may need adjustment for your system
- Use the schema — When asking AI for help, reference that NORA uses a specific node schema (aiAgent, aiAutonomousAgent, condition, script, etc.)