{"skill":{"slug":"gmail-local","displayName":"Gmail Local","summary":"Local Gmail IMAP/SMTP access using a Google App Password. Use when the user wants to search, read, or send Gmail without routing mail through Maton or any th...","description":"---\nname: gmail-local\ndescription: Local Gmail IMAP/SMTP access using a Google App Password. Use when the user wants to search, read, or send Gmail without routing mail through Maton or any third-party proxy. Requires GMAIL_ADDRESS and GMAIL_APP_PASSWORD_FILE. All writes/sends require explicit user approval and --confirm-send.\nversion: 1.0.0\nmetadata:\n  openclaw:\n    emoji: 📬\n    requires:\n      env:\n        - GMAIL_ADDRESS\n        - GMAIL_APP_PASSWORD_FILE\n      bins:\n        - python3\n    primaryEnv: GMAIL_APP_PASSWORD_FILE\n    envVars:\n      - name: GMAIL_ADDRESS\n        required: true\n        description: Full Gmail address used for IMAP and SMTP login.\n      - name: GMAIL_APP_PASSWORD_FILE\n        required: true\n        description: Local 0600 file containing the Google App Password.\n---\n\n# Gmail Local\n\nUse direct Gmail IMAP/SMTP with a Google App Password. This skill does not use\nMaton or any third-party proxy.\n\n## Trust Boundary\n\n- Mail goes directly between this host and Google Gmail servers:\n  - IMAP: `imap.gmail.com:993`\n  - SMTP: `smtp.gmail.com:465`\n  These endpoints are fixed in the helper and are not configurable by\n  environment variable.\n- Credentials stay local and must be provided through:\n  - `GMAIL_ADDRESS`\n  - `GMAIL_APP_PASSWORD_FILE`\n- Never print, log, commit, or echo the app password. Do not pass it directly\n  as an environment variable.\n- App Passwords require Google 2-Step Verification and may be unavailable for\n  some accounts, Workspace policies, or Advanced Protection accounts.\n- IMAP must be enabled in Gmail settings.\n\n## Commands\n\nThe local helper is under this skill folder:\n\n```bash\nscripts/gmail_local.py\n```\n\nList recent Inbox messages:\n\n```bash\npython3 scripts/gmail_local.py list --limit 10\n```\n\nSearch with an IMAP query:\n\n```bash\npython3 scripts/gmail_local.py search --query 'UNSEEN'\npython3 scripts/gmail_local.py search --query 'FROM \"person@example.com\"'\n```\n\nRead a message by UID:\n\n```bash\npython3 scripts/gmail_local.py read --uid 12345\n```\n\nSend mail only after explicit approval:\n\n```bash\npython3 scripts/gmail_local.py send \\\n  --to person@example.com \\\n  --subject \"Subject\" \\\n  --body \"Message body\" \\\n  --confirm-send\n```\n\n## Safety Rules\n\n- Before `send`, show `to`, `cc`, `bcc`, `subject`, and a body preview, then get\n  explicit user approval.\n- The helper refuses to send unless `--confirm-send` is provided after that\n  approval.\n- Do not use this skill to mass-mail, spam, scrape contacts, or send sensitive\n  data without confirmation.\n- Prefer read-only commands (`list`, `search`, `read`) unless the user clearly\n  asks to send.\n- If an authentication error occurs, do not retry repeatedly; ask the user to\n  check IMAP settings and rotate the App Password if needed.\n\n## Setup\n\nCreate a Google App Password at:\n\n```text\nhttps://myaccount.google.com/apppasswords\n```\n\nStore it in a local `0600` file:\n\n```bash\ninstall -m 600 /dev/null ~/.openclaw/gmail-app-password\nnano ~/.openclaw/gmail-app-password\n```\n\nThen set local environment for the gateway service. Example:\n\n```bash\nopenclaw config set env.vars.GMAIL_ADDRESS you@gmail.com\nopenclaw config set env.vars.GMAIL_APP_PASSWORD_FILE ~/.openclaw/gmail-app-password\nopenclaw gateway restart\n```\n","tags":{"latest":"1.0.0"},"stats":{"comments":0,"downloads":320,"installsAllTime":0,"installsCurrent":0,"stars":0,"versions":1},"createdAt":1778407079226,"updatedAt":1778492892498},"latestVersion":{"version":"1.0.0","createdAt":1778407079226,"changelog":"Initial release: local Gmail IMAP/SMTP skill without Maton or third-party proxy.","license":"MIT-0"},"metadata":{"setup":[{"key":"GMAIL_ADDRESS","required":true},{"key":"GMAIL_APP_PASSWORD_FILE","required":true}],"os":null,"systems":null},"owner":{"handle":"alanwen168","userId":"s17fvf3d8denthmc9z9v4z3n6h86fexy","displayName":"Alan Wen","image":"https://avatars.githubusercontent.com/u/221894980?v=4"},"moderation":null}