It only reads what the user can
The assistant pulls from data the signed-in user already has access to, and nothing more.
An in-app assistant that only sees what each user may see.
Your users get a built-in assistant that answers from their own workspace data. Every answer shows its sources. And it never changes anything until the user says yes.
Product example
This is the same visual component used by the authenticated app, rendered with deterministic sample data.
Inspect the real transcript, citations, saved history, and privacy UI with fixture sources.
Inert sample data · no network access
Preview ready
Highlights
The assistant pulls from data the signed-in user already has access to, and nothing more.
Answers cite where they came from, so users can tell facts from guesses.
Any change becomes a proposal the user must approve, and it expires after 15 minutes.
Without a shared foundation, every team rebuilds these edge cases — differently.
A copilot that queries the database directly can show a user rows they were never allowed to see. One innocent question, and private data crosses the line. Here, retrieval runs through the same permission checks as the rest of the app.
Answers with no sources look like guesses. One wrong answer and your users write off the whole feature. Here, every answer cites exactly where it came from.
Give a model direct write access and one hallucinated action corrupts real customer data. Here, the model can only propose. Your user approves. Then the normal, safe code path runs.
The mechanism end to end, as implemented in the repository.
The server decides who's asking
Identity and workspace come from the login session. Whatever the browser claims is ignored and never placed in prompts.
Context is gathered with permissions on
Context providers return only excerpts the user can already reach, each labeled as a source the answer must cite.
Answers stream with honest states
You see streaming, complete, stopped, or failed. An interrupted answer stays visibly partial instead of pretending it finished.
Writes wait for a yes
A write becomes a saved proposal that expires in 15 minutes. Approval re-checks access, then runs the existing service, so a retry can never run it twice.
Engineering guarantees
The public demo conversation is scripted, not live. Answer quality and speed with a real provider are yours to test with your own key.
The boundary above is code, not a claim. These files carry the contract:
src/modules/ai-copilot/MODULE.mdsrc/modules/ai-copilot/policy.tssrc/registries/commands.tsThese capabilities share contracts and boundaries with this one.
The docs describe the same contracts this page demonstrates.