Sabretooth Team privacy policy
Effective date: 2026-10-28
Who this is for
Sabretooth Team is a personal app made by Anamelie (“I”, “me”). Its bots run in Sabrechat, my own chat app. I am the app’s only user, and it works only with my own Google account. It is not offered to the public, and no one else can sign in to it.
This policy explains what the app does with data from my Google account.
What each bot does with Google data
Only three bots connect to Google: Shura, Basilisk, and Merdi. Each one has its own connection, and each one asks only for the access it needs.
Shura: Google Calendar (calendar.events)
- Shura finds possible events in sources I give her: posts I share with her, RSS feeds, Discord channels, and emails that Basilisk hands to her.
- I review each event in Sabrechat. Shura adds an event to my calendar only when I tap one of my calendar buttons (Main, Family, or Merch). I set which calendar each button uses in her Settings.
- Shura only adds events. She does not read, change, or delete the events already in my calendar. There is one exception: if adding an event fails partway, she looks up that same event by the ID she gave it, so she doesn’t add it twice.
- She doesn’t send invitations to anyone.
- The event she adds has a title, time, location, and description, plus a link to its source and her own reference number.
Basilisk: Gmail, read only (gmail.readonly)
- Basilisk checks my Gmail on a schedule I set (every 5 minutes by default) for messages from the senders I list in his Settings. He ignores all other mail.
- For each matching message he reads the sender, the subject, the date and time, the names of any attachments, the text (up to 20,000 characters), and up to 4 image attachments.
- He posts an alert in his chat in Sabrechat and sends me a push notification.
- If an email looks like an event, he hands it to Shura: the sender, subject, date and time, Gmail link, up to 1,000 characters of the text, the event details he found, and up to 4 images.
- Basilisk can’t change, label, archive, send, trash, or delete mail.
Merdi: Gmail, modify (gmail.modify)
- Merdi uses this access only to move mail to Gmail Trash, and only after I approve it.
- When I tap Cull emails, he searches my inbox for messages that match the sender rules I set. This search returns only message IDs.
- He shows me one batch per rule, with how many messages it has. Nothing moves until I tap Move to Trash on a batch.
- After I approve a batch, he checks each message’s sender, labels, and date to make sure it still matches, then moves it to Trash.
- Merdi never deletes mail permanently, and never labels or archives it. Mail he moves stays in Gmail Trash, where I can restore it.
- He doesn’t request, read, show, or store message subjects or bodies.
Where data is stored
- Cloudflare. The bots run on Cloudflare Workers. Each bot keeps its data in its own Cloudflare Durable Object, which is a small database used only by that bot.
- Google sign-in. Each bot stores only a refresh token from Google. It is encrypted with AES-GCM, using a key derived from a secret kept on Cloudflare. The token is also tied to that one bot. The short-lived access tokens made from it are kept only in memory and are never saved.
- What each bot keeps:
- Shura: event sources and the events found in them, review choices, Google Calendar event IDs and links, and errors. For emails Basilisk handed to her, she also keeps the sender, subject, date and time, Gmail link, up to 1,000 characters of text, event details, and up to 4 images.
- Basilisk: Gmail message IDs, the sender’s name and address, subject, date and time, the AI summary and event details, and progress records. His chat keeps each alert: subject, sender, time, attachment names, summary, Gmail link, and up to 2,700 characters of the email’s text. His own database doesn’t keep the full email text or any images.
- Merdi: his sender rules, Gmail message IDs, batch results, and short error messages.
- Logs. Cloudflare keeps the app’s logs for a limited time. Logs can include Gmail message IDs, image file names, and error messages.
- Earlier records. These bots used to run as an earlier version of this app. When I moved them over, I copied their records into the new version. The copy is kept in export files on my own computer and with the app’s source code on GitHub.
What is sent to an AI model
- Basilisk sends each matching email to an AI model to summarize it and check whether it is about an event. This includes the sender, subject, date and time, Gmail link, attachment names, up to 20,000 characters of the text, and a limited set of its images.
- Shura sends event sources to an AI model to pull out event details and to rate how much I’d like each event. This includes what Basilisk hands to her. She does not send the contents of my Google Calendar.
- Merdi doesn’t use an AI model.
Every model request goes through OpenRouter, and every request has these two settings:
- Zero data retention: only providers that don’t store the request may handle it.
- No data collection: only providers that don’t collect prompts may handle it.
If no provider meets both settings, the request fails. It is never sent again without them.
What appears in push notifications
Push notifications go to the Sabrechat app on my phone.
- Basilisk: one notification per matching email. It shows the subject, the sender, the AI summary, and the Gmail link.
- Shura: a notice of new events to review. It shows the titles of up to 5 events, and those titles can come from an email.
- Merdi: no email content.
- All three: a notice when Google needs to be reconnected.
Each notification is encrypted for my phone before it leaves the bot, using standard Web Push encryption (RFC 8291). It is delivered through the ntfy push service, which sees only the encrypted message. If my phone is offline, ntfy holds the message for up to 24 hours.
Sharing
- Google data from this app is never sold.
- It is never used for advertising.
- It is never used to train AI models.
- It goes only to the services named in this policy: Cloudflare (hosting, storage, and logs), OpenRouter and the model provider it chooses (Basilisk and Shura only), the ntfy push service (encrypted notifications), and GitHub (the copy of earlier records).
Google API Services User Data Policy
Sabretooth Team’s use and transfer of information received from Google APIs to any other app will adhere to the Google API Services User Data Policy, including the Limited Use requirements.
How to revoke access
There are two ways to revoke access:
- In the bot: open the bot’s Settings and tap Disconnect Google. The bot asks Google to cancel its access and deletes its stored token.
- At Google: go to myaccount.google.com/permissions and remove Sabretooth Team. The next time a bot tries to use Google, it finds that access is gone and stops. It then shows “Google needs reconnecting” and sends a notification. The bot’s encrypted token, which can no longer be used, stays stored until I tap Disconnect Google.
Revoking stops all future access to my Google account. It does not:
- remove events Shura has already added to my calendar,
- take back mail Merdi has already moved to Trash,
- delete alerts Basilisk has already posted, or
- delete the bots’ records, logs, or the copy of earlier records.
How long data is kept, and how to delete it
| Data | How long it is kept |
|---|---|
| Encrypted refresh token | Until I tap Disconnect Google |
| Access tokens | In memory only, until they expire |
| Basilisk’s alerts in his chat | 30 days. Older alerts are removed the next time a new message is posted in his chat. |
| The bots’ records, including Shura’s copies of email text and images | Until I delete them. They don’t expire on their own. |
| Push messages not yet delivered | Up to 24 hours at the push service |
| AI requests | Not kept by the model provider (zero data retention) |
| Logs | Cloudflare’s limited log period |
| Copy of earlier records | Until I delete the export files and the copy on GitHub |
The bots don’t have a delete button yet. To delete their data, I clear the bot’s stored data on Cloudflare directly.
Other bots
Sabrechat has other bots too: Mataisa, Sabretooth, Phoraya, Camellia, Xumala, Delphi, Gabrielle, Ithra, and Roupin. They don’t connect to Google and don’t use Google data.
Contact
Questions about this policy: send them through the contact form.
If this policy changes, I’ll update it on this page and change the effective date.