ProfDesk: One Chat for Claude, ChatGPT and a Private Local Model
A self-hosted assistant for teachers that runs on your own computer and works from your phone — and never sends anything without a button press.
Teachers lose hours every week to email, lost files and forgotten deadlines. Most AI assistants want student records and exam papers sent to their servers, and they know nothing about the teacher’s own courses. ProfDesk is my answer: Claude, ChatGPT and a private local model in one chat, running on your own computer and reachable from your phone. It is free and open source.

One thread, every model
You pick who answers with one tap and switch whenever you like. Every model sees the whole conversation, so ChatGPT can write a prompt, Claude can carry it out on your slides, and ProfDesk can draft the email to your TA — without copy and paste.
ProfDesk can also drive the Claude and ChatGPT apps installed on your computer with your own login, so the subscriptions you already pay for do the work. Switch to a local model and nothing leaves the machine.
How it works
- Agents: each job has its own small agent in one file, sharing a simple loop written from scratch — the model picks a tool, reads the result and continues until it has an answer.
- Grounded replies: before writing, the reply agent works out the actual question, searches your files, memory and past conversations, keeps only the relevant facts, then writes.
- Hybrid search: SQLite full-text search for exact words plus embeddings for meaning, merged with reciprocal rank fusion.
- Email sorting: headers catch newsletters and no-reply senders first; the model sorts the rest into reply, info or skip, and pulls out any task and due date.
You stay in control
Your files, email and history stay on your computer. Nothing is sent, moved or printed until you press the button. A private Tailscale link lets the phone reach the computer from anywhere.
git clone https://github.com/asadsehto/profdesk.git
cd profdesk
uv run profdeskAdapted from the project write-up. See the code and full details on GitHub ↗