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:- HTTP/1.1 with WebSocket upgrade
- Token-based authentication
- CORS support for web clients
- Static file serving (future)
- RESTful API (future)
WebSocket Protocol
Event broadcasting:- 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:- 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):- 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:- Full Jean UI in browser
- All projects and worktrees
- Chat sessions
- File preview and diffs
- Terminal access
- Real-time updates via WebSocket
- 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:- Open Settings (Cmd/Ctrl + ,)
- Navigate to “Remote Access” section
- Toggle “Enable HTTP Server”
- Token generates automatically
- Server starts immediately
Managing Authentication
View token:- Settings → Remote Access
- Token displayed in “Authentication Token” field
- Click “Copy” to copy to clipboard
- Click “Regenerate Token” button
- Confirm action
- New token generated
- All existing connections terminated
- Re-authenticate clients with new token
- Uncheck “Require Authentication Token”
- WARNING: Anyone on network can access
- Only use on trusted networks
- Not recommended
Connecting from Browser
Same machine:- Server must be running
- Open browser
- Navigate to
http://localhost:3456 - Enter token when prompted
- Jean loads in browser
- Enable network binding in settings
- Find host machine’s IP address:
- On client machine, open browser
- Navigate to
http://<host-ip>:3456 - Enter authentication token
- Jean loads remotely
Using WebSocket API
Connect to WebSocket:Server Lifecycle
Manual start:- Settings → Remote Access
- Click “Start Server”
- Status indicator shows “Running”
- Click “Stop Server”
- All connections closed
- Status shows “Stopped”
- Enable in settings
- Server starts when Jean launches
- Survives app restarts
- Stops when app quits
Configuration Options
Settings → Remote Access
Server Control:Best Practices
Security
Always use authentication:- Keep
http_server_token_required: true - Only disable on isolated networks
- Never disable on public networks
- Store token securely (password manager)
- Don’t share tokens publicly
- Regenerate if compromised
- Rotate tokens periodically
- Keep
localhost_only: trueby 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
- 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
- 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
Network Security
Firewall configuration:- Set up VPN server (WireGuard, Tailscale, etc.)
- Connect remote device to VPN
- Access via VPN IP address
- No port forwarding needed
- Encrypted tunnel
Monitoring
Check server status:- Settings → Remote Access → Status indicator
- Green = Running
- Red = Stopped
- Yellow = Error
- Settings → Remote Access → Active Connections
- Shows IP addresses
- Connection timestamps
- Kick option (future)
- Check app logs for errors
- WebSocket connection events
- Authentication failures
- Port binding issues
Troubleshooting
Server won’t start:- Verify server is running
- Check firewall settings
- Confirm correct IP address
- Test with curl:
- Verify token correct
- Check for extra spaces
- Try regenerating token
- Ensure token required is enabled
- Check network stability
- Verify token still valid
- Look for proxy interference
- Test with direct connection