Skip to main content

Overview

Jean includes a built-in HTTP server with WebSocket support, enabling remote access to your projects and sessions from web browsers or other clients. All features available in the native app work in the browser.

Key Capabilities

HTTP Server

Architecture:
Server features:
  • HTTP/1.1 with WebSocket upgrade
  • Token-based authentication
  • CORS support for web clients
  • Static file serving (future)
  • RESTful API (future)
Configuration:

WebSocket Protocol

Event broadcasting:
Dual emission:
Event types:
  • Project events (created, updated, deleted)
  • Worktree events (creating, created, archived)
  • Session events (messages, status changes)
  • Git status updates
  • PR status changes
  • Terminal I/O

Authentication

Token generation:
Authentication flow:
Security:
  • Token stored securely in app preferences
  • Required by default (configurable)
  • Can regenerate token at any time
  • Localhost-only binding by default

Localhost vs Network Binding

Localhost-only (default):
Network binding:
Security implications:
  • Localhost: Safe, no network exposure
  • Network: Exposed to LAN, require token
  • Public network: DO NOT USE without VPN/SSH tunnel

Web Client Access

Connecting from browser:
Web client features:
  • Full Jean UI in browser
  • All projects and worktrees
  • Chat sessions
  • File preview and diffs
  • Terminal access
  • Real-time updates via WebSocket
Limitations:
  • No file system access (browser sandbox)
  • No native integrations (editor, terminal apps)
  • Slightly higher latency
  • Requires active HTTP server

How to Use

Enabling HTTP Server

Initial setup:
  1. Open Settings (Cmd/Ctrl + ,)
  2. Navigate to “Remote Access” section
  3. Toggle “Enable HTTP Server”
  4. Token generates automatically
  5. Server starts immediately
Configure options:

Managing Authentication

View token:
  1. Settings → Remote Access
  2. Token displayed in “Authentication Token” field
  3. Click “Copy” to copy to clipboard
Regenerate token:
  1. Click “Regenerate Token” button
  2. Confirm action
  3. New token generated
  4. All existing connections terminated
  5. Re-authenticate clients with new token
Disable token requirement:
  1. Uncheck “Require Authentication Token”
  2. WARNING: Anyone on network can access
  3. Only use on trusted networks
  4. Not recommended

Connecting from Browser

Same machine:
  1. Server must be running
  2. Open browser
  3. Navigate to http://localhost:3456
  4. Enter token when prompted
  5. Jean loads in browser
Different machine (LAN):
  1. Enable network binding in settings
  2. Find host machine’s IP address:
  3. On client machine, open browser
  4. Navigate to http://<host-ip>:3456
  5. Enter authentication token
  6. Jean loads remotely

Using WebSocket API

Connect to WebSocket:
Receive events:

Server Lifecycle

Manual start:
  1. Settings → Remote Access
  2. Click “Start Server”
  3. Status indicator shows “Running”
Manual stop:
  1. Click “Stop Server”
  2. All connections closed
  3. Status shows “Stopped”
Auto-start:
  • Enable in settings
  • Server starts when Jean launches
  • Survives app restarts
  • Stops when app quits

Configuration Options

Settings → Remote Access

Server Control:
Network Configuration:
Security:

Best Practices

Security

Always use authentication:
  • Keep http_server_token_required: true
  • Only disable on isolated networks
  • Never disable on public networks
Token management:
  • Store token securely (password manager)
  • Don’t share tokens publicly
  • Regenerate if compromised
  • Rotate tokens periodically
Network exposure:
  • Keep localhost_only: true by default
  • Only enable network binding when needed
  • Use VPN for internet access
  • Consider SSH tunneling:

Performance

Browser vs Native:
  • Native app is faster
  • Browser adds latency
  • Terminal may lag remotely
  • Use native for primary work
Network optimization:
  • Use LAN, not WiFi for best performance
  • Close unused connections
  • Limit concurrent clients
  • Monitor bandwidth usage

Use Cases

When to use remote access:
  • Access from iPad/tablet
  • Quick checks from phone
  • Secondary display/machine
  • Team collaboration (view-only)
  • Remote pair programming
When to use native app:
  • Primary development
  • Performance-critical work
  • File system operations
  • Editor integration needed
  • Terminal-heavy workflows

Port Selection

Default port (3456):
  • Usually available
  • Easy to remember
  • Non-privileged port
Alternative ports:
Check port availability:

Network Security

Firewall configuration:
VPN setup for remote access:
  1. Set up VPN server (WireGuard, Tailscale, etc.)
  2. Connect remote device to VPN
  3. Access via VPN IP address
  4. No port forwarding needed
  5. Encrypted tunnel
SSH tunnel for secure access:

Monitoring

Check server status:
  • Settings → Remote Access → Status indicator
  • Green = Running
  • Red = Stopped
  • Yellow = Error
View connected clients:
  • Settings → Remote Access → Active Connections
  • Shows IP addresses
  • Connection timestamps
  • Kick option (future)
Server logs:
  • Check app logs for errors
  • WebSocket connection events
  • Authentication failures
  • Port binding issues

Troubleshooting

Server won’t start:
Can’t connect from browser:
  1. Verify server is running
  2. Check firewall settings
  3. Confirm correct IP address
  4. Test with curl:
Authentication fails:
  1. Verify token correct
  2. Check for extra spaces
  3. Try regenerating token
  4. Ensure token required is enabled
WebSocket disconnects:
  • Check network stability
  • Verify token still valid
  • Look for proxy interference
  • Test with direct connection

Advanced Usage

Reverse proxy setup:
Custom WebSocket client:
Docker deployment (future):