gog Use for Gmail/Calendar/Drive/Contacts/Sheets/Docs. Requires OAuth setup. Prefer an already-authorized host account: run the requested command first. Enter setup only after an authentication error. Never ask for passwords, client secrets, or refresh tokens in chat. Setup (once) - - - Remote / headless Gateway hosts When the Gateway host has no local browser display: 1. Prefer a live callback listener on the Gateway host. From the machine with the browser, forward the exact callback port ( ), open the authorization URL prints, and let the redirect complete on that forwarded port. 2. When a…

Line 1\\n\\nLine 2'`.\n- Use `--body-html` only when you need rich formatting.\n- HTML tags: `\u003cp>` for paragraphs, `\u003cbr>` for line breaks, `\u003cstrong>` for bold, `\u003cem>` for italic, `\u003ca href=\"url\">` for links, `\u003cul>`/`\u003cli>` for lists.\n- Example (plain text via stdin):\n\n ```bash\n gog gmail send --to [email protected] \\\n --subject \"Meeting Follow-up\" \\\n --body-file - \u003c\u003c'EOF'\n Hi Name,\n\n Thanks for meeting today. Next steps:\n - Item one\n - Item two\n\n Best regards,\n Your Name\n EOF\n ```\n\n- Example (HTML list):\n ```bash\n gog gmail send --to [email protected] \\\n --subject \"Meeting Follow-up\" \\\n --body-html \"\u003cp>Hi Name,\u003c/p>\u003cp>Thanks for meeting today. Here are the next steps:\u003c/p>\u003cul>\u003cli>Item one\u003c/li>\u003cli>Item two\u003c/li>\u003c/ul>\u003cp>Best regards,\u003cbr>Your Name\u003c/p>\"\n ```\n\nNotes\n\n- Set `[email protected]` to avoid repeating `--account`.\n- For scripting, prefer `--json` plus `--no-input`.\n- Sheets values can be passed via `--values-json` (recommended) or as inline rows.\n- Docs supports export/cat/copy. In-place edits require a Docs API client (not in gog).\n- `gog gmail search` returns one row per thread; use `gog gmail messages search` when you need every individual email returned separately.","attachment_filenames":[],"attachments":[],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"gog","type":"text"}]},{"type":"paragraph","content":[{"text":"Use ","type":"text"},{"text":"gog","type":"text","marks":[{"type":"code_inline"}]},{"text":" for Gmail/Calendar/Drive/Contacts/Sheets/Docs. Requires OAuth setup.","type":"text"}]},{"type":"paragraph","content":[{"text":"Prefer an already-authorized host account: run the requested ","type":"text"},{"text":"gog","type":"text","marks":[{"type":"code_inline"}]},{"text":" command first. Enter setup only after an authentication error. Never ask for passwords, client secrets, or refresh tokens in chat.","type":"text"}]},{"type":"paragraph","content":[{"text":"Setup (once)","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"gog auth credentials /path/to/client_secret.json","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"gog auth add [email protected] --services gmail,calendar,drive,contacts,docs,sheets","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"gog auth list","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"paragraph","content":[{"text":"Remote / headless Gateway hosts","type":"text"}]},{"type":"paragraph","content":[{"text":"When the Gateway host has no local browser display:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Prefer a live callback listener on the Gateway host. From the machine with the browser, forward the exact callback port (","type":"text"},{"text":"ssh -L \u003cport>:127.0.0.1:\u003cport> user@gateway-host","type":"text","marks":[{"type":"code_inline"}]},{"text":"), open the authorization URL ","type":"text"},{"text":"gog","type":"text","marks":[{"type":"code_inline"}]},{"text":" prints, and let the redirect complete on that forwarded port.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"When a live listener is unavailable, the operator picks one paste-mode path in a trusted shell on the Gateway host. Callback URLs must never enter chat or agent tool input:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"--manual","type":"text","marks":[{"type":"code_inline"}]},{"text":": the operator pastes the full redirect URL into ","type":"text"},{"text":"gog","type":"text","marks":[{"type":"code_inline"}]},{"text":"'s interactive prompt.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"--remote --step 1","type":"text","marks":[{"type":"code_inline"}]},{"text":": prints ","type":"text"},{"text":"auth_url","type":"text","marks":[{"type":"code_inline"}]},{"text":" (and ","type":"text"},{"text":"state_reused","type":"text","marks":[{"type":"code_inline"}]},{"text":") then exits. After browser consent, the operator runs ","type":"text"},{"text":"--remote --step 2 --auth-url \u003ccallback-url>","type":"text","marks":[{"type":"code_inline"}]},{"text":" in the trusted shell. A failed ","type":"text"},{"text":"localhost","type":"text","marks":[{"type":"code_inline"}]},{"text":" page load after consent is expected.","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Keep the same resolved config context across remote steps: ","type":"text"},{"text":"GOG_CONFIG_DIR","type":"text","marks":[{"type":"code_inline"}]},{"text":" takes precedence over ","type":"text"},{"text":"--home","type":"text","marks":[{"type":"code_inline"}]},{"text":", which takes precedence over ","type":"text"},{"text":"GOG_HOME","type":"text","marks":[{"type":"code_inline"}]},{"text":". Also preserve ","type":"text"},{"text":"--client","type":"text","marks":[{"type":"code_inline"}]},{"text":", services/scopes, redirect URI, and consent options. Matching unexpired manual state may be reused (","type":"text"},{"text":"state_reused=true","type":"text","marks":[{"type":"code_inline"}]},{"text":").","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"If desktop keyring is unavailable, configure the file backend (","type":"text"},{"text":"gog auth keyring file","type":"text","marks":[{"type":"code_inline"}]},{"text":") and set ","type":"text"},{"text":"GOG_KEYRING_PASSWORD","type":"text","marks":[{"type":"code_inline"}]},{"text":" in the Gateway environment so non-interactive agent/","type":"text"},{"text":"--no-input","type":"text","marks":[{"type":"code_inline"}]},{"text":" runs can read tokens. ","type":"text"},{"text":"gog auth doctor","type":"text","marks":[{"type":"code_inline"}]},{"text":" reports when the password is missing.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Callback received is not the same as token stored. If token exchange or identity lookup fails behind a proxy, restart from step 1 after the operator approves scoped egress or proxy exceptions for the required Google endpoints. Do not bypass host network policy or reuse failed or expired state.","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"For diagnostics, inspect every entry reported by ","type":"text"},{"text":"gog auth list --check","type":"text","marks":[{"type":"code_inline"}]},{"text":"; its exit status does not prove every stored token is valid. Likewise, inspect the status reported by ","type":"text"},{"text":"gog auth doctor","type":"text","marks":[{"type":"code_inline"}]},{"text":" rather than relying only on its exit code.","type":"text"}]},{"type":"paragraph","content":[{"text":"Common commands","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Gmail search: ","type":"text"},{"text":"gog gmail search 'newer_than:7d' --max 10","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Gmail messages search (per email, ignores threading): ","type":"text"},{"text":"gog gmail messages search \"in:inbox from:ryanair.com\" --max 20 --account [email protected]","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Gmail send (plain): ","type":"text"},{"text":"gog gmail send --to [email protected] --subject \"Hi\" --body \"Hello\"","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Gmail send (multi-line): ","type":"text"},{"text":"gog gmail send --to [email protected] --subject \"Hi\" --body-file ./message.txt","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Gmail send (stdin): ","type":"text"},{"text":"gog gmail send --to [email protected] --subject \"Hi\" --body-file -","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Gmail send (HTML): ","type":"text"},{"text":"gog gmail send --to [email protected] --subject \"Hi\" --body-html \"\u003cp>Hello\u003c/p>\"","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Gmail draft: ","type":"text"},{"text":"gog gmail drafts create --to [email protected] --subject \"Hi\" --body-file ./message.txt","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Gmail send draft: ","type":"text"},{"text":"gog gmail drafts send \u003cdraftId>","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Gmail reply: ","type":"text"},{"text":"gog gmail send --to [email protected] --subject \"Re: Hi\" --body \"Reply\" --reply-to-message-id \u003cmsgId>","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Calendar list events: ","type":"text"},{"text":"gog calendar events \u003ccalendarId> --from \u003ciso> --to \u003ciso>","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Calendar create event: ","type":"text"},{"text":"gog calendar create \u003ccalendarId> --summary \"Title\" --from \u003ciso> --to \u003ciso>","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Calendar create with color: ","type":"text"},{"text":"gog calendar create \u003ccalendarId> --summary \"Title\" --from \u003ciso> --to \u003ciso> --event-color 7","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Calendar update event: ","type":"text"},{"text":"gog calendar update \u003ccalendarId> \u003ceventId> --summary \"New Title\" --event-color 4","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Calendar show colors: ","type":"text"},{"text":"gog calendar colors","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Drive search: ","type":"text"},{"text":"gog drive search \"query\" --max 10","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Contacts: ","type":"text"},{"text":"gog contacts list --max 20","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Sheets get: ","type":"text"},{"text":"gog sheets get \u003csheetId> \"Tab!A1:D10\" --json","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Sheets update: ","type":"text"},{"text":"gog sheets update \u003csheetId> \"Tab!A1:B2\" --values-json '[[\"A\",\"B\"],[\"1\",\"2\"]]' --input USER_ENTERED","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Sheets append: ","type":"text"},{"text":"gog sheets append \u003csheetId> \"Tab!A:C\" --values-json '[[\"x\",\"y\",\"z\"]]' --insert INSERT_ROWS","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Sheets clear: ","type":"text"},{"text":"gog sheets clear \u003csheetId> \"Tab!A2:Z\"","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Sheets metadata: ","type":"text"},{"text":"gog sheets metadata \u003csheetId> --json","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Docs export: ","type":"text"},{"text":"gog docs export \u003cdocId> --format txt --out /tmp/doc.txt","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Docs cat: ","type":"text"},{"text":"gog docs cat \u003cdocId>","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"paragraph","content":[{"text":"Calendar Colors","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Use ","type":"text"},{"text":"gog calendar colors","type":"text","marks":[{"type":"code_inline"}]},{"text":" to see all available event colors (IDs 1-11)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Add colors to events with ","type":"text"},{"text":"--event-color \u003cid>","type":"text","marks":[{"type":"code_inline"}]},{"text":" flag","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Event color IDs (from ","type":"text"},{"text":"gog calendar colors","type":"text","marks":[{"type":"code_inline"}]},{"text":" output):","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"1: #a4bdfc","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"2: #7ae7bf","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"3: #dbadff","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"4: #ff887c","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"5: #fbd75b","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"6: #ffb878","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"7: #46d6db","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"8: #e1e1e1","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"9: #5484ed","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"10: #51b749","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"11: #dc2127","type":"text"}]}]}]}]}]},{"type":"paragraph","content":[{"text":"Email Formatting","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Prefer plain text. Use ","type":"text"},{"text":"--body-file","type":"text","marks":[{"type":"code_inline"}]},{"text":" for multi-paragraph messages (or ","type":"text"},{"text":"--body-file -","type":"text","marks":[{"type":"code_inline"}]},{"text":" for stdin).","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Same ","type":"text"},{"text":"--body-file","type":"text","marks":[{"type":"code_inline"}]},{"text":" pattern works for drafts and replies.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"--body","type":"text","marks":[{"type":"code_inline"}]},{"text":" does not unescape ","type":"text"},{"text":"\\n","type":"text","marks":[{"type":"code_inline"}]},{"text":". If you need inline newlines, use a heredoc or ","type":"text"},{"text":"

gog Use for Gmail/Calendar/Drive/Contacts/Sheets/Docs. Requires OAuth setup. Prefer an already-authorized host account: run the requested command first. Enter setup only after an authentication error. Never ask for passwords, client secrets, or refresh tokens in chat. Setup (once) - - - Remote / headless Gateway hosts When the Gateway host has no local browser display: 1. Prefer a live callback listener on the Gateway host. From the machine with the browser, forward the exact callback port ( ), open the authorization URL prints, and let the redirect complete on that forwarded port. 2. When a…

Line 1\\n\\nLine 2'","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Use ","type":"text"},{"text":"--body-html","type":"text","marks":[{"type":"code_inline"}]},{"text":" only when you need rich formatting.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"HTML tags: ","type":"text"},{"text":"\u003cp>","type":"text","marks":[{"type":"code_inline"}]},{"text":" for paragraphs, ","type":"text"},{"text":"\u003cbr>","type":"text","marks":[{"type":"code_inline"}]},{"text":" for line breaks, ","type":"text"},{"text":"\u003cstrong>","type":"text","marks":[{"type":"code_inline"}]},{"text":" for bold, ","type":"text"},{"text":"\u003cem>","type":"text","marks":[{"type":"code_inline"}]},{"text":" for italic, ","type":"text"},{"text":"\u003ca href=\"url\">","type":"text","marks":[{"type":"code_inline"}]},{"text":" for links, ","type":"text"},{"text":"\u003cul>","type":"text","marks":[{"type":"code_inline"}]},{"text":"/","type":"text"},{"text":"\u003cli>","type":"text","marks":[{"type":"code_inline"}]},{"text":" for lists.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Example (plain text via stdin):","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"gog gmail send --to [email protected] \\\n --subject \"Meeting Follow-up\" \\\n --body-file - \u003c\u003c'EOF'\nHi Name,\n\nThanks for meeting today. Next steps:\n- Item one\n- Item two\n\nBest regards,\nYour Name\nEOF","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Example (HTML list):","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"gog gmail send --to [email protected] \\\n --subject \"Meeting Follow-up\" \\\n --body-html \"\u003cp>Hi Name,\u003c/p>\u003cp>Thanks for meeting today. Here are the next steps:\u003c/p>\u003cul>\u003cli>Item one\u003c/li>\u003cli>Item two\u003c/li>\u003c/ul>\u003cp>Best regards,\u003cbr>Your Name\u003c/p>\"","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Notes","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Set ","type":"text"},{"text":"[email protected]","type":"text","marks":[{"type":"code_inline"}]},{"text":" to avoid repeating ","type":"text"},{"text":"--account","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"For scripting, prefer ","type":"text"},{"text":"--json","type":"text","marks":[{"type":"code_inline"}]},{"text":" plus ","type":"text"},{"text":"--no-input","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Sheets values can be passed via ","type":"text"},{"text":"--values-json","type":"text","marks":[{"type":"code_inline"}]},{"text":" (recommended) or as inline rows.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Docs supports export/cat/copy. In-place edits require a Docs API client (not in gog).","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"gog gmail search","type":"text","marks":[{"type":"code_inline"}]},{"text":" returns one row per thread; use ","type":"text"},{"text":"gog gmail messages search","type":"text","marks":[{"type":"code_inline"}]},{"text":" when you need every individual email returned separately.","type":"text"}]}]}]}]},"metadata":{"date":"2026-11-02","name":"gog","author":"@skillopedia","source":{"stars":393736,"repo_name":"openclaw","origin_url":"https://github.com/openclaw/openclaw/blob/HEAD/skills/gog/SKILL.md","repo_owner":"openclaw","body_sha256":"d54a8e52b1e00bb5d33b46915fd549f8b792ef3a383fe40e92b195d11d2d5255","cluster_key":"126ab5aff50915dcd0cb7941bb32353ab6eba7de386aab4d5a2446e906191e7d","clean_bundle":{"format":"clean-skill-bundle-v1","source":"openclaw/openclaw/skills/gog/SKILL.md","text_bytes":0,"source_commit":"4c451a77c68be7e6e24b4900bf22ef1022ef3a9a","skills_sh_rank":4278,"attachment_count":0,"text_attachments":0,"attachment_storage":"skill_attachments","binary_attachments":0},"cluster_size":1,"skill_md_path":"skills/gog/SKILL.md","import_metadata":{"date":"2026-11-02","author":"@skillopedia","version":"v1","category":"integrations-apis","category_label":"Integrations"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"integrations-apis","homepage":"https://gogcli.sh","metadata":{"openclaw":{"emoji":"🎮","install":[{"id":"brew","bins":["gog"],"kind":"brew","label":"Install gog (brew)","formula":"gogcli"}],"requires":{"bins":["gog"]}}},"import_tag":"skills-sh-top20k-2026-11","description":"Google Workspace CLI for Gmail, Calendar, Drive, Contacts, Sheets, and Docs."}},"renderedAt":1793671691973}

gog Use for Gmail/Calendar/Drive/Contacts/Sheets/Docs. Requires OAuth setup. Prefer an already-authorized host account: run the requested command first. Enter setup only after an authentication error. Never ask for passwords, client secrets, or refresh tokens in chat. Setup (once) - - - Remote / headless Gateway hosts When the Gateway host has no local browser display: 1. Prefer a live callback listener on the Gateway host. From the machine with the browser, forward the exact callback port ( ), open the authorization URL prints, and let the redirect complete on that forwarded port. 2. When a…