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.
Record, remap, and script all live side by side. Pick the tool that fits the job, or mix all three in a single profile.
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.
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 });
Every surface is designed for power users who live in their tools.
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.
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"), });
Register abbreviations that expand anywhere. Static for signatures, dynamic for timestamps or clipboard transforms.
Run any macro, open any script, jump to settings or the marketplace. Fuzzy matching, keyboard-first.
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.
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)
} 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);
}); Each module is a normal JS import with TypeScript types and fine-grained, per-script permissions.
Full module reference in the docs · import paths, permissions, and TypeScript types.
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.
Keyboard.Sequence()
.Hold("Ctrl")
.Press("A")
.Sleep(10)
.Press("C")
.Release("Ctrl")
.Send(); Every script declares what it needs. You grant it, you can revoke it. No hidden access, ever.
Ctrl+Alt+Delete) and every running macro and script freezes in place. A banner asks before anything starts again.
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
Optional: leave your email to hear about releases and new features. No spam.