Skip to content
Omnido

Omnido Privacy Policy

This policy covers the Omnido app: the web app at omnido.saschahenning.de, the Mac app and the app for iPhone and iPad. All three use the same account and the same server. Visits to this website are covered by the general privacy policy.

Omnido needs an account. Your tasks, captures and attachments are stored on a server so you can see them on every device. For AI suggestions, the server sends content to AI models. Microsoft 365, MCP servers and AI assistants are only involved if you connect them yourself.

Controller

Sascha Henning
Dresdner Landstr. 11
01744 Dippoldiswalde
Germany

E-mail: sascha@saschahenning.de

Account and sign-in

For your account, Omnido stores your e-mail address, language, time zone, appearance and settings such as reminders and archive, plus the time you registered and your last activity. While registration is invite-only, Omnido also stores the invite with the invited address; an invite is valid for 14 days.

There are no passwords. You sign in with a passkey or with a six-digit sign-in code that Omnido sends by e-mail.

  • Passkey: Omnido stores the public key, the passkey’s name and technical details such as device type and last use. Omnido never receives fingerprints or face data.
  • Sign-in code: Omnido stores the code only as a check value, together with your address and the IP address of the request. The code is valid for 10 minutes; Omnido deletes the entry one day after it expires. Omnido counts failed attempts per address and day and deletes the counters the next day.
  • Session: After signing in, you stay signed in for 30 days from your last use, at most 90 days. Omnido stores the start, last activity and expiry. Under Settings → Account you can see your sessions and end all others.

To slow down attacks, Omnido limits requests per IP address. These counters exist only in the server’s memory.

Omnido sends the e-mail with the code through Azure Communication Services, Microsoft’s e-mail service, as plain text with link tracking switched off. Microsoft receives your e-mail address and the text of the message for this. The sender is noreply@omnido.saschahenning.de.

The legal basis is Art. 6(1)(b) GDPR: without an account I cannot provide Omnido to you. Limiting requests per IP address is based on Art. 6(1)(f) GDPR, my legitimate interest in protecting sign-in from attacks.

Your content

The server stores what you create in Omnido:

  • tasks with all the details you enter
  • captures with selected and typed text
  • sources: kind, app, window title, address, an excerpt of up to 4 KB and identifiers such as a message ID
  • attachments: photos and PDFs, including the text read from them
  • categories and your “About me” text
  • the AI suggestions and what you finally chose
  • the context memory: which senders, channels or repositories belong to which category

Omnido keeps each account’s data separate; other accounts cannot reach it. The admin view shows me, per account, the address, status, timestamps, the number of entries and AI usage, but no content.

Omnido deletes on its own as follows:

  • A capture you do not accept moves to the Trash after 7 days.
  • Omnido permanently deletes Trash entries after 30 days, together with their attachments, sources and suggestions.
  • Done and dropped tasks move to the Trash after the period you choose under “Delete done tasks after”: 3, 6 or 12 months, or never. The default is 6 months.

The legal basis is Art. 6(1)(b) GDPR.

Server and backups

Omnido’s server runs on Oracle Cloud Infrastructure (OCI). The database, attachments and backups are stored there.

All connections to omnido.saschahenning.de go through Cloudflare, including those of the apps. Cloudflare receives the requests and passes them to the server through a tunnel. In doing so, Cloudflare processes the same technical access data as when you visit this website; the section “Hosting and server logs” of the general privacy policy applies. Cloudflare adds its own bot detection script to the pages of the web app.

The server writes a technical log of operations and errors so I can find faults.

Every night at 03:15 and before every new version, the server backs up the database and attachments. It deletes these backups after 14 days. An OpenPGP-encrypted copy of each backup is kept in storage at Oracle (OCI Object Storage) and deleted 35 days after upload. The decryption key is not on the server.

I need the server to provide Omnido to you (Art. 6(1)(b) GDPR). Cloudflare, the log and the backups are based on Art. 6(1)(f) GDPR, my legitimate interest in secure operation that can restore your data after a failure.

AI suggestions

