Notifications
Jimothy turns run events into notifications and fans them out to channels. Every event (except per-step successes) also lands in the in-app inbox.
Events
Section titled “Events”| Event | Label in the editor | Title example |
|---|---|---|
run.started |
Run started | Run #42 started |
run.succeeded |
Run succeeded | Run #42 succeeded (body includes duration and cost) |
run.failed |
Run failed | Run #42 failed (body includes the error) |
run.cancelled |
Run cancelled | Run #42 cancelled |
step.succeeded |
Step succeeded | Implement finished · run #42 |
step.failed |
Step failed | Implement failed · run #42 |
approval.required |
Approval needed | Approval needed · run #42 (body: step name and approval message) |
trigger.error |
Trigger errors | Trigger "Linear: ENG" failed (body: the error) |
The body starts with the issue key and title (or the pipeline name). run.started fires once per run, not again on retries. step.failed fires when a step finally fails (after retries and loops).
Channels
Section titled “Channels”Open Notifications → Add channel and pick a type. Every channel has:
| Field | Notes |
|---|---|
| Name | |
| URL | Not for Desktop. The webhook or topic URL. |
| Bearer token | ntfy and Custom webhook only. Optional. |
| Events | Chips for the eight events. New channels start with Run succeeded, Run failed, Approval needed and Trigger errors. |
| Pipelines | Restrict to some pipelines. None selected = all pipelines. Events not tied to a run (trigger errors) go to every channel that subscribes to them. |
Send test (in the editor or the paper-plane button on the list) sends Jimothy test notification through the channel and shows the error if it fails. The toggle on each channel turns it on and off.
URLs and tokens are stored encrypted. Delivery has a 15 second timeout; failed deliveries are dropped silently (use Send test to debug).
Desktop
Section titled “Desktop”Native OS notifications. A Desktop notifications channel exists by default (Run succeeded, Run failed, Approval needed, Trigger errors). Clicking a notification brings Jimothy to the front and opens the run. Informational notifications (like Run started) are silent.
- Create a Slack app (or use an existing one), enable Incoming Webhooks, and add a webhook to a channel.
- Paste the URL (
https://hooks.slack.com/services/…) into URL.
Messages use Block Kit: a bold title with an emoji (ℹ️ info, ✅ success, ✋ warning/approval, ❌ error), the body, and a context line with links to the issue and any PRs.
Discord
Section titled “Discord”In the Discord channel: Edit Channel → Integrations → Webhooks → New Webhook → Copy Webhook URL (https://discord.com/api/webhooks/…). Messages are embeds coloured by severity, titled with the event, linking to the issue, with PR links in the description.
Microsoft Teams
Section titled “Microsoft Teams”Create an incoming webhook for the channel with a Teams Workflows template for webhook requests (or a legacy incoming webhook connector) and paste its URL (https://…webhook.office.com/… or the Workflows URL). Messages are Adaptive Cards (v1.4) with the title, body, and an Open URL button per link.
ntfy (phone push)
Section titled “ntfy (phone push)”ntfy pushes notifications to the ntfy app on your phone.
- Install the ntfy app (iOS/Android) and subscribe to a topic with a hard-to-guess name, e.g.
jimothy-7f3k2q. - In Jimothy, set URL to the topic URL:
https://ntfy.sh/jimothy-7f3k2q(or your self-hosted server). - If your topic is protected, put an access token in Bearer token.
Jimothy POSTs the body as plain text (with PR links on extra lines) and sets ntfy headers:
| Header | Value |
|---|---|
Title |
The notification title (RFC 2047-encoded if it contains non-ASCII characters) |
Priority |
high for errors and approval.required, else default |
Tags |
white_check_mark (success), x (error), raised_hand (warning/approval), factory (info) |
Click |
The issue URL, when the run has one — tapping the notification opens it |
Authorization |
Bearer <token>, if set |
To open the run itself from your phone, set up Remote access; see Approvals from your phone.
Custom webhook
Section titled “Custom webhook”Receives a JSON POST for every subscribed event, with Authorization: Bearer <token> if a token is set:
{ "event": "run.succeeded", "title": "Run #42 succeeded", "body": "ENG-123 · Add rate limiting\n18m 4s · $1.37", "severity": "success", "at": "2026-09-28T14:03:11.412Z", "run": { "id": "run_0mfz2k1a9c3e5d7", "number": 42, "status": "succeeded", "pipeline": "Feature: Plan → Build → Review → PR", "issue": { "key": "ENG-123", "title": "Add rate limiting", "url": "https://linear.app/acme/issue/ENG-123" }, "branch": "jimothy/eng-123", "costUsd": 1.37, "links": [{ "label": "PR #57", "url": "https://github.com/acme/web-app/pull/57" }] }}severity is info, success, warning or error. run is omitted for trigger errors. Step and approval events also carry stepId. Any non-2xx response counts as a failure.
Every event except Step succeeded is added to the inbox (the newest 300 are kept).
- Sidebar → Inbox opens a drawer with all items, a coloured dot per severity, and an unread count badge in the sidebar. Click an item to mark it read and open its run. Mark all read and the trash button (Clear) act on everything.
- Notifications → Recent activity shows the latest 50 items, with Mark all read.
- On narrow screens (and over remote access), a bell in the top bar opens the inbox, with a dot when there are unread items.
Tray and dock
Section titled “Tray and dock”Closing the main window doesn’t quit Jimothy: it keeps running in the system tray, so triggers keep polling and runs keep going. Use Quit in the tray menu to exit.
The tray menu shows:
- Open Jimothy
N active runs, followed by up to five active runs (#42 ENG-123 — running); click one to open itN awaiting approval, followed by up to five runs waiting (✋ #41 ENG-120)- New run…
- Quit
The tray tooltip reads Jimothy — 2 active, 1 awaiting approval. On macOS the menu-bar title shows the active count and ✋N for approvals. On macOS and Linux the dock/launcher badge shows the number of runs awaiting approval.