HKUDS/DeepTutorPublic

DeepTutor: Lifelong Personalized Tutoring. https://deeptutor.info/.

AI summary: An open-source, multi-agent AI tutoring platform with advanced RAG and personalized learning paths.

Stars
40.7K
+164 today
Forks
5.2K
Watchers
192
Open issues
93
Open PRs
93
Contributors
~208
Commits
2.4K
Branches
13

PythonApache-2.0Created Dec 28, 2025Last push 7d agoLatest release v1.6.12+468 stars this week+2.1K this month

Quick answers

What is DeepTutor?
An open-source, multi-agent AI tutoring platform with advanced RAG and personalized learning paths.
What does DeepTutor do?
DeepTutor is a comprehensive, open-source educational platform that utilizes a multi-agent architecture to provide highly personalized AI tutoring. It integrates advanced Retrieval-Augmented Generation techniques, including LlamaIndex, LightRAG, and GraphRAG, to accurately synthesize answers from extensive, multimodal knowledge bases. The system manages user states dynamically, continuously adapting to the learner's progress through an autonomous instructional loop with hard mastery gates. It allows for the deployment of specialized Partner agents equipped with unique personas and private documentation to serve specific academic or corporate training needs.
Who is DeepTutor for?
Educators, self-directed learners, and enterprise training departments looking to deploy an open-source, highly personalized AI tutoring infrastructure.
How do I get started with DeepTutor?
git clone https://github.com/HKUDS/DeepTutor.git
How popular is DeepTutor on GitHub?
HKUDS/DeepTutor has 40,747 stars and 5,150 forks on GitHub, and gained 468 stars in the last 7 days.
What license does DeepTutor use?
HKUDS/DeepTutor is released under the Apache-2.0 license.

Star history

since Jul 27, 2026
020K40KJul 2026Aug 2026Sep 2026Oct 2026
40.7K stars as of Oct 3, 2026. Measured daily since Jul 27, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
OctNovDecJanFebMarAprMayJunJulAugSepMonWedFri2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 3 commits2025-12-29: 8 commits2025-12-30: 17 commits2025-12-31: 11 commits2026-01-01: 11 commits2026-01-02: 7 commits2026-01-03: 9 commits2026-01-04: 7 commits2026-01-05: 15 commits2026-01-06: 26 commits2026-01-07: 10 commits2026-01-08: 8 commits2026-01-09: 21 commits2026-01-10: 10 commits2026-01-11: 8 commits2026-01-12: 4 commits2026-01-13: 5 commits2026-01-14: 6 commits2026-01-15: 16 commits2026-01-16: 2 commits2026-01-17: 2 commits2026-01-18: 14 commits2026-01-19: 3 commits2026-01-20: 1 commit2026-01-21: 3 commits2026-01-22: 2 commits2026-01-23: 4 commits2026-01-24: 2 commits2026-01-25: 4 commits2026-01-26: 1 commit2026-01-27: 1 commit2026-01-28: 1 commit2026-01-29: 6 commits2026-01-30: 1 commit2026-01-31: 1 commit2026-02-01: 1 commit2026-02-02: 1 commit2026-02-03: 4 commits2026-02-04: 3 commits2026-02-05: 1 commit2026-02-06: 1 commit2026-02-07: 1 commit2026-02-08: 1 commit2026-02-09: 1 commit2026-02-10: 2 commits2026-02-11: 1 commit2026-02-12: 3 commits2026-02-13: 1 commit2026-02-14: 1 commit2026-02-15: 1 commit2026-02-16: 1 commit2026-02-17: 1 commit2026-02-18: 1 commit2026-02-19: 1 commit2026-02-20: 1 commit2026-02-21: 1 commit2026-02-22: 1 commit2026-02-23: 1 commit2026-02-24: 1 commit2026-02-25: 1 commit2026-02-26: 1 commit2026-02-27: 1 commit2026-02-28: 1 commit2026-03-01: 1 commit2026-03-02: 1 commit2026-03-03: 1 commit2026-03-04: 1 commit2026-03-05: 1 commit2026-03-06: 1 commit2026-03-07: 1 commit2026-03-08: 1 commit2026-03-09: 4 commits2026-03-10: 1 commit2026-03-11: 1 commit2026-03-12: 1 commit2026-03-13: 5 commits2026-03-14: 4 commits2026-03-15: 2 commits2026-03-16: 1 commit2026-03-17: 1 commit2026-03-18: 1 commit2026-03-19: 1 commit2026-03-20: 2 commits2026-03-21: 1 commit2026-03-22: 3 commits2026-03-23: 1 commit2026-03-24: 6 commits2026-03-25: 1 commit2026-03-26: 1 commit2026-03-27: 1 commit2026-03-28: 1 commit2026-03-29: 3 commits2026-03-30: 1 commit2026-03-31: 1 commit2026-04-01: 1 commit2026-04-02: 6 commits2026-04-03: 1 commit2026-04-04: 3 commits2026-04-05: 1 commit2026-04-06: 4 commits2026-04-07: 12 commits2026-04-08: 14 commits2026-04-09: 1 commit2026-04-10: 11 commits2026-04-11: 6 commits2026-04-12: 5 commits2026-04-13: 9 commits2026-04-14: 5 commits2026-04-15: 3 commits2026-04-16: 0 commits2026-04-17: 5 commits2026-04-18: 3 commits2026-04-19: 0 commits2026-04-20: 13 commits2026-04-21: 5 commits2026-04-22: 9 commits2026-04-23: 5 commits2026-04-24: 6 commits2026-04-25: 4 commits2026-04-26: 2 commits2026-04-27: 1 commit2026-04-28: 1 commit2026-04-29: 6 commits2026-04-30: 2 commits2026-05-01: 10 commits2026-05-02: 2 commits2026-05-03: 4 commits2026-05-04: 3 commits2026-05-05: 6 commits2026-05-06: 17 commits2026-05-07: 10 commits2026-05-08: 1 commit2026-05-09: 2 commits2026-05-10: 3 commits2026-05-11: 3 commits2026-05-12: 26 commits2026-05-13: 8 commits2026-05-14: 17 commits2026-05-15: 2 commits2026-05-16: 8 commits2026-05-17: 5 commits2026-05-18: 4 commits2026-05-19: 8 commits2026-05-20: 22 commits2026-05-21: 38 commits2026-05-22: 7 commits2026-05-23: 1 commit2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 8 commits2026-05-28: 6 commits2026-05-29: 2 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 6 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 2 commits2026-06-07: 3 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 4 commits2026-06-11: 8 commits2026-06-12: 1 commit2026-06-13: 12 commits2026-06-14: 14 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 8 commits2026-06-18: 3 commits2026-06-19: 3 commits2026-06-20: 5 commits2026-06-21: 7 commits2026-06-22: 3 commits2026-06-23: 10 commits2026-06-24: 4 commits2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 3 commits2026-06-28: 0 commits2026-06-29: 2 commits2026-06-30: 4 commits2026-07-01: 0 commits2026-07-02: 0 commits2026-07-03: 1 commit2026-07-04: 2 commits2026-07-05: 0 commits2026-07-06: 0 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 2 commits2026-07-10: 1 commit2026-07-11: 1 commit2026-07-12: 1 commit2026-07-13: 0 commits2026-07-14: 1 commit2026-07-15: 6 commits2026-07-16: 2 commits2026-07-17: 4 commits2026-07-18: 13 commits2026-07-19: 18 commits2026-07-20: 3 commits2026-07-21: 2 commits2026-07-22: 8 commits2026-07-23: 4 commits2026-07-24: 27 commits2026-07-25: 0 commits2026-07-26: 10 commits2026-07-27: 6 commits2026-07-28: 5 commits2026-07-29: 6 commits2026-07-30: 0 commits2026-07-31: 2 commits2026-08-01: 0 commits2026-08-02: 2 commits2026-08-03: 11 commits2026-08-04: 4 commits2026-08-05: 3 commits2026-08-06: 10 commits2026-08-07: 6 commits2026-08-08: 0 commits2026-08-09: 2 commits2026-08-10: 2 commits2026-08-11: 4 commits2026-08-12: 15 commits2026-08-13: 5 commits2026-08-14: 1 commit2026-08-15: 0 commits2026-08-16: 30 commits2026-08-17: 15 commits2026-08-18: 0 commits2026-08-19: 17 commits2026-08-20: 26 commits2026-08-21: 17 commits2026-08-22: 2 commits2026-08-23: 10 commits2026-08-24: 32 commits2026-08-25: 11 commits2026-08-26: 26 commits2026-08-27: 23 commits2026-08-28: 29 commits2026-08-29: 18 commits2026-08-30: 50 commits2026-08-31: 18 commits2026-09-01: 31 commits2026-09-02: 1 commit2026-09-03: 24 commits2026-09-04: 1 commit2026-09-05: 1 commit2026-09-06: 25 commits2026-09-07: 19 commits2026-09-08: 16 commits2026-09-09: 8 commits2026-09-10: 51 commits2026-09-11: 23 commits2026-09-12: 2 commits2026-09-13: 4 commits2026-09-14: 39 commits2026-09-15: 12 commits2026-09-16: 10 commits2026-09-17: 12 commits2026-09-18: 1 commit2026-09-19: 5 commits2026-09-20: 3 commits2026-09-21: 28 commits2026-09-22: 9 commits2026-09-23: 109 commits2026-09-24: 14 commits2026-09-25: 8 commits2026-09-26: 3 commits2026-09-27: 78 commits2026-09-28: 0 commits2026-09-29: 0 commits2026-09-30: 0 commits2026-10-01: 0 commits2026-10-02: 0 commits2026-10-03: 0 commits
1,858 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Widely adopted

    40,747 stars

  • Community-driven

    ~208 contributors

  • Permissive license

    Apache-2.0

  • Continuous integration

    Automated checks passing

  • Repeat trending

    34 trending appearances

