Install
openclaw skills install gmail-no-sendRead-only Gmail CLI that cannot send email by design. Search, read, create drafts, update drafts, and archive messages — with zero send capability in the codebase. Use when the agent needs Gmail access for reading email, drafting responses, searching inbox, or archiving messages, but sending must be impossible. Ideal for AI agents that should never autonomously send email. Requires Google Cloud OAuth credentials (user provides their own client_secret.json).
openclaw skills install gmail-no-sendGmail CLI that cannot send email. Not "won't" — can't. There is no send function in the codebase.
Requires Python 3.9+.
cd <skill-dir>/scripts/gmail-no-send
pip install -e .
Or install from the GitHub repo:
pip install git+https://github.com/meimakes/gmail-no-send.git
Each user needs their own Google Cloud OAuth credentials:
client_secret.jsonThen authenticate:
gmail-no-send auth --client-secret /path/to/client_secret.json --account myname
This opens a browser for Google OAuth consent. Token is saved to ~/.config/gmail-no-send/token.json and auto-refreshes.
All commands require --account <name> (matches the name used during auth).
gmail-no-send search --account mei --query "from:someone@example.com newer_than:7d" --max 10
Returns JSON array of message IDs and thread IDs.
gmail-no-send read --account mei --message-id <id>
Returns full message payload (headers, body, labels).
gmail-no-send draft-create --account mei --to "someone@example.com" --subject "Re: topic" --body "Draft text here"
gmail-no-send draft-create --account mei --to "someone@example.com" --subject "Long draft" --body-file /path/to/body.txt
gmail-no-send draft-update --account mei --draft-id <id> --to "someone@example.com" --subject "Updated" --body "New body"
gmail-no-send archive --account mei --message-id <id>
Removes INBOX label (message stays in All Mail).
compose scope technically allows send via API. This tool enforces no-send at the application layer — the code simply doesn't call the send endpoint.~/.config/gmail-no-send/audit.log with timestamps.~/.config/gmail-no-send/token.json — user-local, not shared.For a deeper security analysis, see references/threat-model.md.
read to get the actual message.--body-file for long draft bodies instead of --body to avoid shell escaping issues.