AI-Powered Learning Platform for Obsidian Canvas
Transform passive learning into active understanding using the Feynman Technique
Canvas Learning System transforms passive learning into an active learning process. With 12-14 specialized AI Agents collaborating, it guides you from confusion to mastery through the Feynman Learning Method.
- Passive Consumption - Reading/watching without active engagement
- Illusion of Competence - Familiarity mistaken for true understanding
- Lack of Personalization - One-size-fits-all learning approaches
- No Systematic Verification - No objective way to measure understanding
- Visual Learning - Color-coded knowledge nodes on Obsidian Canvas
- Forced Output - Dedicated explanation spaces (yellow nodes)
- Personalized Guidance - 14 specialized AI Agents
- Systematic Verification - 4-dimension scoring system
- Knowledge Graph - Visual map that grows with your understanding
| Color | Code | Meaning |
|---|---|---|
| Red | 1 | Unknown concept - needs learning |
| Yellow | 6 | User explanation space - your understanding |
| Purple | 3 | Partial understanding - needs deepening |
| Green | 2 | Fully mastered |
| Blue | 5 | AI-generated content |
Decomposition Agents
basic-decomposition- Break complex topics into 3-7 guiding questionsdeep-decomposition- Create deep verification questionsquestion-decomposition- Generate breakthrough questions
Explanation Agents
oral-explanation- Professor-style 800-1200 word oral explanationsclarification-path- 1500+ word systematic explanationscomparison-table- Structured comparison tables for similar conceptsmemory-anchor- Vivid analogies and memory anchorsfour-level-explanation- Progressive 4-level explanationsexample-teaching- Complete problem tutorials with solutions
Assessment Agents
scoring-agent- 4-dimension understanding assessmentverification-question- Deep understanding verification questions
- Intelligent review based on Ebbinghaus forgetting curve
- Auto-generated review Canvas
- Progress tracking dashboard
- Obsidian v1.0+
- Python 3.9+ (for backend)
- Node.js 18+ (for development)
Method 1: From Release (Recommended)
- Download the latest Release
- Extract
main.jsandmanifest.json - Create folder
.obsidian/plugins/canvas-review-system/in your Vault - Copy the files to that folder
- Enable the plugin in Obsidian Settings > Community Plugins
Method 2: Manual Build
cd canvas-progress-tracker/obsidian-plugin
npm install
npm run build
# Copy main.js and manifest.json to your Vault's plugins folder# Clone repository
git clone https://github.com/oinani0721/canvas-learning-system.git
cd canvas-learning-system/backend
# Create virtual environment
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Configure environment
cp .env.example .env
# Edit .env with your API keys
# Start service
uvicorn app.main:app --host 0.0.0.0 --port 8000- Docker Desktop installed and running
- Ports available:
7475(Neo4j HTTP),7688(Neo4j Bolt),8000(Backend API) - Memory: ≥1GB available for Neo4j container
cd backend
cp .env.example .envEdit .env with the following critical settings:
# IMPORTANT: Use port 7688, NOT the default 7687
NEO4J_URI=bolt://localhost:7688
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=your_password_hereWarning: The password in
.envanddocker-compose.ymlmust match exactly. Mismatched passwords cause silent authentication failures.
# Start Neo4j container
docker-compose up -d neo4j
# Wait for Neo4j to initialize (~10 seconds)
# Then start the backend
cd backend
uvicorn app.main:app --host 0.0.0.0 --port 8000Or use the one-click startup script (Windows):
./start-canvas-services.bat# Neo4j Browser (note: port 7475, not 7474)
curl http://localhost:7475
# Backend health check
curl http://localhost:8000/api/v1/health
# Neo4j connection check
curl http://localhost:8000/api/v1/health/neo4j
# Storage health check
curl http://localhost:8000/api/v1/health/storage| Problem | Cause | Solution |
|---|---|---|
| Connection timeout | Wrong port in NEO4J_URI (7687 vs 7688) | Set NEO4J_URI=bolt://localhost:7688 |
| Auth failure with no error | Password mismatch between .env and docker-compose | Ensure both passwords match |
| Queries return empty results | Silent fallback to JSON mode | Check logs for "JSON_FALLBACK" |
| Neo4j Browser won't open | Port mapping is 7475, not 7474 | Visit http://localhost:7475 |
| Backend process orphaned | Obsidian didn't kill backend on exit | Fixed: uses execSync + taskkill |
| LanceDB path error | Incorrect relative path when running from backend/ | Fixed: normalized to project-relative paths |
- Create a new Canvas - Create a
.canvasfile in Obsidian - Add red nodes - Write concepts you don't understand
- Right-click to invoke Agent - Select appropriate Agent for decomposition/explanation
- Explain in yellow nodes - Use your own words to explain the concept
- Use scoring Agent - Get 4-dimension understanding assessment
- Watch colors change - Red > Purple > Green
canvas-learning-system/
├── canvas-progress-tracker/
│ └── obsidian-plugin/ # Obsidian Plugin (TypeScript)
│ ├── src/ # Source code
│ ├── main.js # Build output
│ └── manifest.json # Plugin manifest
├── backend/
│ ├── app/
│ │ ├── api/v1/endpoints/ # REST API endpoints
│ │ ├── services/ # Business logic
│ │ └── models/ # Data models
│ └── requirements.txt
├── src/agentic_rag/ # LangGraph RAG system
├── docs/ # Documentation
│ ├── prd/ # Product requirements
│ └── architecture/ # Architecture design
└── specs/ # OpenAPI specifications
| Component | Technology |
|---|---|
| Frontend | TypeScript, Obsidian Plugin API |
| Backend | Python 3.9+, FastAPI |
| AI | Claude API (Anthropic) |
| Memory System | Graphiti + Neo4j |
| Vector Store | LanceDB |
| Deployment | Docker, Docker Compose |
/api/v1/health/neo4j- Neo4j connection status with async driver support/api/v1/health/storage- Unified storage health (LanceDB + Neo4j)- Automatic retry with configurable timeouts for slow first connections
- Backend metadata API for canvas subject mapping
- Configurable subject resolver with YAML-based mapping
- Canvas info view in Obsidian plugin settings
- LanceDB data isolation: Fixed path calculation that caused index/query to use different databases
- Backend process cleanup: Fixed orphaned uvicorn processes on Obsidian exit (execSync + taskkill)
- Graphiti client: Unified connection architecture with proper error handling
After starting the backend service:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
# Plugin development
cd canvas-progress-tracker/obsidian-plugin
npm run dev
# Backend development
cd backend
uvicorn app.main:app --reload
# Run tests
cd backend && pytest
cd canvas-progress-tracker/obsidian-plugin && npm testContributions are welcome! Please read CONTRIBUTING.md for details.
MIT License - See LICENSE for details.
- Obsidian - Powerful knowledge management tool
- Feynman Learning Method researchers
"If you can't explain it simply, you don't understand it well enough." - Richard Feynman