Product Launch · XiaoHu Explains

HKU's HKUDS Open-Sources AI Tutor DeepTutor, Hits 20K Stars in 111 Days

Paper shows 10.8% personalization gain, 29.4% reasoning gain — fully open source under Apache 2.0
60-Second Summary
  • DeepTutor, a personalized learning tool open-sourced by the University of Hong Kong's Data Intelligence Lab (HKUDS), launched on 2025-12-29 under Apache 2.0 — fully open source. The authors state there is currently no paid online product of any kind.
  • Within 111 days of launch (as of 2026-04-19), it passed 20,000 GitHub stars and hit both the daily and weekly Trendshift trending charts.
  • Chat, Partners, Co-Writer, Book, Knowledge, Memory — every module shares the same agent loop and interconnected context. Switching modes just changes what this turn is trying to accomplish; the underlying engine is always the same one.
  • The companion paper proposes a hybrid personalization engine (static knowledge grounding + dynamic personal memory), lifting personalization metrics by 10.8% on average across TutorBench, a benchmark spanning five disciplines and 270 tasks.
  • With the entire personalization engine disabled, the same "investigate, solve, write" scaffolding still lifts general agentic reasoning ability by 29.4% on average across five backbone models on public benchmarks.
Disclosure: DeepTutor is developed by HKU's HKUDS team. This piece is based on their official GitHub repo (Apache 2.0) and their own published paper. Star counts, version timeline, benchmark scores, and improvement figures are all as reported by the project team and the paper; the paper's tutoring-effectiveness scores are generated by an AI student simulator. What follows is a straight explainer of the mechanism and the data.
1Who built it · How big it's gotten

HKU's team open-sourced an AI tutor, and people are actually using it

HKU's Data Intelligence Lab (HKUDS) released the open-source learning tool DeepTutor on December 29, 2025, and published a companion research paper on its underlying mechanism in the first half of 2026.

This is a full toolbox you run on your own computer or server, built around one idea: remembering how you learn. It's fully open source (Apache 2.0 license), and the authors are blunt about it in the README: there is currently no paid online product in any form.
📌

Why this isn't just another routine open-source drop: it passed 20,000 GitHub stars within 111 days of launch, hitting both the daily and weekly Trendshift trending charts; the project is fully open source under Apache 2.0 with no paid product whatsoever; and it's backed by an arXiv paper with verifiable numbers from a benchmark spanning five disciplines and 270 tasks.

DeepTutor home page overview, Chat workspace, sidebar listing all feature panels
DeepTutor home page overview: the Chat workspace sits in the middle, with all feature panels lined up in the left sidebar. Image from the official HKUDS repo.
20K+
GitHub stars within 111 days of launch (as of 2026-04-19)
111 days
Time from launch to 20,000 stars
~200K lines
Code volume from the 2026-04-04 agent-native architecture rewrite
3 commands
pip install, init, start — a full local app running end to end

