A privacy-first AI productivity coach for Windows that tracks focus time locally.
Features β’ Installation β’ Architecture β’ Privacy β’ Contributing β’ License
Guidon's Eye is an intelligent productivity assistant designed for developers, students, and knowledge workers who need to safeguard their focus without sacrificing their data privacy.
Most productivity trackers operate in the cloud, exposing your detailed activity data and potentially selling it. Traditional app blockers are also too rigid, often killing applications and causing data lossβdestroying unsaved work and breaking your workflow.
Guidon's Eye offers Local-First AI Coaching with three core advantages:
- π Intelligent Activity Tracking β Understands what you're doing and when you're most productive
- π‘οΈ Soft Blocking β Minimizes distracting windows instead of killing processes (no data loss)
- π 100% Local β All data stays on your machine. Zero telemetry. Your focus is your business.
- Second-level precision logging of active window time
- Smart categorization: Coding, Browsing, Communication, Gaming, Productivity
- Daily/Weekly reports on screen time usage with visual breakdowns
- Real-time dashboard showing top apps and productivity patterns
- Smart Blocking: When a limit is reached, the app minimizes the distracting window and shows a persistent overlay
- Non-Destructive: Unlike rigid blockers, it doesn't kill the process immediately, allowing you to save work
- Escalation Protocol: If you persistently attempt to bypass the block (>3 times in a short window), the app escalates to "Force Close" to enforce discipline
- Configurable Limits: Set daily usage caps per application
- Context Awareness: Analyzes your current activity, recent apps, and screen time to offer relevant advice
- Multi-Provider Support:
- Google Gemini 2.5 Flash (recommended, faster & cheaper)
- Perplexity Sonar (for latest information)
- Circuit Breaker Pattern: Automatically handles API failures with exponential backoff and graceful degradation
- Personalized Insights: "You're most productive 9-11am, consider scheduling deep work then"
- Configure daily limits per app
- Customize Focus Session durations (Pomodoro-style: Work/Short Break/Long Break)
- Manage AI API keys and switch providers on-the-fly
- Privacy Mode toggle (disable detailed logging)
| Requirement | Details |
|---|---|
| OS | Windows 10/11 (22H2+) |
| Node.js | v18.x or higher |
| Electron | v40.0.0 |
| Database | MongoDB (Local Instance) |
| RAM | 4GB minimum, 8GB recommended |
| Disk | 500MB for installation + database |
git clone https://github.com/yourusername/guidons-eye.git
cd guidons-eyenpm installOption A: Direct Installation (Recommended)
- Download from MongoDB Community Edition
- Install with default settings
- MongoDB service will auto-start on boot
Option B: Docker (Advanced)
docker run -d -p 27017:27017 --name mongodb mongo:latestVerify MongoDB is running:
mongod --version # Should output version infoCreate a .env file in the project root:
# Google Gemini (Recommended)
GEMINI_API_KEY=AIza_your_key_here
# Perplexity (Optional)
# PERPLEXITY_API_KEY=pplx-your_key_here
# Logging
LOG_LEVEL=info
# MongoDB Connection (Default)
MONGODB_URI=mongodb://127.0.0.1:27017/guidons_eye
# Privacy Settings
PRIVACY_MODE=falseGetting API Keys:
- Gemini: Visit Google AI Studio, create a new API key, copy it
- Perplexity: Sign up at Perplexity.ai, generate API key from settings
npm run devThe app will launch. On first run:
- Onboarding wizard explains activity tracking
- Requests permission for system-level window detection
- Validates MongoDB connection
- Prompts you to add an AI provider key (optional but recommended)
Access the main dashboard to view:
- Today's Screen Time (pie chart by category)
- Top 5 Apps used with time spent
- Productivity Score (based on app categorization)
- Upcoming Limits and Focus Sessions
- Click "Settings" β "App Limits"
- Select an app from "Installed Apps" or "Recent Apps"
- Set a daily limit (in minutes)
- Choose escalation behavior:
- Soft Block Only (minimize on limit reached)
- Escalate to Force Close (after 3 re-opens)
- Click the AI Chat button (floating icon)
- Ask questions like:
- "What was I productive on today?"
- "Why am I spending so much time on YouTube?"
- "Give me a focus plan for tomorrow"
- The AI analyzes your activity and provides personalized coaching
- Chat history is saved locally
- Click "Start Focus" in the dashboard
- Choose session type:
- Work (25 min)
- Short Break (5 min)
- Long Break (15 min)
- Customize durations in Settings if needed
- During focus, distracting apps trigger soft-block automatically
| Layer | Technology |
|---|---|
| Runtime | Electron 40 (Chromium + Node.js) |
| Frontend | Vanilla HTML/CSS/JavaScript |
| Backend | Node.js (Main Process) |
| Database | MongoDB (Local Instance) |
| AI APIs | Google Gemini, Perplexity Sonar |
| HTTP Client | Axios with Circuit Breaker |
| Logging | Winston (JSON format) |
guidons-eye/
βββ src/
β βββ main/
β β βββ index.js # Electron main process
β β βββ preload.js # Secure IPC bridge
β β βββ ipc-handlers/ # Main process event handlers
β βββ renderer/
β β βββ index.html # Main UI shell
β β βββ css/ # Stylesheets (dark mode)
β β βββ js/
β β βββ dashboard.js # Dashboard logic
β β βββ settings.js # Settings panel
β β βββ chat.js # AI coach interface
β βββ services/
β β βββ ActivityTracker.js # Window polling & logging
β β βββ AppBlocker.js # Limit enforcement
β β βββ AIService.js # Gemini/Perplexity integration
β β βββ CircuitBreaker.js # API failure handling
β βββ os-integration/
β β βββ WindowDetector.js # Win32 API (active window)
β β βββ ProcessController.js # Process termination (safe)
β βββ database/
β β βββ connection.js # MongoDB setup
β β βββ models/ # Activity, Limit, Goal schemas
β βββ utils/
β βββ Logger.js # Winston logger config
β βββ Config.js # Environment & config loading
βββ .env.example # Environment template
βββ electron-builder.json # Build configuration
βββ package.json # Dependencies & scripts
User Activity
β
WindowDetector (polls active window every 2 sec)
β
ActivityTracker (logs app + category + duration)
β
MongoDB (stores to activity_log collection)
β
Dashboard UI (renders real-time charts)
β
AI Coach (analyzes weekly patterns, generates insights)
The renderer process is sandboxed with context isolation enabled. It communicates with the main process only through a secure preload bridge:
// renderer can call these safe methods only:
window.api.getActiveWindow()
window.api.setAppLimit(appName, minutes)
window.api.sendChatMessage(prompt)
// No direct Node.js filesystem, process, or shell accessGemini/Perplexity calls use exponential backoff:
Request 1: Fails β Wait 1s
Request 2: Fails β Wait 2s
Request 3: Fails β Wait 4s
Max 3 retries β Show user: "AI temporarily unavailable"
We do not collect any usage data, analytics, or crash reports. Logs stay on your machine exclusively.
By default, specific window titles (e.g., "Q3_Report.docx", "Budget.xlsx") are stripped before logging. Only the application name (e.g., "Microsoft Word", "Excel") is stored.
Example:
Raw: "Budget.xlsx - Microsoft Excel"
Logged: "Microsoft Excel" (app name only)
- Renderer Process: Runs with
sandbox: trueandcontextIsolation: true - No Node Integration: Renderer cannot directly access filesystem, shell, or OS APIs
- CSP Header: Strict Content Security Policy prevents inline scripts
- API keys are stored only in
.env(local file, not in repo) - Keys are never logged or exposed in debug output
.gitignoreensures.envis never committed- Requests to AI providers are encrypted (HTTPS)
You have full control. To delete all data:
- Export: Settings β "Export All Data" (JSON file)
- Delete: Settings β "Delete All Data" β Confirm
- Database files and logs are wiped from
~/.guidons-eye/
# AI Providers (Choose at least one)
GEMINI_API_KEY=AIza_... # Google Gemini v2.5 Flash
PERPLEXITY_API_KEY=pplx-... # Perplexity Sonar
# Database
MONGODB_URI=mongodb://127.0.0.1:27017/guidons_eye
# Logging
LOG_LEVEL=info # debug | info | warn | error
LOG_DIR=~/.guidons-eye/logs
# Privacy
PRIVACY_MODE=false # true = disable detailed logging
WINDOW_TITLE_LOGGING=false # Never log raw window titles
# App Blocker
ENABLE_FORCE_QUIT=false # Disable force-close by default
SOFT_BLOCK_TIMEOUT=30000 # Milliseconds before escalation
# Focus Sessions
DEFAULT_WORK_DURATION=25 # Minutes
DEFAULT_SHORT_BREAK=5 # Minutes
DEFAULT_LONG_BREAK=15 # MinutesError: MongooseError: connect ECONNREFUSED 127.0.0.1:27017
Solution:
# Windows: Start MongoDB service
net start MongoDB
# Or manually run:
mongod
# macOS/Linux: Check if running
ps aux | grep mongod| Error | Cause | Fix |
|---|---|---|
401 Unauthorized |
Invalid API key | Verify key starts with AIza_... |
429 Too Many Requests |
Rate limited | Wait 60 seconds, Circuit Breaker will retry |
503 Service Unavailable |
API down | Check Google Cloud Status, app will retry |
Check:
- Limit name matches executable name (e.g.,
chrome.exe, notChrome) - App is in the Installed Apps list
- Limit time has actually been exceeded (check dashboard timer)
Debug:
# View activity logs
tail -f ~/.guidons-eye/logs/activity.log
# Check app name matching
npm run debug:appsNormal behavior: ~50-100MB RAM at idle, <5% CPU during polling.
If spiking:
- Check MongoDB isn't stuck:
mongoshβdb.serverStatus() - Disable privacy mode (may be processing heavy logs)
- Reduce polling frequency in Settings
- App files: Removed by Windows Add/Remove Programs
- User data: Stays in
%APPDATA%/Guidon's Eye/(requires manual deletion) - Logs: Located in
~/.guidons-eye/logs/(safe to delete)
# Clone & install
git clone https://github.com/yourusername/guidons-eye.git
cd guidons-eye
npm install
# Create .env from template
cp .env.example .env
# Start dev mode (hot reload)
npm run dev
# Run linter
npm run lint
# Build for production
npm run buildMIT License β See LICENSE file for full text.
- Current Version: 0.1.0 (Alpha)
- Last Updated: January 22, 2026
- Maintenance Status: Active Development
- Contributors: Welcome!