WhatsApp is available as a plugin. Install it with lukan plugin install-remote or from the Web UI plugin manager.
Architecture
Two-process design (via plugin):
- lukan-bridge - Node.js/Bun process using
whatsapp-web.js, exposes WebSocket at ws://localhost:3001
- lukan whatsapp - Agent process connecting to the bridge
Setup
# Interactive setup
lukan setup whatsapp
# Or manual:
lukan wa auth # Scan QR code
lukan wa allow +34612345678 # Whitelist a number
lukan wa start # Start daemon
Commands
lukan whatsapp # Start WhatsApp channel
lukan wa on # Enable WhatsApp
lukan wa off # Disable and stop daemon
lukan wa start # Start as background daemon
lukan wa stop # Stop daemon
lukan wa restart # Restart daemon
lukan wa status # Show configuration
lukan wa auth # Scan QR code to authenticate
lukan wa logout # Delete WhatsApp session
lukan wa allow <number> # Whitelist a phone number
lukan wa deny <number> # Remove from whitelist
lukan wa group add|remove|list # Manage allowed groups
lukan wa groups # List available groups from bridge
lukan wa prefix [value] # Get or set command prefix
lukan wa model # Select model interactively
lukan wa tools list|add|remove|reset # Manage allowed tools
lukan wa dir list|add|remove|clear|on|off # Manage allowed directories
lukan wa logs [-f] [-n <n>] # Show daemon logs
Features
- Whitelist-only - Only processes messages from whitelisted numbers or allowed groups
- Prefix filtering - Optional prefix (e.g.,
/lukan) required to trigger the agent
- Voice transcription - Uses OpenAI Whisper for audio messages
- Directory restrictions - File tools blocked unless directories are explicitly allowed
- Hidden file blocking -
.env, .git/, etc. always blocked
- Group support - Allowed by full chat ID (e.g.,
123456789@g.us)
- Email confirmation - Requires explicit user confirmation before sending emails
- Reminder notifications - Proactive notifications sent to configured chat
Configuration
{
"whatsapp": {
"enabled": true,
"bridgeUrl": "ws://localhost:3001",
"whitelist": ["34612345678"],
"allowedGroups": ["123456789@g.us"],
"prefix": "/lukan",
"tools": ["ReadFile", "WebSearch"],
"allowedDirs": ["/home/user/projects"],
"skipDirRestrictions": false,
"provider": "anthropic",
"model": "claude-sonnet-4-5-20250929",
"reminderAdvance": 15,
"reminderChat": "34612345678@c.us"
}
}
Grep, Glob, ReadFiles, WebSearch, WebFetch