aboutsummaryrefslogtreecommitdiff
path: root/claude-templates/bin/agent-page
blob: 11a5264c0a5f1c38551f4a3839e5d5da0bc8b604 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/bin/bash
# agent-page — page Craig's phone over Signal, from any machine or agent runtime.
#
# Usage: agent-page <message...>
#
# The pager identity (+15045173983) is registered in velox's signal-cli, so
# velox sends directly and every other machine ssh-relays the send over the
# tailnet. The recipient is Craig's Signal account UUID — his phone number
# reads as unregistered in Signal's directory, so never page the number.
# Verified end to end 2026-07-13 (phone push confirmed).
#
# This is the AWAY channel. At his desk, use the desktop channel instead:
#   notify info "Title" "Message" --persist
# See protocols.org "Paging Craig" for choosing between them.
#
# Known caveats (tracked on the rulesets Signal-pager task): velox must be
# up and reachable on the tailnet, and the signal-cli account wants a
# periodic `receive` (staleness warnings appear otherwise).
#
# Source: ~/code/rulesets/claude-templates/bin/agent-page
# Install: make -C ~/code/rulesets install

PAGER_ACCOUNT="+15045173983"
CRAIG_UUID="b1b5601e-6126-47f8-afaa-0a59f5188fde"
VELOX_HOST="velox.tailf3bb8c.ts.net"

if [ $# -eq 0 ]; then
  echo "usage: agent-page <message...>" >&2
  exit 2
fi

msg="$*"

if [ "$(uname -n)" = "velox" ]; then
  signal-cli -a "$PAGER_ACCOUNT" send -m "$msg" "$CRAIG_UUID"
  rc=$?
else
  # printf %q hardens the message for the remote shell.
  ssh -o BatchMode=yes -o ConnectTimeout=10 -o StrictHostKeyChecking=accept-new \
    "$VELOX_HOST" \
    "signal-cli -a $PAGER_ACCOUNT send -m $(printf '%q' "$msg") $CRAIG_UUID"
  rc=$?
fi

if [ "$rc" -ne 0 ]; then
  echo "agent-page: phone page failed (velox down or unreachable?) — fall back to the desktop channel: notify info 'Page' '<message>' --persist" >&2
fi
exit "$rc"