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 mode0600). - 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/:tokenand/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.