The gap
microsoft-365 and google-workspace both request send-mail scopes at connect time, but no installed agent exposes a command that sends mail. The consent is provisioned and then unusable.
Verified by execution (aware 0.132.0)
$ aware search mail
'mail' — 4 matches across 2 agent(s):
bluebeam-v1 (2):
projects-api-invite-project → Invite user to project by email
sessions-api-invite-session → Invite user to Studio Session by email
rhino-7 (2):
field-dictionary-set-tag → ... THIS IS NOW OBSOLETE ...
field-dictionary-try-get-tag → ... THIS IS NOW OBSOLETE ...
aware search email returns the same four. Neither is a mail-send command: the Bluebeam pair invite a user to a Bluebeam project/session, and the Rhino pair are unrelated (and obsolete).
But the consent is already there
cli/src/auth/config.rs requests these by default:
microsoft-365 → Mail.Read, Mail.Send (plus Calendars, Teams, Files, Sites, Tasks)
google-workspace → gmail.readonly, gmail.send (plus Drive, Sheets, Calendar, Slides, Forms, Tasks)
The comment above the M365 block describes these as "Delegated scopes covering the curated command surface (drive/excel, SharePoint lists, mail, calendar, Teams, Planner)" — so mail is intended, but the command surface for it does not exist.
And the credential status is already reportable:
$ aware connect --list --json
[ { "integration": "microsoft-365", "status": "missing", "flows": ["device-code"], ... },
{ "integration": "google-workspace", "status": "missing", ... } ]
Observed vs expected
Observed: a user connects Microsoft 365, grants Mail.Send, and there is no way for an app or workflow to send a message.
Expected: a curated send command on both integrations — enough to send a plain-text or HTML body to named recipients, with optional attachments, e.g. microsoft-365 mail-send-message / google-workspace gmail-send-message.
Why it matters downstream
floless.app is building RFI records (pawellisowski/floless.app#1090). An RFI is a question addressed to somebody — the EOR, a fabricator — so sending it is the natural next step, from the user's own connected mailbox rather than a service address. The credential check (aware connect --list --json) and the consent are both in place; only the verb is missing, so the app has to fall back to "compose the body and let the user paste it into their own mail client".
Requesting a scope at connect time that nothing can use is also a consent smell: users grant Mail.Send for a capability that does not exist.
Scope note
Attachments matter for this use case (an RFI often carries the sheet extract), but a body-and-recipients send would already be useful on its own.
The gap
microsoft-365andgoogle-workspaceboth request send-mail scopes at connect time, but no installed agent exposes a command that sends mail. The consent is provisioned and then unusable.Verified by execution (aware 0.132.0)
aware search emailreturns the same four. Neither is a mail-send command: the Bluebeam pair invite a user to a Bluebeam project/session, and the Rhino pair are unrelated (and obsolete).But the consent is already there
cli/src/auth/config.rsrequests these by default:microsoft-365→Mail.Read,Mail.Send(plus Calendars, Teams, Files, Sites, Tasks)google-workspace→gmail.readonly,gmail.send(plus Drive, Sheets, Calendar, Slides, Forms, Tasks)The comment above the M365 block describes these as "Delegated scopes covering the curated command surface (drive/excel, SharePoint lists, mail, calendar, Teams, Planner)" — so mail is intended, but the command surface for it does not exist.
And the credential status is already reportable:
Observed vs expected
Observed: a user connects Microsoft 365, grants
Mail.Send, and there is no way for an app or workflow to send a message.Expected: a curated send command on both integrations — enough to send a plain-text or HTML body to named recipients, with optional attachments, e.g.
microsoft-365 mail-send-message/google-workspace gmail-send-message.Why it matters downstream
floless.app is building RFI records (pawellisowski/floless.app#1090). An RFI is a question addressed to somebody — the EOR, a fabricator — so sending it is the natural next step, from the user's own connected mailbox rather than a service address. The credential check (
aware connect --list --json) and the consent are both in place; only the verb is missing, so the app has to fall back to "compose the body and let the user paste it into their own mail client".Requesting a scope at connect time that nothing can use is also a consent smell: users grant
Mail.Sendfor a capability that does not exist.Scope note
Attachments matter for this use case (an RFI often carries the sheet extract), but a body-and-recipients send would already be useful on its own.