Roadmap
MultiGPT is built milestone by milestone. After each milestone the tests run, there is a short report, and then work continues. As of version 0.4.0, milestones 1 to 8 including 4a, the runner (14, with a few open points) and the node (15) are done, images (9), operations (12) and the scratchpad (13, so far the context menu and storage of files from tools) partly. Each milestone lists its work packages with their status. Voice (10) and music (11) are still open.
Symbols for the work packages: ✓ done, ◐ partially done, ◔ in progress (not yet released), ○ planned.
Milestone 1 Project skeleton
DoneDjango project configured from the environment, Makefile, login with brute-force throttling, gunicorn (gthread), health check
/healthz/, Debian package with systemd unit andmgpt-ctl, Docker files. With a local PostgreSQL the package creates the role, database and pgvector, migrates automatically, asks for host names and certificate via debconf and sets up nginx with TLS.Tests, linter and
make debpass, and versions are tagged withmake release(currently 0.4.0). Still open for acceptance: a test installation on a fresh Debian 13 and the Docker build (untested).Work packages: 9 of 9 done
- Done: M1-01 Django project and dependencies
- Done: M1-02 Settings from the environment only
- Done: M1-03 PostgreSQL with pgvector
- Done: M1-04 Login with brute-force throttling
- Done: M1-05 Base layout with header and sidebar
- Done: M1-06 Makefile for setup, tests and packaging
- Done: M1-07 gunicorn and health check
- Done: M1-08 Debian package with service and admin command, Docker files
- Done: M1-09 Test setup and linter
Milestone 2 Data model and admin
DoneProviders, models, roles and groups; accounts extend Django’s User and Group. Encrypted API keys (Fernet, the admin area shows only the last 4 characters), a central permission check, admin area for administrators only. Private chats appear there only as metadata. Four default roles: administrator, adult, teenager, guest.
Complete. Teenagers and guests start without models; the administrator enables them per role.
Work packages: 6 of 6 done
- Done: M2-01 Data model: providers, models, roles, groups
- Done: M2-02 Encrypted API keys
- Done: M2-03 Admin forms
- Done: M2-04 Four default roles and the “family” group
- Done: M2-05 Central permission check
- Done: M2-06 Create accounts with a role
Milestone 3 First provider and streaming
DoneOpenAI-compatible adapter (OpenAI, OpenRouter, LM Studio), streamed answers with a stop button, regenerate, model per message, chat view with saved history.
Tested end to end in the browser; streamed answers with a real OpenAI key work.
Work packages: 6 of 6 done
- Done: M3-01 Common provider interface
- Done: M3-02 Adapter for OpenAI-compatible providers
- Done: M3-03 Streamed answers
- Done: M3-04 Stop button, partial text is kept
- Done: M3-05 Chat view with model choice and “regenerate”
- Done: M3-06 Tests: event order, errors, stopping, other users' chats
Milestone 4 More providers and LM Studio
DoneAdapters for Anthropic and Google Gemini, fetching model lists with
make sync-models, LM Studio as a local provider with online indicator and automatically offered models.LM Studio runs in a real home network. Since 0.3.0 new models get their capabilities automatically (for LM Studio from its model list), plus the capability matrix in the admin, greyed-out offline providers and a dedicated message for expired API keys. Still open for acceptance: real calls to Anthropic and Gemini.
Work packages: 5 of 5 done
- Done: M4-01 Adapters for Anthropic and Google Gemini
- Done: M4-02 Fetch the providers' model lists
- Done: M4-03 Provider online status
- Done: M4-04 Status indicator in the chat, offline models greyed out
- Done: M4-05 Local models free of charge, no sending to offline providers
Milestone 4a MCP tools
DoneModels use tools from connected MCP servers – with permission checks, confirmation before sensitive calls and display in the chat. Plus built-in tools for calculations and PDF sheets.
Tool loop with at most 10 rounds, confirmation before unapproved tools (also after a reload), every call shown in the chat. Since 0.3.0: import from “mcpServers” JSON, online status per server, a tool table with classification in the admin, MCP access per model (none, all, selected; checked on the server) and the
run_pythontool in a bubblewrap sandbox. Since 0.3.1 thecreate_pdftool for worksheets, letters and tables. MCP tools also work with local models via LM Studio. Since 0.3.2 a model with many tools gets only a core set and looks up more withfind_tools; MultiGPT estimates the request before sending and drops older messages if needed. Since 0.3.5 administrators see offline MCP servers live in the status bar, and since 0.3.6 scipy is available in the sandbox.Work packages: 12 of 12 done
- Done: M4a-01 Bridge between web server and MCP
- Done: M4a-02 Tool calls in all three adapters
- Done: M4a-03 MCP client with connection test
- Done: M4a-04 Tool loop with round limit and permission check
- Done: M4a-05 Confirmation before sensitive tools
- Done: M4a-06 Collapsible tool calls in the chat
- Done: M4a-07 Tests with a built-in MCP test server
- Done: M4a-08 MCP access per model since 0.3.0
- Done: M4a-09 Online status and tool list per MCP server since 0.3.0
- Done: M4a-10 Calculations with Python in a sandbox since 0.3.0
- Done: M4a-11 Worksheets and texts as PDF since 0.3.1
- Done: M4a-12 Tools on demand (`find_tools`) and protection against a too small context since 0.3.2
Milestone 5 Convenience
DoneMarkdown with code highlighting and a copy button (libraries bundled locally, output sanitised), formulas with KaTeX, SVG preview, automatic chat titles, rename, archive, delete, search, Markdown export, system prompt per chat. Plus attachments, projects and shared chats.
Complete. Follow-ups: editing your own messages with versions (“‹ 1/2 ›”) and a copy button. Version 0.3.0 added attachments with image input (EXIF removed), projects with instructions, default model and collections, chat sharing with RWUD permissions and a reworked interface (full-width answers, collapsible sidebar, font size A−/A+). Since 0.3.2 the history only follows a streaming answer while you are at the bottom; since 0.3.4 arrow up/down recalls earlier prompts, and an answer can be deleted together with its question and everything after it; since 0.3.5 there is a personal menu with a profile picture; since 0.3.6 notices to the owner of shared chats and the version display.
Work packages: 7 of 7 done
- Done: M5-01 Markdown, code highlighting and formulas
- Done: M5-02 Titles, rename, archive, delete, search
- Done: M5-03 System prompt per chat
- Done: M5-04 Export as Markdown
- Done: M5-05 Edit messages, switch between versions
- Done: M5-06 Share chats with permissions since 0.3.0
- Done: M5-07 Projects since 0.3.0
Milestone 6 Comparison, usage, budgets, family
DoneThe same question to several models, usage overview, monthly budgets and the “Family” admin page.
Implemented: comparison mode with two or three models, the answers stored as versions in the chat tree (tools are off in comparison); usage and monthly budgets with a warning from 80 % and a block from 100 % except for free models; a personal usage page; a “Family” page with accounts, roles, budgets and groups, plus read-only insight into teenagers’ chats only with an option and a permanent notice. Since 0.3.0 billing runs through accounts: monetary, tokens only or flat rate, prices with validity dates including cache and reasoning, exchange rates, bookings and budgets per account. Since 0.3.4 MultiGPT uses Anthropic prompt caching; since 0.3.6 the worker fetches the ECB USD→EUR reference rate automatically, and EUR accounts can be switched to USD.
Work packages: 10 of 10 done
- Done: M6-01 Comparison mode with 2–3 models
- Done: M6-02 Usage overview
- Done: M6-03 Budgets: warning from 80 %, block at 100 %
- Done: M6-04 “Family” page
- Done: M6-05 Viewing teenagers' chats only with opt-in
- Done: M6-06 Billing accounts per provider since 0.3.0
- Done: M6-07 Prices with validity dates since 0.3.0
- Done: M6-08 Booking per answer since 0.3.0
- Done: M6-09 USD/EUR exchange rates since 0.3.0
- Done: M6-10 Budgets per billing account since 0.3.0
Milestone 7 Your own documents (RAG)
DoneCollections, upload, background indexing, search with pgvector, sources with page numbers.
Implemented: collections with sharing, upload (PDF, DOCX, TXT, MD), a worker with retries and OCR (Tesseract), search with access filtering in SQL plus full text, sources with page numbers, a document search tool and a dedicated RAG section in the admin. Embeddings locally via LM Studio (nomic-embed-text, 768 dimensions), OCR with olmOCR via LM Studio and Tesseract as a fallback, both testable with a button in the admin; directory sources from the server or NAS, limited to
RAG_SOURCE_ROOTSand read in periodically. Since 0.3.0: citations with section, page and paragraph in six styles including bibliographic data and standards, figures described by a vision model, image files as documents, the document toolslist_documents,document_infoandread_document, viewing documents in the browser and cancelling jobs. Since 0.3.2 MultiGPT loads local models into LM Studio itself when needed, never beyond a memory budget; since 0.3.4 the indexing models stay loaded only for the run; since 0.3.5 several documents are indexed at once; since 0.3.6 runs can be paused and resumed.Work packages: 13 of 13 done
- Done: M7-01 Collections, documents and sharing
- Done: M7-02 Background worker for jobs
- Done: M7-03 Text extraction, chunking, embeddings
- Done: M7-04 Vector index and reindexing
- Done: M7-05 Search with access filter and sources
- Done: M7-06 Document search as a tool
- Done: M7-07 Tests for result quality and access limits
- Done: M7-08 Dedicated document admin
- Done: M7-09 Local embeddings and OCR via LM Studio; extended in 0.3.2: automatic model loading within a memory budget
- Done: M7-10 Directory sources
- Done: M7-11 Describe figures, images as documents since 0.3.0
- Done: M7-12 Tools to list and read documents since 0.3.0
- Done: M7-13 Citing with page, paragraph and section, citation styles since 0.3.0
Milestone 8 Web search
DoneSwappable search backend, protected page fetching, sources below the answer.
Implemented with a self-hosted SearXNG: a “web search” switch in the chat and a tool for models, “SearXNG testen” in the admin, page fetching without access to home-network addresses, web text only as marked source material. Since 0.3.0 the
fetch_urlandcrawl_sitetools (SSRF-protected, respecting robots.txt), URLs from the question, flagging of invented links and base rules for all models. No search API is connected.Work packages: 9 of 9 done
- Done: M8-01 Search via SearXNG
- Done: M8-02 Page fetching without access to the home network
- Done: M8-03 Web text as marked source material
- Done: M8-04 Sources below the answer, web search as a tool
- Done: M8-05 Tests against intranet addresses and redirects
- Done: M8-06 “Fetch page” tool since 0.3.0
- Done: M8-07 “Crawl website” tool since 0.3.0
- Done: M8-08 Safeguards against invented facts and links since 0.3.0
- Done: M8-09 Visible base rules, adjustable creativity and reasoning effort since 0.3.1
Milestone 9 Images
Partially doneImage generation, editing a marked area (inpainting), variations and classic editing via a bundled MCP server.
M9-01 done (0.3.0): image generation with OpenAI gpt-image and Gemini, as the chat model’s
generate_imagetool, in “image” mode and via a “generate with image model” hint for models without tools; images without metadata, cost per image. Still open: editing areas, variations and the MCP server for classic editing.Work packages: 1 of 5 done
- Done: M9-01 Image generation (OpenAI, Gemini) since 0.3.0
- Planned: M9-02 Edit a marked area (mask) and variations
- Planned: M9-03 Classic image editing via a bundled MCP server
- Partially done: M9-04 Protected delivery of images (delivery via nginx still open)
- Planned: M9-05 Tests for image editing
Milestone 10 Voice
PlannedVoice input (recording → text) and reading answers aloud, over HTTPS in the browser on PC and phone.
Work packages: 0 of 3 done
- Planned: M10-01 Voice input: recording becomes text
- Planned: M10-02 Read answers aloud
- Planned: M10-03 Limits for recording length and file size
Milestone 11 Music
PlannedNewly planned; the exact scope is still being defined.
The work packages will follow once the scope is settled.
Milestone 12 Operations
Partially doneWorker unit, nginx example with TLS, backup, complete installation guide, verified package upgrade and removal.
The worker unit
multi-gpt-worker.servicealready ships in the package. The nginx site with TLS ships in the package as well: gunicorn listens on localhost only, and debconf asks for the host name and certificate. Themgpt-ctladmin commands are documented in the wiki, anddebian/NEWSlists the steps after an update. Since 0.3.4 GitHub Actions builds the package for every version tag and publishes it in a signed apt repository. Still open: backup, a complete guide and verified upgrade and removal.Work packages: 1 of 4 done
- Done: M12-01 nginx with TLS in the package
- Planned: M12-02 Backup of database, files and settings
- Partially done: M12-03 Complete installation guide
- Partially done: M12-04 Verified package upgrade and removal (automated tests exist, check on Debian 13 open)
Milestone 13 Scratchpad
Partially doneCollect material from chats, your own documents, the web, tools, images and notes, each with its origin and citation data, and turn it into a fully referenced document. The model writes only from the collected entries. MultiGPT sets the in-text citations and the bibliography in the chosen citation style and checks verbatim quotes against the source. Export as Markdown, DOCX and PDF. Plus a context menu in the chat with “add to scratchpad”, follow-up questions, quick actions and your own prompt templates.
The context menu in the chat has been available since 0.3.2: quote selected text with its origin, ask a follow-up, explain, simplify, translate, find counter-arguments and evidence. “Add to scratchpad” and your own templates are still missing. Prompt templates and the scratchpad itself follow; it attaches to projects.
Work packages: 0 of 13 done
- Partially done: M13-01 Context menu in the chat since 0.3.2
- Planned: M13-02 Prompt templates
- Planned: M13-03 Citing for all kinds of sources
- Planned: M13-04 Data model and permissions
- Planned: M13-05 Collect material with its origin
- Planned: M13-06 Scratchpad interface
- Planned: M13-07 Outline
- Planned: M13-08 Have sections written and revised
- Planned: M13-09 Citation check
- Planned: M13-10 In-text citations and bibliography
- Planned: M13-11 Export as Markdown, DOCX and PDF
- Planned: M13-12 Projects and sharing
- Planned: M13-13 Privacy, security, documentation
Milestone 14 Runner
DoneA container on the computer the browser runs on (rootless Podman; on Windows and macOS via WSL2 or a Linux VM) as a workspace for models: they read, search and edit files, run commands, test and fix – like a coding tool, but locked in. By default the container has no network (with the “package sources” permission only through a proxy to fixed package sources) and only a volatile in-memory workspace; the work is stored on the server as a git bundle with its full history and is backed up with the database. Pairing uses a token (stored only as a hash, revocable, with an expiry date), and the runner connects outgoing only, via WebSocket over TLS. Every access goes through MultiGPT: the server checks permissions, confirmation modes, quota and the audit log. In the chat there is a terminal in the browser, a preview for HTML pages in a sandboxed frame and the model’s task list. Devices on the home network can be controlled via
sshortelnet– only those the administrator approves, and with a confirmation before every command. Usage is billed through the “runtime” account type in container minutes per role or person and month, with a warning from 80 % and a stop at 100 % – the work is kept.Released with version 0.4.0. Changed from the first plan: the work is stored as a git bundle on the server instead of volumes on the client, the model works in many rounds like a coding tool instead of running single commands only, plus
sshandtelnetto approved devices, package sources through a proxy with an allow list, a web server (lighttpd) and the agent as a Rust programmultigpt-runner. The runner’s web ports are by default reachable by the whole home network without any login. Still open: Docker is not supported (Podman only), and incremental bundles, container logs on the “Runner” page and live output of tool runs in the chat terminal are missing.Work packages: 12 of 15 done
- Done: M14-01 Data model and permissions since 0.4.0
- Done: M14-02 Pairing via token on the web since 0.4.0
- Done: M14-03 Frame protocol since 0.4.0
- Done: M14-04 Runner service on the server since 0.4.0
- Done: M14-05 Delivery via PostgreSQL (LISTEN/NOTIFY) since 0.4.0
- Done: M14-06 Runner tools in the chat (MCP transport) since 0.4.0
- Done: M14-07 Packaging and nginx since 0.4.0
- Done: M14-08 Runner program, groundwork since 0.4.0
- Partially done: M14-09 Work container and tools since 0.4.0
- Partially done: M14-10 Workspaces and sessions (git bundle) since 0.4.0
- Done: M14-11 “Runtime” time quota since 0.4.0
- Partially done: M14-12 Management, audit log, admin since 0.4.0
- Done: M14-13 Container images and distribution since 0.4.0
- Done: M14-14 Security, privacy, documentation since 0.4.0
- Done: M14-15 End-to-end test with real Podman since 0.4.0
Milestone 15 Node
DoneMultiGPT as an MCP server: every account can create API keys whose permissions never exceed its own role. Other programs such as n8n, Claude or Cursor use them to ask models, search and upload documents, start and follow indexing and fetch generated files. Keys are stored only as a hash, can be revoked and optionally expire; every call is recorded in the audit log without content. Plus command-line commands and chat tools for indexing.
Done with version 0.3.2. Since 0.3.3 the tools return their results directly (text, images, PDF); since 0.3.6 keys with the “read chats” permission can read the account’s own chats and chats shared with it, indexing runs can be paused, and chats created by
askgo into an “API” project. Still open for acceptance: n8n workflows against an installed package and the older transport with various clients in practice.Work packages: 12 of 12 done
- Done: M15-01 API keys per account with permissions within the role since 0.3.2
- Done: M15-02 MCP server with tools since 0.3.2
- Done: M15-03 “API keys” page since 0.3.2
- Done: M15-04 Overview in the admin area since 0.3.2
- Done: M15-05 Command line for indexing and API keys since 0.3.2
- Done: M15-06 Chat tools for indexing since 0.3.2
- Done: M15-07 nginx integration since 0.3.2
- Done: M15-08 Guide for n8n since 0.3.2
- Done: M15-09 Tests since 0.3.2
- Done: M15-10 Documentation since 0.3.2
- Done: M15-11 Older MCP transport (HTTP+SSE) since 0.3.2
- Done: M15-12 Results as MCP content (text, images, PDF) since 0.3.3
Order
The critical path is 1 → 2 → 3 → 4 → 4a: everything that uses tools (document search, web search, calculations, PDF sheets, image generation and the runner) depends on the MCP loop. Convenience (5) and usage/budgets (6) could run in parallel after milestone 3. HTTPS with nginx already ships in the package and is therefore ready before the voice features (10).
For the scratchpad (13), the context menu came first (0.3.2); prompt templates are next. The runner (14) builds on MCP, the billing accounts from milestone 6, nginx with TLS and the node (15): its tools run through the chat’s MCP loop, and agents too reach it only through a MultiGPT API key, never directly.
Later (after version 1)
Full-text search across all messages and a “memory across chats” (proposal, not yet approved).