Now in public beta · Windows

Macros
for the modern era.

Record it, remap it, or script it. One app, three ways to automate Windows, plus an AI assistant that writes the hard parts for you.

Loading interactive demo
Runs across any app AI assistant for scripts Premium Accept/reject AI edits inline Premium Cloud-synced scripts & settings Community marketplace Custom buttons, pedals & decks Per-app profiles Sandboxed permissions

Start with a click.
Go as deep as you want.

Record, remap, and script all live side by side. Pick the tool that fits the job, or mix all three in a single profile.

Record
Capture a macro
Click Record, do the thing, click Stop. Every keystroke and click is captured with millisecond timing and lands in an editor you can tweak afterwards.
0 events
Press Record and perform actions
Remap
Per-app profiles
Different tools need different keys. Build a profile per app, PowerKeys auto-switches on focus so the same key does the right thing in every window.
CapsLockEscapeGlobal
F13Ctrl+Shift+SPsPhotoshop
Side Mouse 1Alt+LeftChChrome
Script
Script the rest
When your automation needs logic, open the script editor. Full JavaScript, first-party APIs for keyboard, mouse, windows, and clipboard, plus an AI assistant (premium).
// Paste clipboard as plain text
Hotkey.Register("Ctrl+Shift+V", async () => {
const text = Clipboard.Text;
Keyboard.Type(text);
});

Describe what you want.
Review what it wrote.

An AI that lives inside the script editor. It reads your file, proposes edits as inline diffs, and waits for you to accept or reject, line by line. Nothing runs until you say so.

bold-wrap.pk.js
1 // Wrap the selection in **bold**
2 Hotkey.Register("Ctrl+Alt+B", async () => {
3 Keyboard.Send("Ctrl+C");
4 await Time.Sleep(40);
5 Keyboard.Type("**" + Clipboard.Text + "**");
6 });
Assistantgpt-4o
YOU
01
Prompt in plain English
Ask for a script or describe a change. No API docs required.
02
Review diffs inline
Changes appear as red/green lines right in the editor. Expand the bar to step through each one.
03
Accept, reject, undo
Keep the parts you like. Reject anything else. Full undo on the whole batch.

Built for the details.

Every surface is designed for power users who live in their tools.

Export as PNG
profiles / Photoshop / macros
Steps7
EventKey / ValueDelay
KeyDownCtrl+Shift0ms
KeyDownS12ms
KeyUpS45ms
KeyUpCtrl+Shift8ms
WaitSave dialog350ms
Type"export_final.png"0ms
ClickSave button200ms
Triggers3
F9OncePhotoshop
Ctrl+Alt+EOnceGlobal
Mouse4HoldPhotoshop

Scripts ship their own UI.

A few lines of code render a real settings window: hotkey captures, data grids, color pickers, file pickers. Publish a script and your users get a configurable panel for free.

Start hotkey
Accent
Template image
builder.pk.js
const tools = UI.Tab("Macro Tools");

// Capture a hotkey from the user
tools.HotkeyCapture({
  id: "trigger",
  label: "Start hotkey",
  value: "F4",
});

// Sortable, editable data grid
tools.DataGrid({
  id: "targets",
  columns: [
    { key: "active", type: "bool" },
    { key: "name",   type: "text" },
    { key: "hotkey", type: "hotkey" },
  ],
  rows: Store.Get("targets"),
});

The small wins that add up.

Hotstrings

Type short, send long.

Register abbreviations that expand anywhere. Static for signatures, dynamic for timestamps or clipboard transforms.

Hotstring.Register("btw", "by the way");
Any text field
Hotstring.Register("now", () => new Date(). toLocaleTimeString());
Any text field
Command palette

Ctrl+K, anything.

Run any macro, open any script, jump to settings or the marketplace. Fuzzy matching, keyboard-first.

Actions
New MacroCtrl+N
New ScriptCtrl+Shift+N
Reload Scripts
Macros
Run Last MacroCtrl+R
Navigation
Open Marketplace
Preferences
Toggle Theme

The hard parts of AutoHotkey, already solved.

No COM objects. No manual JSON parsing. No string-concatenated hacks. PowerKeys ships a modern standard library so you write the logic that matters, not the plumbing around it.