From a capture, Omnido prepares a task: title, description, date, category, priority, next step and people involved. For this, the server sends content to its own AI proxy (LiteLLM), which I run on the same server at Oracle Cloud Infrastructure. The proxy stores no content, only the model, tokens and cost of each request. It forwards the content to OpenRouter (OpenRouter, Inc., USA), and OpenRouter to a provider that runs the model in question:

  • GPT-6 Luna by OpenAI writes the suggestion. OpenRouter runs the model at OpenAI (OpenAI, L.L.C., USA), at Microsoft Azure (Microsoft Corporation, USA) or at Amazon Bedrock (Amazon Web Services, Inc., USA). The model receives the capture text (up to 8,000 characters), the source details (kind, app, window title, address, sender), the names of your categories, date and time zone, up to 50 names of people from your earlier tasks and, if you have written one, your “About me” text. With the full analysis, up to 5 similar earlier tasks from the last 12 months are added, done and dropped ones too, with title, status, priority, category, date and repeat, without the description. The server first reads attachments itself with text recognition: pages with readable text go to the model as text, the others as an image or PDF. These requests include your internal user ID, not your e-mail address.
  • The same model compares the capture with up to three similar open tasks (title and description) to detect duplicates.
  • Jev by TypeSafe classifies: area, category, priority, next step and effort. OpenRouter runs Jev at TypeSafe. Jev receives the capture text, including the text read from attachments, the source details, the names of your areas and matching categories, and the same similar earlier tasks without the description. Jev does not receive your “About me” text.

If OpenRouter does not answer, the proxy sends the requests for GPT-6 Luna to GPT-5.6 Luna in Azure OpenAI instead, run by Microsoft in the EU data zone (Microsoft Ireland Operations Limited, Ireland). If that fails too, the request of the full analysis goes through OpenRouter to Gemini 3.8 Flash by Google (Google LLC, USA). Jev has no fallback.

Omnido stores the suggestions with the capture and counts your AI analyses and the tokens used per month. You review every suggestion before a capture becomes a task. If no model answers, Omnido takes the title from the subject, the first sentence or the file name.

When you accept a capture or merge it into a task, Omnido learns from it, for example when you corrected dictated text or changed the suggested category. For this the server sends the dictated text, the suggestions and the saved title and description the same way to GPT-6 Luna. Omnido stores per account, under “Learned”, corrections (misheard → meant), the language you dictate in and terms. Only you and the AI analysis see them. You can forget single entries, or remove everything with “Forget everything”.

Only capture content you are allowed to have processed this way. The legal basis is Art. 6(1)(b) GDPR: the suggestions are part of the feature you use.

Connection to Microsoft 365

Under Settings → Connections you can connect a work or school account or a personal Microsoft account. You sign in at Microsoft. Omnido then stores the access tokens encrypted, along with the account name, display name and account type.

Omnido requests these permissions: profile and e-mail address, access without signing in again, read and write calendars, read mailbox settings, read e-mail, read and write tasks; for work or school accounts also read chats and channel messages. Omnido uses them as follows:

  • Find the source: If a capture comes from Outlook or Teams, Omnido searches for the message with up to six words from the selected text or up to eight words from the subject. From the match, Omnido stores the link and identifiers of the message.
  • Possible source: If a capture without a source names a message from a person (“mail from Ms Miller”), Omnido searches for that person’s messages from the last 7 days or from the named day. It offers up to three of them with sender, time and an excerpt of up to 280 characters and stores them with the capture. Only what you select is added as a source.
  • Outlook events: If “Add appointments to Outlook” is on, Omnido creates an event in your Outlook calendar for an appointment, with title, description, a link to the task, start and end, and syncs changes in both directions.
  • Busy times: When you plan an appointment, Omnido reads that day’s events from your connected calendars and shows overlaps. Omnido does not store these events.

Omnido currently neither reads nor writes mailbox settings or Microsoft To Do tasks. “Disconnect” deletes the stored tokens of that account. The legal basis is Art. 6(1)(b) GDPR.

MCP servers

Under Settings → Connections → MCP servers you can connect Omnido to a system that offers an MCP server, such as GitHub, Linear or a CRM. You enter the address and, if needed, a key; Omnido stores the key encrypted. Omnido only reads there.

  • Setup: Omnido reads the server’s list of tools. Names, descriptions and schemas go through the AI proxy to GPT-6 Luna, which proposes a tool plan. To try it out, Omnido calls individual read tools once, among others with your e-mail address and its domain. If an answer cannot be read directly, a shortened extract of up to 4 KB goes to the model.
  • With every capture: Omnido asks your connected servers for matching items: with an identifier or link from the capture, with repository and branch, with the sender’s e-mail address and domain, or with distinctive words from the text. Omnido keeps matches in memory for at most 30 minutes. An item is only stored as a source when you choose “Link”. If a server finds the sender’s company, Omnido stores its name with the capture so the context memory can learn it.

