Skip to content

PoomEam/eamsoTask

Repository files navigation

eamsoTask logo

eamsoTask

TinyTask for macOS — a tiny, native macro recorder.

Platform Swift License: MIT

TinyTask is a beloved 33 KB Windows .exe that records your mouse and keyboard and replays them with one click. It never made it to the Mac. eamsoTask is that idea, rebuilt natively for macOS: record any sequence of clicks, drags, scrolls, and keystrokes, then replay it — once, N times, or forever — at up to 4× speed.

eamsoTask main window

Features

  • One-click record & play — a compact, always-on-top window with two big buttons, just like the original.
  • Global hotkeys, fully remappable⌃⌥R to record and ⌃⌥P to play by default; click a field in Settings and press any combination to rebind.
  • Save & open recordings — macros are saved as .rec files (like TinyTask's), so you can keep a library of them and share them. The format is plain JSON, friendly to hand-editing and version control.
  • Repeat & speed control — play 1–100 times or loop forever, at 0.25×–4× speed.
  • Faithful playback — pointer paths, drags, double-clicks, scrolling, modifier keys, and precise timing are all reproduced.
  • Native and tiny — a single ~1 MB Swift app. No Electron, no Python runtime, no dependencies.

Install

Download

Grab EamsoTask.app.zip from the latest release, unzip, and drag EamsoTask.app into /Applications.

Because release builds are ad-hoc signed (not notarized), macOS will quarantine the download. Clear it once with:

xattr -dr com.apple.quarantine /Applications/EamsoTask.app

or right-click the app → OpenOpen.

Build from source

You only need the Xcode Command Line Tools (xcode-select --install) — full Xcode is not required.

git clone https://github.com/PoomEam/eamsoTask.git
cd eamsoTask
make install        # builds dist/EamsoTask.app and copies it to /Applications

Other targets: make build (debug), make test (unit tests), make app (build the bundle without installing).

First run: permissions

Like every macro tool on macOS, eamsoTask needs two permissions in System Settings → Privacy & Security. On first launch a setup guide walks you through them with live checkmarks:

First-run setup guide

Permission Why
Accessibility to replay events (synthetic clicks and keystrokes)
Input Monitoring to observe the keyboard while recording

eamsoTask asks macOS for both up front, so it should already appear in each list — just flip the switches. (If it's missing from a list, click the button below the list and add eamsoTask from Applications.) macOS only applies these grants at launch, so finish with Restart Now in the guide — or the Restart eamsoTask? popup / the banner's Restart button — and it comes back ready to record.

Note for source builds: macOS ties these permissions to the app's code signature. If you rebuild the app, you may need to remove and re-add it in both permission lists.

Usage

  1. Press Record (or ⌃⌥R) — do the thing you want automated — press it again to stop.
  2. Press Play (or ⌃⌥P) to replay. Pick a repeat count (or ∞) and a speed from the toolbar first if you like.
  3. Save (⌘S) the macro as a .rec file; Open (⌘O) it any time later — or double-click the file in Finder.

While a macro is looping, the play hotkey stops it — handy when your cursor is being puppeteered.

Hotkeys

Action Default
Start / stop recording ⌃⌥R remappable in Settings
Play / stop playback ⌃⌥P remappable in Settings
Open / Save / Save As ⌘O / ⌘S / ⇧⌘S in-app

The record/play hotkeys are registered system-wide and are automatically excluded from your recordings (including the modifier-key releases right after you press them).

The .rec format

Recordings are JSON with a small stable schema:

{
  "formatVersion": 1,
  "createdAt": "2026-07-27T10:00:00Z",
  "generator": "eamsoTask",
  "events": [
    { "t": 0.0,  "kind": "mouseMoved",    "x": 512, "y": 384 },
    { "t": 0.31, "kind": "leftMouseDown", "x": 512, "y": 384, "clickState": 1 },
    { "t": 0.38, "kind": "leftMouseUp",   "x": 512, "y": 384, "clickState": 1 },
    { "t": 1.02, "kind": "keyDown",       "keyCode": 0, "flags": 0 }
  ]
}

t is seconds from the start of the recording; coordinates are global screen points (top-left origin). Note the format is eamsoTask's own — it does not read the Windows TinyTask binary .rec files.

How it works

  • Recording — a listen-only CGEventTap observes system-wide input. Mouse moves are throttled to 240 Hz to keep files compact; the record/play hotkeys are filtered out.
  • Playback — events are re-synthesized with CGEvent and posted to the HID event tap from a high-priority background thread that honors original timing (scaled by the speed factor).
  • Hotkeys — registered with the Carbon RegisterEventHotKey API, so they work even while the app is busy recording or playing.
Sources/
├── EamsoCore/     pure logic: event model, .rec serialization, hotkeys, filtering, timing
└── EamsoTask/     the app: recorder (CGEventTap), player (CGEvent), Carbon hotkeys, SwiftUI
Tests/
└── EamsoCoreTests/  unit tests for everything in EamsoCore

Limitations

  • Playback is coordinate-based (like TinyTask): if windows move or the screen resolution changes between record and replay, clicks land in the wrong place.
  • Recordings capture raw key codes, so they replay on the keyboard layout they were recorded with.
  • Some system-owned UI (secure input fields, certain permission dialogs) ignores synthetic events by design.

Contributing

Issues and PRs are welcome. Please run make test before submitting, and keep the EamsoCore target free of AppKit dependencies so it stays unit-testable.

License

MIT © Poom Eamsobhana

eamsoTask is an independent project and is not affiliated with TinyTask.

About

TinyTask for macOS — a tiny native macro recorder. Record mouse & keyboard, replay at any speed, save/open .rec files, remappable global hotkeys.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages