mirror of
https://github.com/sune-org/sune.git
synced 2026-10-29 04:54:51 +00:00
Reply ids, which double as the proxy's run id, are now the same base36 ms timestamp followed by a dash and 128 random bits from crypto.getRandomValues, so a run can't be found by guessing. Saved replies keep their fields and the timestamp prefix. The id is sent inside begin, resume and stop instead of the URL, and SECURITY.md now says ntfy pings carry only the timestamp half. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
12 lines
1.4 KiB
Markdown
12 lines
1.4 KiB
Markdown
# Security & Privacy
|
|
|
|
Sune is client-side. Your threads, sunes, settings, API keys, and GitHub PAT live in your browser's `localStorage` / `IndexedDB` — never on our servers. GitHub sync (if enabled) goes browser → your repo with your PAT. No accounts, no tracking.
|
|
|
|
## The Proxy
|
|
|
|
Streaming is relayed through [`us.proxy.sune.chat`](https://github.com/sune-org/us.proxy.sune.chat) so mobile generations survive screen locks. Your browser opens a WebSocket, the proxy forwards to the provider with the API key **you** supplied, and streams tokens back.
|
|
|
|
**What it doesn't do:** no prompt logging (your messages are held in memory only while the run is in progress; the generated reply stays in memory for 90 minutes after it ends so you can reconnect, and nothing is written to disk), no reading your chats, no storing keys, no third-party sharing.
|
|
|
|
**What I see:** an [ntfy](https://ntfy.sh) ping when a run ends/fails, containing only: the run's start time (the timestamp half of its ID, not the secret half), `[provider/model]`, duration, error message (if any), and the sune's non-empty generation settings (temperature, top_p, top_k, frequency/repetition penalty, min_p, top_a, max tokens, reasoning effort, show thoughts, image output/aspect ratio/size). No prompts (system or master prompts included), no responses, no IP, no key. Source is public — audit it [here](https://github.com/sune-org/us.proxy.sune.chat).
|