An intelligent, always-on voice assistant for research, productivity, and conversation
Clone the repository
git clone https://github.com/yourusername/cindy-voice-assistant.git
cd cindy-voice-assistant
Install dependencies
npm install
Set up environment variables
cp .env.example .env
# Edit .env with your API keys
Start development server
npm run dev
Create a .env file with the following variables:
# OpenAI API (for GPT models)
OPENAI_API_KEY=your_openai_api_key
# AccuWeather API (for weather information)
ACCUWEATHER_API_KEY=your_accuweather_api_key
# Brave Search API (optional)
BRAVE_API_KEY=your_brave_search_api_key
# SerpAPI (optional)
SERPAPI_KEY=your_serpapi_key
# Tavily Search API (optional)
TAVILY_API_KEY=your_tavily_api_key
# Gmail Integration (optional)
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
Cindy uses Electron's multi-process architecture:
βββββββββββββββββββ βββββββββββββββββββ
β Main Process βββββΊβ Renderer Processβ
β (Node.js) βIPC β (React App) β
β β β β
β β’ Services β β β’ UI Components β
β β’ AI Agents β β β’ State Mgmt β
β β’ Tool Executionβ β β’ User Interfaceβ
β β’ Data Storage β β β’ Visualization β
βββββββββββββββββββ βββββββββββββββββββ
Core functionality is organized into services:
Intelligent routing between different agent types:
Use the tool selector button in the input area to force specific tools:
Access settings through the gear icon:
src/
βββ main/ # Main process (Node.js)
β βββ services/ # Core business logic
β βββ agents/ # AI agents and tools
β βββ main.ts # Entry point
βββ renderer/ # Renderer process (React)
β βββ components/ # UI components
β βββ services/ # Client-side services
β βββ App.tsx # Main React app
βββ shared/ # Shared types/utilities
βββ store/ # Redux state management
# Development
npm run dev # Start both processes
npm run dev:main # Main process only
npm run dev:renderer # Renderer process only
# Building
npm run build # Build both processes
npm run build:main # Build main process
npm run build:renderer # Build renderer process
# Testing
npm test # Run tests
npm run test:watch # Watch mode
npm run lint # Lint code
npm run lint:fix # Fix lint issues
# Packaging
npm run package # Package for current platform
npm run package:all # Package for all platforms
npm run release # Build and publish
src/main/agents/tools/[category]/ToolSpecification interfaceToolRegistryToolLoader configurationExample:
export class MyTool extends Tool {
name = 'my_tool';
description = 'Description of what this tool does';
async _call(input: string): Promise<string> {
// Tool implementation
return result;
}
}
src/main/services/ServiceManager initializationWe welcome contributions! Please see CONTRIBUTING.md for guidelines.
We use conventional commits:
feat: - New featuresfix: - Bug fixesdocs: - Documentationrefactor: - Code refactoringtest: - Adding testsVoice activation not working:
LLM not responding:
Tools not working:
Enable debug logging:
DEBUG=cindy:* npm run dev
~/Library/Logs/Cindy/%USERPROFILE%\AppData\Roaming\Cindy\logs\~/.config/Cindy/logs/This project is licensed under the MIT License - see the LICENSE file for details.
Made with β€οΈ by the Cindy AI team
168 commits
TypeScript
94.9%
CSS
3.0%
JavaScript
2.0%
An intelligent, always-on voice assistant for research, productivity, and conversation
Clone the repository
git clone https://github.com/yourusername/cindy-voice-assistant.git
cd cindy-voice-assistant
Install dependencies
npm install
Set up environment variables
cp .env.example .env
# Edit .env with your API keys
Start development server
npm run dev
Create a .env file with the following variables:
# OpenAI API (for GPT models)
OPENAI_API_KEY=your_openai_api_key
# AccuWeather API (for weather information)
ACCUWEATHER_API_KEY=your_accuweather_api_key
# Brave Search API (optional)
BRAVE_API_KEY=your_brave_search_api_key
# SerpAPI (optional)
SERPAPI_KEY=your_serpapi_key
# Tavily Search API (optional)
TAVILY_API_KEY=your_tavily_api_key
# Gmail Integration (optional)
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
Cindy uses Electron's multi-process architecture:
βββββββββββββββββββ βββββββββββββββββββ
β Main Process βββββΊβ Renderer Processβ
β (Node.js) βIPC β (React App) β
β β β β
β β’ Services β β β’ UI Components β
β β’ AI Agents β β β’ State Mgmt β
β β’ Tool Executionβ β β’ User Interfaceβ
β β’ Data Storage β β β’ Visualization β
βββββββββββββββββββ βββββββββββββββββββ
Core functionality is organized into services:
Intelligent routing between different agent types:
Use the tool selector button in the input area to force specific tools:
Access settings through the gear icon:
src/
βββ main/ # Main process (Node.js)
β βββ services/ # Core business logic
β βββ agents/ # AI agents and tools
β βββ main.ts # Entry point
βββ renderer/ # Renderer process (React)
β βββ components/ # UI components
β βββ services/ # Client-side services
β βββ App.tsx # Main React app
βββ shared/ # Shared types/utilities
βββ store/ # Redux state management
# Development
npm run dev # Start both processes
npm run dev:main # Main process only
npm run dev:renderer # Renderer process only
# Building
npm run build # Build both processes
npm run build:main # Build main process
npm run build:renderer # Build renderer process
# Testing
npm test # Run tests
npm run test:watch # Watch mode
npm run lint # Lint code
npm run lint:fix # Fix lint issues
# Packaging
npm run package # Package for current platform
npm run package:all # Package for all platforms
npm run release # Build and publish
src/main/agents/tools/[category]/ToolSpecification interfaceToolRegistryToolLoader configurationExample:
export class MyTool extends Tool {
name = 'my_tool';
description = 'Description of what this tool does';
async _call(input: string): Promise<string> {
// Tool implementation
return result;
}
}
src/main/services/ServiceManager initializationWe welcome contributions! Please see CONTRIBUTING.md for guidelines.
We use conventional commits:
feat: - New featuresfix: - Bug fixesdocs: - Documentationrefactor: - Code refactoringtest: - Adding testsVoice activation not working:
LLM not responding:
Tools not working:
Enable debug logging:
DEBUG=cindy:* npm run dev
~/Library/Logs/Cindy/%USERPROFILE%\AppData\Roaming\Cindy\logs\~/.config/Cindy/logs/This project is licensed under the MIT License - see the LICENSE file for details.
Made with β€οΈ by the Cindy AI team
168 commits
TypeScript
94.9%
CSS
3.0%
JavaScript
2.0%