Alerts and approvals
Wendo alerts you when Claude Code asks for permission, asks a question, or finishes, and lets you approve or deny from your phone. There is no intermediate server and no account: a script on your computer writes each event to ~/.wendo/events.jsonl, and the app reads it over SSH with your key.
Where to find it
- Inbox: the alerts from all your hosts. Each row can be approved or denied.
- Settings › Agents › Hooks: the install command and the manual setup.
- Settings › Agents › Notifications: how the app alerts you and the ntfy topic.
Install
On your computer (macOS or Linux; on Windows, inside WSL):
curl -fsSL https://wendo.lirafy.dev/install.sh | sh
It downloads wendo-hook.sh and wendo-pair.sh to ~/.wendo, installs jq and qrencode with the system package manager, adds the hook to ~/.claude/settings.json (first saving a copy as settings.json.bak-wendo), and shows the QR code for pairing. You can run it again without anything being duplicated.
Options, after sh -s --: --no-deps (doesn't install packages), --no-claude (doesn't touch the Claude configuration), and --no-pair (doesn't show the QR code). For example:
curl -fsSL https://wendo.lirafy.dev/install.sh | sh -s -- --no-deps
Events it records: PermissionRequest, Notification, Stop, UserPromptSubmit, SessionStart, and SessionEnd.
How an approval works
When a PermissionRequest arrives, the hook waits up to 90 seconds for you to answer from the app. If you don't answer, it does nothing and Claude Code asks you in the terminal as usual. You can adjust this with environment variables in the hook command:
WENDO_APPROVAL_TIMEOUT: seconds to wait. The hook'stimeoutinsettings.json(120) must be larger.WENDO_BLOCKING=0: only alerts, without waiting for an answer.WENDO_HOST: the computer's name, if the app has it under a different name thanhostname -s.
Questions (AskUserQuestion) and plan approval (ExitPlanMode) don't block: you answer them from the Chat View.
Notifications with the app closed
With the app open, Wendo reads the Inbox every few seconds. With the app closed, it uses ntfy:
- Put
NTFY_TOPIC=<a long, random topic>in front of the hook command. - Subscribe to that topic in the ntfy app.
- Enter the same topic in Settings › Agents › Notifications.
The topic acts as a password, so make it hard to guess. With NTFY_URL you can use your own ntfy server. On Android, there is also a background check at least every 15 minutes.
Requirements and limits
- It needs
jq.curlis only needed for ntfy. - Claude Code only for now: the hook isn't registered with other agents.
- Run Claude inside tmux, zellij, or herdr so that tapping an alert takes you to its pane in the app.
- The free plan includes 5 trial approvals from the Inbox. With Pro there is no limit.