ActionForge
Many watch-a-folder rules in one rules file, each failing on its own.
Free right now — no account, no card
Preview
1 interface design, then a screenshot of it running. Drag, scroll or use the arrows.
Free while we’re in preview
Get ActionForge
Many watch-a-folder rules in one rules file, each failing on its own.
The Mac button is for Apple Silicon. On an older Intel Mac, get this one instead.
One file, both ways. Double-click it for the window. Run the same file from a command prompt with arguments and it behaves as the command-line tool, because the engine is inside it. Nothing else to download and nothing to keep beside it.
Early preview. The window has been built and run, but not yet on a real Windows PC or Mac, so expect rough edges. The engine underneath it is fully tested.
- One file — no installer
- Runs on your machine, offline
- Source code published below
Free while in preview. It isn’t signed yet, so Windows or macOS will ask you to confirm the first time you open it. At launch, ActionForge is included in every plan along with the rest of the range.
The config file is the whole idea
MacroDeck watches one folder with one command typed on the command line. ActionForge reads a JSON file instead, and every rule in it gets its own directory, its own extension filter, its own command, and its own memory of which files it has seen.
That last part matters more than the flag count. If one rule’s watch directory doesn’t exist yet, that rule prints an error and retries on the next poll. The other rules never notice. When the directory finally appears, it takes a fresh baseline and carries on without a restart.
{file} in a rule’s command becomes the triggering file’s absolute path, and the command goes through /bin/sh -c or cmd /C. Default poll is every 2 seconds. --once does a single pass over everything and exits, which is what you want from cron. --log writes one JSON object per trigger.
Run actionforge validate --config rules.json before you trust a file. It catches duplicate rule names and empty fields without watching anything.
Not in this build
No text expansion, no clipboard variables, no keyboard or mouse macros. Those need OS-level input hooks. This is file watching.
Reading on the job itself
- How to run something automatically when a file appears in a folder Wait for the file to stop changing before you act on it. A watcher that fires the moment a file appears wil...
Advanced & technical details Command-line builds, source code, checksums and a recorded session — for developers and IT teams
A working CLI prototype of the multi-rule automation engine: many independent named folder-watch rules defined in one config file, running as a single daemon with per-rule fault isolation — a rule whose folder doesn't exist yet keeps retrying without taking down the others. Text expansion and global keyboard/mouse macros need OS UI-automation APIs and are on the roadmap.
Naming status
Working name only — brand verdict **AVOID** (Very High). Collision: ActionForge. Rename completely.
What it draws on
Existing paid software whose best ideas shaped this program: PhraseExpress, Macro Express Pro, Jitbit Macro Recorder, ClipboardFusion Pro.
Command line
There is nothing extra to install. The program you download is the command-line tool as well: give it arguments instead of double-clicking it and it runs as one, with its output on your terminal. The standalone builds below are the same engine on its own, for machines where you would rather not ship a window at all.
ActionForge - multi-rule, config-file-driven automation daemon
Usage:
actionforge run --config <rules.json> [--interval 2s] [--once] [--run-existing] [--log events.log]
actionforge validate --config <rules.json>
actionforge -h | --help
Commands:
run Watch every rule in the config file concurrently and run each
rule's command when matching files appear or change.
validate Parse and sanity-check a config file without watching anything.
Flags for 'run':
--config <path> Path to the JSON rules file (required)
--interval <dur> Poll interval, e.g. 500ms, 2s, 1m (default 2s)
--once Do a single pass over all rules' directories and exit
--run-existing Treat files already present at startup as triggers
--log <path> Append a JSON-lines event record per trigger
Flags for 'validate':
--config <path> Path to the JSON rules file (required)
Config file format:
{
"rules": [
{
"name": "screenshots-to-archive",
"watch_dir": "/tmp/incoming",
"extensions": [".png", ".jpg"],
"run": "cp {file} /tmp/archive/"
}
]
}
"extensions" is optional; omit or leave empty to match every file in
that rule's watch_dir. "{file}" in "run" is replaced with the absolute
path of the triggering file.
Recorded from the shipped binary, not written by hand.
Source
Every file the program is built from:
console.go · console_test.go · guided.go · main.go
SHA-256 checksums · build instructions & scope notes · full build plan