What Is DeepTutor?
DeepTutor is an open-source AI tutor from HKUDS, the Data Intelligence Lab at the University of Hong Kong. Its README calls it an agent-native learning workspace: one app where you chat with a tutor, have it quiz you, research a topic into a cited report, work through problems step by step, turn your notes into an interactive book and follow a mastery path, all over your own documents and with one shared memory of how you learn. The full list of modes is Chat, Ask Questions, Quiz, Research, Visualize, Solve, Course Study, Mastery Path, Immersive Reading and Audio Overview. They share one runtime and one session context instead of being ten separate apps, so a quiz can build on what you asked in chat an hour earlier.
The project is led by Bingxi Zhao within HKUDS, the group directed by Chao Huang that also publishes LightRAG and nanobot. It is licensed under Apache-2.0, with a Python 3.11+ backend and a Next.js 16 front end. The repository was created on December 28, 2025 and released the next day, and by its own news feed it reached 10,000 stars in 39 days and 20,000 in 111. It had 47,024 stars and 5,858 forks when we checked on October 28, 2026.
It also moves fast. We counted 87 GitHub releases between v0.2.0 on January 2 and v1.6.15 on October 18, a median of about two days apart, with a quiet February and March before the 1.0 betas arrived in April. The research behind it is on arXiv as "DeepTutor: Towards Agentic Personalized Tutoring" (2604.26962). The paper reports a 10.8% average gain on personalization metrics, evaluated with TutorBench, a benchmark the same team introduced, and a 29.4% gain in agentic reasoning across five backbone models. Both are the authors' own results, and the personalization figure comes from a benchmark they built, so read them as claims rather than independent findings.
Its Memory of You Is 11 Markdown Files
Most AI tutors that "remember" you keep that memory where you cannot see it, usually as embeddings in a vector store. DeepTutor's README says the opposite on purpose: memory is a file-backed, three-layer system you can read, curate and audit, "deliberately not a hidden vector store". Reading the memory code shows how literal that is.
- L1 is the raw record. Every surface that learns about you (chat, notebook, quiz, knowledge base, book, partner and Co-Writer) appends events to a daily file,
trace/<surface>/<date>.jsonl. Nothing in it is rewritten. Each line is one JSON event, so a JSON formatter will pretty-print any line you want to inspect. - L2 is one Markdown file per surface, such as
L2/chat.mdandL2/quiz.md: short curated facts about you, each pointing back at the L1 events it came from. - L3 is four Markdown files that synthesize across surfaces:
recent.md,profile.md,scope.mdandpreferences.md.
That is seven L2 files and four L3 files, so DeepTutor's curated memory of a learner fits in 11 Markdown documents you can open in any editor, or paste into a Markdown converter to read rendered. In the app, the Memory Graph draws the same pyramid, with L3 in the center, L2 around it and the L1 traces on the outside, and its edges are the actual citations between them.
A background consolidator keeps the files current in four passes. Update reads what is new since the last run, oldest first, cuts it into chunks at paragraph boundaries and makes one model call per chunk, at most 20 chunks per L2 run and 10 per L3 run by default. Audit re-checks existing lines against the raw evidence. Dedup merges repeated facts, three iterations by default, and runs automatically after every update. Merge is the only pass with no model call: it collapses duplicate citations into single footnotes. Those budgets live under memory: in data/user/settings/main.yaml and on the Settings → Memory page. If you edit the file by hand, a YAML formatter will catch an indentation slip before DeepTutor reads it.
The Rules It Must Follow When It Writes About You
The more interesting part is what the consolidator is allowed to write. The prompts that turn your activity into memory carry hard rules, and one of them is enforced in code as well.
- Every fact needs evidence. An L2 fact is one line of at most 240 characters, verb-led ("uses X", "stuck on Y"), and it must cite at least one L1 event from the chunk the model was reading. The code checks this, not just the prompt: a fact with no citation is rejected, a citation to anything outside the chunk is dropped, and a fact left with no valid citation is rejected too. Both checks,
enforce_requiredanddrop_invalid_refs, are on by default. - Cross-surface claims must be hedged. L3 facts have to follow a template,
Across N <surface> interactions, the user Xor<surface> entries show the user X, so the profile says how much evidence a claim rests on instead of stating it as a trait. - Absolutes are banned. The prompts forbid deeply, truly, mastered, expert, passionate, loves, hates, always, never and fully understands, unless the word sits inside quotation marks, as when quoting the learner. The tutor may write "across 6 quiz interactions, the user missed recursion base cases". It may not write "has mastered recursion" or "always forgets base cases".
That banned list reads like the words an AI text cleaner strips from generated prose, and for a similar reason: they sound confident while saying little. For a tutor the stakes are higher, because a profile that says you have "mastered" a topic is a profile that stops teaching it.
One detail from reading the code: the no-absolutes rule is enforced by the prompt alone. The repository has a code-level filter for those words, in English and Chinese, in consolidator/guards.py, with tests, but we found no call to it in the update, audit or dedup passes, on the main branch at v1.6.15 or on the dev branch as of October 28. The citation rule is code; the no-absolutes rule depends on the model following instructions. That is one more reason the plain files matter. You can open L3/profile.md, read what the tutor believes about you, and correct it.
Everything Else DeepTutor Does
Chat is the default mode and where most work starts. The model works in rounds, calls tools when they help, and finishes with a plain answer, and an ask_user tool lets it stop and ask a clarifying question instead of guessing. Tools you can switch on include web search, paper search, Zotero search, GeoGebra analysis, and image or video generation once you configure a generation model.
Knowledge Center lets you choose the retrieval engine per library: LlamaIndex by default (hybrid vector and BM25 search), PageIndex, GraphRAG, LightRAG or a remote LightRAG server, a self-hosted WeKnora knowledge base, Tencent IMA, MarginNote 4, a Kiwix ZIM archive or a linked Obsidian vault. A library can also follow a GitHub repository or a documentation site and re-sync it, every 24 hours by default for documentation sites. Which engine retrieves best depends on your documents, so deeptutor kb eval scores a library against a JSONL file of questions and gold passages and reports Recall@k, Precision@k, nDCG@k, MRR and MAP.
Book turns your sources into a "living book" of editable blocks, including quizzes, flash cards, timelines, code, figures and concept graphs, and proposes a chapter outline for you to review before it writes anything. Co-Writer is a split-view Markdown editor where you select a passage and ask DeepTutor to rewrite, expand or shorten just that span. Immersive Reading brings documents, YouTube or Bilibili videos and audio into one reader with timestamp-grounded tutoring and saved notes.
Partners are persistent companions with their own SOUL.md, memory and channels, reachable over Telegram, Slack, Discord, WhatsApp, Microsoft Teams, Feishu and other messaging platforms. My Agents works the other way round: DeepTutor can run Claude Code, Codex, Grok CLI, Kimi, opencode and other agent CLIs on your machine and stream their work into a chat turn, and it can import your ChatGPT, Claude Code and Codex history as searchable conversations. Everything is also reachable from one deeptutor command, with an interactive REPL for people and JSON output for other agents.
How to Run DeepTutor
The quickest trial is one Docker command:
docker run --rm --name deeptutor \
-p 127.0.0.1:3782:3782 \
-v deeptutor-data:/app/data \
ghcr.io/hkuds/deeptutor:latestOpen http://127.0.0.1:3782, add a model provider under Settings → Providers, and the named volume keeps your settings and data for the next run. For a local install, run pip install -U deeptutor, then deeptutor init (ports, LLM provider and key, and optional embedding and search providers) and deeptutor start. That path needs Python 3.11 to 3.14 and Node.js 20 or newer, because it launches the packaged Next.js server. The README also has a prompt you can paste into Claude Code or Codex to have the agent install and configure everything, reading the repository's own setup guide first.
Two things to know before you start. DeepTutor is free, but the models are not: you bring API keys for the providers you use, or point it at local models served by Ollama, LM Studio or vLLM, and both the learning modes and the memory consolidator make model calls. An experimental OpenAI Codex sign-in can use your ChatGPT plan instead of an API key. And it runs single-user by default. Turn authentication on and one install hosts an admin plus isolated per-user workspaces, with learner and guardian roles for supervised learners. The first account to register becomes the admin, so register yours before you share the address.
Three Projects Called DeepTutor
Search for DeepTutor and you will hit three unrelated things. This page is about the open-source HKU project, documented at deeptutor.info. DeepTutor for Zotero is a separate product: a commercial AI reading add-on with paid plans, built on the Zotero reference manager by a different company. The HKU team states in its README that it has no paid online products of any form, so a price tag means you are looking at the other one. And DeepTutor was also the name of an earlier research system: a 2015 AAAI paper by Vasile Rus and colleagues described a conversational intelligent tutoring system of that name, a decade before large language models.
If a guide mentions a Zotero plugin, a subscription or a 2015 study, it is not about the project on this page.
Who Should Use It, and What to Watch Out For
DeepTutor fits three kinds of user best. Self-learners who study from their own PDFs, notes and lecture videos and want a tutor that remembers what they struggled with last week. Teachers and tutors who can run one shared install with learner accounts. And developers who want an AI tutor they can extend with their own tools, MCP servers and community skills from its EduHub catalog.
Four things to watch. First, scope: DeepTutor does a lot, and the README's own screenshots still show v1.4.6 while a refresh is under way, so expect to explore. Second, pace: a release every two days on median is great for fixes and hard on anyone who needs stability, and v1.6.3 was a breaking front and back end refactor, so pin a version before you roll it out to a class. Third, cost: the software is free, the model calls behind every mode and the background memory passes are not. Fourth, the memory is written by a model. The rules above make it cautious and the files make it checkable, but read profile.md now and then rather than trusting it blindly.



