Physical console for Claude Code - approve/deny permissions from your phone or hardware device
Project description
Claude Board
A permission approval console for Claude Code - approve or deny permission requests from your phone or (future) a physical hardware device.
Requirements
Important: Claude Board requires Claude Code CLI in terminal for full functionality.
Environment Compatibility
| Environment | Permission Approval | TODO Tracking | Notes |
|---|---|---|---|
Terminal (claude command) |
✅ Full support | ✅ Full support | Recommended |
| VS Code Extension | ⚠️ Known bug | ✅ Works | See below |
| Claude Desktop (CLI mode) | ⚠️ Known bug | ✅ Works | See below |
| Claude Desktop (Chat interface) | ❌ Not supported | ❌ Not supported | Different architecture |
Known Issue: PermissionRequest Hook Bug
The PermissionRequest hook does not trigger in VS Code Extension and Claude Desktop's built-in CLI. This is a known upstream bug in Claude Code:
- Issue #13203 - PermissionRequest hook does not trigger in VSCode extension
- Issue #17036 - VS Code extension does not trigger hooks during permission prompt
- Issue #13339 - VS Code Extension ignores hook
permissionDecision: "ask"
Workaround: Use Claude Code in terminal (claude command) for full permission approval functionality. TODO tracking works in all CLI environments.
Why doesn't Claude Desktop chat work at all?
Claude Desktop's chat interface and Claude Code CLI are completely different products:
- Claude Code CLI uses
~/.claude/settings.jsonand supports Hooks - Claude Desktop Chat uses
claude_desktop_config.jsonand supports MCP Servers only
The chat interface has no "permission request" concept, so hooks cannot intercept anything.
Features
- Web UI: Approve/deny requests from any device with a browser (phone, tablet, desktop)
- Real-time updates: WebSocket-based instant notifications
- Sound & vibration: Get alerted when permission is needed
- YOLO mode: Auto-approve all requests with one click
- TODO tracking: See Claude's task list in real-time
- Keyboard shortcuts: Y/Enter to approve, N/Escape to deny
Installation
Using pip
pip install claude-board
Using uv
uv tool install claude-board
From source
git clone https://github.com/pescn/claude-board.git
cd claude-board
pip install -e .
Quick Start
1. Install hooks into Claude Code
claude-board install
This adds hooks to ~/.claude/settings.json. Your existing hooks are preserved.
2. Start the server
claude-board serve
3. Open the URL on your phone
The server will display a URL like http://192.168.x.x:8765 - open it on your phone.
4. Restart Claude Code
Claude Code needs to be restarted to load the new hooks.
That's it! Now when Claude Code needs permission to run a command, you'll get a notification on your phone.
Commands
# Start the web server
claude-board serve [--port 8765] [--open]
# Install hooks (preserves existing hooks)
claude-board install [--scope user|local]
# Uninstall hooks
claude-board uninstall [--scope user|local] [--all]
# Check status
claude-board status
# View/modify configuration
claude-board config [--port PORT] [--yolo/--no-yolo]
# Show version
claude-board --version
Configuration
Environment Variables
CLAUDE_BOARD_HOST: Server host (default:127.0.0.1)CLAUDE_BOARD_PORT: Server port (default:8765)
Safe Tools (Auto-Approved)
These tools are automatically approved without sending to your phone:
Glob,Grep- File searchingTodoWrite,TodoRead- Task managementTask- Subagent tasksWebSearch,WebFetch- Web operationsRead(within project directory)
Dangerous Tools (Require Approval)
Bash- Shell commandsWrite- Creating/overwriting filesEdit- Modifying files
Roadmap
Phase 0 (Current): Web UI ✅
Pure software solution with web-based approval.
Phase 1: Raspberry Pi (Planned)
Physical console with:
- Mechanical key switches (Approve, Deny, Retry, YOLO)
- E-ink display for task status
- Wired connection
Phase 2: Bluetooth (Planned)
Wireless physical console with BLE connectivity.
Phase 3: ESP32 Standalone (Planned)
Battery-powered portable device.
Development
# Clone and install in development mode
git clone https://github.com/pescn/claude-board.git
cd claude-board
pip install -e ".[dev]"
# Run tests
pytest
# Start server in development
claude-board serve --port 8765
License
MIT
Contributing
Contributions are welcome! Please open an issue or pull request.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file claude_board-0.3.0.tar.gz.
File metadata
- Download URL: claude_board-0.3.0.tar.gz
- Upload date:
- Size: 64.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5e7c4475de851cd2102b7be2fef3da7ea0ff875ec7f71b96604d9d6103b8d990
|
|
| MD5 |
488b9b39e211e29054556690dbe551a8
|
|
| BLAKE2b-256 |
4a0eaac5d5ca35f007a229f659de20a95ed5e40803ce1d192e39f818d6e52925
|
Provenance
The following attestation bundles were made for claude_board-0.3.0.tar.gz:
Publisher:
publish.yml on EM-GeekLab/claude-board
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
claude_board-0.3.0.tar.gz -
Subject digest:
5e7c4475de851cd2102b7be2fef3da7ea0ff875ec7f71b96604d9d6103b8d990 - Sigstore transparency entry: 833431350
- Sigstore integration time:
-
Permalink:
EM-GeekLab/claude-board@8090e3363d5b622ed8c88f378dac2fe7aea7a806 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/EM-GeekLab
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8090e3363d5b622ed8c88f378dac2fe7aea7a806 -
Trigger Event:
release
-
Statement type:
File details
Details for the file claude_board-0.3.0-py3-none-any.whl.
File metadata
- Download URL: claude_board-0.3.0-py3-none-any.whl
- Upload date:
- Size: 73.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82402ea94e92f29f52ff6516c8be50594a65fc8c0790c55434fa441b446250ca
|
|
| MD5 |
54e34cf156f1cdc461b4c9373afbf9db
|
|
| BLAKE2b-256 |
1a0ebece0e8c04e7fd40926417ffd3160357bfbd679e985a1e135bf361bbf830
|
Provenance
The following attestation bundles were made for claude_board-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on EM-GeekLab/claude-board
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
claude_board-0.3.0-py3-none-any.whl -
Subject digest:
82402ea94e92f29f52ff6516c8be50594a65fc8c0790c55434fa441b446250ca - Sigstore transparency entry: 833431376
- Sigstore integration time:
-
Permalink:
EM-GeekLab/claude-board@8090e3363d5b622ed8c88f378dac2fe7aea7a806 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/EM-GeekLab
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8090e3363d5b622ed8c88f378dac2fe7aea7a806 -
Trigger Event:
release
-
Statement type: