anotifier / cursor
Cursor logo

anotifier for Cursor.

You kick off a Cursor agent, switch to something else, and check back… too late or too often. anotifier hooks Cursor's agent lifecycle and tells you the moment the run is over.

$ npx anotifier@latest setup
[ HOW IT HOOKS IN ]

Wired into Cursor itself.

Setup adds one hook to Cursor's own hook file, ~/.cursor/hooks.json, so the alert fires when the agent stops, not when you happen to look.

stopThe Cursor agent run endedA toast titled Cursor that says Task complete, or the same words by phone push or webhook. anotifier doesn't read the project or the run's status from Cursor's event, so every Cursor alert looks the same, however the run ended.
[ WHAT SETUP WRITES ]

One stop hook in ~/.cursor/hooks.json.

Setup wires Cursor when a ~/.cursor folder exists. It backs up ~/.cursor/hooks.json to ~/.anotifier/backups/, then writes one entry in Cursor's hook format:

{
  "version": 1,
  "hooks": {
    "stop": [
      {
        "command": "node \"/path/to/anotifier/src/notify.mjs\" --source cursor --event stop"
      }
    ]
  }
}

Your other Cursor hooks stay as they are. Cursor can fire stop twice for one run; anotifier drops a repeat of the same event from the same session within 1.5 seconds, so you get one alert.

[ GOOD TO KNOW ]

What it does, and what it doesn't.

  • Finished runs only. anotifier registers stop, so it tells you a run is over, not that the agent is waiting on you.
  • No project name, so no click-to-focus. anotifier reads cwd, not workspace_roots, from Cursor's event, so a Cursor alert has no project folder. Click-to-focus (Windows only) finds the window by that folder.
  • Usually no bell. The bell rings in the terminal the agent runs in, and the Cursor editor normally has none.
  • Cursor CLI. Whether the hook fires under cursor-agent is untested.
  • How it's tested. CI checks that setup writes and removes the Cursor hook correctly. Unlike Claude Code, Codex and Gemini CLI, a real Cursor run isn't driven end to end.
[ CHANNELS ]

Every channel you'd actually use.

[+] Desktop toasts macOS, Windows, Linux + WSL routing.
[+] Phone push Android & iOS via ntfy — no account.
[+] Webhooks Slack, Discord, Telegram, any HTTP endpoint.
[+] Terminal bell A ding in the terminal the agent runs in.
[+] Click-to-focus On Windows, a click on the toast brings the project's window forward.
[+] Zero npm dependencies Plain Node.js 18+, one shared config.
[ CHECK IT, UNDO IT ]

Test it, then keep it or remove it.

npx anotifier@latest test       # fire a test alert on every channel
npx anotifier@latest status     # show which agents and channels are set up
npx anotifier@latest doctor     # diagnose a channel that stays quiet
npx anotifier@latest uninstall  # remove the hooks setup added

test sends straight to your channels without going through Cursor, so it proves the channels work. uninstall removes only the entries anotifier added and restores your statusline (1.5.0 and later), and setup keeps a copy of every file it changes in ~/.anotifier/backups/.

[ FAQ ]

Cursor questions, answered.

Does this need a Cursor extension?

No. anotifier hooks Cursor's own agent hook system from the outside — anotifier setup detects Cursor and wires it up automatically.

What does a Cursor notification look like?

A toast titled Cursor with the text Task complete, or the same words by phone push or webhook. It doesn't name the project or list the edited files.

Will I get an alert when the Cursor agent needs approval?

No. anotifier only hooks the stop event, so you hear about finished runs. The Cursor notifications guide covers the other options.

Can I use it alongside Claude Code and Codex?

Yes — that's the point. One config covers every agent anotifier supports, so all your tools notify through the same channels.

[ GUIDES ]

Every option, explained.

[ ALSO WORKS WITH ]

One config, every agent.

Every command and config key is in the docs.

Full feature tour, demo video, and install options on the anotifier home page.