Full documentation: See PROJECT.md for complete architecture, API details, and development guide.
- 🎙️ Real-time voice interaction — Talk to Crix naturally
- ⌨️ Keyboard control — Type text, press shortcuts by voice
- 🖱️ Mouse control — Move, click, scroll anywhere
- 🪟 Window & Workspace — Switch workspaces, focus windows
- 🌐 Browser automation — Web tasks via natural language
- 🧠 Persistent memory — Remembers preferences across sessions
- 🔍 Live web search — Up-to-date information via Tavily
- 🔇 Noise cancellation — Intelligent audio filtering
# Ubuntu/Debian
sudo apt install ydotool wl-clipboard grim xdotool tesseract-ocr portaudio19-dev
# Enable ydotool daemon
sudo systemctl enable --now ydotooldgit clone https://github.com/Aerex0/Crix.git
cd Crix
uv synccp .env.example .envEdit .env with your credentials:
LIVEKIT_URL=wss://your-project.livekit.cloud
LIVEKIT_API_KEY=your_api_key
LIVEKIT_API_SECRET=your_api_secret
TAVILY_API_KEY=your_tavily_key
# For browser automation (choose one):
OPENAI_API_KEY=sk-... # Recommended
# ANTHROPIC_API_KEY=sk-ant-...
# GOOGLE_API_KEY=...
# OLLAMA_MODEL=llama3.1# With wake word (always-on) - say "hey livekit" to activate
nohup uv run src/agent.py dev > crix.log 2>&1 &
# Or without wake word (manual mode)
uv run src/agent.py console"Open Firefox" → Launch app
"Switch to workspace 3" → Change desktop
"Type hello world" → Type text
"Search Google for AI news" → Browser search
"Check my Gmail" → Open Gmail via browser
"Add mouse to Amazon cart" → Shopping automation
"What time is it?" → Get current time
"Remember that I prefer dark mode" → Save preference
"What did I tell you about my name?" → Search memory
Crix listens for "hey livekit" by default. To use a custom wake word:
# Train custom model
uv run livekit-wakeword run configs/hey_crix.yaml
# Update .env
CRIX_WAKEWORD_MODEL_PATH=models/hey_crix.onnxCreate ~/.config/systemd/user/crix.service:
[Unit]
Description=Crix Voice Assistant
[Service]
ExecStart=/home/user/.local/bin/uv run /path/to/Crix/src/agent.py dev
WorkingDirectory=/path/to/Crix
Restart=on-failure
[Install]
WantedBy=default.targetEnable:
systemctl --user daemon-reload
systemctl --user enable --now crix| Variable | Default | Description |
|---|---|---|
CRIX_WAKEWORD_ENABLED |
true | Enable wake word |
CRIX_MEMORY_ENABLED |
true | Enable memory |
CRIX_CHROME_PROFILE |
Default | Chrome profile |
See PROJECT.md for full configuration reference.
| Component | Technology |
|---|---|
| Voice Framework | LiveKit Agents |
| STT | Deepgram Nova-3 |
| LLM | OpenAI GPT-4.1 Mini |
| TTS | ElevenLabs Turbo |
| VAD | Silero |
| Input | ydotool |
| Browser | browser-use |
| Web Search | Tavily |
crix/
├── src/
│ ├── agent.py # Entry point
│ ├── tools.py # Voice tools
│ ├── config.py # Configuration
│ ├── wakeword/ # Wake word detection
│ └── backends/ # System backends
├── models/ # Wake word models
├── memory/ # Session memory
├── MEMORY.md # Long-term memory
├── PROJECT.md # Full documentation
└── pyproject.toml
MIT — See LICENSE file.