Winomation is a Windows automation desktop app built with Electron, React, and React Flow. It gives you a visual, node-based editor for building automations with Trigger -> Condition -> Action logic, then runs those workflows in the Electron main process with a Node-first execution model.
This project is meant to be a Windows equivalent of tools like Tasker or MacroDroid, but with a desktop-first workflow editor.
With Winomation, you can:
- Create workflows from a drag-and-drop canvas
- Start automations from system, file, time, input, power, and MITM proxy triggers
- Gate execution with conditions like process checks, file existence, clipboard matching, and proxy state
- Run actions such as launching apps, killing processes, file operations, screenshots, notifications, DNS changes, power commands, keyboard/mouse automation, and HTTP proxy modifications
- Save workflows locally and reopen them from a dashboard
- Keep the app running in the system tray so registered triggers continue listening in the background
The app is split into three practical layers:
The renderer is built with React and React Flow.
src/App.jsxcontains the dashboard, workflow editor, node settings panel, and drag-and-drop canvassrc/common/nodeDefinitions.jsdefines the available triggers, conditions, actions, categories, parameter types, and defaultssrc/renderer/nodes.jsxprovides the custom node components shown on the canvas
The editor stores workflows as a graph:
nodesdescribe triggers, conditions, and actionsedgesdescribe execution order between nodes
The renderer does not call Node or Electron APIs directly.
src/preload.jsexposes a smallwindow.electronAPIsurfacesrc/main.jsreceives those IPC calls and routes them to the runtime, persistence helpers, and system queries
This keeps the renderer focused on UI and keeps execution inside the main process.
The automation runtime lives in the Electron main process.
src/main/FlowRunner.jsstarts workflows, registers trigger listeners, and walks the graph when a trigger firessrc/main/TriggerManager.jsregisters long-lived listeners for hotkeys, file watchers, polling-based system checks, schedules, and battery/network monitoringsrc/main/engine.jsexecutes actions and evaluates conditionssrc/main/Logger.jskeeps an in-memory log and writes to the app log file
The project follows a Node-first approach:
Node and Electron are used for:
- File operations
- Process checks and process termination
- Notifications and toast windows
- Clipboard access
- PowerShell-backed screenshots
- DNS changes and power commands
- Workflow persistence
- Tray behavior and app startup behavior
This logic is centered in src/main/engine.js, src/main/TriggerManager.js, and src/main.js.
Some Windows UI actions are awkward or unreliable from plain Node alone, so Winomation delegates them to AutoHotkey:
- Sending keys
- Mouse clicks
- Window close/minimize
- Program launch
- Volume control
That bridge works like this:
src/main/engine.jsbuilds a JSON payload for the requested action.- It launches
AutoHotkey64.exe. ahk/runner.ahkreads the payload and performs the UI-level action.- The result is written back as JSON so the main process can continue the flow.
This keeps AHK as an implementation detail instead of the main automation engine.
The project also includes a proxy automation engine:
src/MitmEngine/MitmController.jsstarts and stops the proxy- It can intercept requests and responses
- It can block requests, remove headers, replace body content, change status codes, and update JSON fields
- MITM nodes are defined alongside the other workflow nodes in
src/common/nodeDefinitions.js
This lets workflows automate not only the desktop, but also selected HTTP/HTTPS traffic scenarios.
When a workflow runs:
- The renderer sends the current graph through IPC.
src/main/FlowRunner.jsregisters every trigger node in that flow.- When a trigger fires, FlowRunner walks forward through connected nodes.
- Condition nodes decide whether the branch continues.
- Action nodes execute through Node/Electron or AutoHotkey depending on the action type.
This means workflows are graph-driven, not hardcoded. The canvas itself becomes the runtime definition.
Implemented trigger categories include:
- Hotkey
- File change / rename
- App launch
- App close
- Window focus
- Network connect / disconnect
- Specific daily time
- Repeating interval
- Battery threshold
- MITM request / response interception
Implemented conditions include:
- App is running
- File exists
- Clipboard contains text
- Proxy is running
- MITM URL match
- MITM status-code match
Implemented actions include:
- Run program
- Kill process
- File operations
- Screenshot
- Show notification
- Show toast
- Send keys
- Mouse click
- Close window
- Minimize window
- Volume control
- Set DNS
- System power actions
- Start/stop MITM proxy
- Generate/install MITM certificate
- MITM request/response modification actions
.
|-- ahk/
| `-- runner.ahk
|-- assets/
| `-- tray.ico
|-- src/
| |-- main.js
| |-- preload.js
| |-- App.jsx
| |-- common/
| | `-- nodeDefinitions.js
| |-- main/
| | |-- FlowRunner.js
| | |-- TriggerManager.js
| | |-- engine.js
| | `-- Logger.js
| |-- MitmEngine/
| | `-- MitmController.js
| `-- renderer/
| `-- nodes.jsx
|-- package.json
`-- forge.config.js
- Windows
- Node.js
- npm
- AutoHotkey runtime shipped in this repo as
AutoHotkey64.exe
npm installnpm startnpm run package
npm run makeThis codebase already delivers the main workflow editor and runtime loop, but it is still evolving.
- The architecture document in
requirements.mddescribes the broader target system - The current implementation is centered on Electron main-process execution, not a separate Windows service yet
- Some actions listed in the catalog are more complete than others, and a few paths are still partial or evolving
- The MITM support is present in the codebase and operationally separate from the regular trigger/action path
Winomation is a visual Windows automation builder that combines:
- React Flow for authoring workflows
- Electron IPC for safe UI-to-runtime communication
- Node.js for most automation work
- AutoHotkey for UI-level fallback actions
- A built-in MITM proxy module for request/response automation
The main idea is simple: design workflows visually, store them as graph data, and execute them through a runtime that chooses the most practical automation path for each node.