Morrow Mail
Morrow Mail Privacy Policy
This policy describes released Morrow Mail v0.2.39, including how it accesses, uses, stores, and shares Google user data and content derived from it. Morrow Mail is a desktop application from Leo Ho / HWL-HK (hwl-hk.com). It caches mail locally and can send context through an optional API-key/custom endpoint or a connected ChatGPT account.
Last updated: 26 October 2026
Who we are
The operator is Leo Ho, publishing Morrow Mail under HWL-HK at hwl-hk.com. Questions about this policy: leo@hwl-hk.com.
What the app handles
The app handles connected-account identity, OAuth tokens or mailbox credentials, mail headers and message bodies, downloaded attachments, labels and folders, mailbox settings and rules, and calendar lists and events when available.
Optional AI also handles prompts, selected text, draft content, recent writing/conversation history, standing notes, writing rules, mail-derived profile facts, summaries, triage, and suggested replies. ChatGPT mode additionally handles the connected AI account’s registration, identity, and separate access/refresh tokens. Mailbox context can come from connected accounts, including Google or Microsoft Outlook; local caching does not keep that context on-device when a remote AI service is used.
Google access
Google sign-in uses an OAuth desktop client. The callback is a loopback address on your computer, http://localhost:<port>/api/oauth/google/callback, not a server operated by HWL-HK. Released v0.2.39 requests the scopes below. It does not request Google Drive, Google Contacts, or a Google profile scope.
Gmail mail connect uses the Gmail API, not IMAP or SMTP, and does not request https://mail.google.com/. Calendar scopes are requested when Calendar is connected, which may be a separate reauthorization. Google’s verification of this app is in review.
If an account was connected on an older release, Settings → Accounts may offer migrate or reauthorize onto this Gmail API path. Updating the app does not revoke an older, broader Google grant.
- openid — confirm the sign-in session.
- email (https://www.googleapis.com/auth/userinfo.email) — read the email address of the Google account you connect.
- https://www.googleapis.com/auth/gmail.modify — restricted. Gmail API access to read, send, and modify mail, including organization changes. It does not permit permanent deletion that bypasses Trash.
- https://www.googleapis.com/auth/gmail.settings.basic — restricted. Read and change basic Gmail settings, including Out of Office replies and filters.
- Calendar, when connected (this may be a separate reauthorization): https://www.googleapis.com/auth/calendar.calendarlist.readonly — list the calendars on the account.
- https://www.googleapis.com/auth/calendar.events — read, create, update, and delete calendar events for the app’s calendar features. Requested when Calendar is connected.
How Google user data is used
Google user data supports mail sync, reading and sending, labels and folders, Out of Office replies and filters, and calendar lists and events. Optional AI can also use Google mail and available calendar context for translation, writing, reply suggestions, summaries, triage, planning, profile generation/correction, and answers to questions.
HWL-HK does not sell or resell Google user data, or use it for advertising, credit decisions, or lending. The Google policy restrictions discussed below also cover summaries, profiles, history, and other content derived from Google data.
Optional AI: data and recipient
API-key/custom-endpoint mode sends requests using the configured model and key to the OpenAI-compatible service at the Base URL in Morrow Mail → AI Setup or Settings → AI. The prefilled URL is https://api.x.ai/v1. The recipient is the service operating that endpoint, including any proxy you choose. An endpoint on this computer may still forward requests; processing is local only if the endpoint and downstream processing are local.
ChatGPT mode uses a separately authenticated ChatGPT account and a model available to that account. Sign-in contacts OpenAI’s authorization service at https://auth.openai.com. Model discovery contacts https://api.openai.com/v1/models, and AI context is sent to OpenAI at https://api.openai.com/v1/responses. This path uses the ChatGPT access token, not an API key or your Google/mailbox OAuth token.
Sign-in and model discovery exchange authentication/account or model metadata. API model discovery sends the configured AI credential to that service. Test connection sends a short greeting prompt rather than mailbox context. Feature requests send the content described below to produce their AI results, even though the source mail remains cached locally.
Handling of requests depends on the recipient service, account terms, and settings. This policy does not guarantee retention periods, deletion, human-access controls, or exclusion from model training. The released ChatGPT adapter sends store:false as a request parameter; it is not verified retention or training evidence. Review the service’s conditions before sending mailbox data.
AI data by feature
Requests use text and metadata selected by the feature. They may contain the following categories:
These text AI paths do not attach downloaded attachment files or pass mailbox passwords/mail OAuth tokens to the model. Metadata can reveal that attachments exist. An AI API credential or the separate ChatGPT access token authenticates the selected AI service.
- Translation: visible message text, including quoted message history, text-node identifiers, and the target language. Long text can be split into batches.
- AI Write and reply suggestions: your instructions, selected text, draft content (which may include a signature), text around the cursor, subject, recent supplied writing history, source sender/subject/snippet or reply-source text, and Brain writing rules. Suggestions use the source subject, sender, and supplied snippet or text body.
- Brain refresh/rebuild and corrections: sent/inbox message identifiers, senders, subjects, dates, folders and snippets; previous profile, voice and identity context for refresh; category prompts/identifiers or the profile/identity fields you supply for correction.
- Catalog/custom skills and Agent triage/drafts: recent or person-scoped cached mail; message/account/folder/thread identifiers, senders, subjects, dates, snippets and read/star/attachment-presence flags; categories, writing rules, profile/identity context, standing notes, a person’s address, and skill instructions as applicable. These support summaries, filing proposals, triage, plans, and draft replies.
- Calendar-enabled skills and Agent questions: available event titles, start/end times and locations when an existing Calendar grant permits access. Agent questions can also include your question, recent inbox snippets/metadata, recent conversation turns and standing notes. Some inventory, filter and paging questions are answered locally.
Manual runs and automatic AI activity
AI uses the selected API-key/custom-endpoint configuration (including environment-provided API settings) or a connected ChatGPT account and selected model. Explicit actions include Translate, AI Write, Suggest, running a skill, Agent questions/draft requests, Refresh, Rebuild, and AI category/profile corrections. Installed skills start on demand with scheduling disabled; saving an interval or cron schedule enables scheduled runs while the app is running.
Automatic triggers include stale triage on Agent open, stale profile refresh on Brain open, Brain’s hourly profile refresh while the app is running, saved skill schedules, and reply suggestions when a reply composition opens. In API-key mode, a configured key can enable these calls without an independent background-AI permission. Pausing a skill schedule stops that schedule, not every other trigger.
ChatGPT mode has an existing per-account background preference for automatic profile refresh, automatic triage, and scheduled skills. It starts off for new ChatGPT registrations. In v0.2.39, automatic reply suggestions are not classified as background by that path, so turning off this preference does not block those suggestions. This release does not have a common per-destination AI-data consent gate across both modes.
AI drafts and filing suggestions are proposals. Sending a draft or confirming a filing proposal is separate from the model request. Waiting for those actions does not mean no context has been sent to the selected AI service.
Google policy and Limited Use
The Google Workspace API User Data and Developer Policy, including Limited Use, governs Google user data and data derived from it. It limits use to permitted user-facing purposes and transfers to permitted cases, including providing those features with user consent.
The policy prohibits using or transferring that data to create, train, or improve generalized or non-personalized AI/ML models, and prohibits advertising, resale, and credit or lending uses. Do not use Google APIs or Google user data to create or distribute AI-generated non-consensual intimate imagery (AI NCII).
Google classifies https://www.googleapis.com/auth/gmail.modify and https://www.googleapis.com/auth/gmail.settings.basic as restricted. That classification does not mean Google verification is finished. User-configured AI services apply their own retention and access terms to data sent to them.
Storage
Mail and downloaded attachments are stored in a local SQLite database, with related journal and working files. The name morrow-mail identifies the mailbox credential service; it is not the name of the mail database. The released macOS host uses Keychain for mailbox credentials, and Windows uses DPAPI-protected credential files.
API configuration, including a saved API key, is in local app data as ai.json; environment configuration can override API settings. ChatGPT registration/credential records are separate in chatgpt-credentials.enc, using the released credential store’s OS secure-storage requirement. That requirement does not describe the protection of mail or AI history. The profile is in brain.json; run history, triage and schedules in agent.json; conversation in agent-chat.json; standing notes in agent-memory.json; and custom skill definitions in custom-skills.json. These stores can contain Google-derived data.
HWL-HK does not operate a server copy of your mailbox for this app. Your mail provider retains its own account data, and a remote AI service receives the context sent to it. Local app storage does not describe that service’s storage.
Deleting mail versus clearing app data
In released v0.2.39, normal Delete/Trash actions move mail to the provider’s Trash/deleted-items folder when available, with Undo tracking. A separate batch-delete request from Trash takes a permanent-deletion path only after checking that each message is actually in Trash. Gmail uses the Gmail API for this access, not IMAP. The provider determines how deletion is applied. It is deletion from Trash, not evidence of bypassing Trash from Inbox.
Mailbox deletion affects your provider’s mail and is different from removing a local account or clearing AI-derived data. Neither moving mail to Trash nor deleting it from Trash recalls context already sent to an AI service or guarantees erasure of local histories, journals, or backups.
Retention and deletion
Local caches and AI files can survive closing, updating, and uninstalling the app. Some history lists are capped, but this is not a guaranteed time-based deletion period. A remote AI service’s retention and deletion depend on its terms and settings; removing local data does not recall earlier requests.
Disconnect the Google account (remove it) to stop that connection. The released removal path requests deletion of that account’s stored mailbox credentials and active mail-cache records. It does not clear the separate AI profile, run history, conversation, standing notes, or ChatGPT connection, and is not a guarantee of secure erasure of database files, journals, or backups. Do not assume every calendar or derived copy has been erased.
Revoking Morrow Mail in your Google Account permissions removes Google-side access. It does not delete data already stored locally or sent to an AI endpoint. Removing a local account does not delete the mail still in your provider account.
- Pause or delete saved skill schedules to stop those runs. Turn off the ChatGPT background preference for the activity it covers; it does not cover v0.2.39 automatic reply suggestions. ChatGPT sign-out stops that account’s AI requests and clears its local login tokens while retaining its registration mapping; remote session revocation is attempted and the app reports when it is unconfirmed. None of these actions erases earlier AI results or provider-side copies. Quit the app to stop running background tasks while reviewing configuration.
- Use the profile’s Forget and writing-rule deletion controls for individual saved items, and edit or clear standing notes as needed. These actions do not erase earlier AI history or provider-side copies; later analysis can derive facts again from remaining mail.
- For remaining local app files, credentials, and backups, contact leo@hwl-hk.com for removal guidance for your version and operating system. Complete cleanup instructions are still being verified. Uninstalling alone is not a confirmed complete deletion procedure, and deleting shared app data can also remove other accounts and unsent local work.
- For copies held by a configured remote AI service, use that service’s deletion controls or contact it. HWL-HK cannot promise deletion from a service it does not operate.
Sharing and other services
The app communicates with connected mail and calendar providers, including background synchronization. API-key/custom-endpoint AI sends the feature context above to the configured service; ChatGPT AI sends it to OpenAI. Either remote path can receive Google-derived content and content from other connected accounts. The app does not communicate only with Google.
This website publishes Morrow Mail’s product and legal pages. The desktop mail and AI request paths do not send mailbox content or OAuth tokens to hwl-hk.com. Sending information to the website’s separate chat or contact features is a separate action; do not put private mailbox data or credentials there.
Device and service protection
Keep the device and its signed-in accounts under your control. Mailbox credential protection differs from the storage of mail, AI configuration, profiles, and history. Do not assume that those local files are encrypted or have Keychain protection. Protect your app data and backups using your device’s controls, and review the endpoint and service settings before sending data to remote AI.
Changes and contact
This policy may be updated by posting a new version on this page. The date above is the latest version.
Contact Leo Ho / HWL-HK at leo@hwl-hk.com.