"Not an assistant. Not a bot. The tech-savvy younger sister who never gives up."
Lilly is a fully customized wrapper on top of NanoClaw that transforms a generic WhatsApp AI assistant into a deeply personal, autonomous family member. She talks like family, browses the web like a human, and never says "I can't do that."
NanoClaw is the open-source engine — a single Node.js process that connects WhatsApp to Claude, running agents in isolated containers. It handles:
- WhatsApp connection and message routing
- Container isolation per group
- Scheduled tasks and IPC
- Basic web browsing via
agent-browser
- Full persona with family dynamics — knows who Amma, Daddy, and each family member is
- Matches energy — hype mode when you're excited, calm when you're stressed
- Speaks your language — Hindi, Hinglish, or English, matching whatever you send
- Never robotic — talks like a real sibling, not "As an AI language model..."
NanoClaw's agent can browse, but Lilly knows how to think about browsing:
- Search → Navigate → Explore → Act — Given "book me a bus to Bangalore," she Googles the best site, opens it, reads the UI, presents options, and fills forms
- Decision checkpoints — Never assumes preferences, always confirms before acting
- Payment safety — Stops at payment, shows you the screen, lets you take over
- Smart site selection — Knows which sites block bots and routes around them
The container ships with a patched agent-browser that defeats common bot detection:
- Hides
navigator.webdriverflag - Fakes Chrome plugins, languages, and WebGL fingerprints
- Patches permissions API and
chrome.runtime - Disables Blink automation flags via Chromium args
- Spoofs connection RTT and sanitizes stack traces
This means Lilly can actually use websites that block vanilla Playwright/Puppeteer.
- Receives and processes images, documents, PDFs, voice notes, stickers, and videos
- Sends images, documents, and stickers back
- Downloads media to group workspace for persistent access
NanoClaw agents work silently until done. Lilly keeps you posted:
- Acknowledges tasks immediately ("On it!")
- Sends updates at every step ("Found 3 options on Ixigo, checking prices...")
- Shares screenshots while browsing so you can follow along
- Never goes radio-silent during long tasks
Claude OAuth tokens expire and rotate frequently. Lilly includes a launchd job that:
- Reads the fresh token from macOS Keychain every 5 minutes
- Updates
.envonly if the token has changed - Stops any running containers with the stale token so they respawn with the new one
- Zero downtime — NanoClaw itself never restarts, containers are stateless (all files, sessions, and memory are bind-mounted from the host)
A common problem with WhatsApp Web bots — they mark your device as "online," which suppresses mobile notifications. Lilly fixes this:
- Connects with
markOnlineOnConnect: falseso WhatsApp doesn't think you're active on another device - Sets presence to
unavailable— messages still flow in, but your phone keeps buzzing
Pre-configured MCP integrations:
- Blinkit — Grocery ordering via MCP server with persistent auth
- Gmail — Read/send emails with auto-refreshing OAuth
- Google Workspace — Calendar, contacts via gogcli
- GIF search — gifgrep for sending reaction GIFs
- Precious metals — Live gold/silver prices from eBullion
Lilly's core philosophy — she doesn't know the meaning of "I can't do that":
- Exhausts all options, workarounds, and alternative routes
- If she finds an unconventional way, she asks before proceeding
- Treats every problem as a personal challenge
├── groups/
│ ├── global/CLAUDE.md # Lilly's personality, skills, and knowledge
│ └── main/CLAUDE.md # Admin channel with group management
├── container/
│ ├── Dockerfile # Extended with stealth patch, Go tools, Blinkit MCP
│ ├── stealth-patch.js # Build-time anti-bot-detection patch for agent-browser
│ └── agent-runner/ # Container entry point
├── scripts/
│ └── refresh-oauth-token.sh # Keychain → .env token sync
└── src/ # NanoClaw core (with media, IPC, and routing enhancements)
- Follow NanoClaw's setup guide for the base installation
- Customize
groups/global/CLAUDE.mdwith your own personality, family contacts, and preferences - Build the container:
./container/build.sh - Set up token refresh:
launchctl load ~/Library/LaunchAgents/com.nanoclaw.refresh-token.plist - Start:
launchctl load ~/Library/LaunchAgents/com.nanoclaw.plist
- NanoClaw — The engine
- Claude Agent SDK — The brain
- agent-browser — The eyes and hands (stealth-patched)