A modern GUI application for managing Claude Code hooks and customizing notification settings. Built with Next.js, tRPC, and TypeScript.
- Hook Management: Configure all 12 Claude Code hook types
- Notification Customizer: Edit emoji, messages, and sounds for notifications
- File-Based Config: Read/write settings directly to
~/.claude/settings.json - PowerShell Integration: Auto-generate notification scripts for Windows
- Type Safety: Full TypeScript support with Zod validation
- Testing: E2E tests with Playwright
- Node.js 18+ or Bun
- Windows with PowerShell (for notifications) or macOS/Linux
# Install dependencies
bun install
# Run development server
bun run dev
# Open browser to http://localhost:3000bun run build
bun run start# Run Playwright tests
bun run test:e2e
# Open test UI
bun run test:e2e:uisrc/
├── types/ # TypeScript type definitions
├── server/
│ ├── api/ # tRPC routers
│ └── services/ # Business logic (config, scripts)
├── components/
│ ├── ui/ # Reusable UI components
│ ├── layout/ # Layout components
│ └── notifications/ # Notification editor
├── pages/ # Next.js pages
├── styles/ # Global CSS
└── utils/ # Utility functions
tests/e2e/ # Playwright tests
The app reads from and writes to:
~/.claude/settings.json- Claude settings~/.config/claude/hooks/claude-notify.ps1- PowerShell notification script~/.config/claude/hooks/claude-notify-wsl.sh- Bash wrapper
- View all 12 hook types
- Enable/disable hooks
- Click "Edit" to configure each hook
- Customize emoji for each event
- Change notification messages
- Select sounds (BurntToast on Windows)
- Test notifications before saving
- SessionStart - When Claude session begins
- UserPromptSubmit - User submits a prompt
- PreToolUse - Before Claude uses a tool
- PermissionRequest - Permission requested
- PostToolUse - After tool execution
- PostToolUseFailure - Tool execution failed
- Notification - System notification event
- SubagentStart - Subagent started
- SubagentStop - Subagent stopped
- Stop - Session stopped
- PreCompact - Before context compaction
- SessionEnd - Session ended
GET /api/trpc/hooks.list- List all hooksGET /api/trpc/hooks.get- Get hook detailsPOST /api/trpc/hooks.update- Update hookPOST /api/trpc/hooks.toggle- Enable/disable hookPOST /api/trpc/hooks.delete- Delete hook
GET /api/trpc/notifications.list- List notificationsPOST /api/trpc/notifications.update- Update notificationsPOST /api/trpc/notifications.regenerateScript- Regenerate scriptPOST /api/trpc/notifications.test- Test notification
GET /api/trpc/config.read- Read settingsPOST /api/trpc/config.write- Write settingsPOST /api/trpc/config.backup- Backup settingsGET /api/trpc/config.export- Export configPOST /api/trpc/config.import- Import config
- Update
HOOK_EVENTSinsrc/types/hooks.ts - Update
HOOK_EVENTS_ORDEREDinsrc/utils/constants.ts - Tests will automatically run for the new type
- Create component in appropriate
src/components/directory - Add tests in
tests/e2e/ - Use shadcn/ui styling for consistency
MIT