A notification on your phone when Claude Code finishes or needs you

Claude Code runs a hook when it needs a decision and when it finishes. One curl in that hook lands on your phone. The same works for Codex and Cursor, and with the MCP server the agent can tell you itself.

First, what you may already have: on a Pro, Max, Team or Enterprise plan with the Claude app installed and Remote Control on, Claude Code pushes to your phone by itself when a long task finishes or it needs a decision (two switches in /config; code.claude.com/docs/en/remote-control, read 12 September 2026). This page is for when that does not fit: you sign in with an API key or through Bedrock, Vertex or a gateway, you do not run Remote Control, you use Codex or Cursor, or you want the notification in one inbox with everything else you run, in email, Slack or a webhook, with your own rules for what gets through.

1 · Get a key

Sign in at youlmk.com or in the app, create a source of type AI agent (name it claude), and copy its key. The source's own rules decide how loud these get: Banner while you are away, Badge on a day you are at the desk. See Reach.

2 · The hook

In ~/.claude/settings.json (every project) or .claude/settings.json (one project), with your key in place of the example:

{
"hooks": {
"Notification": [{
"matcher": "permission_prompt|agent_needs_input|idle_prompt",
"hooks": [{ "type": "command",
"command": "curl -s -o /dev/null -m 5 youlmk.com/k/k_7hq2nk3f9qd8w4 -d '{\"title\":\"Claude Code needs you\",\"priority\":\"high\"}'" }]
}],
"Stop": [{
"hooks": [{ "type": "command",
"command": "curl -s -o /dev/null -m 5 youlmk.com/k/k_7hq2nk3f9qd8w4 -d 'Claude Code is done'" }]
}]
}
}

The Notification hook fires with a type, and the matcher picks the ones worth a push:

Type
When
permission_prompt
Claude Code is waiting for you to allow a tool
agent_needs_input
an agent has a question for you
idle_prompt
the prompt has sat idle for a while
agent_completed
a background agent finished

Stop fires at the end of every response, short ones included. Three things keep that from being noise: identical titles within ten minutes become one card with a count (Grouping), the source's Reach can be Badge on a day you are at the keyboard, and the needs you push is high priority, which pins it to the top of the inbox for an hour, while done is normal. If you want only the moments that need you, keep the first hook and drop the second.

3 · Or install it as a plugin

The same hooks, plus the MCP server, as one plugin. It asks for your source's bearer token once and keeps it in the keychain.

$ claude plugin marketplace add bylivebetter/youlmk-claude
$ claude plugin install youlmk@youlmk

Inside Claude Code the same two lines are /plugin marketplace add bylivebetter/youlmk-claude and /plugin install youlmk@youlmk. The plugin is one small open-source repository, so you can read exactly what it sends: the event name and nothing from your session.

4 · Let the agent tell you itself

With the MCP server connected, Claude Code has a notify tool and a watch tool. Tell it in your instructions: "notify me when a long task finishes or when you need a decision", and it sends with the source's rules. It can also start a watch for you ("watch the build at example.com/… and tell me when it finishes").

$ claude mcp add --transport http youlmk https://youlmk.com/mcp \
--header "Authorization: Bearer ylk_…" --scope user

Codex

Codex reads ~/.codex/hooks.json (or the project's .codex/hooks.json) with the same shape. Its events include Stop and PermissionRequest:

{
"hooks": {
"PermissionRequest": [{ "hooks": [{ "type": "command", "command": "curl -s -o /dev/null -m 5 youlmk.com/k/k_7hq2nk3f9qd8w4 -d '{\"title\":\"Codex needs you\",\"priority\":\"high\"}'" }] }],
"Stop": [{ "hooks": [{ "type": "command", "command": "curl -s -o /dev/null -m 5 youlmk.com/k/k_7hq2nk3f9qd8w4 -d 'Codex is done'" }] }]
}
}

Cursor

Cursor reads ~/.cursor/hooks.json (or the project's .cursor/hooks.json), whose hooks point at a script. Its stop event fires when the agent finishes:

{ "version": 1, "hooks": { "stop": [{ "command": "~/.cursor/hooks/youlmk.sh" }] } }
#!/bin/sh
curl -s -o /dev/null -m 5 youlmk.com/k/k_7hq2nk3f9qd8w4 -d 'Cursor is done'

Make the script executable (chmod +x ~/.cursor/hooks/youlmk.sh). Cursor can also load hooks written for Claude Code, so the settings from step 2 work there too.

Every one of these sends only what the command says: an event name, never your prompt, your code or the agent's answer. The trial is 10 notifications and 3 watches, no card; after that Send is $4 a month.

Next

Cron jobs and scripts: A notification when a cron job or a script finishes or fails: one line at the end of the job, high priority for the failures, one card for the repeats. · MCP server · Reach · Grouping