The project is led by Bingxi Zhao at HKUDS (advisor Chao Huang, director of HKU's Data Intelligence Lab), with community contributions. The ecosystem also reuses several of the lab's own open-source projects: LightRAG (retrieval engine), nanobot (an earlier ultra-lightweight agent engine), AutoAgent, and AI-Researcher.

2One Engine

One brain, eight learning modes — what you're switching is just the goal

DeepTutor's core design: chat, problem-solving, quiz generation, research, visualization, mastery practice — all run on the same agent loop. What you switch is what you want to do this turn; the underlying engine and context are always the same.

ChatQ&A
PartnersPersistent companion
My AgentsConsult other agents
Co-WriterCollaborative writing
BookTurn into a living book
KnowledgeKnowledge base
Learning SpaceSkills & personas
MemoryAuditable memory
↓ all eight panels run on ↓
the same agent loop + shared learning contextKnowledge bases, books, writing drafts, notebooks, question banks, persona settings, memory — all travel with the learner and can be called by every workflow, instead of starting over in isolated tools.
DeepTutor system architecture diagram
Official system architecture diagram: feature panels on top, sharing a single underlying agent runtime and context. Image from the official HKUDS repo.
3Core mechanism, part one

How a chat becomes full tutoring: it thinks for itself, and asks you back when unsure

Chat is the default entry point — most work starts here. A single conversation thread can chat normally, call tools, "ground" answers against a selected knowledge base, read attachments, generate images, consult other agents, write to a notebook, and carry the same context across multiple turns.

Core mechanism

The loop is deliberately simple: the model reasons turn by turn, calls tools when needed, observes the results, then produces a final answer with no further tool calls. The key is a special tool called ask_user: when unsure, instead of guessing, the agent can pause this turn, surface a structured clarifying question, and wait for your answer before continuing.

Reason turn by turn
Call tools
search/reason/draw…
Observe results
When unsure,
ask_user asks you back
Give final answer
DeepTutor chat agent loop diagram
Official Chat agent loop diagram: think, act, observe, until an answer is reached; ask_user hands control back to you when uncertain. Image from the official HKUDS repo.

Toggleable tools include brainstorm, web_search, paper_search, reason (deep reasoning), and geogebra_analysis (math plotting analysis); once a generation model is configured, imagegen and videogen become available too. Chat is also the launch point for deeper capabilities: Quiz (question generation), Research (cited reports), Visualize (chart animation), Solve (detailed reasoning), and Mastery Path (study plans) all branch off from here.

What it remembers and what it forgets: two clearly separated contexts

Sticky session context

Persists across turns

Sub-agents, knowledge base, persona, model, and voice — pinned to the input toolbar, staying active for the entire conversation.

One-shot reference

Applies to this turn only

Files, chat history, books, notebooks, question banks, and imported agents — pulled in temporarily via the "+" menu, serving only the current question.

4Core mechanism, part two · signature feature

How does it know you so well? A memory you can click open, layer by layer

DeepTutor's personalization doesn't rely on a vector store hidden in the backend — it's a file-backed, three-layer memory you can read, edit, and audit. Because every conclusion in an upper layer cites evidence from the layer below, any line in your profile can be traced all the way back to the original event. The diagram below is clickable — click a layer to see exactly what it stores and where it came from.

Click any layer above to see what it stores and which layer it cites ↓
L3 synthesis: one sentence that guides the next tutoring session
"This student keeps getting stuck on problems requiring multi-step chained derivations — explanations should build scaffolding step by step, not jump straight to conclusions."
↳ This conclusion cites summaries from two surfaces in L2 (click L2 above to see)
L2 summaries: facts each surface has accumulated on its own
Chat surface: in the last 3 calculus tutoring sessions, got the chain rule derivative wrong twice.
Quiz surface: 3 out of 5 related practice questions wrong, all on "differentiate the outer or inner function first."
↳ Each summary in turn cites the original records in L1 (click L1 above to see)
L1 raw traces: an event stream that drops nothing
14:22 student asks "why multiply by 3 here" → solver calls the reason tool → student answers wrong → ask_user follows up "which do you think is the outer function" → student answers… (the full conversation and every tool output is logged line by line)
↳ This is the ground-level evidence that both layers above are distilled from

The official docs split this memory into three layers: L1 is a workspace mirror plus an append-only event trace, L2 is the curated facts each surface distills, and L3 is the cross-surface synthesis. Because L2 cites L1 and L3 cites L2, anything in your profile can be traced back to its source along the chain. The product's Memory Graph visualizes the whole pyramid: L3 synthesis at the center, L2 in the middle ring, L1 traces on the outer ring.

DeepTutor memory overview interface
Memory overview: readable, organizable, auditable.
DeepTutor three-layer memory graph
Three-layer memory graph: any conclusion can be traced back to the original event.

Both images above are from the official HKUDS repo.

5The remaining modules, at a glance

Companion, writing, book-making, research: the rest of the modules in one pass

The modules below are somewhat secondary but still practical. They all run on the same brain — here they're covered briefly, each with an official screenshot.

Partners: a persistent companion with a personality and a phone number

Partners are persistent companions with their own persona, model strategy, resource library, memory, and channels. Every message coming in from the web or an IM app becomes a normal conversation turn inside that partner's dedicated workspace. The channel layer is configuration-driven and supports 15 entry points, including Feishu, Telegram, Slack, Discord, DingTalk, WeCom, WhatsApp, and Teams. A partner can also be consulted as a sub-agent from regular chat — that's "My Agents": it can connect to local Claude Code or Codex for live consultation, and can also import your existing conversation history into a searchable, continuable named agent.

DeepTutor Partners workspace overview
Partners workspace overview. Image from the official HKUDS repo.
Click to view the Partners architecture diagram
DeepTutor Partners architecture diagram
Partners architecture: inbound messages are unified into conversation turns inside the partner's workspace. Image from the official HKUDS repo.

Co-Writer: select a passage and let it rewrite — nothing lands until you approve it

A split-pane Markdown writing surface with live rendered preview (including math and charts). Its core feature is "surgical editing": select a passage and have it rewritten, expanded, or condensed. The editing agent can back up changes with knowledge-base or web evidence, shows every edit as an accept/reject diff, and writes nothing to the document until you click approve.

DeepTutor Co-Writer workspace overview
Co-Writer workspace overview. Image from the official HKUDS repo.

Book: turn your material into a "living book"

Book turns selected sources into an interactive living book — a reading environment built from typed blocks. On creation, it gives you a chapter outline to review first, rather than dropping a black-box finished product on you. Each chapter compiles into blocks — text, callout, quiz, flashcard, timeline, code, chart, interactive component, animation, concept map — and every page has its own Page Chat. Blocks can be individually inserted, moved, regenerated, or switched to a different type without rewriting the whole chapter.

DeepTutor book library overview
Book library overview. Image from the official HKUDS repo.
Book quiz block example
Quiz block
Manim animation block example in a book
Manim animation block
Interactive component block example in a book
Interactive component block

Knowledge Center: you get to pick the retrieval engine

A knowledge base is the document collection behind RAG (retrieve then answer), providing grounding for chat, writing, book-making, and Partner conversations. What's distinctive is that you can choose the retrieval engine: LlamaIndex (default, local vector plus keyword), PageIndex (with page-level citations), GraphRAG, and LightRAG (knowledge-graph retrieval) — or link directly to an Obsidian vault and let the tutor read and write it in place. Each knowledge base is bound to one engine, and re-indexing preserves old versions instead of breaking the one currently in use.

DeepTutor Knowledge Center overview
Knowledge Center overview. Image from the official HKUDS repo.

Learning Space: skills, personas, and reusable context

The resource library and personalization layer. It holds chat history, notebooks, question banks (every saved question keeps your answer, the reference answer, and the explanation), plus mastery paths, personas (behavior presets like "companion," "research assistant," or "teacher"), and skills (SKILL.md scripts the model reads on demand). Skills don't have to be written from scratch — you can download one directly from the EduHub community directory.

DeepTutor Learning Space overview
Learning Space overview. Image from the official HKUDS repo.
6How to install · how it gets called

Up and running in three commands — and callable as a tool by other AI

The smoothest path is a PyPI install: it sets up a full local web app plus a CLI without cloning any code. Requires Python 3.11+ and Node.js 20+.

Three commands to install the full web app + CLI locally
pip install -U deeptutor
deeptutor init
deeptutor start
# open 127.0.0.1:3782
Or run the full app with a single Docker command
docker run --rm --name deeptutor \
  -p 127.0.0.1:3782:3782 \
  -v deeptutor-data:/app/data \
  ghcr.io/hkuds/deeptutor:latest

There are four install paths in total: PyPI (above), source (for modifying code), Docker (single container running the full app), and CLI-only (for headless servers, agent harnesses, and scenarios like Claude Code / Codex with no web UI). Auth is off by default, running single-user by default; once multi-user is enabled, the first person to register becomes admin, and everyone else gets an isolated workspace and a redacted settings page that never exposes raw API keys. Configuration is plain JSON/YAML throughout.

It's not just built for humans — it's built for other agents too

The DeepTutor CLI has two modes: an interactive REPL (deeptutor chat), and structured JSON output for other agents (add --format json, streamed as NDJSON turn by turn). It runs "headless-safe": when there's no terminal, an ask_user pause resolves automatically with an empty reply instead of hanging. The repo root ships a roughly 150-line SKILL.md handoff document that Claude Code, Codex, and OpenCode recognize automatically — reading it once is enough to understand the whole system, and it also lets you wrap deeptutor run as a tool inside a LangChain or AutoGen loop.

Search and install a community skill from EduHub
deeptutor skill search "socratic tutor"
deeptutor skill install socratic-tutor

Every skill imported from EduHub goes through the same security gate: registry security vetting, defensive archive extraction, stripping the "always" field from the skill (a downloaded skill can't be forced into every system prompt), and its provenance is logged to .hub-lock.json for auditing.

7The paper clarifies the mechanism · the core

How these features tie together: a paper spells out the mechanism behind it

The modules above read like a list of features. What actually keeps them from being disjointed — what makes this a system that gets better the more you use it — is a paper released alongside the product by the HKUDS team, "DeepTutor: Towards Agentic Personalized Tutoring." It answers a concrete question: why does a weakness spotted during tutoring directly determine what question gets generated next, and why does performance on those questions feed back into improving the next explanation?

Hybrid personalization engine

The paper couples two things into a closed loop: static knowledge grounding (SKG) handles "is what's being taught correct, and grounded in the curriculum," and dynamic personal memory (DPM) handles "is this way of teaching, and this question, right for this specific student." The two are complementary — neither can replace the other.

SKG and DPM are the most abstract pair of concepts in this paper — here's a comparison card to tell them apart first:

SKG · Static Knowledge Grounding

Is the curriculum content correct

Breaks textbooks and papers into atomic knowledge units, uses a knowledge graph to capture relationships between them and a vector index to capture their semantics, merging and deduplicating results from both paths at query time.

Responsible for making sure what the tutor teaches is grounded and factually correct.

DPM · Dynamic Personal Memory

Is it right for this student

Its core is the "trace forest": each complete tutoring session is recorded as a tree, with nodes split into three layers (session summary, mid-level planning, execution detail); three dedicated memory agents actively retrieve and compare against it to continuously update the learner profile.

Responsible for making sure the depth and style of explanation fit this particular person.

One-line analogy

Like a tutor who flips through the textbook to make sure the concept was taught correctly (SKG), while also flipping through this student's error log to decide how to explain it and what to assign next (DPM).

Trace forest: a layered chart opened for every tutoring session

The trace forest is DPM's ledger. Every complete tutoring conversation is recorded as a tree: Level 1 stores session-level input and a global summary, Level 2 stores the mid-level plan the task was broken into, and Level 3 stores the finest-grained execution record, including tool outputs, evidence, and verification results. Every node carries a vector encoding, so it can be retrieved by semantic similarity across the whole forest. The system browses it with a toolkit called TraceToolkit, which has only three actions: find similar by semantics (SearchTrace), filter and enumerate by time or topic (ListTraces), and read a node in full along with its ancestor path (ReadNodes).

Analogy

It's like opening a detailed chart for every tutoring session, organized by layer — "chief complaint → diagnostic reasoning → specific exam records." On the next visit, you can pull up detail from any layer of an old chart, instead of seeing just one line like "this student is average at math."

The profile isn't generated by passively summarizing the latest conversation. Every time a new trace comes in, three dedicated memory agents actively query TraceToolkit, compare the latest behavior against older cross-session patterns, and update three parts of the profile: a summary of session history, an evidence-backed list of recurring confusions, and teaching reflections that guide the future. Personalization is thus built on retrievable trace evidence, not a crude "mastery score."

Putting it together: how the loop runs

Connecting the two pieces: static knowledge and personal memory are first synthesized into a "personalized context" inside the hybrid personalization engine, which feeds both pipelines at once — tutoring goes through three steps ("investigate, guide step by step, then write an explanation calibrated to the student's level," where beginners get a scaffolded step-by-step derivation and advanced students get a concise summary of just the key insight), while quiz generation goes through two steps (map concepts from this student's perspective to pick a question, then have an independent verifier check correctness). After the student finishes this round, the results are written back into the trace forest and refresh the profile.

SKG + DPM
Hybrid personalization engine
Tutoring
investigate · guide · explain
+
Question generation
select · independently verify
Student completes the interaction
As soon as the student finishes, this round of interaction is written back into the trace forest, refreshing the learner profile so the next round of tutoring and quiz generation fits this person even better. This is what the paper calls the closed tutoring cycle.
Tutoring → QuizWeaknesses diagnosed during tutoring directly determine what practice question gets generated next.
Quiz → TutoringThe student's performance on those questions refines the profile in turn, improving the next explanation.

Paper authors: Bingxi Zhao, Jiahao Zhang, Xubin Ren, Zirui Guo, Tianzhe Chu, Yi Ma, Chao Huang (The University of Hong Kong, HKUDS). v1 submitted 2026-04-10, v2 on 2026-05-08.

8270 tasks put to the test

Does it actually work: results from 270 tasks

To test personalized tutoring, the paper built its own student-centered benchmark, TutorBench: it first indexes university textbooks and papers into knowledge bases, then generates 3 student profiles at different levels for each knowledge base, each profile attached with source-grounded knowledge gaps (categorized as "misconception," "incomplete understanding," or "missing knowledge"), and finally keeps exactly 3 passing interactive tasks per profile.

30
knowledge bases spanning humanities/science/engineering/business/frontier research
90
student profiles (3 levels per knowledge base)
270
total interactive tutoring tasks
+10.8%
average personalization gain of DeepTutor over the naive baseline

How it's scored: putting an AI student through the class

The benchmark uses an AI-based student simulator to interact with each tested system: the simulator turns knowledge gaps into first-person "I thought…" statements, requests a custom exercise after several rounds of tutoring, and the resulting full conversation transcript is scored against a personalization rubric. The rubric has two groups of five items each, 1 to 5 points apiece. Tutoring side: source faithfulness, personalization, applicability, engagement, logical depth. Exercise side: match quality, grounding adequacy, diversity, answer quality, cross-concept coverage. The evaluation covers all 270 tasks, uses Gemini-3-Flash to drive both the student simulator and each system's backbone, and uses Claude Sonnet 4.6 as the judge.

The three dimensions with the biggest gains

Engagement how vivid and gripping the explanation is3.89 → 4.81
Naive baseline
DeepTutor
Grounding adequacy whether the generated questions are solidly source-backed2.46 → 2.96
Naive baseline
DeepTutor
Diversity whether the exercises vary instead of repeating2.83 → 3.44
Naive baseline
DeepTutor

Bars are scaled against a maximum score of 5.

Five systems, side by side

The four baselines all share the same retrieval tools and backbone model, differing only by adding chain-of-thought, self-refine, or ReAct-style tool calling. Their scores cluster tightly, which shows that adding these alone isn't enough to catch up with a system that genuinely adapts to the learner.

SystemTutoring avg.Exercise avg.Overall qualityRelative gain
Naive Tutor3.963.103.53
CoT Tutor (chain-of-thought)3.973.063.52-0.28%
Self-Refine Tutor4.053.083.57+1.13%
ReAct Tutor (tool loop)3.963.083.52-0.28%
DeepTutor4.393.423.91+10.76%
r=0.82

Alignment with human preference: from 45 sessions stratified-sampled across five domains for blind pairwise comparison, both human reviewers and the AI judge gave DeepTutor the top preference across all ten metrics, and the two win rates correlate strongly (Pearson r=0.82, p=0.0038) — meaning the AI judge isn't blindly favoring it, but ranking similarly to humans under the same rubric.

0.16 points

Stable across domains: overall quality differs by only 0.16 points across the five disciplines, so the gain isn't being carried by just one subject.

Taking it apart: SKG and DPM each do their own job, neither is dispensable

The ablation study removes each component separately to see which metrics collapse:

Remove SKG (static knowledge)

The biggest drop is in "grounding adequacy," followed by "source faithfulness" and "cross-concept coverage."

In other words, the tutor starts "teaching without grounding."

Remove DPM (personal memory)

The biggest drop is in "personalization" and "match quality."

In other words, the explanations and questions stop fitting this particular student.

Removing both together causes the largest overall drop. This confirms SKG and DPM are complementary mechanisms: SKG anchors "what the tutor says," DPM shapes "how it adapts to you" — neither substitutes for or eliminates the need for the other.

An unexpected finding: turn off personalization entirely, and the scaffolding alone still holds up

The paper also tested something else: is DeepTutor's "investigate, solve, write" scaffolding only useful for personalized tutoring, or does it also help general problem-solving? So they disabled the entire hybrid personalization engine (both SKG and DPM turned off), kept only the bare solver, and measured the improvement in first-try accuracy (Pass@1) across five public benchmarks (HLE, GPQA-Diamond, the LiveBench reasoning subset, GAIA, and AA-LCR).

Gemini-3-Flash
+29.24%
Sonnet-4.5
+32.03%
Qwen-3.5-Plus
+25.69%
GPT-5-Mini
+28.51%
Minimax-M2.5
+31.50%

All five backbone models improved, with average relative gains ranging from 25.69% to 32.03%. Personalization, SKG, and DPM were all switched off in this run, so the gain points to the general-purpose value of the "investigate, solve, write" scaffolding itself.

Click to see the per-benchmark breakdown across all five test sets
Backbone modelHLEGPQA-DLiveBenchGAIAAA-LCR
Gemini-3-Flash19.40→30.8081.31→84.8570.00→96.0037.58→47.8863.00→74.67
Sonnet-4.58.40→14.6072.22→73.2364.33→82.0029.09→45.4553.33→54.00
Qwen-3.5-Plus16.80→24.2088.38→87.8869.00→93.0033.94→49.0966.00→69.67
GPT-5-Mini16.46→21.2080.81→80.3071.00→93.0027.27→49.0968.67→71.00
Minimax-M2.514.00→19.4082.83→83.3359.30→73.0023.64→42.4266.00→76.40

HLE uses a fixed 500-question subset; GPQA is the Diamond tier; LiveBench takes the reasoning subset. Numbers are first-try accuracy percentages (baseline → with DeepTutor scaffolding).

9Boundaries · what's usable now

Where the paper draws its own boundaries, and what you can actually use today

The paper doesn't overclaim. It's explicit about what's been validated and what hasn't.

The paper explicitly states that system extensions like Book Engine and TutorBot (now Partners in the product) are "architectural instances" — deployment mechanisms for long-term personalized tutoring, not interventions validated by this evaluation. Their effect on retention, engagement, and real learning outcomes would require longitudinal human studies. Chat, Book, and Memory are features you can install and use right now, but whether sustained use actually helps people learn better is something the paper itself hasn't measured, leaving that for future work. The interactive evaluation relies on an AI student simulator and rubric-based judging, which inherently carries a gap between "controlled simulation" and "real learners"; the multi-stage pipeline also trades higher reasoning cost for stronger controllability. The paper's recommendation: in real use, treat generated tutoring content as an aid rather than an authority, and verify important claims against trusted course materials or a human teacher.

What an ordinary person can do with it right now

Fully open sourceApache 2.0, with the authors stating there's no paid product — individuals or institutions can deploy it locally without relying on a cloud subscription.
Low barrierA full web app running end to end with three commands or a single Docker command.
CallableThe CLI supports structured output and can be called as a tool by other agents like Claude Code or Codex — not just a product aimed at end users.
AuditableThe three-layer Memory structure plus Memory Graph make "why it explained it this way" and "why it asked this question" traceable to their source.
Weaknesses diagnosed during tutoring propagate to the learner profile and directly determine what question gets generated next; in turn, the student's performance on generated questions refines the profile and improves future explanations. "DeepTutor: Towards Agentic Personalized Tutoring," the paper's description of the "closed tutoring cycle"
This article is based on the official DeepTutor GitHub repo (HKUDS, HKU's Data Intelligence Lab, Apache 2.0) and the team's paper "DeepTutor: Towards Agentic Personalized Tutoring" (arXiv). Code: github.com/HKUDS/DeepTutor. Docs: deeptutor.info. Latest version v1.5.0 (2026-07-04). Star counts, version timeline, benchmark scores, and improvement figures are all as reported by the project team and the paper; the paper's tutoring-effectiveness evaluation is scored by an AI student simulator. Screenshots in this piece are from the official repo.