minicloud Copilot
EPIC: #260 Β· Status: π Backlog (5 connectors) Β· Sprint: TBD
minicloud Copilot is the self-hosted equivalent of Microsoft 365 Copilot. Every data source and AI component already exists on the platform β these 5 connectors wire them together so that AI assistance is embedded in the daily tools employees already use (email, chat, meetings, documents, search).
Stack mapping β minicloud vs M365 Copilotβ
| M365 Copilot capability | minicloud equivalent | Status |
|---|---|---|
| Outlook β email summarization, triage | Stalwart mail + n8n + LiteLLM | π #261 |
| Teams β meeting notes, action items | Jitsi + Whisper + LiteLLM + Nextcloud | π #262 |
| SharePoint / OneDrive grounding | Nextcloud webhook β RAG β Qdrant | π #263 |
| Copilot Chat in Teams | Matrix @ai bot β LiteLLM β Element | π #264 |
| Enterprise Search | Unified RAG in Open WebUI (Qdrant backend) | π #265 |
| AI gateway | LiteLLM | β live |
| AI observability | Langfuse | β live |
| Document conversion | markitdown-proxy | β live |
| Vector search | Qdrant | β live |
| Automation | n8n + minicloud-crew-agent | β live |
Architectureβ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β minicloud Copilot β
β β
β Data Sources Connectors AI Layer β
β ββββββββββ ββββββββββ ββββββββ β
β Stalwart IMAP βββ n8n βββββββββββββββββββββββ LiteLLM β
β Nextcloud files βββ markitdown-proxy β RAG βββ β β
β Jitsi recording βββ Whisper βββββββββββββββββ β β
β ERPNext API βββββββββββββββββββββββββββββββββ β β
β Matrix history ββββββββββββββββββββββββββββββ β β
β Qdrant (vector DB) β
β β β
β Open WebUI β
β (Enterprise Search) β
β β β
β Langfuse (traces) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
All connectors write to the same Qdrant instance. Open WebUI becomes the unified Enterprise Search interface β no separate search tool needed.
Connector 1 β Email AI (#261)β
Stalwart IMAP β n8n β LiteLLM β Matrix + ERPNext + SMTP
| Step | Component | Detail |
|---|---|---|
| Trigger | n8n IMAP node | Polls shared mailboxes (sinistres@, courtiers@, production@) every 2 min |
| Classification | LiteLLM | Urgency P1/P2/P3 + type (dΓ©claration / rΓ©siliation / avenant / autre) |
| Extraction | LiteLLM | Insured name, policy number, date of loss, 3-sentence summary |
| Alert | Matrix webhook | Posted to #sinistres: room; P1 triggers @room |
| CRM creation | ERPNext REST API | Lead/Opportunity with extracted fields |
| Acknowledgement | SMTP via Stalwart | Auto-reply with SLA: P1=4h / P2=24h / P3=48h |
| Draft assist | LiteLLM | Reply draft saved to Stalwart Drafts (human sends) |
Value for insurance IS: Eliminates manual triage of sinistres@ β every claim email is classified, logged in ERPNext, and acknowledged within 5 minutes.
Connector 2 β Meeting Notes (#262)β
Jitsi β Whisper β LiteLLM β Nextcloud + Matrix
| Step | Component | Detail |
|---|---|---|
| Recording | Jibri (to deploy) | Saves .mp4 to Nextcloud Meetings/recordings/ |
| Trigger | n8n WebDAV poll | Detects new recording file |
| Transcription | Whisper large-v3 | OpenAI-compatible endpoint in ai namespace |
| Summarization | LiteLLM | Structured output: participants, decisions, action items, summary |
| Storage | Nextcloud | Notes saved to Meetings/notes/<date>-<room>.md |
| Notification | Matrix | Summary posted to corresponding Matrix room |
Action item format: - [ ] @owner: task description (due: YYYY-MM-DD)
Connector 3 β Document Grounding (#263)β
Nextcloud webhook β markitdown-proxy β rag-ingest β Qdrant
This is the fastest connector to ship β no new containers, just wiring existing services.
Collection mapping:
| Nextcloud folder | Qdrant collection | doc_type |
|---|---|---|
| /Company/Policies/ | company-policies | policy |
| /Company/Procedures/ | company-procedures | internal |
| /Company/Sinistres/ | sinistres | claim |
| /Company/Contracts/ | contracts | contract |
Trigger: Nextcloud Flow app fires webhook on file create/update/delete β n8n β rag-ingest service.
Connector 4 β Chat AI Assistant (#264)β
Matrix @ai bot β LiteLLM β Element Web
Deployed as maubot in chat namespace. Users mention @ai in any Element room.
| Command | Action |
|---|---|
@ai <question> | AI reply with last 10 messages as context |
@ai /search <query> | RAG search across all Qdrant collections β top 3 sources |
@ai /summarize | Summarize last 20 messages in the room |
@ai /action-items | Extract action items from last 20 messages |
For document questions (message contains ? + policy keywords) β RAG lookup first β LiteLLM with retrieved context.
Connector 5 β Enterprise Search UI (#265)β
Open WebUI + Qdrant β unified search across all 4 data sources
Open WebUI is reconfigured to use the shared Qdrant instance (VECTOR_DB=qdrant) instead of its default Chroma. Five Knowledge Bases are pre-configured:
| Knowledge Base | Collections | Access |
|---|---|---|
| π§ Emails | emails | management |
| π Company Documents | company-policies, procedures, contracts | all |
| π₯ Meeting Notes | meeting-transcripts | all |
| π¬ Chat History | matrix-history | collab |
| π All Sources | all collections (re-ranked) | management |
Hybrid search: BM25 keyword + dense vector, French BM25 tokenizer already in the minicloud-open-webui custom image.
Source citation: every response includes filename + collection + chunk score.
Build orderβ
| Step | Issue | Effort | Depends on |
|---|---|---|---|
| 1 | Email AI (#261) | ~3 days (n8n workflow + LiteLLM prompt) | nothing |
| 2 | Document grounding (#263) | ~1 day (webhook + existing rag-ingest) | nothing |
| 3 | Chat AI (#264) | ~2 days (maubot deploy + plugin) | nothing |
| 4 | Meeting notes (#262) | ~4 days (Jibri + Whisper + n8n) | Jibri |
| 5 | Enterprise Search (#265) | ~2 days (Open WebUI config + KB setup) | #261 #262 #263 |
Total estimate: ~12 days for full minicloud Copilot. No new infrastructure except Jibri (Jitsi recording) and Whisper (both lightweight).
Observabilityβ
Every LLM call in all 5 connectors flows through LiteLLM β traced in Langfuse with:
tags: connector name (email-ai,meeting-notes, etc.)metadata: source document / email subject / room namesession_id: tied to the source event for full trace
A Grafana dashboard minicloud-copilot-v1 will show: calls per connector / p95 latency / classification distribution.