By Mocha--
POST Claude Code Notification, PreToolUse:ExitPlanMode, PreToolUse:AskUserQuestion, and Stop hook events to a webhook URL.
Bash hooks that POST to a webhook URL whenever Claude needs you:
permission_prompt|elicitation_dialog).In Claude Code.
/plugin marketplace add Mocha--/claude-code-notify-plugin
/plugin install claude-code-notify-plugin@mocha-plugins
Three environment variables are required:
| Variable | Required | Description |
|---|---|---|
CLAUDE_NOTIFY_WEBHOOK_URL | yes | Webhook URL. |
CLAUDE_NOTIFY_NOTIFICATION_PAYLOAD | yes | JSON body for Notification, PreToolUse:ExitPlanMode, and PreToolUse:AskUserQuestion. POSTed verbatim. |
CLAUDE_NOTIFY_STOP_PAYLOAD | yes | JSON body for Stop. POSTed verbatim. |
If any of these variables is missing, the hook exits non-zero and prints an error to stderr. Disable the plugin with /plugin disable if you want to silence it temporarily.
Pick one of:
After installing the plugin, ask Claude:
configure notify plugin
This invokes the bundled configure skill, which inspects your existing config (shell rc files + ~/.claude/settings.json), asks where to write the vars, generates payloads for Slack / Discord / ntfy / custom shapes, and writes them for you.
Export them in ~/.zshrc, ~/.bashrc, or add them under env in ~/.claude/settings.json. See Payload examples below.
After either option, restart Claude Code so the hook subprocess inherits the new env.
The payload shape is entirely up to you — whatever JSON your webhook accepts. The plugin POSTs the value as application/json exactly as set, with no templating or substitution. The examples below are just starting points for common destinations:
export CLAUDE_NOTIFY_WEBHOOK_URL="https://hooks.slack.com/triggers/..."
# Slack workflow trigger
export CLAUDE_NOTIFY_NOTIFICATION_PAYLOAD='{"origin":"🌰 Devbox","message":"🚨 Waiting for input"}'
export CLAUDE_NOTIFY_STOP_PAYLOAD='{"origin":"🌰 Devbox","message":"✅ Complete"}'
# Discord
export CLAUDE_NOTIFY_NOTIFICATION_PAYLOAD='{"content":"🚨 Claude needs you"}'
export CLAUDE_NOTIFY_STOP_PAYLOAD='{"content":"✅ Claude finished"}'
# ntfy
export CLAUDE_NOTIFY_NOTIFICATION_PAYLOAD='{"topic":"claude","title":"Claude","message":"Waiting for input"}'
export CLAUDE_NOTIFY_STOP_PAYLOAD='{"topic":"claude","title":"Claude","message":"Complete"}'
For anything else, check your webhook's docs for the expected request body and put that JSON in the payload variables.
bash and curl. That's it.
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
npx claudepluginhub mocha--/claude-code-notify-plugin --plugin claude-code-notify-pluginMemory compression system for Claude Code - persist context across sessions
Ultra-compressed communication mode. Cuts ~75% of tokens while keeping full technical accuracy by speaking like a caveman.
Multi-model consensus engine integrating OpenAI Codex CLI, Gemini CLI, and Claude CLI for collaborative code review and problem-solving.
Curate auto-memory, promote learnings to CLAUDE.md and rules, extract proven patterns into reusable skills.
Editorial "Web Designer" bundle for Claude Code from Antigravity Awesome Skills.
Harness-native ECC operator layer - 67 agents, 271 skills, 92 legacy command shims, reusable hooks, rules, selective install profiles, and production-ready workflows for Claude Code, Codex, OpenCode, Cursor, and related agent harnesses