🚧 Work in progress — actively being developed. Features and UI may change. Contributions and feedback welcome!
A minimal, distraction-free tool for studying papers and learning new concepts — powered by LLMs.
Unlike ChatGPT's linear chat, this tool lets you branch into any part of a response, explore it deeply, and come back. Think of it as a personal tutor with a tree-shaped memory.
recording.mp4
Reading a dense paper or learning a new topic with ChatGPT is frustrating. You read a long response, want to dig into paragraph 3, but you're stuck appending to the end of a linear thread. By the time you circle back to paragraph 5, the context is gone.
This tool fixes that. Every conversation is a tree, not a list.
Select any part of an AI response and branch into it. The LLM keeps full context of the conversation up to that point. When you're done, jump back to the branch point and explore something else.
Drop a paper in and start asking questions. The full text is extracted and sent to the LLM as context — no copy-pasting needed.
Hover over any paragraph and mark it as read. Build up a map of what you've actually internalized.
Everything you've marked as read is organized by the LLM into a structured knowledge view — grouped by topic, with key concepts and connections.
- Highlighted segments show where you've branched from, with clickable links to jump to each branch
- "Back to branch point" scrolls you back to where a branch originated
- Tree sidebar shows the full structure of your conversation
- Breadcrumbs show your current path
Select multiple branch endpoints and merge them. The LLM synthesizes insights from all branches into a coherent summary.
# Clone
git clone https://github.com/landywei/study-tool.git
cd study-tool
# Install
npm install
# Configure
echo "OPENROUTER_API_KEY=your-key-here" > server/.env
echo "PORT=3001" >> server/.env
# Run
npm run devOpen http://localhost:5173.
You'll need an OpenRouter API key. Any model works.
| Shortcut | Action |
|---|---|
Enter |
Send message |
Shift+Enter |
New line |
Cmd/Ctrl+Shift+N |
New conversation |
Cmd/Ctrl+B |
Toggle sidebar |
Escape |
Close dialog / clear selection |
| Frontend | React, TypeScript, Vite, Tailwind CSS, Zustand |
| Backend | Node.js, Express, TypeScript |
| Database | SQLite (better-sqlite3) |
| LLM | OpenRouter (any model) |
| pdf-parse for text extraction |
Everything runs locally. No accounts, no cloud, no telemetry.