You decide which MCP servers you connect and who runs them. “Disconnect” deletes the key and tool plan. The legal basis is Art. 6(1)(b) GDPR.

AI assistants with access to Omnido

Under Settings → Access tokens you can give an AI client such as Claude Code access to your tasks over MCP, with the right “Read only” or “Read and write”. A token with the right “Capture only” is for the iPhone Shortcut that turns shared content into a capture. With an AI share, you give an assistant such as claude.ai or ChatGPT exactly one task for at most 24 hours. For this, the assistant connects as a connected assistant after you consent; that connection ends 30 days after its last use.

Omnido stores tokens only as a check value. Omnido logs write access over MCP in your account; the task shows changes made through an AI share under “Changes by AI”. You revoke tokens and disconnect assistants under Settings → Access tokens. What an assistant reads from Omnido is processed by its provider under that provider’s own terms. The legal basis is Art. 6(1)(b) GDPR.

Website and app icons

So that a source can show the icon of its website, the Omnido server loads that icon from the website. The website sees the Omnido server, not your device. Omnido stores an icon per account for 30 days and the result “nothing found” for one day. For Mac apps without a website, the Mac app sends the app’s icon (64 × 64 pixels) to the server. The legal basis is Art. 6(1)(b) GDPR.

Notifications

You switch on notifications per device under Settings → Notifications. They contain the title of a task or the number of tasks due today, never the description.

  • Browser: The message goes through the push service of your browser’s maker (Google, Mozilla, Apple or Microsoft). Omnido encrypts its content for your browser. Omnido stores your browser’s subscription, at most 10 per account, and deletes it as soon as your account has no session left.
  • iPhone and iPad: The message goes through the Apple Push Notification service. Apple receives your app’s device token and the title and text of the notification. Omnido stores the token with your session and deletes it when you sign out.
  • Mac app: It asks the server for reminders every minute and shows them as macOS notifications, without a push service.

The legal basis is Art. 6(1)(b) GDPR.

Mac app

With the shortcut ⌃⇧Space, the Mac app reads what you have just selected, plus the app, window title and, for browsers, the page address; for terminals, the folder plus repository and branch. For this it needs the macOS Accessibility permission. With a selection, the app creates the capture on the server right away.

Without a selection, the app takes an image from the clipboard if you copied it in the last 2 minutes. “Capture Window …” takes a screenshot of the window you choose, using the Screen Recording permission. Images only go to the server when you send the capture with “Next”.

The app checks GitHub, where the versions are published, for updates 10 seconds after starting and every 6 hours after that. GitHub sees your IP address when it does. The legal basis is Art. 6(1)(b) GDPR.

App for iPhone and iPad

You get the app from Apple, through the App Store. What Apple processes in the process is governed by Apple’s privacy policy.

  • Sign-in: The app stores your session as a device token in the iOS Keychain. The share extension, the due widget and “Capture task” for Siri and Shortcuts use the same token.
  • Sharing and Siri: What you share with Omnido or capture with Siri first goes into a queue on the device, then to the server.
  • Due widget: Every 15 minutes it fetches the number and titles of tasks that are due.
  • Camera: for “Scan letter” and photos. Every scanned page becomes an attachment.
  • Microphone and speech recognition: for “Dictate”. Omnido uses Apple’s speech recognition and requires on-device recognition where iOS offers it; otherwise recognition may run on Apple’s servers. Omnido only receives the recognised text, no audio recording. The words from “Learned” go to Apple’s speech recognition as hints, and, when the device cannot recognise speech itself, together with the audio to Apple.

The legal basis is Art. 6(1)(b) GDPR.

Storage on your device

For Omnido to work, it stores on your device:

  • in the browser and in the Mac app: the session cookie omnido_session; in localStorage the language, colour scheme, accent colour and last chosen view; in IndexedDB captures still waiting for a connection, with their attachments;
  • in the Mac app also its settings and a queue for captures made without a connection; it stores its cookies encrypted with a key from the macOS Keychain;
  • on iPhone and iPad: the device token in the Keychain, the queue of shared content and, for the due widget, the last count and the titles of tasks that are due; also a copy of the learned words and the dictation language.

