A Rust-based study assistant designed specifically for ADHD students, featuring real-time Pomodoro timers, intelligent task prioritization, spaced repetition, and knowledge graph visualization.
- Real Pomodoro Timer: 25-minute focus sessions with pause/resume, break notifications, and anti-pattern detection for long sessions without breaks
- Persistent Storage: Session tracking, mastery level persistence, and session metrics via JSON-based file storage
- Intelligent Prioritization: ADHD-aware task scheduling using FSRS mastery scoring, deadline-aware weighting, and configurable energy profiles
- Event Bus Integration: Reactive HUD updates when Obsidian vault files change, with debounced file watching
- PDF Processing: Automatic text extraction from PDFs and quiz generation via NotebookLM integration with progress reporting
- Knowledge Graph Visualization: Interactive Mermaid-based graph with color-coded mastery levels (red=low, green=high), node click details, and relationship strength edge thickness
- Overload Mode: Emergency simplified plans for low-energy periods with breathing exercise UI, auto-exit timeout, and recovery plan generation
- Anti-Pattern Detection: Real-time alerts for unhealthy study patterns (e.g., 45+ min sessions without breaks) with dismissible banner UI
- Stress Testing: Performance validation for PDF processing workflows with metrics reporting (average time, error tracking)
- Dark/Light Theme: Toggle between themes with CSS custom properties
- Keyboard Accessibility: ESC to dismiss modals, focus-visible outlines on all interactive elements
- User Preferences: Configurable via
vault/Config/preferences.md
NoleAI is built as a Cargo workspace with the following components:
| Crate | Description |
|---|---|
nole-core |
Core business logic: timer, events, vault parsing, prioritization, anti-patterns, stress testing, knowledge graph |
nole-hud |
Tauri 2.x desktop UI with commands for all features |
the-crab-engram |
Memory management, spaced repetition (FSRS algorithm), session/mastery persistence |
notebooklm-rust-mcp |
NotebookLM API integration for PDF text extraction and quiz generation |
VaultWatcher ──► EventBus ──► HUD (ObsidianVaultChanged)
TimerService ──► EventBus ──► HUD (TimerTick, TimerBreakRequested, AntiPatternDetected)
OverloadMode ──► EventBus ──► HUD (OverloadPlanGenerated)
- Rust 1.70 or later
- Tauri CLI:
cargo install tauri-cli - Node.js 16+ (for Tauri frontend development)
-
Clone the repository:
git clone <repository-url> cd noleAI
-
Build the workspace:
cargo build --release
-
Set up the Obsidian vault:
mkdir -p vault/Config vault/HOY
-
Create your subjects configuration at
vault/Config/Materias.md:# Materias ## Mathematics | Nivel: 2 - Calculus - Linear Algebra - Probability ## Physics | Nivel: 3 - Mechanics - Thermodynamics ## Energy Profiles Energy: 09:00-12:00 | Nivel: 4 Energy: 14:00-17:00 | Nivel: 3 Energy: 19:00-21:00 | Nivel: 2
-
(Optional) Configure preferences at
vault/Config/preferences.md. -
Run the HUD:
cd nole-hud cargo tauri dev
Edit vault/Config/Materias.md to add subjects, mastery levels (1-5), topics, and energy profiles.
Click "Generate Daily Plan" — the system uses FSRS scoring, deadline weighting, and your current energy level to produce an optimal task list limited to your energy capacity.
- Click "Start" for a 25-minute focus session
- "Pause"/"Resume" as needed
- A break modal appears when the session completes
- Anti-pattern alerts fire if you study 45+ minutes without a break
Sessions are saved to .engram-data/ with mastery tracking via FSRS. Review overdue items through the mem_reviews API.
Click "Show Knowledge Graph" to visualize subject relationships with mastery-coded colors and interactive node details.
Click "Overload Mode" during low-energy periods for a simplified single-task plan with a guided breathing exercise. Auto-exits after 15 minutes.
Click "Stress Test" and provide a PDF directory path to validate PDF processing performance with metrics reporting.
noleAI/
├── nole-core/
│ └── src/
│ ├── events.rs # EventBus, Event enum, EventPublisher trait
│ ├── timer.rs # TimerService with anti-pattern emission
│ ├── vault.rs # VaultParser, DailyPlan, energy profiles
│ ├── watcher.rs # File watcher with debounce
│ ├── prioritization.rs # FSRS scoring, deadline weighting, energy profiles
│ ├── session_tracker.rs # Session metrics tracking
│ ├── anti_pattern.rs # AntiPatternDetector, MonitoredSessionTracker
│ ├── overload.rs # OverloadPlanGenerator, recovery plans
│ ├── knowledge_graph_service.rs # Graph generation from subjects
│ └── stress_test.rs # StressTestRunner
├── nole-hud/
│ ├── index.html # Full HUD with all UI features
│ └── src-tauri/src/main.rs # Tauri app with all commands
├── the-crab-engram/
│ └── src/
│ ├── storage.rs # Storage trait, FileStorage, SessionMetrics
│ ├── fsrs.rs # FSRS algorithm
│ └── lib.rs # mem_save, mem_reviews, ensure_data_dir
├── notebooklm-rust-mcp/
│ └── src/
│ ├── pdf.rs # PDFProcessor trait, PDFTextExtractor
│ ├── client.rs # NotebookLMClient, QuizRequest/Response
│ └── lib.rs # PDFProcessingPipeline, progress reporting
├── vault/
│ └── Config/
│ ├── Materias.md # Subject and energy configuration
│ └── preferences.md # User preferences
└── specs/ # Implementation specifications
cargo test --workspacecargo build --release
cd nole-hud
cargo tauri build| Path | Description |
|---|---|
.engram-data/sessions.json |
Session history |
.engram-data/mastery.json |
Subject mastery levels |
.engram-data/session_metrics.json |
Detailed session metrics |
vault/HOY/ |
Generated daily plans |
vault/Config/ |
User configuration |
MIT License - See LICENSE file for details