What DeepTutor does

DeepTutor is a comprehensive, open-source educational platform that utilizes a multi-agent architecture to provide highly personalized AI tutoring. It integrates advanced Retrieval-Augmented Generation techniques, including LlamaIndex, LightRAG, and GraphRAG, to accurately synthesize answers from extensive, multimodal knowledge bases. The system manages user states dynamically, continuously adapting to the learner's progress through an autonomous instructional loop with hard mastery gates. It allows for the deployment of specialized Partner agents equipped with unique personas and private documentation to serve specific academic or corporate training needs.

Educators, self-directed learners, and enterprise training departments looking to deploy an open-source, highly personalized AI tutoring infrastructure.

  • Dynamic State Management: Persists context and tracks student progress meticulously across multiple tutoring sessions.
  • Advanced RAG Integration: Uses LlamaIndex, LightRAG, and GraphRAG to accurately retrieve answers from large, multimodal document bases.
  • Partner Agents: Allows users to deploy specialized sub-agents with unique personas and private knowledge bases for specific subjects.
  • Guided Learning Loop: Features an autonomous instructional loop with hard mastery gates, administering quizzes to ensure concept comprehension.
  • Multi-Tenant Support: Provides a production-ready environment with isolated user workspaces, administrative controls, and connection profiles.

Where teams use it

Personalized Academic Tutoring

Students interact with a specialized agent that tracks their mastery of subjects and automatically remediates knowledge gaps.

Corporate Training

Organizations upload internal documentation and deploy the system to onboard new hires through interactive, guided learning paths.

Curriculum Development

Educators build custom courses by feeding syllabi into the platform, which automatically generates relevant quizzes and study materials.

Specialized Research Assistance

Researchers deploy focused Partner agents loaded with specific domain literature for deep, contextual Q&A.

Getting started: git clone https://github.com/HKUDS/DeepTutor.git

README

main branch

DeepTutor logo DeepTutor

DeepTutor: Lifelong Personalized Tutoring

Docs — deeptutor.info  Collaborate — work with us

GitHub Trending Repository of the Day HKUDS/DeepTutor | Trendshift Star History Rank

English  简体中文  繁體中文  日本語  Español  Français  Arabic  Русский  Hindi  Português  Thai  Polski

Python 3.11+ Next.js 16 License GitHub release arXiv

Discord Feishu WeChat

Features · Get Started · Explore · CLI · Ecosystem · Community


🤝 We welcome any kinds of contributing! Vote on roadmap items or propose new ones at Roadmap, and see our Contributing Guide for branching strategy, coding standards, and how to get started.

📦 Releases

[2026.9.27] v1.6.12 — Workspace KB moves, Kiwix archives, source figures, Task Board, German UI, and chat recovery.

[2026.9.24] v1.6.11 — French and Ukrainian interfaces, reading folders with in-chat selection actions, figures sent to vision models, paged Office previews, and self-syncing knowledge bases.

[2026.9.22] v1.6.10 — Native LightRAG role models, a published index that records and enforces what built it, PDF attachments that follow your parsing engine, visible truncation, and unfiltered provider choices.

[2026.9.21] v1.6.9 — Folder-based learning workspaces, daily practice, redesigned Settings, clearer streaming conversations, persistent usage accounting, and recoverable archives with explicit permanent deletion.

Past releases (more than 1 week ago)

[2026.9.14] v1.6.8 — A recycle bin for deleted chats, search across your whole conversation history, a tool that looks past your knowledge base, and a sweep of fixes for quiet failures.

[2026.9.11] v1.6.7 — A fix release: books that arrived as one empty chapter, quizzes that produced nothing, the model's scratchpad in the text, formulas printed raw, and cards you could not submit.

[2026.9.8] v1.6.6 — A fix release: answers that could not submit, a copy button that lied, connected knowledge bases for partners, Codex sign-in inside Docker, and a 100 KB lighter home route.

[2026.9.6] v1.6.5 — A content workspace you point at any folder, one exec tool for every language, Mastery Path modes that gate its tools, and Settings that grades readiness.

[2026.9.3] v1.6.4 — Faster isolated runtimes, controllable Book generation, source-complete Mastery paths and Chat hand-offs, durable Reading, unified activity UI, recoverable sessions, and explicit per-model API capabilities.

[2026.9.2] v1.6.3 — Breaking front/back-end refactor, strict canonical routes and recoverable streams, plus learner/guardian accounts, grounded Reading, WeKnora, broader parsing, Python 3.14, and DashScope media.

[2026.8.31] v1.6.2 — Immersive YouTube learning, a plugin-driven Visualize catalog, three new agent harnesses, safer reading citations, multi-format MinerU, live Partner channel status, and guided updates.

[2026.8.30] v1.6.1 — One vendor key linked to every service it serves, a task model for background work, Settings as a searchable navigator, a sidebar you arrange, and first-party LightRAG.

[2026.8.27] v1.6.0 — Faithful EPUB reading and annotations, Courses with Little Tutor and Ask Questions, bounded web-source sync, shared Books with private learning state, and Serply/native search.

[2026.8.25] v1.5.17 — Partners each member owns with private conversations and linkable chat accounts, GitHub repos as a knowledge source, Antigravity CLI, browser WeChat QR login, and deeptutor doctor.

[2026.8.22] v1.5.16 — MarginNote 4 libraries you connect and its add-on fills, Book pages that turn again, and tool-call ids, embeddings and temperature limits that stop breaking behind a gateway.

[2026.8.20] v1.5.15 — PageIndex OSS you host yourself with reasoning retrieval, a question bank you can finally file into, third-party tool/capability plugins, and Apache Tika parsing.

[2026.8.19] v1.5.14 — Immersive Reading: a document open beside the thread, cited page by page; DeepTutor configures itself from chat; IMA libraries you browse and write to; a notebook console.

[2026.8.17] v1.5.13 — Books stream while they compile, track your progress, and export to Markdown; a cost estimate before you approve a spine; and home starter suggestions drawn from memory.

[2026.8.13] v1.5.12 — Web search rebuilt with six new providers (Doubao, Bocha, Zhipu, Firecrawl, Qianfan, Aliyun IQS), a LiteParse parsing engine, MCP servers that reconnect on credential change, and CodeBuddy + OrcaRouter.

[2026.8.10] v1.5.11 — Prose around a DSML tool call stops vanishing, a truncated reply continues instead of ending, live memory usage in Settings, and LightRAG indexing off the event loop.

[2026.8.7] v1.5.10 — Every account signs in to its own Codex, model output language becomes its own setting, empty tool calls are rejected instead of retried, and uploads stop blocking the loop.

[2026.8.4] v1.5.9 — Gemini Embedding 2 on its native endpoint, a per-model reasoning effort control, a Novita AI gateway, retrieval roles for queries, and Compose deployments that keep all of data/.

[2026.8.2] v1.5.8 — Memory: a real heap ceiling for the dev server, source installs serve a production build, bounded LLM client and index caches, and a keep-alive fix for stray 500s.

[2026.7.31] v1.5.7 — A per-account MCP Services store, 101 CLI Apps the tutor can run, credentials moved out of the sandbox's reach, and a mobile layout.

[2026.7.29] v1.5.6 — Remote Codex sign-in completes behind an SSH tunnel, generated files get their own card in Activity, non-English languages stop collapsing to Chinese, and book creation no longer times out.

[2026.7.26] v1.5.5 — Sign in with your ChatGPT plan via OpenAI Codex OAuth, an Eden AI provider, knowledge bases that report what they hold, traceable rag citations, and GraphRAG indexing without a workaround.

[2026.7.24] v1.5.4 — Maintenance sweep: the post-answer "generating" stall is gone, IM partners render Markdown tables faithfully, LLM JSON parsing is sturdier, plus quiz, create-KB form, and Math Animator fixes.

