DeskAutomate
Drop a PDF in Inbox and it gets filed. Dry run until you say otherwise.
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 DeskAutomate
Drop a PDF in Inbox and it gets filed. Dry run until you say otherwise.
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, DeskAutomate is included in every plan along with the rest of the range.
Rules fire when the filesystem changes
Each rule names a directory, a glob tested against the base filename, and an action: move, copy or run. The other Automation Desk tools do something when you tell them to. This one runs in the foreground and watches.
Polling, and what that costs you
There’s no inotify, no FSEvents, no ReadDirectoryChangesW. Every interval (500ms by default) it snapshots each watched directory as (path, size, mtime) and diffs against last time. So detection lags by up to one interval, a file created and deleted between two polls is never seen, and a change that alters neither size nor mtime is invisible. Native events are on the roadmap. This is worth knowing before you point it at a tree with 200,000 files.
Half-written files
A large download is visible long before it’s complete. Set debounce_ms and a file must hold the same size and mtime for that long before its rule fires, with the timer restarting on every change it sees.
Running it twice does nothing
State is keyed by rule name, path, size and mtime, and written to disk, so idempotence survives across separate process runs. A rule that fails isn’t marked handled and gets retried.
No deletion action exists.
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 file-watch trigger engine: poll watched folders, and when a file appears or changes, fire a matching rule (move, copy, or run a command) with debounce so a still-being-written file waits until it settles. Handled state is persisted, so repeated runs are genuinely idempotent — verified across separate invocations. Watching is poll-based because native filesystem events aren't reachable from a stdlib-only binary.
Naming status
Working name only — brand verdict **CAUTION** (Medium). Collision: DeskAutomate. Do not invest in brand until owner/product status is resolved.
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.
deskautomate - file-watch triggered automation (Automation Desk line)
Watches directories by POLLING and fires rules when a file appears or changes.
Actions are a DRY RUN unless you pass --apply.
USAGE
deskautomate <command> [flags]
COMMANDS
watch poll the watched directories and fire matching rules
rules validate and list the rules in a rules file
help show this help
WATCH FLAGS
--rules <file> rules JSON file (required; may also be given positionally)
--interval <dur> poll interval, e.g. 500ms, 2s (default 500ms)
--once do a single poll pass and exit
--apply actually perform the actions (default: dry run)
--log <file> JSONL log, one line per fired rule (default deskautomate.jsonl)
--state <file> handled-file state (default <log>.state.json)
RULES FLAGS
--rules <file> rules JSON file (may also be given positionally)
RULES FILE
{"rules": [
{"name": "file-pdfs", "watch_dir": "/home/me/Inbox", "match": "*.pdf",
"action": "move", "dest": "/home/me/Documents/PDF", "debounce_ms": 750},
{"name": "index-csv", "watch_dir": "/home/me/Inbox", "match": "*.csv",
"action": "run", "command": "/usr/local/bin/index.sh"}
]}
action move|copy needs "dest" (a directory; never overwrites, never deletes)
action run needs "command"; the matched file path is appended as the
final argument, and is also exported as DESKAUTOMATE_FILE
EXAMPLES
deskautomate rules --rules rules.json
deskautomate watch --rules rules.json --once
deskautomate watch --rules rules.json --once --apply --log run.jsonl
...
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