← Commit history

Update 1 file(s)

John Lauer ·fe005289a4 ·1mo ago ·parent 648ed56
1 file changed +56
SKILL.md+56
@@ -161,6 +161,62 @@ non-adom.inc accounts at consent. Two options to surface to them:    Chat-app configuration (name/avatar/description) in the Cloud console's Chat API →    Configuration tab, or `spaces.*` calls 404 with "Chat app not found". +## ⭐ READ EMAIL WITH THIS, NEVER WITH A BROWSER++**Default posture: if a task needs the user's mail, reach for `adom-google` first and SUGGEST+setting it up if it is not configured.** Driving Gmail in pup or the native browser to read a+message is slow, fragile, foregrounds windows, and is completely unnecessary. Caught live+2026-09-01: an agent drove a whole Gmail session in the user's real Chrome to find one+invitation link that `adom-google` returned in a single call.++**Check first, every time:**++```bash+adom-google accounts        # which identities are already authorized (work AND personal)+adom-google status          # scopes on the default account+```++If the identity you need is missing, SAY SO and offer the one-time+`adom-google --account <name> auth` (one consent, long-lived token). Do not silently fall back+to a browser.++### Searching and reading full messages (the `gmail` subcommand does NOT do this)++`adom-google gmail` only covers attachments/.ics. For search and message bodies, use the `api`+passthrough - it is the whole Gmail REST API, signed:++```bash+# whose mailbox is this?+adom-google --account personal api gmail.googleapis.com/gmail/v1/users/me/profile++# search (full Gmail query syntax: from:, subject:, newer_than:, has:attachment, ...)+adom-google --account personal api gmail.googleapis.com/gmail/v1/users/me/messages \+    -q 'q=from:library.io' -q 'maxResults=5'++# the whole message; body parts are base64url in payload.parts[].body.data+adom-google --account personal api gmail.googleapis.com/gmail/v1/users/me/messages/<id> \+    -q 'format=full'+```++Decode a body and pull links out of it in one step:++```python+import base64, json, re+def bodies(p, out):+    if p.get("body", {}).get("data"):+        out.append(base64.urlsafe_b64decode(p["body"]["data"]).decode("utf8", "replace"))+    for c in p.get("parts") or []:+        bodies(c, out)+```++### Multiple identities++`--account <name>` selects the identity; the default (unnamed) account is usually work. A+personal gmail.com address typically needs its own account entry. **Match the account to the+task**: mail sent to a personal address is not in the work mailbox, and vice versa. This is the+clean way to act for a second identity, and it is the ONLY way when pup has no browser session+for that account.+ ## Commands  ```bash