A local-first personal AI operator you can talk to. Crimson void HUD, volume R3F orb, Daily / Complex modes, Orchestra / Obsidian Brain, Gemini-or-any OpenAI-compatible model, and permissioned tools on your machine.
Identity lives in your notes. After clone, point LYRA at your Brain and your keys.
Prototype 1 is a working operator on this kernel. The glass is a harness. Frontend heaven is a later Fable pass — do not treat the current chrome as the final look.
Honest list.
- Volume nucleus in the original LYRA orb (R3F). Screen 1 crimson HUD harness
- One session for type and talk (
LyraProvider) - Daily vs Complex tool budgets. Daily: Brain, web, fetch, calc. Complex: disk, GitHub, writes (HITL)
- DEMO replies until a model key exists and the MODEL chip is LIVE. No fake READY. Live
demo: falseis proven against a local OpenAI-compat/v1(OmniRoute). Clones still bring their own key. - Push-to-talk (hold Space / HOLD TO TALK), Web Speech STT/TTS, Esc barge-in. Interim transcript under MIC OPEN. Voice chip is
VOICE · BROWSER · FEMALEafter a browser probe — no TTS HTTP key required - After tools: orb VERIFYING then brief SUCCESS, then STANDBY
- Brain search with file provenance.
/rememberand/capturepropose writes (inbox.md,capture/*.md,projects/*/progress.md). Confirm on the desk.LYRA_AUTO_WRITEstays false - The model can call tools. Slash commands are shortcuts, not the intelligence
- C: disk list/read with a secret denylist (ssh,
.env*,.aws, Windows, browser profiles, private keys). Writes wait for confirm. Not a shell - GitHub write is preview-only. MCP HTTP adapter if
LYRA_MCP_HTTP_URLis set - Settings (
/settings): connections without secrets. OS alarm · UNAVAILABLE on purpose - Work dock (O): TASK / SOURCES / WATCH. Chat hide (H). YouTube embed only with a real URL
- Local ledger in
.lyra/. GitHub Actions:npm ci,npm test, typecheck, build
Not claimed: always-on mic. Live GitHub mutations. Unrestricted shell. Windows alarms. Phone pairing. Spotify OAuth. Frontend heaven.
git clone https://github.com/mahik504/lyra.git
cd lyra
npm install
copy .env.example .env.local
npm run devOpen http://localhost:3000.
Until LYRA_LLM_BASE_URL and LYRA_LLM_API_KEY are set, chat stays DEMO · NOT ONLINE. That is success of honesty.
Point LYRA at any OpenAI-compatible /v1. Local OmniRoute is the path that passed Prototype 1 live tests on this machine (Gemini Studio keys were unreliable here). Never commit .env.local. Never paste the key into chat.
LYRA_LLM_BASE_URL=http://localhost:20128/v1
LYRA_LLM_API_KEY=your_omniroute_dashboard_key
LYRA_MODEL_FAST=auto/best-free
LYRA_MODEL_BALANCED=auto/llama
LYRA_MODEL_REASONING=auto/best-coding
LYRA_MODEL_CODING=auto/best-coding
Daily uses LYRA_MODEL_FAST then BALANCED. Complex uses LYRA_MODEL_REASONING then CODING then BALANCED.
Direct Gemini (Google AI Studio) still works as an alternative:
LYRA_LLM_BASE_URL=https://generativelanguage.googleapis.com/v1beta/openai/
LYRA_LLM_API_KEY=your_studio_key
LYRA_MODEL_BALANCED=gemini-2.5-flash
Use a Gemini model name, not gpt-4o. Docs: OpenAI compatibility. Groq (https://api.groq.com/openai/v1) is another fallback.
Voice READY is Chrome/Edge Web Speech. Optional cloud TTS later via LYRA_TTS_*.
- Drag orbit, scroll zoom,
Rreset,Owork dock,Hhide chat,/focuses the field - Hold Space (when not typing) or HOLD TO TALK. Esc / STOP barge-in
- Daily / Complex toggle on the desk
- Shortcuts:
/search/fetch/github/work path/play URL/remember note/capture/gh-write— or just ask; the live model picks tools
npm test
npm run typecheck
npx playwright testPlaywright is local (needs a browser). CI does not run it.
MIT. Copyright Mahaveer Singh Gehlot. See LICENSE and NOTICE.md.