Automation Desk

ActionForge

Many watch-a-folder rules in one rules file, each failing on its own.

Free right now — no account, no card

Get ActionForge free Windows & Mac · one file, nothing to install

Preview

1 interface design, then a screenshot of it running. Drag, scroll or use the arrows.

Interface design ActionForge, 1 of 1
Screenshot ActionForge running on Windows today

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

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