Security

Where the document goes, and where it doesn't

Redtrail is built so that the document stays in your SharePoint, the relay between your agent and your Word session keeps nothing, and the optional change history is encrypted under a key you can hold yourself. This page is the plain statement of that architecture, written for the person who has to approve it.

Data flow

Redtrail data-flow diagram: add-in, reflector, MCP clients, SharePoint and history store Word add-in runs in the user's Word session Entra ID sign-in (NAA) Reflector content-blind · zero retention routes on envelope headers only MCP client OAuth 2.1 grant = one named device processes content in plaintext SharePoint only full copies of the document History store (opt-in) encrypted events · no snapshots WebSocket, TLS 1.3 Streamable HTTP MCP, TLS 1.3 Graph, user's own token events: clear metadata + encrypted content fields
  1. The add-in runs inside the user's Word session on Windows, Mac or the web. It signs in with the user's Entra ID and talks to SharePoint with the user's own token, exactly as Word does. It executes the agent's operations locally through Office.js.
  2. The reflector is a stateless relay. It binds the OAuth grant of an MCP client to that user's open Word sessions and routes tool calls between them. Every tool payload crosses it inside an opaque envelope; the reflector reads the envelope's routing headers (document id, tool name, call id, mode) and nothing else. It never calls Graph and never touches SharePoint.
  3. The MCP client (Claude Code, Claude.ai, Cowork, Cursor, Copilot Studio and others) is where the model runs. Those platforms process document text in plaintext by design; that is the nature of the agent you chose, not something Redtrail adds or can remove, except in end-to-end mode.
  4. The history store is opt-in. It receives one event per agent operation. Identifiers, timestamps, anchors and hashes are stored in the clear so the log can be searched; the text fields (what was expected, what was there before, what was written, and the instruction) are encrypted under a per-tenant key, or under a key held in your own Azure Key Vault.

What we store, and what we never store

Stored

  • Tenant id, user principal name, named agent devices and their OAuth grants
  • Session metadata: document id, SharePoint site/drive/item ids, version pointers, timestamps
  • Audit rows: operation type, anchor structure, hash chain, outcome (no content)
  • History events, with content fields encrypted (opt-in)
  • Tenant policy: allowlists, seat groups, retention, region, kill-switch state

Never stored

  • Document snapshots or files. SharePoint versions are the only full copies.
  • Tool payloads passing through the reflector, in logs or otherwise
  • Plaintext of history content fields, on any tier
  • SharePoint access tokens: the add-in uses them; the reflector never receives them
  • A staff-accessible path to decrypt customer-held-key history

Privacy tiers

AgentPathContent visible to the reflector
Claude Code, Cursor, Cowork with the local pluginEnd-to-end mode (v1.1, on request)No
Claude.ai, mobile, Cowork via remote connectorOAuth grantYes, in transit only. Zero retention.
Copilot Studio, Power Automate, other cloud agentsOAuth grantYes, in transit only. Zero retention.
v1 ships the standard path: TLS everywhere, a stateless reflector, no payload logging, signed audit metadata. We state plainly that agent platforms process content in plaintext by design and that our relay never stores it. The hosted service is fronted by Cloudflare, which terminates TLS at its edge before re-encrypting to the reflector; end-to-end mode and self-hosting are the options for tenants who want no third party in the content path.

Identity and permissions

History store controls

End-to-end mode

For agents that run on the user's machine (Claude Code, Cursor, Claude Desktop and Cowork through a local plugin), a v1.1 option keeps the reflector from ever seeing plaintext. The add-in shows a short pairing code; the user gives it to the agent; the two sides run a password-authenticated key exchange through the reflector and derive fresh session keys, held in memory only and rebuilt on every document load. The pairing code is never used as the key itself, so an observer holding ciphertext gains nothing from guessing it. Every envelope in both directions is then authenticated encryption that the reflector only forwards.

The envelope format is the same in both modes, so end-to-end is an add-on to the shipped relay, not a different product.

Operational security

Reporting a vulnerability

Please write to [email protected] with "Security report" in the subject. We acknowledge within two business days and keep you informed until the issue is resolved. We do not pursue good-faith researchers.