Security

agent-render is a static artifact viewer. Its core host boundary is simple: artifact data lives in the URL fragment, so the static host does not receive it as part of the initial page request.

What reaches the server

  • Static mode sends HTML, CSS, and JavaScript to the browser. Artifact payloads are not sent to the static host as part of the initial page request.
  • Fragment payloads stay out of the HTTP request path, query string, and request body for the static host.
  • The server can still receive normal static asset requests, IP address, user agent, referrer headers, and access logs from the hosting layer.

What can still leak

  • agent-render is zero-retention by host design. It is not a secret manager.
  • Artifact contents can still leak through copied URLs, browser history, bookmarks, screenshots, screen sharing, crash reports, extensions, referrer behavior, and future client-side analytics if someone adds them.
  • Do not put secrets, credentials, private keys, production tokens, or regulated data in artifact links.

Markdown and Mermaid

  • Markdown artifacts are rendered as GitHub-flavored Markdown and passed through rehype-sanitize before display.
  • React Markdown is configured with skipHtml, so raw HTML embedded in markdown is skipped instead of rendered.
  • Mermaid diagrams are only rendered from fenced mermaid code blocks. Mermaid runs with securityLevel: "strict" and falls back to showing source text if rendering fails.

CSP and security headers

  • The default static export does not require a runtime server. Configure Content-Security-Policy and other security headers at your static host or CDN.
  • Recommended headers include a restrictive Content-Security-Policy, Referrer-Policy, X-Content-Type-Options, Permissions-Policy, and HSTS when served over HTTPS.
  • If you loosen CSP for a custom deployment, review markdown, Mermaid, fonts, images, and script sources together before publishing.

Known limitations

  • URL fragments are client-side, but they are still visible to the browser, local machine, extensions, and anyone who receives the link.
  • Self-hosted UUID mode is a different deployment mode and stores payloads server-side by design.
  • The viewer treats payloads as untrusted input, but the safest policy is to keep sensitive material out of links entirely.

Security contact

Report security issues through the GitHub repository. Use a private vulnerability report when available; otherwise open a minimal issue asking for a private contact path and do not include exploit details in public.

Open a private GitHub security advisory