Guides

Notifications

Get Claude Code and Codex permission notifications through Web Push, ntfy with Allow/Deny buttons, Slack and Discord webhooks, or desktop notifications.

When a request needs you and you’re away, Pilothouse notifies every channel you’ve set up at once. The first answer wins, whichever device it comes from.

Channel Can you answer from it? Setup
Web Push to the paired web app Yes — open it and tap Allow / Deny Phone setup
ntfy Yes — signed Allow / Deny buttons notify.ntfy in config
Slack / Discord (incoming webhooks) No — the message links to the web app notify.webhooks in config
Desktop No — it brings you to the terminal On by default

At your desk you only get a desktop notification, and only if the agent’s dialog has been waiting longer than presence.notify_after (default 45 s).

Web Push

Set up automatically when you pair a phone and allow notifications. Pilothouse generates its own VAPID keys on first run; pushes go from your machine to your phone’s push service (Apple, Google or Mozilla) and contain only what’s needed to show the notification.

ntfy

ntfy delivers push notifications to its Android and iOS apps, with action buttons.

# ~/.pilothouse/config.yaml
notify:
  ntfy:
    server: https://ntfy.sh      # or your own ntfy server
    topic: pilothouse-7f3k9q2m      # pick something unguessable
    token: ""                    # access token, if your server needs one

On ntfy.sh, a topic name works like a password: anyone who knows it can read the messages. Use a long random topic, or a self-hosted server with access control.

Pilothouse attaches Allow and Deny buttons. Each button carries a random, single-use token that is valid only for that request and only until it expires; Pilothouse stores only a hash of it. The buttons call back to your machine through web.public_url, so they need the Tailscale setup to be in place and your phone on the tailnet.

Slack and Discord

Any incoming-webhook URL that accepts Slack- or Discord-style JSON:

notify:
  webhooks:
    - https://hooks.slack.com/services/T000/B000/XXXX
    - https://discord.com/api/webhooks/123/abc

Webhook messages include the agent, the repo and a one-line summary of the request, plus a link to the web app. They don’t have buttons.

Desktop

On by default (notify.desktop: true). Uses the native notification center on macOS and the desktop notification service on Linux.

Test

pilothouse notify test

sends a test message to every configured channel.

What leaves your machine

Only the notification itself, sent to the channels you configured. Keep in mind that third-party services (Slack, Discord, ntfy.sh) see the text of what you send them; Web Push payloads go through your phone vendor’s push service.

Found a mistake? Open an issue.