A web-based interface for Claude Code CLI that can be accessed from any browser. This package allows you to run Claude Code in a terminal-like environment through your web browser, with real-time streaming and full interactivity.
- Node.js >= 16
- Claude/Code CLI installed and available on
PATH
- Modern browser with WebSocket support
Breaking Change: Starting with v2.0.0, authentication is enabled by default for security. When you start the server, it will automatically generate a random token that you'll need to access the interface.
Quick Start: Just run the command and copy the displayed token:
npx claude-code-web
# Look for: "Generated random authentication token: Xr9kM2nQ7w"
Migration: If you need the old behavior (no authentication), use --disable-auth
:
npx claude-code-web --disable-auth
- 🌐 Web-based terminal - Access Claude Code from any browser
- 🚀 Real-time streaming - Live output with WebSocket communication
- 🎨 Terminal emulation - Full ANSI color support and terminal features
- 🔐 Authentication - Secure by default with automatic token generation
- 📱 Responsive design - Works on desktop and mobile
- ⚡ NPX support - Run anywhere with
npx claude-code-web
- 🎛️ Customizable - Adjustable font size, themes, and settings
- 🔄 Multi-Session Support - Create and manage multiple persistent Claude sessions
- 🌍 Multi-Browser Access - Connect to the same session from different browsers/devices
- 💾 Session Persistence - Sessions remain active even when disconnecting
- 📜 Output Buffering - Reconnect and see previous output from your session
npm install -g claude-code-web
npx claude-code-web
git clone <repository>
cd claude-code-web
npm install
npm run dev # starts with debug logging
# Start with default settings (port 32352, max20 plan, auto-generated auth token)
npx claude-code-web
# Specify a subscription plan
npx claude-code-web --plan pro # 19k tokens, $18 limit
npx claude-code-web --plan max5 # 88k tokens, $35 limit
npx claude-code-web --plan max20 # 220k tokens, $140 limit (default)
# Specify a custom port
npx claude-code-web --port 8080
# Don't automatically open browser
npx claude-code-web --no-open
# Default: Auto-generates a random 10-character token (RECOMMENDED)
npx claude-code-web
# Output will show: "Generated random authentication token: Xr9kM2nQ7w"
# Use a custom authentication token
npx claude-code-web --auth your-secret-token
# Disable authentication entirely (NOT recommended for production)
npx claude-code-web --disable-auth
# Access with token in URL: http://localhost:32352/?token=your-token
# Enable HTTPS (requires SSL certificate files)
npx claude-code-web --https --cert /path/to/cert.pem --key /path/to/key.pem
# Enable additional logging and debugging
npx claude-code-web --dev
# Start the server with defaults
npm start # equivalent to: node bin/cc-web.js
# Start in dev mode with verbose logs
npm run dev # equivalent to: node bin/cc-web.js --dev
# Run on a custom port
node bin/cc-web.js --port 8080
# Provide an auth token
node bin/cc-web.js --auth YOUR_TOKEN
- Session Dropdown: Click "Sessions" in the header to view all active sessions
- New Session: Create named sessions with custom working directories
- Join Session: Connect to any existing session from any browser
- Leave Session: Disconnect without stopping the Claude process
- Delete Session: Stop Claude and remove the session
- Sessions remain active even after all browsers disconnect
- Reconnect from any device using the same server
- Output history preserved (last 1000 lines)
- Multiple users can connect to the same session simultaneously
- Remote Work: Start a session at work, continue from home
- Collaboration: Share a session with team members
- Device Switching: Move between desktop and mobile seamlessly
- Recovery: Never lose work due to connection issues
Option | Description | Default |
---|---|---|
-p, --port <number> |
Server port | 32352 |
--no-open |
Don't automatically open browser | false |
--auth <token> |
Custom authentication token | auto-generated |
--disable-auth |
Disable authentication (not recommended) | false |
--https |
Enable HTTPS | false |
--cert <path> |
SSL certificate file path | none |
--key <path> |
SSL private key file path | none |
--dev |
Development mode with extra logging | false |
--plan <type> |
Subscription plan (pro, max5, max20) | max20 |
-
Claude Code Bridge - Spawns and manages Claude Code processes using
node-pty
- WebSocket Communication - Real-time bidirectional communication between browser and CLI
-
Terminal Emulation - Uses
xterm.js
for full terminal experience with ANSI colors - Process Management - Handles multiple sessions, process lifecycle, and cleanup
- Session Persistence - Automatically saves and restores sessions across server restarts
- Folder Mode - Browse and select working directories through the web interface
- Security - Optional authentication and rate limiting for production use
-
GET /
- Web interface -
GET /api/health
- Server health status -
GET /api/config
- Get server configuration -
GET /api/sessions/list
- List all active Claude sessions -
GET /api/sessions/persistence
- Get session persistence info -
POST /api/sessions/create
- Create a new session -
GET /api/sessions/:sessionId
- Get session details -
DELETE /api/sessions/:sessionId
- Delete a session -
GET /api/folders
- List available folders (folder mode) -
POST /api/folders/select
- Select working directory -
POST /api/set-working-dir
- Set working directory -
POST /api/create-folder
- Create new folder -
POST /api/close-session
- Close a session
-
create_session
- Create a new Claude session -
join_session
- Join an existing session -
leave_session
- Leave current session -
start_claude
- Start Claude Code in current session -
input
- Send input to Claude Code -
resize
- Resize terminal -
stop
- Stop Claude Code session -
ping/pong
- Heartbeat
Claude Code Web now requires authentication by default for security:
Default Behavior: Automatically generates a secure 10-character random token
npx claude-code-web
# Output: "Generated random authentication token: Xr9kM2nQ7w"
Custom Token: Specify your own token
npx claude-code-web --auth my-secure-token-123
Disable Authentication: Only for development (not recommended)
npx claude-code-web --disable-auth
Clients must provide the token either:
- In the
Authorization
header:Bearer your-token
- As a query parameter:
?token=your-token
- Through the web login prompt when accessing the interface
Built-in rate limiting prevents abuse:
- 100 requests per minute per IP by default
- Configurable limits for production environments
For production use, combine HTTPS with authentication:
# Recommended: Auto-generated token with HTTPS
npx claude-code-web --https --cert cert.pem --key key.pem
# Alternative: Custom token with HTTPS
npx claude-code-web --https --cert cert.pem --key key.pem --auth $(openssl rand -hex 32)
- Default Authentication: Automatic token generation prevents unauthorized access
- Secure Token Display: Generated tokens are highlighted in the console for easy copying
- Session Security: Each session requires proper authentication
- WebSocket Protection: Authentication extends to WebSocket connections
- Warning System: Clear warnings when authentication is disabled
Use the commands above under "Local Development (from source)" and "Running from source". Ensure the Claude CLI is installed and on your PATH
.
claude-code-web/
├── bin/cc-web.js # CLI entry point
├── src/
│ ├── server.js # Express server + WebSocket
│ ├── claude-bridge.js # Claude Code process management
│ ├── utils/
│ │ ├── auth.js # Authentication utilities
│ │ └── session-store.js # Session persistence
│ └── public/ # Web interface files
│ ├── index.html # Main HTML
│ ├── app.js # Frontend JavaScript
│ ├── auth.js # Client-side authentication
│ ├── session-manager.js # Session management UI
│ ├── plan-detector.js # Plan mode detection
│ └── style.css # Styling
└── package.json
- Framework: Mocha with Node's
assert
- Location: tests under
test/*.test.js
- Run tests:
npm test
- Guidelines: write fast, isolated unit tests; avoid network and real CLI calls—mock process spawns where possible.
- Chrome/Chromium 90+
- Firefox 88+
- Safari 14+
- Edge 90+
Ensure Claude Code is installed and accessible:
which claude
# or
claude --version
- Check firewall settings for the specified port
- Verify Claude Code is properly installed
- Try running with
--dev
flag for detailed logs
- Ensure the process has permission to spawn child processes
- Check file system permissions for the working directory
MIT — see the LICENSE file.
Contributions welcome! See CONTRIBUTING for guidelines on development, testing, and pull requests.
For issues and feature requests, please use the GitHub issue tracker.