notifications-demo.1.mp4
Hark turns webhooks into clean, source-branded iPhone notifications. Connect CI jobs, agents, scripts, monitoring tools, or anything else that can send an HTTP request.
Requires Node.js 22 or newer.
-
Install the Hark skill for your agent:
npx skills add R44VC0RP/hark --skill hark --global
-
Install the CLI:
npm install -g harkctl
-
Authenticate it with your Hark account:
harkctl auth login
-
Ask your agent:
What can Hark do?
Your agent can now notify your iPhone, request approvals or text replies, show task progress with Live Activities, and create webhook services for external systems.
- Sends rich iOS notifications from a simple webhook.
- Gives each service its own name, avatar, destination URL, and secret endpoint.
- Tracks delivery attempts and registered devices in a web dashboard.
- Supports approvals and text replies for agent workflows.
- Shows stateful task progress with Live Activities on the Lock Screen and Dynamic Island.
- Supports multiple devices and targeted delivery with Hark Pro.
- Sign in at hark.ryan.ceo.
- Register your iPhone with Hark for iPhone.
- Create a service and copy its secret webhook URL.
- Send it a JSON request.
curl -X POST 'https://hark.ryan.ceo/hooks/whk_your_token' \
-H 'Content-Type: application/json' \
-d '{
"title": "GitHub",
"body": "Production deployed successfully.",
"url": "https://github.com/acme/app/actions"
}'Only body is required.
| Field | Description |
|---|---|
body |
Notification text, up to 8,000 characters (16 KiB of UTF-8). |
title |
Optional sender-name override. |
imageUrl |
Optional public HTTPS avatar URL. |
url |
Optional web URL, app deep link, or Shortcuts URL opened when tapped. |
deviceIds |
Optional Pro routing to specific devices. |
project |
Optional project name that groups the notification in the app inbox. |
summary |
Optional short digest used for the push banner and list previews. |
bodyFormat |
Optional text or markdown metadata for the stored body. |
Successful requests return an event ID and the number of push requests accepted for delivery:
{
"ok": true,
"eventId": "evt_...",
"delivered": 1
}Use an Idempotency-Key header when retrying requests to prevent duplicate notifications.
Use the returned event ID to request removal of a notification from registered iPhones:
curl -X POST \
'https://hark.ryan.ceo/hooks/whk_your_token/events/evt_your_event/withdraw'Hark sends a silent background command to each active device and cancels any pending interactive response for the event. iOS treats background delivery as best effort, so a withdrawal can be delayed or skipped by the system.
Tap destinations support HTTPS universal links, custom app schemes such as
your-app://incidents/INC-42, and Apple Shortcuts:
shortcuts://run-shortcut?name=Deployment%20Follow-up&input=text&text=production%20deployed
Names and input must be URL-encoded. iOS opens the destination only after the recipient taps the notification; delivery alone does not launch an app or run a shortcut.
Start a stateful Live Activity using the same service webhook token:
curl -X POST 'https://hark.ryan.ceo/hooks/whk_your_token/live-activities' \
-H 'Content-Type: application/json' \
-d '{
"title": "Deploy #184",
"status": "Building",
"progress": 0.25,
"symbol": "build",
"accentColor": "#FF9F0A"
}'The response includes an activityId. Use it to update or end the activity:
PATCH /hooks/:token/live-activities/:activityId
POST /hooks/:token/live-activities/:activityId/end
Updates accept partial state such as status, detail, progress, symbol, and accentColor.
Hark allows one active task Live Activity per device; pass replace: true on start to silently end
whatever task occupies the device and take the slot. Interactive approval activities may coexist
with that task. Starting an activity may alert the user, but progress updates are silent by default.
High-priority updates control delivery speed, not sound or haptics.
To contribute a genuinely new Live Activity layout, including no-simulator testing and every public API, widget, CLI, and docs touchpoint, see Contributing a Live Activity template.
The harkctl CLI can send one-shot notifications, ask for approvals or short
replies, and manage Live Activities from scripts or AI agents.
harkctl auth login
harkctl notify "Deploy finished ✅" --title "Deploy bot"
harkctl notify ask "Deploy production?" --approval --wait
harkctl notify ask "Send the email?" --approval --live-activity \
--primary-label Send --secondary-label Deny --wait
harkctl activity start --title "Release" --status "Building" --progress 0.1The installable hark agent skill follows the open Agent Skills format
used by skills.sh and supports OpenCode, Claude Code, Codex,
Cursor, and other compatible agents.
harkctl can route permission requests from Claude Code, Codex, OpenCode V1, and OpenCode V2 to
Hark with one setup command:
npm install --global harkctl
harkctl auth login --client-name "Coding agent permissions"
harkctl permissions setup allSee the coding-agent permission setup guide for Claude Code, Codex, OpenCode V1, and OpenCode V2 details.
Only an explicit phone approval allows a request. Other outcomes deny it, and raw commands, patches, prompts, file contents, and absolute paths are not sent to Hark.
Hark is source-available under the PolyForm Noncommercial License 1.0.0. Commercial use is not permitted without a separate license from the licensor.