Skip to content

Read-only session share

The Share button in a chat’s header creates a public read-only link that anyone with the URL can open. The link uses whatever origin you used to reach your Kanna instance — https://kanna.lowbit.link, a Cloudflare tunnel, a custom domain, even http://localhost:3210 for in-network sharing — Kanna does not host the snapshot anywhere else.

How it works

  • The server projects the current event log into a frozen JSON snapshot.
  • The snapshot is stored under ~/.kanna/shares/<token>.json (file mode 0600).
  • The URL is <your-origin>/share/<token>, where <your-origin> is the scheme + host of the request that minted it. The 256-bit token is the credential.
  • Viewers see the chat transcript, tool calls, diffs, and terminal output. They cannot send messages.
  • Public reachability is a deployment concern. Kanna will happily mint a http://localhost:3210/share/<token> URL if that’s how you’re hitting the server — recipients outside your network won’t be able to open it. To make share URLs work for outside recipients, run Kanna behind a Cloudflare tunnel, deploy it to a reachable VPS, or expose a port.

Lifecycle

  • Default link lifetime is 24 hours — change it in Settings → “Default share link expiry”.
  • Click Revoke on any active link to invalidate it immediately. The snapshot file is deleted.
  • Expired links return a 410 page; the snapshot disk is reclaimed by a daily sweep.

Limits

  • 10 MB per snapshot before large bodies (diffs, terminal output) are stripped.
  • 50 MB hard cap per snapshot.
  • 1 GB total shares directory budget.

Security

  • /share/:token and /assets/share-view/* are the only unauthenticated paths.
  • The token is the credential — anyone with the URL can view. Treat it as a secret.
  • Viewers cannot mint, revoke, or interact. The composer is hidden client-side and the server does not accept any write commands from share-view requests.