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 cod...
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.