{
  "markdown": "# Claude Alert\n\nNever miss a Claude Code approval prompt.\n\n![Claude Alert in action](docs/assets/hero.png)\n\n---\n\n## Install\n\n### Tier 1 — Quick Install (Recommended)\n\nNo Xcode required. Works on any Mac.\n\n```bash\nnpx claude-alert install\n```\n\nWhat you get:\n- Native macOS banner notifications\n- Sound alerts (Low / Medium / High risk)\n- Full audit log at `~/.claude-notifier/audit.json`\n- Auto-approved low-risk operations (no interruption)\n\n**Uninstall:**\n```bash\nnpx claude-alert uninstall\n```\n\n---\n\n### Tier 2 — Full Install (Animated Robot Menu Bar)\n\nRequires Xcode. Adds the animated robot in your menu bar — speeds up during pending approvals, celebrates after you approve.\n\n**Step 1 — Install Xcode Command Line Tools (if needed):**\n```bash\nxcode-select --install\n```\n\n**Step 2 — Clone and install hooks:**\n```bash\ngit clone https://github.com/wilbert-t/claude-buddy.git\ncd claude-buddy\nnode setup/install.js\n```\n\n**Step 3 — Build and launch the companion app:**\n```bash\nxcodebuild -project swift-app/ClaudeNotifier.xcodeproj \\\n  -scheme ClaudeNotifier \\\n  -configuration Release \\\n  -derivedDataPath /tmp/claude-notifier-build && \\\nopen /tmp/claude-notifier-build/Build/Products/Release/ClaudeNotifier.app\n```\n\nThe robot appears in your menu bar and animates with each approval cycle. Notifications are still delivered via terminal-notifier (same as Tier 1). Locally signed by Xcode — no Apple Developer account needed.\n\n**Uninstall:**\n```bash\nnode setup/uninstall.js\n```\n\n---\n\n### Via Plugin (Claude Code only)\n\n```\n/plugin install claude-alert@claude-plugins-official\n```\n\nHooks register automatically. Tier 1 notifications only.\n\n---\n\n## The Problem\n\nClaude Code works autonomously — until it needs your approval.\nThen it pauses. Silently. And waits.\n\nIf you're in another window, on your phone, or just not watching —\nClaude sits idle. You lose time. The flow breaks.\n\n**Claude Alert fixes this.** The moment Claude needs you, you know about it.\nNative banner. Your terminal focused and ready.\n\n---\n\n## How It Works\n\n![Claude Alert icon](docs/assets/icon.gif)\n\n| Risk | Examples | What Happens |\n|------|----------|--------------|\n| 🟢 Low | Glob, Grep, Read, LS | Auto-approved silently — no interruption |\n| 🟡 Medium | Write, Edit, npm install, mv | Banner notification |\n| 🔴 High | rm -rf, git push --force, sudo, DROP TABLE, curl\\|bash | Banner notification |\n\nLow-risk operations are approved silently so Claude never pauses for safe work.\nMedium and high-risk operations fire a native banner and wait for your input.\n\n---\n\n## Configuration\n\nQuick settings commands:\n\n```bash\n# View current settings\nnpx claude-alert config\n\n# Update a setting\nnpx claude-alert config --set notificationsEnabled=false\nnpx claude-alert config --set autoApproveLevel=medium\n\n# Open settings in your editor/app\nnpx claude-alert config --open\n```\n\nAdvanced fallback: edit `~/.claude-notifier/settings.json` directly. All fields are optional — defaults work out of the box.\n\n```json\n{\n  \"quietHoursStart\": \"22:00\",\n  \"quietHoursEnd\": \"08:00\",\n  \"quietDays\": [\"Saturday\", \"Sunday\"],\n  \"autoApproveLevel\": \"low\"\n}\n```\n\n| Setting | Default | Description |\n|---------|---------|-------------|\n| `quietHoursStart` | `null` | Start of mute window (24h format) |\n| `quietHoursEnd` | `null` | End of mute window |\n| `quietDays` | `[]` | Days to mute all notifications |\n| `autoApproveLevel` | `\"low\"` | Auto-approve threshold: `\"none\"`, `\"low\"`, or `\"medium\"` |\n\n### Notification Style\n\nFor approval prompts, switch terminal-notifier to **Alert** style so the banner stays on screen until you act:\n\n**System Settings → Notifications → terminal-notifier → Alerts**\n\n---\n\n## Audit Log\n\nEvery approval event is logged to `~/.claude-notifier/audit.json`.\n\n```bash\n# Last 10 approvals\njq '.[-10:]' ~/.claude-notifier/audit.json\n\n# High-risk only\njq '[.[] | select(.riskLevel == \"high\")]' ~/.claude-notifier/audit.json\n\n# Count by risk level\njq 'group_by(.riskLevel) | map({risk: .[0].riskLevel, count: length})' ~/.claude-notifier/audit.json\n```\n\n---\n\n## Troubleshooting\n\n**No notification appears**\n- Check logs: `tail -20 ~/.claude-notifier/error.log`\n- Verify notification permission: System Settings → Notifications → terminal-notifier\n\n**Hooks not firing**\n- Check: `cat ~/.claude/settings.json | grep claude-alert`\n\n**Menu bar app not showing**\n- Check: `pgrep -fl ClaudeNotifier`\n- Notification daemon broken? Log out and log back in. Never run `killall usernoted`.\n\n---\n\n## Uninstall\n\n**Tier 1 (npx install):**\n```bash\nnpx claude-alert uninstall\n```\n\n**Tier 2 (cloned repo):**\n```bash\nnode setup/uninstall.js\n```\n\nUse `--clean-all` to also remove audit logs and settings.\n\n---\n\n## Security\n\nThe terminal-notifier binary is downloaded from GitHub Releases and its SHA256 checksum is verified before installation. If the checksum doesn't match, installation is aborted.\n\n## Privacy\n\nAll data stays local in `~/.claude-notifier/`. Claude Alert stores audit entries, pending approval metadata (including source app, source bundle ID, and source working directory), user settings, and local error logs. No network requests beyond the one-time terminal-notifier download. No telemetry. You own your audit log.\n\n---\n\n## License\n\nMIT\n",
  "bytes": 5218,
  "sha": "e4726a884021b7b02cf7dddeaec15fa41dd0210ad2383e5190e2ff1ef57a7b60",
  "repo_slug": "wilbert-t/claude-alert",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_wilbert_t_claude_alert_claude_alert_cdd1b5f6/readme"
}