AutoHotkey v2 Fetch a JSON feed, show the first 3 titles, retry on failure
F13::{
  ; no native HTTP, COM required
  whr := ComObject("Msxml2.XMLHTTP.6.0")
  Loop 3 {
    try {
      whr.open("GET", url, false)
      whr.send()
      if (whr.status = 200) {
        body := whr.responseText
        ; no JSON parser, regex it
        Loop 3
          if RegExMatch(body, '"title":"([^"]+)"', &m, pos)
            results .= m[1] . "`n", pos := m.Pos + m.Len
        break
      }
    } catch
      Sleep 500 * A_Index
  }
  TrayTip("Feed", results)
}
PowerKeys Same task, standard library
Hotkey.Register("F13", async () => {
  const feed = await HTTP.GetJson(url, {
    retries: 3,
    backoff: "exponential",
  });
  const titles = feed.items
    .slice(0, 3)
    .map(i => i.title)
    .join("\n");
  UI.Notify("Feed", titles);
});

Everything you'd otherwise build yourself

Each module is a normal JS import with TypeScript types and fine-grained, per-script permissions.

Keyboard
Type strings, press keys, and send hotkey chords with precise timing.
Mouse
Move, click, drag, and scroll. Absolute or relative, with easing.
Window
Find, focus, move, resize, enumerate, and wait for any window.
Hotkey
Register triggers for keys, mouse buttons, dials, and custom buttons.
Hotstring
Text expansion with callbacks. Pull values from state, time, or clipboard.
UI
Build inputs, pickers, toggles, data grids, and notifications from script.
Clipboard
Read and write text, images, and files; preserve across script steps.
Screen
Pixel reads, region capture, multi-monitor geometry. OCR via marketplace.
HTTP
fetch-style GET/POST/JSON and streaming, with per-host permissions.
State
Persistent key-value store. Survives restarts, scoped per script.
Time
Sleep, timers, intervals, debounce. Async and cancellable.
Console
Structured log, error, and table output into the script console.
Process
Spawn processes, read stdout/stderr, pipe data, auto-kill on exit.
Fs
Read and write files, watch folders, atomic writes, JSON helpers.
Image
Load, diff, and template-match regions for on-screen triggers.
Shell
Open files, run commands, resolve paths, and manage env vars.

Full module reference in the docs · import paths, permissions, and TypeScript types.

Fast, predictable, signed.

PowerKeys is built for automation that has to be right. Your scripts configure the engine, they don't sit in the hot path, so timing stays tight even under load.

Timing you can count on
Hold, press, and delay sequences compile into a single event stream that runs in the engine itself. Games, DAWs, and CAD apps see them as clean input, not a stuttering replay.
Keyboard.Sequence()
  .Hold("Ctrl")
  .Press("A")
  .Sleep(10)
  .Press("C")
  .Release("Ctrl")
  .Send();
Your setup, everywhere
Sign in once and your scripts, macros, profiles, and settings follow you. Install on a new laptop, log in, and everything is already there, versioned and in sync.
Encrypted cloud sync · your account
Revision history · undo a bad edit weeks later
Safe to trust
Every release is code-signed and verified before installing. Updates land in the background, the app stays quiet, and no marketplace script runs until you approve what it can touch.
Signed installers · verified on update
No telemetry · no third-party trackers

Security you can see.

Every script declares what it needs. You grant it, you can revoke it. No hidden access, ever.

Permission manifests
Before any marketplace script installs, a plain-English manifest shows exactly what it can access: keyboard, mouse, clipboard, screen capture, and which network hosts.
Permissions requested
Keyboard ✓ granted
Mouse ✓ granted
Clipboard ✓ granted
Network → api.github.com ✓ granted
Network → hooks.slack.com ✓ granted
Screen capture ✗ denied
One key to stop everything
Tap your panic key (default Ctrl+Alt+Delete) and every running macro and script freezes in place. A banner asks before anything starts again.
All automation suspended
2 macros and 1 script were stopped. Press Resume to continue.
Scripts can't call home
Scripts can only talk to the exact hosts you approve. A script asking for "any host" is flagged in yellow during install, so surprise data exfiltration isn't an option.
api.github.com ✓ allowed
hooks.slack.com ✓ allowed
* (any host) ⚠ flagged at install
Free to use · Premium unlocks AI & ad-free

Automate Windows
the way it deserves.

Download the free app and start recording, remapping, and scripting today.
Upgrade to Premium when you want the AI assistant and an ad-free workspace.

Windows 10 and 11

Product updates

Optional: leave your email to hear about releases and new features. No spam.