Tabby
Autocomplete for everything you type, anywhere
Install / Use
npx skills add TabbyAIKeyboard/tabbyInstalls into whichever agent you are using.
README
Tabby
<div align="center"> <img src="nextjs-backend/public/logos/tabby-header.png" alt="Tabby Logo" />A system-wide AI keyboard layer that transforms your input device into a real-time AI collaborator.
Features · Screenshots · Tech Stack · Getting Started · Architecture · Docs · Contributing · License
</div>Features
Tabby lives at the point of input - no more switching between apps for AI help.
| Feature | Description | |---|---| | Interview Copilot | Real-time coding interview assistance with screen capture and multi-tab analysis | | Context-Aware Autocomplete | Inline AI suggestions based on what you're typing, anywhere on your system | | Desktop Automation | Full Windows MCP integration for system-level control | | Persistent Memory | Remembers your preferences, coding style, and past interactions via Mem0 | | Invisible Typing | AI types directly into any application, character-by-character | | Voice Agent | Voice-to-text, text-to-voice, and live conversational agent | | Action Menu | Quick AI actions on selected text — fix grammar, change tone, expand, summarize |
Screenshots
<div align="center">Interview Copilot
<img src="nextjs-backend/public/landing/tabby-interview-copilot.png" alt="Interview Copilot" width="700" /><br /><br />
Interview Ghost Text
<img src="nextjs-backend/public/landing/tabby-interview-ghost.png" alt="Interview Ghost Text" width="700" /><br /><br />
Action Menu
<img src="nextjs-backend/public/landing/tabby-actions.png" alt="Action Menu" width="700" /><br /><br />
Voice Agent
<img src="nextjs-backend/public/landing/tabby-voice-agent.png" alt="Voice Agent" width="700" /><br /><br />
Knowledge Graph
<img src="nextjs-backend/public/landing/tabby-kg.png" alt="Knowledge Graph" width="700" /><br /><br />
Memories Dashboard
<img src="nextjs-backend/public/landing/tabby-memories.png" alt="Memories Dashboard" width="700" /> </div>Tech Stack
| Layer | Technology | |---|---| | Desktop App | Electron 38 | | Frontend | Next.js 15, React 19, Tailwind CSS | | AI | Vercel AI SDK, OpenAI / Groq / Cerebras / Google Gemini | | Memory | Mem0 (Supabase vector store + Neo4j graph) | | Desktop Automation | nut-js, node-window-manager, Windows MCP | | Database | Supabase (Local Docker) |
Keyboard Shortcuts
<details> <summary><b>Global Shortcuts</b></summary>| Shortcut | Action |
|---|---|
| Ctrl+\ | Open / close action menu |
| Ctrl+Space | Get AI suggestion |
| Ctrl+Shift+B | Toggle brain panel |
| Ctrl+Alt+I | Interview ghost text |
| Ctrl+Alt+J | Voice Agent |
| Ctrl+Shift+X | Stop autotyping |
| Ctrl+Shift+T | Cycle transcribe modes |
| Ctrl+Alt+T | Toggle voice transcription |
| Shortcut | Action |
|---|---|
| Alt+X | Capture screen & analyze coding problem |
| Alt+Shift+X | Update analysis with new constraints |
| Alt+N | Get code suggestions / improvements |
| Ctrl+1-6 | Switch tabs (Chat, Idea, Code, Walkthrough, Test Cases, Memories) |
| Shortcut | Action |
|---|---|
| Ctrl+Arrow | Move floating window |
| Esc | Back / close |
| Enter | Accept & paste |
Getting Started
Prerequisites
- Node.js 18+
- Python 3.12+ (for memory backend)
- uv — Python package manager
- pnpm — JavaScript package manager
- Docker Desktop — for local Supabase
- An OpenAI API key
- Google Generative AI API key
- XAI API key
- Groq API key
- Cerebras API key
- OpenRouter API key
- Tavily API key (web search)
- Neo4j instance (knowledge graph)
1. Clone & Install
git clone https://github.com/TabbyAIKeyboard/tabby.git
cd tabby
# Frontend
cd frontend && pnpm install
# Next.js Backend
cd ../nextjs-backend && pnpm install
# Memory Backend
cd ../backend && uv sync
2. Database Setup
We use a local Supabase instance running in Docker.
# Start Docker Desktop first, then:
npx supabase init # first time only
npx supabase start # starts all services (~10 s after first run)
After startup, note the API URL, anon key, and service_role key printed in the terminal.
<details> <summary><b>Supabase Quick Reference</b></summary>| Action | Command |
| --- | --- |
| Start | npx supabase start |
| Stop | npx supabase stop |
| Status | npx supabase status |
| Admin UI | http://localhost:54323 |
| Reset DB | npx supabase db reset |
</details> <details> <summary><b>Neo4j (Knowledge Graph — Optional)</b></summary>Note: Docker Desktop must be running before
npx supabase start.
- Create a free instance at Neo4j AuraDB.
- Save the credentials text file (URI, username, password).
- Note the Instance ID and Instance Name from the dashboard.
3. Environment Variables
Copy the example env files, then fill in your credentials:
cp frontend/env.example frontend/.env.local
cp nextjs-backend/env.example nextjs-backend/.env.local
cp backend/env.example backend/.env
<details>
<summary><b>Frontend</b> - <code>frontend/.env.local</code></summary>
NEXT_PUBLIC_SUPABASE_URL="http://127.0.0.1:54321"
NEXT_PUBLIC_SUPABASE_ANON_KEY="<ANON_KEY from supabase status>"
SUPABASE_ADMIN="<SERVICE_ROLE_KEY from supabase status>"
NEXT_PUBLIC_APP_NAME="Tabby"
NEXT_PUBLIC_APP_ICON="/logos/tabby-logo.png"
NEXT_PUBLIC_API_URL="http://localhost:3001"
NEXT_PUBLIC_MEMORY_API_URL="http://localhost:8000"
</details>
<details>
<summary><b>Next.js Backend</b> - <code>nextjs-backend/.env.local</code></summary>
NEXT_PUBLIC_SUPABASE_URL="http://127.0.0.1:54321"
NEXT_PUBLIC_SUPABASE_ANON_KEY="<ANON_KEY from supabase status>"
SUPABASE_ADMIN="<SERVICE_ROLE_KEY from supabase status>"
RESEND_API_KEY=""
RESEND_DOMAIN=""
NEXT_PUBLIC_APP_NAME=Tabby
NEXT_PUBLIC_APP_ICON='/logos/tabby-logo.png'
# AI Providers
OPENAI_API_KEY=""
GOOGLE_GENERATIVE_AI_API_KEY=""
GROQ_API_KEY=""
CEREBRAS_API_KEY=""
OPENROUTER_API_KEY=""
TAVILY_API_KEY=""
MEMORY_API_URL="http://localhost:8000"
</details>
<details>
<summary><b>Backend</b> - <code>backend/.env</code></summary>
OPENAI_API_KEY=
SUPABASE_CONNECTION_STRING="postgresql://postgres:postgres@127.0.0.1:54322/postgres"
# Neo4j (optional)
NEO4J_URL=
NEO4J_USERNAME=
NEO4J_PASSWORD=
</details>
4. Run
# Start Supabase first (Docker Desktop must be running)
npx supabase start
# Start all services in dev mode (backend + frontend + nextjs-backend)
pnpm dev
All three services start in parallel with color-coded logs.
<details> <summary><b>Run services individually</b></summary># Terminal 1 — Memory backend
cd backend && uv run main.py
# Terminal 2 — Next.js backend
cd nextjs-backend && pnpm dev
# Terminal 3 — Windows MCP server (optional)
cd frontend && pnpm run windows-mcp
# Terminal 4 — Electron app
cd frontend && pnpm dev
</details>
<details>
<summary><b>Production mode</b></summary>
# Build and start everything
pnpm prod
# Or step-by-step:
pnpm build # builds frontend + nextjs-backend
pnpm start # starts all services in production mode
</details>
<details>
<summary><b>Linux (X11)</b></summary>
The Linux build uses xdotool for window activation and synthetic key input, and reads the X11 PRIMARY selection directly for capture (so highlighting text in any X11 app is enough — no need to also Ctrl+C). It is tested on GNOME / X11; Wayland sessions will need to fall back to XWayland.
Prerequisites
sudo apt install xdotool
Then run as on the other platforms:
cd frontend
pnpm install
pnpm dev
</details>
Once running:
| Service | URL |
|---|---|
| Supabase API | http://127.0.0.1:54321 |
| Supabase Studio | http://localhost:54323 |
| Frontend (Electron) | http://localhost:3000 |
| Next.js Backend | http://localhost:3001
Related Skills
node-connect
385.6kDiagnose OpenClaw Android, iOS, or macOS node pairing, QR/setup code, route, auth, and connection failures.
blender-python-addon
40.5kBlender Python add-on rules for operators, panels, properties, registration, testing, and API-safe scripting
flutter-development-guidelines-cursorrules-prompt-file
40.5kCursor rules for Flutter development with MVVM architecture, Riverpod state management, Material widgets, and Dart style guidelines.
nextjs-tanstack-query-cursorrules-prompt-file
40.5kCursor rules for Next.js App Router with TanStack Query v5, covering the HydrationBoundary pattern, Server Actions as mutations, and optimistic updates.
