Successfully implemented a new agentic feature that analyzes your past distraction patterns to recommend optimal focus block durations. This replaces the "close app" feature with something more useful and personalized.
- File:
src/focus_guardian/ai/focus_duration_analyzer.py(NEW) - Analyzes historical sessions to find first distraction times
- Calculates mean and median statistics
- Recommends 75% of typical first distraction time (configurable)
- Minimum recommended duration: 5 minutes
- File:
src/focus_guardian/core/database.py - Added
get_first_distraction_time(session_id)- gets seconds until first distraction - Added
get_sessions_with_distractions(limit)- gets completed sessions with distractions
- Files:
config/default_config.json- Added 4 new config keyssrc/focus_guardian/core/config.py- Added 4 new getter methods
- Settings:
focus_analyzer_enabled: truefocus_analyzer_min_sessions: 3focus_analyzer_lookback_days: 30focus_analyzer_recommendation_factor: 0.75
- File:
src/focus_guardian/session/session_manager.py - Added
focus_analyzerinstance variable - Initializes analyzer on startup
- Added
get_focus_duration_recommendation()method for UI
- File:
src/focus_guardian/ui/main_window.py - Added
focus_recommendation_labelwidget to dashboard - Added
_update_focus_recommendation()method - Displays personalized recommendation message
- Shows automatically when app loads (if sufficient data available)
- File:
src/focus_guardian/ai/__init__.py - Added
FocusDurationAnalyzerto exports
- On app startup, queries database for last 30 days of completed sessions
- For each session with distractions, calculates time until first distraction
- Computes statistics (mean, median)
- Recommends:
median_time * 0.75(75% for safety margin) - Displays personalized message in Dashboard tab
💡 Based on your past 5 sessions, your typical first distraction
occurs around 16 minutes. We recommend 12-minute focus blocks to
maximize your productivity.
- A highlighted box with the recommendation (blue left border)
- Visible only when sufficient data exists (3+ sessions)
- Updates automatically as more sessions are completed
- All settings in
config/default_config.json - Can disable:
"focus_analyzer_enabled": false - Can adjust lookback window, min sessions, safety factor
- Replaces problematic feature: No macOS permissions issues, more reliable
- Data-driven: Based on actual user behavior, not guesswork
- Personalized: Each user gets recommendations based on their patterns
- Actionable: Gives specific time suggestions (e.g., "12 minutes")
- Non-intrusive: Just displays a recommendation, doesn't force behavior
- Improves over time: Gets more accurate as user completes more sessions
Created (1 file):
src/focus_guardian/ai/focus_duration_analyzer.pyFOCUS_DURATION_ANALYZER.md(documentation)
Modified (5 files):
src/focus_guardian/core/database.pysrc/focus_guardian/core/config.pysrc/focus_guardian/session/session_manager.pysrc/focus_guardian/ui/main_window.pyconfig/default_config.jsonsrc/focus_guardian/ai/__init__.py
Total Lines Added: ~350 lines
- Requires at least 3 completed sessions with at least one distraction each
- Check logs for: "Generated focus recommendation: X minutes"
- If no recommendation appears: not enough historical data yet
- Can manually test by running focus sessions and checking recommendations
To test this feature:
- Launch the app
- Complete at least 3 sessions with distractions
- Look for the recommendation in the Dashboard tab
The recommendation will automatically appear when you have sufficient data!