A powerful, local-first todo list application with hierarchical tasks, AI integration via Claude, and smart notifications.
- Hierarchical Todo Management: Create multi-level todo trees with parent-child relationships
- Smart Completion: When you complete a todo, all its children are automatically promoted to the main view
- Tree & List Views: Visualize your tasks in an expandable tree structure
- Categories: Organize todos with custom categories (color-coded with icons)
- Priority Levels: Set priority (Normal, High, Urgent) for each task
- Due Dates: Schedule tasks with date and time reminders
- Claude Assistant: Chat with Claude AI about your tasks
- Context-Aware: Claude has access to your current todos for intelligent suggestions
- Task Planning: Ask Claude to help prioritize your day
- Secure Storage: API keys are encrypted using OS-level security (Keychain/DPAPI)
- Desktop Notifications: System-level notifications for important tasks
- Always-On-Top Popup: Persistent reminder window for urgent tasks
- System Tray: Quick access with badge counts
- Category-Based Rules: Customize when and how you're notified
- Time-Based Triggers: Get notified before tasks are due
- Auto-Launch: Start automatically on system boot
- macOS Dock Integration: Badge counts for pending tasks
- System Tray: Always accessible from your menu bar
- Runs 100% Locally: All data stored on your device
- Local HTTP Server: Exposes a REST API on
localhost:3456 - Curl-Able: Manage todos from the command line
- Full CRUD: Create, Read, Update, Delete operations
# Install dependencies
npm install
# Run in development mode
npm run dev
# Build for production
npm run buildThe app is built with:
- Electron: Desktop application framework
- React: UI library
- TypeScript: Type-safe development
- Vite: Fast build tool
- Ant Design: Professional UI components
- Fastify: High-performance REST API
- Node SQLite: Embedded database
- Claude API: AI integration
The REST API runs on http://127.0.0.1:3456 and supports:
# Get all root todos (main view)
curl http://127.0.0.1:3456/api/todos/root
# Get todo tree
curl http://127.0.0.1:3456/api/todos/tree
# Create a todo
curl -X POST http://127.0.0.1:3456/api/todos \
-H "Content-Type: application/json" \
-d '{"title": "Call accountant", "priority": 1, "due_date": "2025-11-04T10:00:00Z"}'
# Update a todo
curl -X PUT http://127.0.0.1:3456/api/todos/1 \
-H "Content-Type: application/json" \
-d '{"status": "in_progress"}'
# Complete a todo (promotes children)
curl -X POST http://127.0.0.1:3456/api/todos/1/complete
# Delete a todo
curl -X DELETE http://127.0.0.1:3456/api/todos/1
# Get todo's children
curl http://127.0.0.1:3456/api/todos/1/children# Get all categories
curl http://127.0.0.1:3456/api/categories
# Create a category
curl -X POST http://127.0.0.1:3456/api/categories \
-H "Content-Type: application/json" \
-d '{"name": "Errands", "color": "#52c41a", "icon": "🛒"}'The app uses SQLite with the following structure:
- todos: Main todo items (adjacency list model)
- todo_closure: Closure table for efficient tree queries
- categories: Todo categories with colors and icons
- notification_rules: Category-specific notification settings
- settings: App configuration (including encrypted API keys)
- Create a parent task: "Plan accountant meeting"
- Add children:
- "Call accountant" (with due date)
- "Prepare documents"
- "Meet accountant" (details filled later)
- When you complete "Call accountant", it stays completed, and other siblings remain as children
- When you complete the parent "Plan accountant meeting", all remaining children move to the main view
- Get your API key from https://console.anthropic.com
- Open Settings (⚙️ icon)
- Enter your API key and click "Save"
- Click "Chat with Claude" to start asking questions
- Categories can have custom notification rules
- Set triggers based on:
- Due date
- Priority level
- Time before due
- Choose notification type:
- Desktop: System notification
- Popup: Always-on-top window
- Tray: Menu bar notification
- Database:
~/Library/Application Support/StickyTodoApp/todos.db(macOS) - Logs: Console output (check with
npm run dev) - Config: Stored in database settings table
- ✅ API keys encrypted with OS-level security (safeStorage)
- ✅ REST API bound to localhost only (127.0.0.1)
- ✅ Context isolation enabled in renderer
- ✅ No remote code execution
- ✅ Sandboxed renderer process
If port 3456 is in use, check for other instances:
lsof -i :3456Close all instances of the app and restart.
- Verify your API key at https://console.anthropic.com
- Remove and re-add the key in Settings
- Check console for error messages
MIT
Built with ❤️ using Claude Code