Block distracting websites unless Claude Code is actively running inference.
The premise is simple: if Claude is working, you should be too. When Claude stops, your distractions come back.
┌─────────────────┐ hooks ┌─────────────────┐ websocket ┌─────────────────┐
│ Claude Code │ ─────────────► │ Blocker Server │ ◄─────────────► │ Chrome Extension│
│ (terminal) │ │ (localhost) │ │ (browser) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
│ UserPromptSubmit │ tracks sessions │ blocks sites
│ PreToolUse │ broadcasts state │ shows modal
│ Stop │ │ bypass button
└───────────────────────────────────┴───────────────────────────────────┘
- Claude Code hooks notify the server when you submit a prompt or when Claude finishes
- Blocker server tracks all Claude Code sessions and their working/idle states
- Chrome extension blocks configured sites when no session is actively working
npx claude-blocker --setupThis installs the Claude Code hooks and starts the server. The hooks are configured in ~/.claude/settings.json.
- Download from Chrome Web Store (coming soon)
- Or load unpacked from
packages/extension/dist
Click the extension icon → Settings to add sites you want blocked when Claude is idle.
Default blocked sites: x.com, youtube.com
# Start with auto-setup (recommended for first run)
npx claude-blocker --setup
# Start on custom port
npx claude-blocker --port 9000
# Remove hooks from Claude Code settings
npx claude-blocker --remove
# Show help
npx claude-blocker --help- Soft blocking — Sites show a modal overlay, not a hard block
- Real-time updates — No page refresh needed when state changes
- Multi-session support — Tracks multiple Claude Code instances
- Emergency bypass — 5-minute bypass, once per day
- Configurable sites — Add/remove sites from extension settings
- Works offline — Blocks everything when server isn't running (safety default)
- Node.js 18+
- Chrome (or Chromium-based browser)
- Claude Code
# Clone and install
git clone https://github.com/t3-content/claude-blocker.git
cd claude-blocker
pnpm install
# Build everything
pnpm build
# Development mode
pnpm devpackages/
├── server/ # Node.js server + CLI (published to npm)
├── extension/ # Chrome extension (Manifest V3)
└── shared/ # Shared TypeScript types
- No data collection — All data stays on your machine
- Local only — Server runs on localhost, no external connections
- Chrome sync — Blocked sites list syncs via your Chrome account (if enabled)
See PRIVACY.md for full privacy policy.
MIT © Theo Browne