So that Omnido opens fast and works offline, the app keeps a copy of your settings, all active tasks (Inbox, Open, Waiting) with their sources, attachment names and write-backs, the task lists and tasks you opened, your captures and categories on the device. The files of attachments are not part of the copy. The copy has no time limit, stays on the device and shows only for the same account. Signing out, “Sign in again” and “Delete account” delete it.

When you sign out, the app for iPhone and iPad deletes the token, queue, widget data and the copy of the learned words; in the browser and in the Mac app, Omnido deletes waiting captures. The legal basis is § 25(2) no. 2 TDDDG: these entries are necessary for the features you use.

Error reports with GlitchTip

When a technical error occurs, Omnido sends an error report to GlitchTip, error analysis software. Reports come from the server, the web app, the Mac app and the app for iPhone and iPad. A report contains the error message, the technical sequence leading up to it, the version and the surface (server, web, Mac or iOS). Reports from the apps may contain technical details about the browser and device; reports from the server contain the method and path of the request.

The apps do not send user details, cookies, request bodies or parameters from addresses; Omnido masks an e-mail address in an invite link. Omnido does not report expected answers such as an expired session.

The legal basis is Art. 6(1)(f) GDPR, my legitimate interest in finding and fixing errors.

Usage statistics with Umami

To see which features are used, Omnido counts page views and actions with Umami, on the same self-hosted instance insights.saschahenning.de as this website. How Umami works there is described in the section “Audience measurement with Umami” of the general privacy policy.

Instead of a page’s address, Omnido only reports its pattern, such as /tasks/:id. It counts actions such as “capture created”, “accepted”, “discarded”, “status changed”, “date changed” or “connection added”. These events only carry kinds and numbers, such as the number of files, the kind of source or the new status, plus the surface (web, Mac or iOS); never titles, texts, identifiers or links. Captures made through the iPhone Shortcut or over MCP are reported by the server itself, without any details about your device. The script respects the browser’s “Do Not Track” setting.

The legal basis is Art. 6(1)(f) GDPR, my legitimate interest in knowing which features are used. You can object to the measurement at any time, informally by e-mail.

Feedback

With “Give feedback” in the settings you can report bugs and send me wishes. Only this click sends details to my feedback form at feedback.saschahenning.de: your e-mail address, so I can ask back, the Omnido version, the surface (web, Mac or iOS), the page of the app you were on, the language, details about browser and device, the window size and whether you have a subscription. The content of your tasks and captures is never included. The form shows you these details before you send.

The form runs on Cloudflare. I store your report with these details in a private space on GitHub (GitHub, Inc., USA). Telegram notifies me of a new report with the beginning of your text.

The legal basis is Art. 6(1)(f) GDPR, my legitimate interest in fixing bugs and developing Omnido according to what its users ask for.

Deleting your account

You can delete your account yourself at any time, on the web, in the Mac app and in the app for iPhone and iPad: Settings → Account → “Delete account”. You need a sign-in from the last 2 hours and confirm with your e-mail address.

Omnido then deletes right away, without the Trash, your account with its tasks, captures, attachments including their files, categories, “About me”, “Learned”, connections with their keys, access tokens, passkeys and sessions. The app for iPhone and iPad forgets its device token and the copy of the learned words; captures waiting in the browser are deleted.

What remains afterwards:

  • an entry in the admin log that an account deleted itself, with the internal ID and without the e-mail address;
  • if I invited you, the invite with your e-mail address and its entry in the admin log;
  • your data in the backups until they are deleted after 14 or 35 days (see “Server and backups”);
  • Outlook events that Omnido created in your calendar, and whatever connected MCP servers or AI assistants have already received;
  • error reports and usage statistics.

Your rights

You have the right of access (Art. 15 GDPR), rectification (Art. 16), erasure (Art. 17), restriction of processing (Art. 18), data portability (Art. 20) and the right to object to processing based on legitimate interests (Art. 21 GDPR). Please use the e-mail address above.

You may also lodge a complaint with a supervisory authority. The one responsible for me is:

Die Sächsische Datenschutzbeauftragte
Devrientstraße 5
01067 Dresden
Germany