[2026.7.24] v1.5.3 — Themeable code blocks, four more coding CLIs in My Agents (Gemini, Kimi, opencode, MiMo), an Atlas Cloud LLM provider, and a broad chat, memory, embedding, and parsing reliability sweep.

[2026.7.19] v1.5.2 — Configurable chat attachment limits, PageIndex retrieval that reasons across your documents via agentic tool calls, broader Anthropic/OpenAI model support, and steadier Book, Knowledge Base, and chat UI.

[2026.7.9] v1.5.1 — Remove a single failed document from a knowledge base — even one stuck in an error state — instead of deleting and rebuilding the whole base.

[2026.7.4] v1.5.0 — LlamaIndex ingestion now honors your Document Parsing engine with multimodal image extraction, Partner & Soul ids stay URL-safe for non-Latin names, and optional RAG extras install cleanly on Python 3.14+.

[2026.6.30] v1.4.15 — A native Mattermost channel for Partners, plus fixes so Guided Learning multiple-choice questions grade correctly and a configured zero chunk overlap is honored.

[2026.6.29] v1.4.14 — Click an assigned partner to chat in one step, Deep Research flags partial reports, LightRAG indexes without MinerU, FAISS handles non-ASCII paths, and PocketBase sessions are isolated per user.

[2026.6.27] v1.4.13 — Partners support non-Latin names and become assignable to users, logos render after login (#599), tiny knowledge bases retrieve reliably, and containers start cleanly under rootless Podman.

[2026.6.24] v1.4.12 — A new LightRAG Server retrieval engine, a lightweight PyMuPDF4LLM parsing engine, and a FAISS vector backend that makes large knowledge-base retrieval dramatically faster.

[2026.6.23] v1.4.11 — Native tool calling on every cloud OpenAI-compatible provider, a redesigned admin Users page, LaTeX in quiz options, an honest session-loading spinner, and configurable container host binding.

[2026.6.21] v1.4.10 — A self-service Profile page with avatars, a rootless-ready container guide with a single-port request-time proxy, and deny-by-default MCP tools for non-admin users.

[2026.6.19] v1.4.9 — Settings polish: Search shows only the fields your provider needs, connection profiles can be renamed and auto-named by provider, and graded Mastery Path questions flow into your Question Bank.

[2026.6.18] v1.4.8 — Connect your own Partners under My Agents and consult them live in chat — answering through their own persona, library and skills — each with its own private memory.

[2026.6.18] v1.4.7 — Connect your local Claude Code / Codex and consult it live mid-turn, My Agents graduates to a top-level /agents, and Partner conversations gain branch / resume / delete with a replayable trace.

[2026.6.17] v1.4.6 — Four-surface consolidation: a Space learning dashboard with importable My Agents and top-level Memory, a Knowledge Center with GraphRAG / PageIndex / LightRAG / linked-KB / Obsidian, opened-up Settings, and per-model capability gating.

[2026.6.14] v1.4.5 — Guided Learning rebuilt on the chat agent loop with a hard per-type mastery gate and a /learning dashboard, a new loop-plugin framework, plus Markdown export / save-to-notebook for Partner conversations.

[2026.6.13] v1.4.4 — Install community skills from ClawHub with deeptutor skill install behind a security gate, plus real in-browser DOCX/XLSX previews for knowledge-base files.

[2026.6.12] v1.4.3 — TutorBot becomes Partners on a production-grade IM pipeline (15 channels, live streaming), Chat moves to a single agent loop, real per-user isolation, and a rebuilt Visualize.

[2026.5.28] v1.4.2 — Stability + polish: Gemini 2.5+ unblocked across Visualize and Chat, auth-routing fix (#485), smooth-streaming chat UX, a Recents sidebar, and Lemonade local-provider support.

[2026.5.27] v1.4.1 — Security + stability: TutorBot tool sandbox locked down, per-user resource isolation, multimodal image fallback, an HTTP/SSE API for TutorBots, and a v1.4.0 chat regression fix.

[2026.5.22] v1.4.0 — GA cut of v1.4: Auto Mode, three-layer Memory, agentic Deep Research / Solve / Question, LlamaIndex RAG refactor, Visualize/Animator merge, and restart-safe turn runtime.

[2026.5.21] v1.4.0-beta — Three-layer Memory workbench (L1/L2/L3), every chat capability rebuilt on a single agentic engine, LlamaIndex-only RAG, and a unified Settings + Capabilities surface.

[2026.5.10] v1.3.10 — Remote Docker CORS recovery, DISABLE_SSL_VERIFY across SDK providers, safer code-block citations, and optional Matrix E2EE add-on.

[2026.5.9] v1.3.9 — TutorBot Zulip and NVIDIA NIM support, safer thinking-model routing, deeptutor start, sidebar tooltips, and session-store parity.

[2026.5.8] v1.3.8 — Optional multi-user deployments with isolated user workspaces, admin grants, auth routes, and scoped runtime access.

[2026.5.4] v1.3.7 — Thinking-model/provider fixes, visible Knowledge index history, and safer Co-Writer clear/template editing.

[2026.5.3] v1.3.6 — Catalog-based model selection for chat and TutorBot, safer RAG re-indexing, OpenAI Responses token-limit fixes, and Skills editor validation.

[2026.5.2] v1.3.5 — Smoother local launch settings, safer RAG queries, cleaner local embedding auth, and Settings dark-mode polish.

[2026.5.1] v1.3.4 — Book page chat persistence and rebuild flows, chat-to-book references, stronger language/reasoning handling, RAG document extraction hardening.

[2026.4.30] v1.3.3 — NVIDIA NIM + Gemini embedding support, unified Space context for chat history/skills/memory, session snapshots, RAG re-index resilience.

[2026.4.29] v1.3.2 — Transparent embedding endpoint URLs, RAG re-index resilience for invalid persisted vectors, memory cleanup for thinking-model output, Deep Solve runtime fix.

[2026.4.28] v1.3.1 — Stability: safer RAG routing & embedding validation, Docker persistence, IME-safe input, Windows/GBK robustness.

[2026.4.27] v1.3.0 — Versioned KB indexes with re-index workflow, rebuilt Knowledge workspace, embedding auto-discovery with new adapters, Space hub.

[2026.4.25] v1.2.5 — Persistent chat attachments with file-preview drawer, attachment-aware capability pipelines, TutorBot Markdown export.

[2026.4.25] v1.2.4 — Text/code/SVG attachments, one-command Setup Tour, Markdown chat export, compact KB management UI.

[2026.4.24] v1.2.3 — Document attachments (PDF/DOCX/XLSX/PPTX), reasoning thinking-block display, Soul template editor, Co-Writer save-to-notebook.

[2026.4.22] v1.2.2 — User-authored Skills system, chat input performance overhaul, TutorBot auto-start, Book Library UI, visualization fullscreen.

[2026.4.21] v1.2.1 — Per-stage token limits, Regenerate response across all entry points, RAG & Gemma compatibility fixes.

[2026.4.20] v1.2.0 — Book Engine "living book" compiler, multi-document Co-Writer, interactive HTML visualizations, Question Bank @-mention.

[2026.4.18] v1.1.2 — Schema-driven Channels tab, RAG single-pipeline consolidation, externalized chat prompts.

[2026.4.17] v1.1.1 — Universal "Answer now", Co-Writer scroll sync, unified settings panel, streaming Stop button.

[2026.4.15] v1.1.0 — LaTeX block math overhaul, LLM diagnostic probe, Docker + local LLM guidance.

[2026.4.14] v1.1.0-beta — Bookmarkable sessions, Snow theme, WebSocket heartbeat & auto-reconnect, embedding registry overhaul.

[2026.4.13] v1.0.3 — Question Notebook with bookmarks & categories, Mermaid in Visualize, embedding mismatch detection, Qwen/vLLM compatibility, LM Studio & llama.cpp support, and Glass theme.

[2026.4.11] v1.0.2 — Search consolidation with SearXNG fallback, provider switch fix, and frontend resource leak fixes.

[2026.4.10] v1.0.1 — Visualize capability (Chart.js/SVG), quiz duplicate prevention, and o4-mini model support.

[2026.4.10] v1.0.0-beta.4 — Embedding progress tracking with rate-limit retry, cross-platform dependency fixes, and MIME validation fix.

[2026.4.8] v1.0.0-beta.3 — Native OpenAI/Anthropic SDK (drop litellm), Windows Math Animator support, robust JSON parsing, and full Chinese i18n.

[2026.4.7] v1.0.0-beta.2 — Hot settings reload, MinerU nested output, WebSocket fix, and Python 3.11+ minimum.

[2026.4.4] v1.0.0-beta.1 — Agent-native architecture rewrite (~200k lines): Tools + Capabilities plugin model, CLI & SDK, TutorBot, Co-Writer, Guided Learning, and persistent memory.

[2026.1.23] v0.6.0 — Session persistence, incremental document upload, flexible RAG pipeline import, and full Chinese localization.

[2026.1.18] v0.5.2 — Docling support for RAG-Anything, logging system optimization, and bug fixes.

[2026.1.15] v0.5.0 — Unified service configuration, RAG pipeline selection per knowledge base, question generation overhaul, and sidebar customization.

[2026.1.9] v0.4.0 — Multi-provider LLM & embedding support, new home page, RAG module decoupling, and environment variable refactor.

[2026.1.5] v0.3.0 — Unified PromptManager architecture, GitHub Actions CI/CD, and pre-built Docker images on GHCR.

[2026.1.2] v0.2.0 — Docker deployment, Next.js 16 & React 19 upgrade, WebSocket security hardening, and critical vulnerability fixes.

✨ v1.6.12 is live. pip install -U deeptutor picks up the latest stable release.

📰 News

  • 2026-09-20 🎉 40k stars in 9 months! We'll keep expanding DeepTutor's learning ecosystem.
  • 2026-05-22 🌐 Official docs site live at deeptutor.info — guides, references, and capability tours in one place.
  • 2026-04-19 🎉 20k stars in 111 days! Thank you for the support toward truly personalized, intelligent tutoring.
  • 2026-04-10 📄 Our paper is live on arXiv — read the preprint for the design and ideas behind DeepTutor.
  • 2026-02-06 🚀 10k stars in just 39 days! A huge thank you to our incredible community.
  • 2026-01-01 🎊 Happy New Year! Join our Discord, WeChat, or Discussions — let's shape DeepTutor together.
  • 2025-12-29 🎓 DeepTutor is officially released!

✨ Key Features

DeepTutor is an agent-native learning workspace that connects tutoring, problem solving, quiz generation, research, visualization, and mastery practice in one extensible system.

  • One runtime for every mode — Chat, Ask Questions, Quiz, Research, Visualize, Solve, Course Study, Mastery Path, Immersive Reading, and Immersive Watching share one capability runtime and session context while keeping purpose-built loops and pipelines.
  • Task Board — Track study tasks in To do, In progress, and Done, with notes, drag-and-drop or keyboard-accessible move buttons, and an archive you can restore from. Cards stay in the current workspace and follow the existing appearance and language settings; no model configuration is required.
  • Connected learning context — Knowledge bases, books, Co-Writer drafts, notebooks, question banks, personas, and Memory can be reused across the workflows that support them, subject to account grants and learning policies.
  • Immersive video learning — paste a YouTube link for privacy-enhanced native playback, synchronized captions, timestamp-grounded tutoring, and resumable progress; administrators can switch playback to a self-hosted Invidious instance without rebuilding materials.
  • Subagents and Partners — from Chat, consult a live agent harness (Claude Code, Codex, Grok CLI, Antigravity, Kimi, opencode, MiMo, Hermes, OpenClaw, or DeepSeek) or a Partner, import past conversations, and run persistent IM companions on the same brain.
  • Multi-engine knowledge — versioned RAG libraries across LlamaIndex, PageIndex, GraphRAG, LightRAG, a remote LightRAG Server, a self-hosted WeKnora knowledge base, a Tencent IMA or MarginNote 4 library, a connected Kiwix ZIM archive, or a linked Obsidian vault, with pluggable document parsing. See native LightRAG role models for independent extraction, query and vision settings, default-only creation and confirmed rebuilds.
  • Extensible tools and skills — built-in tools, MCP servers, CLI apps, image / video / voice generation models, and installable community skills from EduHub.
  • Inspectable memory — L1 traces, L2 surface summaries, and L3 synthesis make personalization visible and editable; the Memory Graph links L2 facts to L1 evidence and L3 synthesis to contributing surfaces.

🚀 Get Started

DeepTutor ships four installation paths. They all share one runtime-home layout: private settings live in data/user/settings/ under the directory you launch from (or under DEEPTUTOR_HOME / deeptutor start --home if you set one explicitly). For the full app, the recommended flow is pick a runtime-home directory → install → deeptutor init → deeptutor start.

Content Workspace

The Content Workspace is separate from DeepTutor's private runtime home. It is the folder agents may read, with generated files under outputs/<capability>/<session>/<turn>/. Custom workspaces isolate conversations, learning materials, progress, and caches in a private .deeptutor/data/ tree that file tools cannot browse. Settings, credentials, and Memory stay shared at the account level.

Without configuration, the content workspace is <runtime-home>/data/user/workspace. Local PyPI, CLI, and source installs can choose folders in Settings → Workspaces; set the default folder with:

deeptutor workspace show
deeptutor workspace set /absolute/path/to/my-folder
deeptutor workspace reset

Capabilities inspect their selected workspace through the built-in workspace tools. The model only receives relative paths such as outputs/...; when it uses workspace_present, the UI renders an authenticated, openable snapshot. The same exact relative path also works in a normal Markdown link or image. Changing the source file later does not change an already presented snapshot.

Learning Space manages the resource library. In Settings → Workspaces, assign Skills, MCP services and knowledge bases to each workspace, or retain its existing access rules. Existing workspaces keep their current access until a selection is saved. Assignments reference the original resources without copying credentials or knowledge indexes; workspace-specific skills can override shared versions. See workspace resource assignments.

Execution is read-only outside outputs/. Copying a generated file elsewhere in the content workspace requires an explicit Allow once confirmation for that exact source and destination. A system sandbox or the Docker runner enforces this boundary when available; local restricted-subprocess fallback is shown as best effort in Workspace settings.

Option 1 — Install From PyPI · full local Web app + CLI, no clone required

Full local Web app + CLI, no clone required. Needs Python 3.11–3.14 and a Node.js 20+ runtime on PATH (the packaged Next.js standalone server is spawned by deeptutor start).

mkdir -p my-deeptutor && cd my-deeptutor
pip install -U deeptutor
deeptutor init     # prompts for ports + LLM provider + optional embedding/search
deeptutor start    # starts backend + frontend; keep the terminal open

deeptutor init prompts for backend port (default 8001), frontend port (default 3782), LLM provider / base URL / API key / model, an optional embedding provider for Knowledge Base / RAG, and an optional search provider for Web Search.

After deeptutor start, open the frontend URL printed in the terminal — by default http://127.0.0.1:3782. Press Ctrl+C in that terminal to stop both backend and frontend. Skipping deeptutor init is fine for a quick trial; the app boots with default ports and empty model settings, configure them later in Settings → Providers and Language models.

Browser microphone transcription: OpenAI-compatible STT adapters forward browser audio to the provider without local conversion. The native DashScope and Volcengine STT adapters convert browser WebM/Opus to 16 kHz WAV and require an ffmpeg executable on DeepTutor's PATH. A canonical 16 kHz mono PCM WAV bypasses this conversion. For Windows PyPI installations using either native adapter, install FFmpeg, add its bin directory to the service's PATH, then restart DeepTutor. Conversion failures appear below the chat input.

Option 2 — Install From Source · develop against a checkout

For development against a checkout. Use Python 3.11–3.14 and Node.js 22 LTS to match CI and Docker.

git clone https://github.com/HKUDS/DeepTutor.git
cd DeepTutor

# Create a venv (macOS/Linux). Windows PowerShell:
#   py -3.11 -m venv .venv ; .\.venv\Scripts\Activate.ps1
python3 -m venv .venv && source .venv/bin/activate
python -m pip install --upgrade pip

# Install backend + frontend deps
python -m pip install -e .
( cd web && npm ci --legacy-peer-deps )

deeptutor init
deeptutor start --dev

deeptutor start builds the local web/ frontend for production once and reuses it; --dev runs Next.js with HMR. Config layout, ports, and Ctrl+C match Option 1.

Conda environment (instead of venv)
conda create -n deeptutor python=3.11
conda activate deeptutor
python -m pip install --upgrade pip
Optional install extras — RAG engines / dev / partners / matrix / math-animator
pip install -e ".[rag-lightrag]"    # Built-in LightRAG engine (exact supported SDK)
pip install -e ".[graphrag]"        # Microsoft GraphRAG engine (Python 3.11–3.13)
pip install -e ".[dev]"             # tests/lint tools
pip install -e ".[partners]"        # Partner IM channel SDKs
pip install -e ".[video-learning]"  # compatibility extra; captions ship in the full/CLI installs
pip install -e ".[matrix]"          # Matrix channel without E2EE/libolm
pip install -e ".[matrix-e2e]"      # Matrix E2EE; requires libolm
pip install -e ".[math-animator]"   # Manim addon; requires LaTeX/ffmpeg/system libs
Frontend dependency tweaks & dev-server troubleshooting

Changing frontend dependencies: run npm install --legacy-peer-deps to refresh web/package-lock.json, then commit both web/package.json and web/package-lock.json.

Stuck dev server: if deeptutor start --dev reports an existing frontend that isn't responding, stop the PID it prints. If no Next.js process is actually running, the lock files are stale — remove them and retry:

rm -f web/.next/dev/lock web/.next/lock
deeptutor start --dev
Option 3 — Docker · one self-contained container

One container for the full Web app. Images on GitHub Container Registry:

  • ghcr.io/hkuds/deeptutor:latest — latest stable release
  • ghcr.io/hkuds/deeptutor:<version> — exact release without the leading v (for example :1.6.3); pre-releases receive only their version tag

See CONTAINERIZATION.md for podman/rootless/read-only-rootfs deployments and the full per-installation guide.

docker run --rm --name deeptutor \
  -p 127.0.0.1:3782:3782 \
  -v deeptutor-data:/app/data \
  ghcr.io/hkuds/deeptutor:latest

To choose a host content folder at container startup, mount it at the stable container path and lock DeepTutor to that path:

mkdir -p "$PWD/deeptutor-workspace/outputs"
docker run --rm --name deeptutor \
  -p 127.0.0.1:3782:3782 \
  -v deeptutor-data:/app/data \
  -v "$PWD/deeptutor-workspace:/workspace" \
  -e DEEPTUTOR_WORKSPACE_ROOT=/workspace \
  -e DEEPTUTOR_WORKSPACE_ALLOWED_ROOTS=/workspace \
  ghcr.io/hkuds/deeptutor:latest

For Compose, set DEEPTUTOR_WORKSPACE_HOST=/absolute/host/folder before running python scripts/docker_compose.py up -d. When omitted it uses ./data/user/workspace. Docker paths are selected at startup and therefore appear locked in the Web settings page.

Only 3782 needs to be published. The browser talks exclusively to the frontend origin; the Next.js middleware (web/proxy.ts) forwards /api/* and /ws/* to the FastAPI backend inside the container. Publishing 8001 (-p 127.0.0.1:8001:8001) is optional — handy only for hitting the API directly with curl or scripts.

Open http://127.0.0.1:3782. The container creates /app/data/user/settings/*.json on first boot; configure model providers from the Web Settings page. Config, API keys, logs, the default Content Workspace, memory, and knowledge bases persist in the deeptutor-data volume. A separately mounted Content Workspace persists at its host path instead. Optional extras belong on the deployment, not in a shell: set DEEPTUTOR_EXTRAS (and DEEPTUTOR_APT_PACKAGES for system libraries) and every container started from it re-applies them, where a docker exec … pip install would be lost at the next compose down.

  • Different host ports: change the left side of each -p host:container mapping (e.g. -p 127.0.0.1:8088:3782). If you change container-side ports in /app/data/user/settings/system.json, restart and update the right side of each mapping to match.
  • Detached: add -d, then docker logs -f deeptutor to follow, docker stop deeptutor to stop, docker rm deeptutor before reusing the name. The deeptutor-data volume keeps private runtime data and the default Content Workspace across restarts; a separately mounted Content Workspace persists at its host path.

Remote Docker / reverse proxy: the browser only talks to the frontend origin (:3782); the in-container Next.js middleware forwards /api/* and /ws/* to the backend server-side. For the common single-container case you don't configure an API base at all — just point your reverse proxy / TLS terminator at :3782. You only need an API base for a split deployment (backend in a separate container/host): set next_public_api_base in data/user/settings/system.json to the in-network address the frontend server uses to reach the backend (it's read server-side, never sent to the browser).

{
  "next_public_api_base": "http://backend:8001"
}

next_public_api_base_external (and its alias public_api_base) are accepted as lower-precedence fallbacks. CORS uses frontend origins, not API URLs. With auth disabled, DeepTutor permits normal HTTP/HTTPS browser origins by default. With auth enabled, add exact frontend origins:

{
  "cors_origins": ["https://deeptutor.example.com"]
}
Connecting to Ollama / LM Studio / llama.cpp / vLLM / Lemonade on the host

Inside Docker, localhost is the container itself, not your host machine. To reach a model service running on the host, use the host gateway (recommended):

docker run --rm --name deeptutor \
  -p 127.0.0.1:3782:3782 -p 127.0.0.1:8001:8001 \
  --add-host=host.docker.internal:host-gateway \
  -v deeptutor-data:/app/data \
  ghcr.io/hkuds/deeptutor:latest

Then in Settings → Providers, point the provider Base URL at host.docker.internal:

  • Ollama LLM: http://host.docker.internal:11434/v1
  • Ollama embedding: http://host.docker.internal:11434/api/embed
  • LM Studio: http://host.docker.internal:1234/v1
  • llama.cpp: http://host.docker.internal:8080/v1
  • Lemonade: http://host.docker.internal:13305/api/v1

Docker Desktop (macOS/Windows) usually resolves host.docker.internal without --add-host. On Linux, the flag is the portable way to create that hostname on modern Docker Engine.

Linux alternative — host networking: add --network=host and drop the -p flags. The container shares the host network directly, so open http://127.0.0.1:3782 (or the frontend_port in system.json), and host services can be reached with normal localhost URLs like http://127.0.0.1:11434/v1. Note that host networking exposes container ports directly on the host and may conflict with existing services — to keep them on loopback, set BACKEND_HOST=127.0.0.1 and FRONTEND_HOST=127.0.0.1 (see CONTAINERIZATION.md).

Option 4 — CLI Only · no Web UI, from a source checkout

When you don't need the Web UI. The CLI-only package is installed from a source checkout, not from PyPI.

git clone https://github.com/HKUDS/DeepTutor.git
cd DeepTutor

# Create a venv (macOS/Linux). Windows PowerShell:
#   py -3.11 -m venv .venv-cli ; .\.venv-cli\Scripts\Activate.ps1
python3 -m venv .venv-cli && source .venv-cli/bin/activate
python -m pip install --upgrade pip

python -m pip install -e ./packaging/deeptutor-cli
deeptutor init --cli
deeptutor chat

deeptutor init --cli shares the same data/user/settings/ layout as the full app but skips the backend/frontend port prompts. It still offers the Embedding and Search selectors (choose Skip when you do not need them), writes the key runtime files (system.json, auth.json, integrations.json, interface.json, model_catalog.json, main.yaml, agents.yaml), and prompts for the active LLM provider and model.

Common commands
deeptutor chat                                          # interactive REPL
deeptutor chat --capability deep_solve --tool rag --kb my-kb
deeptutor run chat "Explain Fourier transform"
deeptutor run deep_solve "Solve x^2 = 4" --tool rag --kb my-kb
deeptutor kb create my-kb --doc textbook.pdf
deeptutor memory show
deeptutor config show

The local deeptutor-cli install ships no Web assets or server dependencies. Keep the source checkout around — the editable install points to it. To add the Web app later, install the PyPI package (Option 1) and run deeptutor init + deeptutor start from the same workspace.

Code Execution Sandbox (office skills) · running model-generated code for docx / pdf / pptx / xlsx

The built-in office skills — docx / pdf / pptx / xlsx — work by having the model write a short Python script (python-docx, reportlab, openpyxl, …), run it through the single exec tool, and present the saved workspace file. Those tools mount whenever a sandbox backend is active. DeepTutor selects the strongest configured backend in this order:

  • Runner sidecar: DEEPTUTOR_SANDBOX_RUNNER_URL routes execution to the hardened, least-privileged service from Dockerfile.runner.
  • Linux bubblewrap: when available, bwrap isolates the process and files.
  • Restricted subprocess fallback: local and single-container installs use this only when allowed; under Docker the container remains another boundary.

The sandbox_allow_subprocess setting in data/user/settings/system.json (default true) controls only the last fallback. Set it to false (or export DEEPTUTOR_SANDBOX_ALLOW_SUBPROCESS=0) to refuse subprocess execution when no runner or bwrap backend is available; it does not disable those stronger backends.

Configuration reference — config files under data/user/settings/ (JSON/YAML)

Everything under data/user/settings/ is plain JSON/YAML. The Settings page is the recommended editor; workspace registrations live separately in data/user/.runtime/workspaces.sqlite3.

File Purpose
model_catalog.json Provider connections plus LLM, task, embedding, search, TTS, STT, image, and video profiles, credentials, and active selections
system.json Backend/frontend ports, public API base, CORS, SSL verification, attachment directory and upload/extraction limits
auth.json Optional auth toggle, username, password hash, token/cookie settings
integrations.json Optional PocketBase and sidecar integration settings
interface.json UI and model output language / theme / sidebar preferences
document_parsing.json Parsing engine selection, remote endpoints, and engine-specific options
video_learning.json Default YouTube/Invidious playback provider, Invidious origins, and optional transcript adapter
main.yaml Runtime behavior defaults and path injection
agents.yaml Capability/tool temperature and token settings

Web Search references are filtered by default: only public http/https URLs without embedded credentials or unusual ports are surfaced. Deployments can add an education-focused domain policy in data/user/settings/system.json:

{
  "web_search_source_filtering": {
    "enabled": true,
    "blocked_domains": ["spam.example"],
    "trusted_domains": ["edu.cn", "arxiv.org"]
  }
}

When trusted_domains is non-empty, references are limited to those domains and their subdomains; blocked_domains always takes precedence.

Project-root .env is not read as an application config file. For a minimal model setup, save a Base URL and API key in Settings → Providers, then add and select an LLM in Language models. Add an embedding profile only if you plan to use Knowledge Base / RAG features.

LLM and task-model profiles expose an API format setting when their provider supports a choice. Keep Auto for normal routing and fallback, or choose OpenAI Chat Completions, OpenAI Responses, or Anthropic Messages; forced Responses remains fail-closed. The persisted field is api_format (auto, openai_chat, openai_responses, or anthropic); wire_api is derived compatibility state. Per-model Auto / Supported / Not supported overrides cover tool calling, image input, JSON output, and reasoning controls.

Uninstall and cleanup

DeepTutor separates its installed code, private runtime home, and optional Content Workspace. By default, the runtime home is the directory where you run deeptutor init / deeptutor start; --home PATH or DEEPTUTOR_HOME overrides it. Private application state is the data directory inside that home, so the startup banner line beginning with Workspace: identifies that runtime location. If Settings → Workspace points to another folder, back up or remove that content folder separately; it is intentionally not erased by uninstalling DeepTutor.

  1. Stop the app. Press Ctrl+C in the terminal running deeptutor start, or run deeptutor stop [--home PATH] for a launcher started with --detach; stop any running Partner and detached Docker containers before deleting data.

  2. Remove runtime data only if you also want to erase all local state. This includes settings and API keys, chat history, sessions, Memory, Notebooks, Books, Reading state, Skills, Partners state, logs, Knowledge Bases, parse caches, generated artifacts, and the packaged frontend runtime cache.

    First copy the exact Workspace: path from the startup banner and verify that its data child is the intended DeepTutor data directory. Back it up if anything may be needed later, then move that exact directory to your operating system's Trash/Recycle Bin. Do not run a recursive deletion command against a relative path or an unresolved environment variable.

  3. Remove the installed package. Use the command that matches the distribution:

    python -m pip uninstall deeptutor
    python -m pip uninstall deeptutor-cli

    If the virtual environment was created only for DeepTutor, remove it through your environment manager. For a source install, deactivate the environment, leave the source directory, and run git status --short inside that exact checkout. Only move the checkout to Trash/Recycle Bin after confirming it contains no unrelated or uncommitted work.

  4. For the Docker path, inspect the exact container and named volume before removing them. Volume removal permanently erases the Docker-managed data:

    docker ps -a --filter name=^/deeptutor$
    docker volume inspect deeptutor-data
    docker rm -f deeptutor
    docker volume rm deeptutor-data

📖 Explore DeepTutor

Start with the main surfaces you will use day to day: Chat, Partners, My Agents, Co-Writer, Book, Knowledge Center, Learning Space, Memory, and Settings. The tour then covers Multi-User deployments for shared, isolated workspaces.

If an answer loses an earlier constraint, cites weak evidence, or disagrees with selected material, collect the diagnostics in REASONING_SAFETY_CHECKLIST.md before opening an issue.

DeepTutor home — the Chat workspace with every surface in the sidebar

Screenshot status: The overview is current for v1.6.5. The surface screenshots below remain v1.4.6 references while a versioned refresh is in progress. Use them to understand workflows, not as exact navigation.

🏗️ System architecture
DeepTutor system architecture
💬 Chat — The Agent Loop You Actually Use

Chat is the default capability and where most work begins. A single thread can talk normally, call tools, ground itself in selected knowledge bases, read attachments, generate images, consult subagents, write notebook records, and continue with the same context across turns.

DeepTutor chat workspace

The loop is deliberately simple: the model thinks in rounds, calls tools when useful, observes the results, and finishes with a tool-free message. ask_user is special — instead of guessing, the agent can pause the turn, ask a structured clarifying question, and resume once you answer.

DeepTutor chat agent loop

User-toggleable tools are brainstorm, web_search, paper_search, zotero_search, reason, and geogebra_analysis — plus imagegen and videogen once you configure the matching generation model. Contextual tools such as rag, kb_files, knowledge_frontier, read_source, read_memory, write_memory, read_skill, load_tools, exec, web_fetch, ask_user, list_notebook, write_note, question_bank, github, consult_subagent, workspace_list, workspace_read, workspace_search, workspace_present, and workspace_export mount automatically when the turn has the right context.

Context comes in two kinds: sticky session context (capability, workspace or course, tools, knowledge bases, persona, model, and Reading / Mastery state) persists across turns; one-time references (files, chat history, books, reading sections, notebooks, question bank, imported agents) come from the + menu for a single turn. The voice button only transcribes the current message.

Home keeps Chat, Ask Questions, Quiz, and Visualize one click away; Research for cited reports, Solve for worked reasoning, and Immersive Watching sit under More Capabilities. Personalized Learning groups Book, Mastery Path, Immersive Reading, Watching, and Practice; Reading adds verified citations, saved notes, source-grounded read-aloud / study guidance / vocabulary / quiz / translation actions, and notebook capture, while Course Study keeps its course-bound context.

🤝 Partner — Persistent Companions on the Same Brain
DeepTutor partners workspace

Partners are persistent companions with their own soul, model policy, library, memory, and channels. They are not a separate bot engine: every inbound web or IM message becomes a normal ChatOrchestrator turn inside a partner-scoped workspace. A partner is "a chat that has a personality and a phone number."

DeepTutor partners architecture

Each partner has a SOUL.md, model selection, channels, tool policy, and assigned library. Its library either copies knowledge bases, skills, and notebooks into data/partners/<id>/workspace/, or stays linked to an existing workspace's files and resources; soul, conversations, and Partner memory remain separate. Authenticated non-admin users keep private partner sessions and relationship memory while the partner reads their personal memory read-only; admin, group, and unbound traffic use the shared partner scope.

Per-partner IM channel configuration

The channel layer is schema-driven and can connect to IM platforms such as Feishu, Telegram, Slack, Discord, DingTalk, QQ/NapCat, WeCom, WhatsApp, Zulip, Mattermost, Matrix, Mochat, and Microsoft Teams depending on installed extras and configured credentials. A partner can also be connected as a subagent and consulted from a normal chat turn — see My Agents below.

For faster setup, the Partner channel page can create a Feishu/Lark app or WeCom AI bot, or sign a personal WeChat account in, from a QR scan drawn in the browser rather than the server log. Feishu/Lark detects the account domain and saves the scanning user as the initial allowed sender. WeCom keeps an existing allowlist and otherwise defaults to all users who can reach the bot, with a visible open-access warning; the manual channel forms remain available if a provider's scan protocol changes.

🧑‍🚀 My Agents — Consult & Import Other Agents
DeepTutor My Agents workspace

My Agents turns other agents into context for DeepTutor, and does two distinct things. Connect a live agent — Claude Code, Codex, Grok CLI, Antigravity, Kimi, opencode, MiMo Code, Hermes Agent, OpenClaw, or DeepSeek Harness on your machine, a remote Hermes gateway, or one of your Partners — and consult it from inside a chat turn: DeepTutor actually runs the other agent and streams its work into the Activity panel via the consult_subagent tool. Select it and its round limit with the Agent chip, or filter the same connected-agent list with @; the choice stays attached to the session.

Connect Grok CLI. Install xAI's Grok CLI on the machine running the DeepTutor backend, run grok login there, and verify that grok --help lists --output-format streaming-json. Then open My Agents → Connect, select Grok CLI, and choose a working directory. Detection checks the executable's protocol support; it does not verify login or model access. The connector has been exercised with Grok CLI 1.0.3; unrelated third-party commands also named grok are not supported.

In Settings → Partners & Agents → Grok CLI, leave model and reasoning effort empty to use the CLI defaults, or enter values supported by your account's grok models output. System instructions are passed through --rules. The default permission mode is dontAsk: Grok uses its existing rules and built-in read-only handling, and denies operations that need approval. This is a CLI permission policy, not a filesystem sandbox. Broader modes can be selected explicitly in settings; advanced CLI flags remain available through backends.grok.extra_args in the subagent settings API.

Grok uses its own authentication and session storage; DeepTutor does not copy its credentials. Follow-up consults resume the connection's session in the same working directory. Text and tool activity stream live; private thought payloads are omitted. Cross-session Grok memory is disabled by default. This connector supports text questions and CLI tools, not image forwarding or importing past Grok conversations. In Docker, install and authe

(README truncated)

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

84 total
  1. v1.6.12v1.6.12Sep 27, 2026

    # DeepTutor v1.6.12 Release Notes **Release Date:** 2026.09.27 Building on [v1.6.11](ver1-6-11.md), v1.6.12 lets each workspace place and move its knowledge bases, connects searchable Kiwix archives, and carries source figures into grounded answers. A Task Board, German interface, and recovery fixes round out the release. Existing data needs no migration; systemd installs now update outside the app. ## What's New ### Knowledge bases follow the workspace Choose the storage workspace when creating a knowledge base. Move one existing base from its Settings panel after reviewing destination blockers and affected assignments; DeepTutor verifies the copied data and index before switching references. Saved knowledge-base IDs and workspace assignments continue to resolve. Moves are blocked while processing or when shared grants, destination collisions, or unsupported MarginNote data make them unsafe. ### Connect Kiwix archives Connect one searchable ZIM archive served by `kiwix-serve` as a knowledge base from the Knowledge Center or `deeptutor kb connect-kiwix`. Search reads the archive on demand without uploading or indexing a copy. You can also bring an article into Immersive Read

  2. v1.6.11v1.6.11Sep 24, 2026

    # DeepTutor v1.6.11 Release Notes **Release Date:** 2026.09.24 Building on [v1.6.10](ver1-6-10.md), v1.6.11 is a wide release: French and Ukrainian join the interface, immersive reading gets folders, figures and in-chat selection actions, Office files preview as real pages, and knowledge bases learn to keep themselves in sync. Migrations are additive and run on first start. The Docker image is larger (LibreOffice), and the container now refuses to start if `/app/data` is not writable. ## What's New ### Four interface languages, fourteen reply languages The interface now ships in English, Chinese, French and Ukrainian, chosen from a select in **Settings → General**. Ukrainian is complete; French strings not yet translated fall back to English. Model replies can be set to 14 languages, and the new `/language` command in the composer pins a reply language for one conversation without touching your account default. ### Immersive reading, reorganized Reading collections become colored folders with their own page for files and conversations, and a **Fullscreen learning** mode hides the rest of the app. Selecting a passage and choosing **Explain**, **Translate** or **Guide me** now

  3. v1.6.10v1.6.10Sep 22, 2026

    # DeepTutor v1.6.10 Release Notes **Release Date:** 2026.09.22 Building on [v1.6.9](ver1-6-9.md), v1.6.10 gives the native LightRAG engine its own role models and makes a published index state what it was built with. Around it: PDF attachments now honor your parsing engine, a generation cut off at its token budget says so instead of failing as a parse error, and model providers are no longer filtered out of services DeepTutor could not pre-verify. Drop-in — no migrations. ## What's New ### Native LightRAG role models The native LightRAG engine takes a base model of its own, independent of the chat model, with optional per-role overrides for extraction, keyword, query and vision. Vision is off by default on a new configuration. Knowledge-base creation and full rebuilds use the shared engine defaults rather than per-index overrides, and a changed configuration is shown for review before it is submitted. ### An index that records how it was built Publication pins the extraction and vision identities an index was built with, so later changes to the engine defaults leave an existing index alone. Index versions display their embedding, extraction and vision provenance; an index wh

  4. v1.6.9v1.6.9Sep 20, 2026

    # DeepTutor v1.6.9 Release Notes **Release Date:** 2026.09.21 Building on [v1.6.8](past_releases/ver1-6-8.md), v1.6.9 brings folder-based learning workspaces, a daily practice loop, redesigned Settings, and clearer streaming conversations. Learning surfaces move under `/learning/` with redirects for old links; conversation deletion now means permanent deletion, with archiving available for conversations you want to keep. ## What's New ### Workspaces for your learning data Choose a workspace when starting a conversation, book, mastery path, reading or watching session. Custom workspaces keep learning data in `.deeptutor/data/` and generated files in `outputs/`; settings, credentials and Memory remain shared across your account. Manage workspaces and their Skills, MCP services and knowledge bases in **Settings → Workspaces**. Partners can keep private resources or stay linked to a workspace. See [workspaces](../../docs-for-user/workspaces.md). ### Data migration with previews and recovery **Settings → Data Migration** previews the files, sessions and dependencies involved before moving data between workspaces. Transfers verify copied data before clearing the source, refuse con

  5. v1.6.8v1.6.8Sep 14, 2026

    # DeepTutor v1.6.8 Release Notes **Release Date:** 2026.09.14 v1.6.8 lands twenty-two community pull requests and a sweep of the reports behind them. Where [v1.6.7](ver1-6-7.md) chased a token budget spent on hidden thinking, this one mostly answers a different complaint: *I did a thing and the app quietly did nothing.* A deleted chat with no way back, a book link that opened the library instead of the book, an attachment the model never mentioned, a backend killed while it was still starting. Three new surfaces arrive alongside — a recycle bin, history search, and a tool that looks past your own knowledge base. Drop-in — no migrations. ## What's New ### Deleted chats are recoverable Deleting a conversation used to be final. It now moves the chat to a recycle bin — a collapsible section in the sidebar — where you can restore it or delete it for good. Attachments, mastery state and the rest of a chat's artifacts survive the trip and come back with it, and only an explicit purge removes anything from disk. ### Search your whole conversation history The history picker now searches message text, not just titles. Matches come back with a short excerpt around the hit so you can te

Code frequency

additions and deletions
+267.1K-267.1KWeek of 2025-12-28: +95,930 linesWeek of 2025-12-28: -3,251 linesWeek of 2026-01-04: +41,903 linesWeek of 2026-01-04: -21,790 linesWeek of 2026-01-11: +68,071 linesWeek of 2026-01-11: -23,885 linesWeek of 2026-01-18: +16,919 linesWeek of 2026-01-18: -8,491 linesWeek of 2026-01-25: +3,332 linesWeek of 2026-01-25: -1,087 linesWeek of 2026-02-01: +14,641 linesWeek of 2026-02-01: -43,572 linesWeek of 2026-02-08: +7,497 linesWeek of 2026-02-08: -13,481 linesWeek of 2026-02-15: +56 linesWeek of 2026-02-15: -56 linesWeek of 2026-02-22: +50 linesWeek of 2026-02-22: -50 linesWeek of 2026-03-01: +49 linesWeek of 2026-03-01: -49 linesWeek of 2026-03-08: +171,982 linesWeek of 2026-03-08: -183,998 linesWeek of 2026-03-15: +23,993 linesWeek of 2026-03-15: -3,573 linesWeek of 2026-03-22: +1,837 linesWeek of 2026-03-22: -3,090 linesWeek of 2026-03-29: +3,117 linesWeek of 2026-03-29: -6,092 linesWeek of 2026-04-05: +11,678 linesWeek of 2026-04-05: -2,709 linesWeek of 2026-04-12: +17,903 linesWeek of 2026-04-12: -14,195 linesWeek of 2026-04-19: +52,319 linesWeek of 2026-04-19: -18,532 linesWeek of 2026-04-26: +26,443 linesWeek of 2026-04-26: -9,253 linesWeek of 2026-05-03: +19,007 linesWeek of 2026-05-03: -8,406 linesWeek of 2026-05-10: +23,167 linesWeek of 2026-05-10: -11,571 linesWeek of 2026-05-17: +69,774 linesWeek of 2026-05-17: -36,578 linesWeek of 2026-05-24: +28,542 linesWeek of 2026-05-24: -1,605 linesWeek of 2026-05-31: +129 linesWeek of 2026-05-31: -61 linesWeek of 2026-06-07: +74,574 linesWeek of 2026-06-07: -56,854 linesWeek of 2026-06-14: +61,521 linesWeek of 2026-06-14: -49,800 linesWeek of 2026-06-21: +8,533 linesWeek of 2026-06-21: -2,990 linesWeek of 2026-06-28: +3,373 linesWeek of 2026-06-28: -1,881 linesWeek of 2026-07-05: +643 linesWeek of 2026-07-05: -152 linesWeek of 2026-07-12: +3,575 linesWeek of 2026-07-12: -909 linesWeek of 2026-07-19: +8,418 linesWeek of 2026-07-19: -1,888 linesWeek of 2026-07-26: +38,404 linesWeek of 2026-07-26: -2,780 linesWeek of 2026-08-02: +74,110 linesWeek of 2026-08-02: -1,080 linesWeek of 2026-08-09: +35,587 linesWeek of 2026-08-09: -22,215 linesWeek of 2026-08-16: +70,910 linesWeek of 2026-08-16: -72,768 linesWeek of 2026-08-23: +107,708 linesWeek of 2026-08-23: -18,131 linesWeek of 2026-08-30: +267,140 linesWeek of 2026-08-30: -110,220 linesWeek of 2026-09-06: +81,565 linesWeek of 2026-09-06: -18,675 linesWeek of 2026-09-13: +28,994 linesWeek of 2026-09-13: -4,976 linesWeek of 2026-09-20: +115,525 linesWeek of 2026-09-20: -32,591 linesWeek of 2026-09-27: +14,737 linesWeek of 2026-09-27: -4,684 linesDec 28, 2025Sep 27, 2026
+1.7M lines added, -818K removed over the last year.

Commits per week

last 52 weeks
1740Week of 2025-10-04: 0 commitsWeek of 2025-10-11: 0 commitsWeek of 2025-10-18: 0 commitsWeek of 2025-10-25: 0 commitsWeek of 2025-11-01: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 66 commitsWeek of 2026-01-04: 97 commitsWeek of 2026-01-11: 43 commitsWeek of 2026-01-18: 29 commitsWeek of 2026-01-25: 15 commitsWeek of 2026-02-01: 12 commitsWeek of 2026-02-08: 10 commitsWeek of 2026-02-15: 7 commitsWeek of 2026-02-22: 7 commitsWeek of 2026-03-01: 7 commitsWeek of 2026-03-08: 17 commitsWeek of 2026-03-15: 9 commitsWeek of 2026-03-22: 14 commitsWeek of 2026-03-29: 16 commitsWeek of 2026-04-05: 49 commitsWeek of 2026-04-12: 30 commitsWeek of 2026-04-19: 42 commitsWeek of 2026-04-26: 24 commitsWeek of 2026-05-03: 43 commitsWeek of 2026-05-10: 67 commitsWeek of 2026-05-17: 85 commitsWeek of 2026-05-24: 16 commitsWeek of 2026-05-31: 8 commitsWeek of 2026-06-07: 28 commitsWeek of 2026-06-14: 33 commitsWeek of 2026-06-21: 27 commitsWeek of 2026-06-28: 9 commitsWeek of 2026-07-05: 4 commitsWeek of 2026-07-12: 27 commitsWeek of 2026-07-19: 62 commitsWeek of 2026-07-26: 29 commitsWeek of 2026-08-02: 36 commitsWeek of 2026-08-09: 29 commitsWeek of 2026-08-16: 107 commitsWeek of 2026-08-23: 149 commitsWeek of 2026-08-30: 126 commitsWeek of 2026-09-06: 144 commitsWeek of 2026-09-13: 83 commitsWeek of 2026-09-20: 174 commitsWeek of 2026-09-27: 78 commitsOct 4, 2025Sep 27, 2026
1.9K commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 20 commitsSun 1:00 — 16 commitsSun 2:00 — 25 commitsSun 3:00 — 13 commitsSun 4:00 — 23 commitsSun 5:00 — 7 commitsSun 6:00 — 6 commitsSun 7:00 — 5 commitsSun 8:00 — 1 commitsSun 9:00 — 5 commitsSun 10:00 — 34 commitsSun 11:00 — 16 commitsSun 12:00 — 11 commitsSun 13:00 — 15 commitsSun 14:00 — 6 commitsSun 15:00 — 11 commitsSun 16:00 — 15 commitsSun 17:00 — 19 commitsSun 18:00 — 11 commitsSun 19:00 — 18 commitsSun 20:00 — 11 commitsSun 21:00 — 8 commitsSun 22:00 — 11 commitsSun 23:00 — 21 commitsMon 0:00 — 19 commitsMon 1:00 — 34 commitsMon 2:00 — 21 commitsMon 3:00 — 14 commitsMon 4:00 — 3 commitsMon 5:00 — 0 commitsMon 6:00 — 3 commitsMon 7:00 — 5 commitsMon 8:00 — 7 commitsMon 9:00 — 2 commitsMon 10:00 — 10 commitsMon 11:00 — 10 commitsMon 12:00 — 10 commitsMon 13:00 — 5 commitsMon 14:00 — 11 commitsMon 15:00 — 7 commitsMon 16:00 — 12 commitsMon 17:00 — 13 commitsMon 18:00 — 10 commitsMon 19:00 — 9 commitsMon 20:00 — 21 commitsMon 21:00 — 13 commitsMon 22:00 — 8 commitsMon 23:00 — 11 commitsTue 0:00 — 28 commitsTue 1:00 — 11 commitsTue 2:00 — 16 commitsTue 3:00 — 3 commitsTue 4:00 — 0 commitsTue 5:00 — 0 commitsTue 6:00 — 0 commitsTue 7:00 — 1 commitsTue 8:00 — 3 commitsTue 9:00 — 10 commitsTue 10:00 — 5 commitsTue 11:00 — 12 commitsTue 12:00 — 11 commitsTue 13:00 — 1 commitsTue 14:00 — 9 commitsTue 15:00 — 9 commitsTue 16:00 — 13 commitsTue 17:00 — 27 commitsTue 18:00 — 18 commitsTue 19:00 — 13 commitsTue 20:00 — 14 commitsTue 21:00 — 15 commitsTue 22:00 — 11 commitsTue 23:00 — 10 commitsWed 0:00 — 29 commitsWed 1:00 — 19 commitsWed 2:00 — 18 commitsWed 3:00 — 1 commitsWed 4:00 — 2 commitsWed 5:00 — 2 commitsWed 6:00 — 1 commitsWed 7:00 — 1 commitsWed 8:00 — 2 commitsWed 9:00 — 9 commitsWed 10:00 — 58 commitsWed 11:00 — 46 commitsWed 12:00 — 30 commitsWed 13:00 — 11 commitsWed 14:00 — 4 commitsWed 15:00 — 6 commitsWed 16:00 — 11 commitsWed 17:00 — 19 commitsWed 18:00 — 7 commitsWed 19:00 — 11 commitsWed 20:00 — 19 commitsWed 21:00 — 12 commitsWed 22:00 — 22 commitsWed 23:00 — 20 commitsThu 0:00 — 36 commitsThu 1:00 — 25 commitsThu 2:00 — 13 commitsThu 3:00 — 4 commitsThu 4:00 — 4 commitsThu 5:00 — 4 commitsThu 6:00 — 4 commitsThu 7:00 — 7 commitsThu 8:00 — 5 commitsThu 9:00 — 5 commitsThu 10:00 — 5 commitsThu 11:00 — 6 commitsThu 12:00 — 12 commitsThu 13:00 — 5 commitsThu 14:00 — 12 commitsThu 15:00 — 30 commitsThu 16:00 — 13 commitsThu 17:00 — 10 commitsThu 18:00 — 22 commitsThu 19:00 — 19 commitsThu 20:00 — 8 commitsThu 21:00 — 11 commitsThu 22:00 — 27 commitsThu 23:00 — 36 commitsFri 0:00 — 39 commitsFri 1:00 — 15 commitsFri 2:00 — 13 commitsFri 3:00 — 10 commitsFri 4:00 — 8 commitsFri 5:00 — 0 commitsFri 6:00 — 1 commitsFri 7:00 — 2 commitsFri 8:00 — 3 commitsFri 9:00 — 9 commitsFri 10:00 — 1 commitsFri 11:00 — 3 commitsFri 12:00 — 4 commitsFri 13:00 — 13 commitsFri 14:00 — 10 commitsFri 15:00 — 7 commitsFri 16:00 — 23 commitsFri 17:00 — 10 commitsFri 18:00 — 3 commitsFri 19:00 — 5 commitsFri 20:00 — 14 commitsFri 21:00 — 5 commitsFri 22:00 — 14 commitsFri 23:00 — 7 commitsSat 0:00 — 16 commitsSat 1:00 — 10 commitsSat 2:00 — 2 commitsSat 3:00 — 2 commitsSat 4:00 — 5 commitsSat 5:00 — 0 commitsSat 6:00 — 1 commitsSat 7:00 — 1 commitsSat 8:00 — 1 commitsSat 9:00 — 0 commitsSat 10:00 — 3 commitsSat 11:00 — 12 commitsSat 12:00 — 5 commitsSat 13:00 — 5 commitsSat 14:00 — 5 commitsSat 15:00 — 5 commitsSat 16:00 — 8 commitsSat 17:00 — 6 commitsSat 18:00 — 3 commitsSat 19:00 — 7 commitsSat 20:00 — 6 commitsSat 21:00 — 16 commitsSat 22:00 — 10 commitsSat 23:00 — 5 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.
DateListRankStars gained
Aug 22, 2026monthly#15+8,578
Aug 21, 2026monthly#15+8,578
Aug 20, 2026monthly#13+8,834
Aug 19, 2026monthly#12+8,910
Aug 18, 2026monthly#12+9,118
Aug 17, 2026monthly#10+9,425
Aug 16, 2026monthly#9+9,896
Aug 15, 2026monthly#7+9,903
Aug 14, 2026monthly#7+10,020
Aug 13, 2026daily#7+812
Aug 13, 2026monthly#6+9,854
Aug 12, 2026monthly#7+8,346
Aug 12, 2026daily#7+812
Aug 11, 2026monthly#7+8,346
Aug 10, 2026monthly#6+8,060