Adding Pushover notifications to Claude Code
This post's featured URL for sharing metadata is https://www.jvt.me/img/profile.jpg.
There are times that you're away from your machine - or you've got so many terminal sessions you've not seen a notification - to say that your agent is waiting for input.
Although there are ways to get first-class support for this - for instance Claude Code's Remote Control (which only works if using a Claude Code subscription, i.e. Bedrock users don't get access to it) - I wanted to write a tiny bit of Go code today, and thought I'd hand-roll some notifications.
Given the Notification hook, this is actually fairly straightforward.
To get a notification, you need to wire in the hook i.e. my ~/.claude/settings.json looks like:
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "~/bin/_claude-hook"
}
]
}
]
}
}
Then, my _claude-hook is a lightweight wrapper:
#!/usr/bin/env bash
source ~/.secrets/claude-hook
claude-hook notification
This is then a very small CLI which allows me to call the Pushover API given a set of inputs.
In its first iteration, it echoes the message from Claude - but I'll follow-up to add some more insight into what session it's coming from.
For now, I'm using a single CLI for Claude Code. If I get back to using multiple harnesses again (especially now crush has at least started to add hooks), I'll probably amend this to be i.e.
-claude-hook notification
+agent-hook claude notification
So then I can share the same underlying codebase for the multi-agent setup - but there's no point in prematurely optimising when that's not the case!
(Oddly, this works on my work Mac, but not on my Linux laptop - I need to investigate further)