Pushpush

Use cases

Pushpush is a simple building block: send an HTTP request, get a notification on your phone. Here’s a cookbook of ways to wire it into your workflow.

AI agents & Claude Code

Know when a long task finishes

You’re kicking off a refactor, migration, or test suite that’ll take a while. Tell Claude Code to ping you when it’s done so you can context-switch to something else.

Refactor the auth module to use the new token format. Send me a push on “claude” when you’re done.

Run the full test suite and push me the results on “tests”.

Get notified when Claude hits a blocker

Claude Code can use Pushpush proactively. Add something like this to your CLAUDE.md:

If you have the Pushpush MCP server connected, use send_push
to notify me on the "claude" topic when you need my attention —
e.g. when a long task finishes, when you hit a blocker, or
when you have a question.

Now Claude will push you when it’s stuck waiting for a decision, rather than silently stalling.

Agent-to-human handoff

If you’re building agents with the Claude Agent SDK or similar, Pushpush works as a lightweight escalation channel. When the agent encounters something it can’t resolve, it pushes to a topic you’re watching.

curl -X POST https://a.pushpu.sh/agent-escalations \
  -H "Authorization: Bearer $PUSH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Agent needs approval",
    "message": "PR #142 has failing checks. Manual review required.",
    "click": "https://github.com/yourorg/repo/pull/142"
  }'

CI/CD & deploys

Deploy notifications

Add a step at the end of your deploy pipeline to push the result. You know immediately whether to keep moving or go investigate.

# At the end of your deploy script or GitHub Action
curl -X POST https://a.pushpu.sh/deploys \
  -H "Authorization: Bearer $PUSH_TOKEN" \
  -d "v2.1.0 deployed to production"

GitHub Actions workflow

A reusable step you can drop into any workflow:

- name: Notify via Pushpush
  if: always()
  run: |
    STATUS="${{ job.status }}"
    curl -sf -X POST https://a.pushpu.sh/ci \
      -H "Authorization: Bearer ${{ secrets.PUSH_TOKEN }}" \
      -H "Content-Type: application/json" \
      -d "{
        \"title\": \"${{ github.repository }} — ${STATUS}\",
        \"message\": \"${{ github.workflow }} on ${{ github.ref_name }}\",
        \"click\": \"${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}\"
      }"

With if: always(), you get notified on success and failure. Drop the condition if you only want failures.

PR activity

Use a GitHub Action to push when a PR is reviewed or approved. Useful when you’re waiting on a review and don’t want to keep refreshing.

on:
  pull_request_review:
    types: [submitted]

jobs:
  notify:
    runs-on: ubuntu-latest
    steps:
      - run: |
          curl -sf -X POST https://a.pushpu.sh/prs \
            -H "Authorization: Bearer ${{ secrets.PUSH_TOKEN }}" \
            -H "Content-Type: application/json" \
            -d "{
              \"title\": \"PR review: ${{ github.event.review.state }}\",
              \"message\": \"${{ github.event.pull_request.title }}\",
              \"click\": \"${{ github.event.pull_request.html_url }}\"
            }"

Claude Code in CI

Use Claude Code with Pushpush to get AI-summarized CI notifications. The CLI works on any event type — including push-triggered deploys:

- name: Notify deploy result
  if: always()
  env:
    ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
  run: |
    npx -y @anthropic-ai/claude-code \
      --allowedTools mcp__pushpush__send_push \
      --mcp-config '{"mcpServers":{"pushpush":{"type":"http","url":"https://a.pushpu.sh/mcp","headers":{"Authorization":"Bearer ${{ secrets.PUSH_TOKEN }}"}}}}' \
      -p "The deploy finished with status: ${{ job.status }}. Send a push to the deploys topic."

For pull_request or issues events, you can use Claude Code Action instead:

- name: Notify on failure
  if: failure()
  uses: anthropics/claude-code-action@main
  with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
    github_token: ${{ github.token }}
    prompt: |
      Summarize the CI failure and send a push notification
      to the "ci" topic with the result.
    claude_args: >-
      --allowedTools Bash,Read,Glob,Grep,mcp__pushpush__send_push
      --mcp-config '{"mcpServers":{"pushpush":{"type":"http","url":"https://a.pushpu.sh/mcp","headers":{"Authorization":"Bearer ${{ secrets.PUSH_TOKEN }}"}}}}'

Store your Pushpush API token as a repository secret. Generate one by asking Claude Code: “Get me a Push API token that doesn’t expire”.

See the MCP integration docs for more configuration patterns.

Monitoring & alerting

Simple uptime check

A cron job that pings your service and pushes when it’s down. Lightweight alternative to a full monitoring stack when you’re running a side project.

#!/bin/bash
# Run via cron: */5 * * * * /path/to/check.sh

if ! curl -sf --max-time 10 https://yourapp.com/health > /dev/null; then
  curl -X POST https://a.pushpu.sh/alerts \
    -H "Authorization: Bearer $PUSH_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "title": "yourapp.com is down",
      "message": "Health check failed",
      "priority": 5,
      "click": "https://console.cloud.google.com/run"
    }'
fi

Priority 5 makes it a time-sensitive notification that breaks through Focus modes.

Cron job failure alerts

Wrap any cron job so you hear about failures instead of discovering them days later in a log file.

#!/bin/bash
# In your crontab: 0 2 * * * /path/to/backup-wrapper.sh

if ! /path/to/backup.sh 2>&1; then
  curl -X POST https://a.pushpu.sh/alerts \
    -H "Authorization: Bearer $PUSH_TOKEN" \
    -d "Nightly backup failed"
fi

Log-based alerts

Tail a log file and push when you see something bad. Good for catching errors in apps that don’t have structured alerting.

tail -F /var/log/myapp/error.log | while read line; do
  curl -sf -X POST https://a.pushpu.sh/errors \
    -H "Authorization: Bearer $PUSH_TOKEN" \
    -d "$line"
done

Personal scripts & automation

Long-running commands

Tack a push onto the end of any command so you know when it’s done. Works for builds, data processing, large file transfers — anything where you’d otherwise keep checking back.

# After a long build
make build && curl -X POST https://a.pushpu.sh/tasks \
  -H "Authorization: Bearer $PUSH_TOKEN" \
  -d "Build finished"

# A shell function for your .zshrc
pushdone() {
  curl -sf -X POST https://a.pushpu.sh/tasks \
    -H "Authorization: Bearer $PUSH_TOKEN" \
    -d "${1:-Done}"
}

# Usage: long-command; pushdone "Migration complete"

Scheduled reminders

A cron job that sends you a push at a specific time. Low-tech but effective.

# crontab: 0 9 * * 1 curl -X POST ...
curl -X POST https://a.pushpu.sh/reminders \
  -H "Authorization: Bearer $PUSH_TOKEN" \
  -d "Weekly review time"

Web scraping & data watches

Check a page periodically and push when something changes. Useful for tracking prices, availability, or any public data.

import requests, hashlib, os

TOKEN = os.environ["PUSH_TOKEN"]
url = "https://example.com/product"
state_file = "/tmp/watch-hash"

content = requests.get(url).text
current = hashlib.sha256(content.encode()).hexdigest()

previous = open(state_file).read().strip() if os.path.exists(state_file) else ""

if current != previous:
    open(state_file, "w").write(current)
    requests.post(
        "https://a.pushpu.sh/watches",
        headers={"Authorization": f"Bearer {TOKEN}"},
        json={
            "title": "Page changed",
            "message": url,
            "click": url,
        },
    )