🏆 Winner of the Anthropic AI Hackathon in Toronto!
Kel is an AI agent desktop application that lives on your computer. Access it instantly with a keyboard shortcut (Control+K) — it appears as a sleek sidebar window, ready to assist you with anything you need.
- Always Accessible: Toggle Kel with
Control+Kfrom anywhere on your system - Sidebar Experience: Clean, distraction-free interface that docks to the edge of your screen
- Persistent Conversations: All your chats are saved locally in a SQLite database
- Privacy-First: Everything runs locally on your machine — your data never leaves your computer
- Multi-Model Support: Powered by OpenRouter, giving you access to multiple AI models
Want to contribute or build from source? Check out the development setup below.
- Node.js 18+ (or compatible version)
- pnpm package manager
# Clone the repository
git clone https://github.com/not-manu/kel.git
cd kel
# Install dependencies
pnpm install
# Copy environment variables
cp .env.example .env
# Run in development mode
pnpm devpnpm dev # Start development server with hot reload
pnpm build # Build for production
pnpm build:mac # Build and package for macOS
pnpm build:win # Build and package for Windows
pnpm build:linux # Build and package for Linux
pnpm typecheck # Run TypeScript type checking
pnpm lint # Run ESLint
pnpm format # Format code with Prettier
pnpm db:generate # Generate database migrations
pnpm db:push # Push schema changes to database
pnpm db:studio # Open Drizzle Studio (database GUI)- Framework: Electron (multi-process architecture)
- Frontend: React 19 with TypeScript
- Routing: React Router v7
- Styling: Tailwind CSS v4
- Database: SQLite with Drizzle ORM
- AI Integration: Vercel AI SDK + OpenRouter
- UI Components: Radix UI primitives
- Forms: React Hook Form with Zod validation
- State Management: TanStack Query (React Query)
src/
├── main/ # Electron main process (Node.js backend)
│ ├── api/ # IPC handlers for renderer communication
│ ├── db/ # Database schema and configuration
│ └── lib/ # Utilities and OpenRouter integration
├── preload/ # Electron preload script (security bridge)
└── renderer/ # React frontend
└── src/
├── components/ # UI components
├── hooks/ # React hooks for API calls
├── routes/ # Page components and routing
└── lib/ # Frontend utilities
Kel follows standard Electron best practices:
- Main Process: Manages windows, global shortcuts, database, and system tray
- Preload Script: Securely exposes APIs to the renderer via
contextBridge - Renderer Process: React application for the user interface
Communication between processes uses IPC (Inter-Process Communication) with a handler-based architecture for type-safe API calls.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is open source and available under the MIT License.
🏆 Winner of the Anthropic AI Hackathon in Toronto
Special thanks to:
- Anthropic for hosting the hackathon and recognizing this project
- The open source community for the amazing tools and libraries
Made with ❤️ by @not-manu
Need help? Open an issue on GitHub

