Everything in one page: connect your tools, ask questions, read the gap box, wire up your agents, manage your team. Self-hosting instead? See the open-source docs on GitHub.
From zero to first answer in about three minutes.
Free plan: 1 brain · 1 seat · 2 connectors · 5,000 nodes. Limits are enforced when you act (connect/invite), never by hiding pages.
Each connector ingests its source into typed, permission-aware nodes. Tokens are stored AES-256-GCM encrypted, isolated per workspace; source permissions are re-captured on every sync (fail-closed).
Channel threads → one node per thread, @mentions auto-linked to people. Ingests: thread.
Permissions: ACL from channel membership — private channel → only members can see it. · Private channels stay private: membership is re-captured on every sync and enforced on every answer. · provider docs ↗
→ Connect it on the Connectors page (bot token + channel id).
Customer support messages (Business Cloud API) → nodes, in real time via webhook. Ingests: message.
Permissions: ACL = 'whatsapp:<phoneNumberId>' group (fail-closed — only the support team sees customer chats). · WhatsApp is webhook-only by design — messages flow in in real time; there is no history pull. · provider docs ↗
→ Connect it on the Connectors page (access token + phone number id).
Add the Vitrus agent to your project WhatsApp groups → the conversation becomes queryable company memory, answerable right in the chat. Ingests: message.
Permissions: ACL = 'whatsapp-group:<groupId>' per group (fail-closed). In-chat answers use the group's own knowledge + PUBLIC unless you widen 'principals'. · provider docs ↗
→ Connect it on the Connectors page (— + answer with access of).
Ask the brain from Slack: /vitrus <question> → a sourced answer + the yellow gap-box, right in the channel. Ingests: question (outbound answer — nothing is stored).
Permissions: Fail-closed: answers with the 'principals' above (default PUBLIC). Private-channel knowledge never leaks unless you add its group. · provider docs ↗
→ Connect it on the Connectors page (— + slack workspace (team) id, answer with access of).
Channel messages → batched conversation nodes; authors auto-linked to people. Ingests: message.
Permissions: ACL = 'discord:workspace' group (channel membership not mapped yet → fail-closed). · provider docs ↗
→ Connect it on the Connectors page (bot token + channel id).
Channel messages and meeting notes across your teams. Ingests: message.
Permissions: Graph scopes; channel membership. · provider docs ↗
→ Connect it on the Connectors page (graph token + team id).
Repo issues, PRs & discussions → typed nodes, authors auto-linked to people. Ingests: issue/PR.
Permissions: ACL from repo visibility — private repo → 'github:<repo>' group (fail-closed). Multiple repos: comma-separate. · Private repo? Access is captured as a fail-closed `github:<repo>` group — only members see those nodes. · provider docs ↗
→ Connect it on the Connectors page (personal access token + repository (one or more)).
Issues & MRs → nodes (GitHub connector parity); authors auto-linked to people. Ingests: issue/MR.
Permissions: ACL = 'gitlab:workspace' group (project visibility not mapped yet → fail-closed). · provider docs ↗
→ Connect it on the Connectors page (access token + project).
Workspace pages → markdown nodes (headings, lists, todos preserved). Ingests: page.
Permissions: ACL = 'notion:workspace' group (per-page sharing not exposed by API → fail-closed). · provider docs ↗
→ Connect it on the Connectors page (integration token + database).
Google Docs & text files → markdown nodes; owners auto-linked to people. Ingests: document.
Permissions: ACL = 'drive:workspace' group (Drive sharing not mapped yet → fail-closed). · Tokens expire — for production use a refresh-token flow; the vault stores whatever you provide encrypted (AES-256-GCM). · provider docs ↗
→ Connect it on the Connectors page (oauth token + folder id).
Spaces & pages → text nodes; authors auto-linked to people. Ingests: page.
Permissions: ACL = 'confluence:workspace' group (page restrictions not mapped → fail-closed). · provider docs ↗
→ Connect it on the Connectors page (api token + site, account email, space key).
Shared files and folders as searchable documents. Ingests: file.
Permissions: Shared-folder membership. · provider docs ↗
→ Connect it on the Connectors page (access token + folder).
Issues (title, description, state) → nodes; assignees auto-linked to people. Ingests: issue.
Permissions: ACL = 'linear:workspace' group (per-issue sharing not exposed → fail-closed). · provider docs ↗
→ Connect it on the Connectors page (api key + team).
Issues via REST → nodes; assignees auto-linked to people. Ingests: issue.
Permissions: ACL = 'jira:workspace' group (per-issue security not exposed → fail-closed). · provider docs ↗
→ Connect it on the Connectors page (api token + site, account email, project key).
Projects and tasks with assignees, due dates and notes. Ingests: task.
Permissions: Workspace membership. · provider docs ↗
→ Connect it on the Connectors page (personal access token + workspace).
Messages → nodes; participants (from/to/cc) become the ACL + linked people. Ingests: message.
Permissions: Fail-closed: only participants of a thread can see it (public:true → org-wide). · Participants (from/to/cc) become the ACL: only people on a thread can see it.
→ Connect it on the Connectors page (imap / api token + mailbox).
Events → nodes; attendees linked to people, time captured for bi-temporal queries. Ingests: event.
Permissions: Attendees → ACL; event time → capturedAt (temporal gap detection).
→ Connect it on the Connectors page (calendar api token + calendar).
Meeting recordings and transcripts as records. Ingests: meeting.
Permissions: Account scopes; recording read. · provider docs ↗
→ Connect it on the Connectors page (oauth access token).
Contacts, companies and deals from your CRM pipeline. Ingests: contact/deal.
Permissions: Per-app CRM read scopes. · provider docs ↗
→ Connect it on the Connectors page (private app token).
Accounts, opportunities and cases from Salesforce objects. Ingests: account/opportunity.
Permissions: Connected-app scopes; object read. · provider docs ↗
→ Connect it on the Connectors page (oauth access token + instance url).
Customers, subscriptions and payment events as searchable records. Ingests: customer/charge.
Permissions: Account-scoped; restricted read keys recommended. · provider docs ↗
→ Connect it on the Connectors page (secret key).
Files, frames and comments from design projects. Ingests: file/comment.
Permissions: Team membership. · provider docs ↗
→ Connect it on the Connectors page (personal access token + team id).
Bridge ANY MCP server as a source — short-circuit the connector race (Glean has 100+). Ingests: resource.
Permissions: ACL = 'mcp:workspace' group (upstream ACL not mapped → fail-closed). · This short-circuits the connector race: anything with an MCP server can become a source. · provider docs ↗
→ Connect it on the Connectors page (server token + mcp server url).
23 connectors today. Missing one? Tell us — or bridge it yourself via the MCP connector above.
One question in, four things out — and every claim traceable.
The same engine, four lenses — nothing is a black box.
Your agents read the same brain your team does — org-scoped, ACL-filtered, audited.
Every workspace has an MCP endpoint: https://api.vitrus.dev/t/<org>/mcp. The Agent access page gives copy-paste setup for Claude Code, Codex, Cursor, OpenClaw, Hermes and raw HTTP — your token carries your identity, so an agent sees exactly what you see, never more.
claude mcp add --transport http vitrus \
https://api.vitrus.dev/t/<org>/mcp \
--header "Authorization: Bearer <token>"Exposed tools: think · search · verify · gap_report · node · skill_export. Rotate the token by signing out.
Fail-closed by construction: if the source restricted it, the brain restricts it.
Transparent pricing, no data hostage.
vitrus import on your own machine — the open-source core (Apache-2.0) is the same engine.