gogcli (gog) is a fast, script-friendly CLI for Google services. It is JSON-first, supports multiple accounts/OAuth clients, and has explicit guardrails for agent and CI usage. Authoritative upstream: https://github.com/steipete/gogcli This skill was refreshed against upstream v0.13.0 (2026-04-20). When exact syntax matters, run or ; the command surface moves quickly, rather inconveniently for anyone fond of stale notes. Operating rules - Prefer for inspection and scripting. - Use only when stable TSV is more convenient than JSON. - Use for supported mutating operations when preparing a chang…

\\t' read -r id name; do\n gog docs export \"$id\" --format pdf --out \"./pdfs/${name}.pdf\"\n done\n```\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":10136,"content_sha256":"92354db504c1cf67505df43063bf70eaf3d5d1fed4f2bb594336af19d8f8280f"},{"filename":"references/gmail.md","content":"# Gmail Operations Reference\n\nUse this for Gmail search, reading, organization, sending, forwarding, autoreply, settings, watches, tracking, and batch mail workflows.\n\n## Search syntax\n\nGmail queries use normal Gmail search operators:\n\n| Operator | Example |\n| --- | --- |\n| sender/recipient | `from:[email protected]`, `to:me` |\n| subject/body | `subject:invoice`, `\"exact phrase\"` |\n| state | `is:unread`, `is:starred`, `is:important` |\n| labels/location | `label:Project`, `in:inbox`, `in:sent`, `in:trash` |\n| attachments | `has:attachment`, `filename:pdf` |\n| dates | `after:2026/04/01`, `before:2026/05/01`, `newer_than:7d`, `older_than:1m` |\n| size | `larger:10M`, `smaller:1M` |\n| exclusion | `-label:newsletters`, `-from:[email protected]` |\n\n## Reading mail\n\nThread search:\n\n```bash\ngog gmail search 'is:unread newer_than:7d'\ngog --json gmail search 'from:[email protected] has:attachment' --max 20\ngog --json gmail search 'older_than:1y' --max 200 | jq -r '.threads[].id'\n```\n\nMessage search:\n\n```bash\ngog gmail messages search 'from:[email protected]'\ngog gmail messages search 'is:unread' --include-body\ngog gmail messages search 'subject:report newer_than:30d' --full\n```\n\nRetrieve:\n\n```bash\ngog gmail thread get \u003cthreadId>\ngog gmail thread get \u003cthreadId> --full\ngog gmail thread get \u003cthreadId> --download --out-dir ./attachments\ngog gmail get \u003cmessageId> --format full\ngog gmail get \u003cmessageId> --format metadata --headers Subject,From,Date\ngog gmail get \u003cmessageId> --format raw\ngog gmail url \u003cthreadId1> \u003cthreadId2>\n```\n\nAttachments:\n\n```bash\ngog gmail thread attachments \u003cthreadId>\ngog gmail attachment \u003cmessageId> \u003cattachmentId> --out ./attachments/\ngog gmail attachment \u003cmessageId> \u003cattachmentId> --name report.pdf\n```\n\nHistory:\n\n```bash\ngog gmail history --since \u003chistoryId>\n```\n\n## Sending and drafts\n\nBefore sending from an agent, verify the user asked to actually send. Use `--dry-run` where possible or configure no-send guards when preparing content.\n\n```bash\ngog gmail send --to [email protected] --subject \"Hello\" --body \"Plain text\"\ngog gmail send --to [email protected] --subject \"Report\" --body-file ./body.txt --attach ./report.pdf\ngog gmail send --to [email protected] --subject \"HTML\" --body-html '\u003cp>Hello\u003c/p>'\ngog gmail send --to [email protected] --subject \"Alias\" --from [email protected] --body-file ./body.txt\n```\n\nReplies:\n\n```bash\ngog gmail send --reply-to-message-id \u003cmessageId> --reply-all --subject \"Re: Topic\" --body-file ./reply.txt\ngog gmail send --thread-id \u003cthreadId> --reply-all --quote --subject \"Re: Topic\" --body-file ./reply.txt\n```\n\nForwarding:\n\n```bash\ngog gmail forward \u003cmessageId> --to [email protected]\ngog gmail forward \u003cmessageId> --to [email protected] --note \"FYI\" --from [email protected]\n```\n\nDrafts:\n\n```bash\ngog gmail drafts list --max 10\ngog gmail drafts get \u003cdraftId> --download\ngog gmail drafts create --to [email protected] --subject \"Draft\" --body-file ./draft.txt\ngog gmail drafts update \u003cdraftId> --subject \"Updated\" --body-file ./draft.txt\ngog gmail drafts send \u003cdraftId>\ngog gmail drafts delete \u003cdraftId>\n```\n\nTracking:\n\n```bash\ngog gmail track setup --worker-url https://your-worker.workers.dev\ngog gmail send --to [email protected] --subject \"Tracked\" --body-html '\u003cp>Hello\u003c/p>' --track\ngog gmail send --to [email protected] --to [email protected] --subject \"Tracked\" --body-html '\u003cp>Hello\u003c/p>' --track-split\ngog gmail track status\ngog gmail track opens \u003ctrackingId>\ngog gmail track opens --recipient [email protected]\n```\n\n## Labels and organization\n\nLabels:\n\n```bash\ngog gmail labels list\ngog gmail labels get INBOX\ngog gmail labels create \"Project/Subproject\"\ngog gmail labels rename \"Old Label\" \"New Label\"\ngog gmail labels style \"Project\" --text-color \"#ffffff\" --background-color \"#16a34a\"\ngog gmail labels style \"Project\" --label-list-visibility labelShow --message-list-visibility show\ngog gmail labels delete \"Project/Old\"\n```\n\nThread/message label changes:\n\n```bash\ngog gmail thread modify \u003cthreadId> --add Project --remove INBOX\ngog gmail labels modify \u003cthreadId1> \u003cthreadId2> --add Done --remove UNREAD\ngog gmail messages modify \u003cmessageId> --add STARRED\ngog gmail batch modify \u003cmessageId1> \u003cmessageId2> --remove UNREAD\n```\n\nConvenience actions:\n\n```bash\ngog gmail archive \u003cmessageId1> \u003cmessageId2>\ngog gmail mark-read \u003cmessageId>\ngog gmail unread \u003cmessageId>\ngog gmail trash \u003cmessageId>\ngog gmail batch delete \u003cmessageId1> \u003cmessageId2>\n```\n\nUse care: `batch delete` permanently deletes messages.\n\nBatch patterns:\n\n```bash\ngog --json gmail search 'from:[email protected]' --max 200 | \\\n jq -r '.threads[].id' | \\\n xargs -n 50 gog gmail labels modify --remove INBOX\n\ngog --json gmail messages search 'older_than:90d label:updates' --max 500 | \\\n jq -r '.messages[].id' | \\\n xargs -n 50 gog gmail batch modify --add UpdatesArchive --remove INBOX\n```\n\n## Autoreply\n\n`gog gmail autoreply` is a one-shot command intended for cron/launchd or agent workflows. It replies once to matching messages, then labels them for dedupe.\n\n```bash\ngog gmail autoreply \\\n 'to:[email protected] in:inbox -label:AutoReplied' \\\n --body-file ./support-autoreply.txt \\\n --label AutoReplied \\\n --archive \\\n --mark-read\n```\n\nUseful flags:\n\n```bash\n--max 20\n--subject \"Re: ...\"\n--body / --body-file / --body-html\n--from [email protected]\n--reply-to [email protected]\n--label AutoReplied\n--archive\n--mark-read\n--skip-bulk\n--allow-self\n```\n\nIt adds `Auto-Submitted: auto-replied` and skips common bulk/list/auto-generated mail by default.\n\n## Gmail settings\n\nMost settings commands work both as `gog gmail \u003cgroup> ...` and `gog gmail settings \u003cgroup> ...`.\n\nFilters:\n\n```bash\ngog gmail filters list\ngog gmail filters get \u003cfilterId>\ngog gmail filters create --from [email protected] --add-label Newsletters --remove-label INBOX\ngog gmail filters export --out filters.json\ngog gmail filters delete \u003cfilterId>\n```\n\nForwarding and auto-forward:\n\n```bash\ngog gmail forwarding list\ngog gmail forwarding create [email protected]\ngog gmail forwarding delete [email protected]\ngog gmail autoforward get\ngog gmail autoforward update --enabled --email [email protected] --disposition archive\n```\n\nDelegates:\n\n```bash\ngog gmail delegates list\ngog gmail delegates get [email protected]\ngog gmail delegates add [email protected]\ngog gmail delegates remove [email protected]\n```\n\nSend-as aliases:\n\n```bash\ngog gmail sendas list\ngog gmail sendas get [email protected]\ngog gmail sendas create [email protected] --display-name \"Ada Example\"\ngog gmail sendas verify [email protected]\ngog gmail sendas update [email protected] --reply-to [email protected]\ngog gmail sendas delete [email protected]\n```\n\nVacation responder:\n\n```bash\ngog gmail vacation get\ngog gmail vacation update --enabled --subject \"Out of office\" --body \"Back Monday\"\ngog gmail vacation update --disabled\n```\n\nSettings that create forwarding, delegates, or public-ish automation may prompt or require `--force` in non-interactive contexts. Explain the effect first.\n\n## Pub/Sub watch\n\n```bash\ngog gmail watch start --topic projects/my-project/topics/gmail-notifications\ngog gmail watch start --topic projects/my-project/topics/gmail-notifications --label INBOX --label IMPORTANT\ngog gmail watch status\ngog gmail watch renew\ngog gmail watch stop\n```\n\nHandler:\n\n```bash\ngog gmail watch serve --bind 0.0.0.0 --port 8080 --path /webhook\ngog gmail watch serve --bind 0.0.0.0 --port 8080 --path /webhook --include-body --max-bytes 20000\n```\n\nRecent versions also support history-type filtering on watch serve. Check `gog gmail watch serve --help` before relying on exact flags.\n\n## Auth/scopes\n\nReadonly mail:\n\n```bash\ngog auth add [email protected] --services gmail --gmail-scope readonly\n```\n\nFull Gmail automation/settings:\n\n```bash\ngog auth add [email protected] --services gmail --gmail-scope full --force-consent\n```\n\nSettings commands need Gmail settings scopes. If a settings/filter/delegate command fails with insufficient scopes, re-auth with `--services gmail --force-consent`.\n\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":8026,"content_sha256":"5d4f9fd52e793a664bb6f11a95182e66bfbbd3dd125240b58c73a15b6784ce05"},{"filename":"references/other-services.md","content":"# Other Services Reference\n\nUse this for Chat, Classroom, Contacts, Tasks, People, Groups, Admin, Keep, and local time helpers.\n\n## Chat (Workspace)\n\nChat commands require Google Workspace; consumer Gmail accounts are not supported.\n\nSpaces:\n\n```bash\ngog chat spaces list\ngog chat spaces find \"Engineering\"\ngog chat spaces find \"Engineering\" --exact\ngog chat spaces create \"Project Room\" --member [email protected] --member [email protected]\n```\n\nMessages and threads:\n\n```bash\ngog chat messages list spaces/\u003cspaceId> --max 50\ngog chat messages list spaces/\u003cspaceId> --thread spaces/\u003cspaceId>/threads/\u003cthreadId>\ngog chat messages list spaces/\u003cspaceId> --unread\ngog chat messages send spaces/\u003cspaceId> --text \"Build complete\"\ngog chat messages send spaces/\u003cspaceId> --text \"Reply\" --thread spaces/\u003cspaceId>/threads/\u003cthreadId>\ngog chat threads list spaces/\u003cspaceId>\n```\n\nReactions:\n\n```bash\ngog chat messages reactions list spaces/\u003cspaceId>/messages/\u003cmessageId>\ngog chat messages react spaces/\u003cspaceId>/messages/\u003cmessageId> \u003cemoji>\ngog chat messages reactions create spaces/\u003cspaceId>/messages/\u003cmessageId> \u003cemoji>\ngog chat messages reactions delete spaces/\u003cspaceId>/messages/\u003cmessageId>/reactions/\u003creactionId>\n```\n\nDirect messages:\n\n```bash\ngog chat dm space [email protected]\ngog chat dm send [email protected] --text \"Ping\"\ngog chat dm send [email protected] --text \"Reply\" --thread spaces/\u003cspaceId>/threads/\u003cthreadId>\n```\n\n## Classroom\n\nClassroom commands generally require Google Workspace for Education. Personal accounts have limited support.\n\nCourses:\n\n```bash\ngog classroom courses list\ngog classroom courses list --role teacher\ngog classroom courses get \u003ccourseId>\ngog classroom courses create --name \"Physics 101\" --owner me --state ACTIVE\ngog classroom courses update \u003ccourseId> --name \"Physics 102\"\ngog classroom courses archive \u003ccourseId>\ngog classroom courses unarchive \u003ccourseId>\ngog classroom courses delete \u003ccourseId>\ngog classroom courses url \u003ccourseId>\n```\n\nRoster:\n\n```bash\ngog classroom roster \u003ccourseId>\ngog classroom roster \u003ccourseId> --students\ngog classroom roster \u003ccourseId> --teachers\ngog classroom students list \u003ccourseId>\ngog classroom students get \u003ccourseId> \u003cuserId>\ngog classroom students add \u003ccourseId> \u003cuserId>\ngog classroom students remove \u003ccourseId> \u003cuserId>\ngog classroom teachers list \u003ccourseId>\ngog classroom teachers add \u003ccourseId> \u003cuserId>\ngog classroom teachers remove \u003ccourseId> \u003cuserId>\n```\n\nCoursework and materials:\n\n```bash\ngog classroom coursework list \u003ccourseId>\ngog classroom coursework list \u003ccourseId> --state PUBLISHED --topic \u003ctopicId>\ngog classroom coursework get \u003ccourseId> \u003ccourseworkId>\ngog classroom coursework create \u003ccourseId> --title \"Homework 1\" --type ASSIGNMENT --state PUBLISHED --due \"2026-05-01T23:59:59Z\" --max-points 100\ngog classroom coursework update \u003ccourseId> \u003ccourseworkId> --title \"Updated\"\ngog classroom coursework assignees \u003ccourseId> \u003ccourseworkId> --mode INDIVIDUAL_STUDENTS --add-student \u003cstudentId>\ngog classroom coursework delete \u003ccourseId> \u003ccourseworkId>\n\ngog classroom materials list \u003ccourseId>\ngog classroom materials get \u003ccourseId> \u003cmaterialId>\ngog classroom materials create \u003ccourseId> --title \"Syllabus\" --state PUBLISHED\ngog classroom materials update \u003ccourseId> \u003cmaterialId> --title \"Updated\"\ngog classroom materials delete \u003ccourseId> \u003cmaterialId>\n```\n\nSubmissions:\n\n```bash\ngog classroom submissions list \u003ccourseId> \u003ccourseworkId>\ngog classroom submissions list \u003ccourseId> \u003ccourseworkId> --state TURNED_IN\ngog classroom submissions get \u003ccourseId> \u003ccourseworkId> \u003csubmissionId>\ngog classroom submissions grade \u003ccourseId> \u003ccourseworkId> \u003csubmissionId> --grade 95\ngog classroom submissions return \u003ccourseId> \u003ccourseworkId> \u003csubmissionId>\ngog classroom submissions turn-in \u003ccourseId> \u003ccourseworkId> \u003csubmissionId>\ngog classroom submissions reclaim \u003ccourseId> \u003ccourseworkId> \u003csubmissionId>\n```\n\nAnnouncements, topics, invitations, guardians, profile:\n\n```bash\ngog classroom announcements list \u003ccourseId>\ngog classroom announcements create \u003ccourseId> --text \"Welcome\"\ngog classroom announcements update \u003ccourseId> \u003cannouncementId> --text \"Updated\"\ngog classroom announcements assignees \u003ccourseId> \u003cannouncementId> --mode INDIVIDUAL_STUDENTS --add-student \u003cstudentId>\ngog classroom announcements delete \u003ccourseId> \u003cannouncementId>\n\ngog classroom topics list \u003ccourseId>\ngog classroom topics create \u003ccourseId> --name \"Unit 1\"\ngog classroom topics update \u003ccourseId> \u003ctopicId> --name \"Unit 2\"\ngog classroom topics delete \u003ccourseId> \u003ctopicId>\n\ngog classroom invitations list\ngog classroom invitations create \u003ccourseId> \u003cuserId> --role student\ngog classroom invitations accept \u003cinvitationId>\ngog classroom invitations delete \u003cinvitationId>\n\ngog classroom guardians list \u003cstudentId>\ngog classroom guardians get \u003cstudentId> \u003cguardianId>\ngog classroom guardians delete \u003cstudentId> \u003cguardianId>\ngog classroom guardian-invitations list \u003cstudentId>\ngog classroom guardian-invitations create \u003cstudentId> --email [email protected]\n\ngog classroom profile get\ngog classroom profile get \u003cuserId>\n```\n\n## Contacts\n\nSearch/list/get:\n\n```bash\ngog contacts search \"Ada\"\ngog contacts list --max 100\ngog contacts get people/c1234567890\ngog contacts get [email protected]\n```\n\nCreate/update:\n\n```bash\ngog contacts create --given \"Ada\" --family \"Lovelace\" --email [email protected] --phone \"+41441234567\"\ngog contacts create --given \"Ada\" --org \"Analytical Engines Ltd\" --title \"Programmer\" --url https://example.com --custom source=gog\ngog contacts create --given \"Ada\" --address \"street=1 Main St;city=Zurich;country=CH\" --relation manager=Grace\n\ngog contacts update people/c1234567890 --given \"Ada\" --email [email protected]\ngog contacts update people/c1234567890 --birthday \"1815-12-10\"\ngog contacts update people/c1234567890 --from-file contact.json\ngog contacts update people/c1234567890 --from-file - --ignore-etag\ngog contacts delete people/c1234567890\n```\n\nWorkspace directory and other contacts:\n\n```bash\ngog contacts directory list\ngog contacts directory search \"smith\"\ngog contacts other list\ngog contacts other search \"jane\"\ngog contacts other delete people/other...\n```\n\nFor bulk or precise People API payload updates, prefer `contacts update --from-file` after inspecting `contacts get --json`.\n\n## Tasks\n\nTask lists:\n\n```bash\ngog tasks lists\ngog tasks lists create \"Personal\"\n```\n\nTasks:\n\n```bash\ngog tasks list \u003ctasklistId>\ngog tasks get \u003ctasklistId> \u003ctaskId>\ngog tasks add \u003ctasklistId> --title \"Buy groceries\"\ngog tasks add \u003ctasklistId> --title \"Project deadline\" --notes \"Submit final report\" --due \"2026-05-01\"\ngog tasks update \u003ctasklistId> \u003ctaskId> --title \"Updated title\"\ngog tasks update \u003ctasklistId> \u003ctaskId> --due \"\"\ngog tasks done \u003ctasklistId> \u003ctaskId>\ngog tasks undo \u003ctasklistId> \u003ctaskId>\ngog tasks delete \u003ctasklistId> \u003ctaskId>\ngog tasks clear \u003ctasklistId>\n```\n\nRepeating tasks materialize occurrences:\n\n```bash\ngog tasks add \u003ctasklistId> --title \"Weekly review\" --due \"2026-04-27\" --repeat weekly\ngog tasks add \u003ctasklistId> --title \"Monthly report\" --due \"2026-05-01\" --repeat monthly --repeat-count 12\ngog tasks add \u003ctasklistId> --title \"Daily standup\" --due \"2026-04-25\" --repeat daily --repeat-until \"2026-05-01\"\ngog tasks add \u003ctasklistId> --title \"Every other week\" --due \"2026-04-27\" --recur-rrule \"FREQ=WEEKLY;INTERVAL=2\"\n```\n\nSubtasks/order:\n\n```bash\ngog tasks add \u003ctasklistId> --title \"Subtask\" --parent \u003cparentTaskId>\ngog tasks add \u003ctasklistId> --title \"Next task\" --previous \u003cpreviousTaskId>\n```\n\n## People\n\n```bash\ngog people me\ngog people get people/\u003cuserId>\ngog people get [email protected]\ngog people search \"Ada Lovelace\" --max 5\ngog people relations\ngog people relations people/\u003cuserId> --type manager\n```\n\n`people search` is for Workspace directory/profile-style lookup; use `contacts search` for personal contacts.\n\n## Groups\n\nGroups commands use Cloud Identity and require Workspace scopes.\n\n```bash\ngog groups list\ngog groups members [email protected]\n```\n\nIf scopes are missing:\n\n```bash\ngog auth add [email protected] --services groups --force-consent\n```\n\n## Admin (Workspace)\n\nAdmin commands require a Workspace service account with domain-wide delegation and Admin SDK scopes.\n\nUsers:\n\n```bash\ngog admin users list --domain example.com\ngog admin users get [email protected]\ngog admin users create [email protected] --given Ada --family Lovelace --password 'TempPass123!'\ngog admin users suspend [email protected]\n```\n\nGroups:\n\n```bash\ngog admin groups list --domain example.com\ngog admin groups members list [email protected]\ngog admin groups members add [email protected] [email protected] --role MEMBER\ngog admin groups members remove [email protected] [email protected]\n```\n\nTreat Admin writes as high impact. Use `--dry-run` when supported and require explicit user intent.\n\n## Keep (Workspace)\n\nGoogle Keep requires Workspace service-account access/domain-wide delegation.\n\n```bash\ngog keep --service-account ~/service-account.json --impersonate [email protected] list\ngog keep --service-account ~/service-account.json --impersonate [email protected] search \"receipt\"\ngog keep --service-account ~/service-account.json --impersonate [email protected] get \u003cnoteId>\ngog keep --service-account ~/service-account.json --impersonate [email protected] create --title \"Shopping\" --text \"Milk\\nEggs\"\ngog keep --service-account ~/service-account.json --impersonate [email protected] create --title \"Todo\" --item \"Task 1\" --item \"Task 2\"\ngog keep --service-account ~/service-account.json --impersonate [email protected] attachment \u003cattachmentName> --out ./file.bin\ngog keep --service-account ~/service-account.json --impersonate [email protected] delete \u003cnoteId>\n```\n\nIf a service account is configured for the impersonated account, normal account selection can be enough:\n\n```bash\ngog auth service-account set [email protected] --key ~/service-account.json\ngog --account [email protected] keep list\n```\n\n## Time utilities\n\n```bash\ngog time now\ngog time now --timezone UTC\ngog time now --timezone Europe/Zurich\ngog time now --timezone America/New_York\n```\n\nUse this for quick local/UTC conversions in scripts.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":10110,"content_sha256":"f254c9c5f05c45e5c4dd4bb21bb0650f509cff4710182fc053b2f3a526c6ba27"},{"filename":"references/sedmat.md","content":"# Sedmat: Sed-like Document Formatting\n\n**Sedmat** is a sed-inspired DSL for formatting Google Docs. It uses brace syntax `{key=value}` as its canonical format, with legacy Markdown shortcuts for convenience.\n\nFull spec: [sedmat.org](https://sedmat.org)\n\n```bash\ngog docs sed \u003cDOC_ID> '\u003cexpression>' # single expression\ngog docs sed \u003cDOC_ID> -f expressions.sed # batch from file\ngog docs sed \u003cDOC_ID> -f seed.txt -p # paste seed content\ngog docs sed \u003cDOC_ID> '\u003cexpr>' --dry-run # preview without applying\necho 's/foo/{b}bar/' | gog docs sed \u003cDOC_ID> # pipe from stdin\ngog docs sed \u003cDOC_ID> \u003c\u003c'EOF' # heredoc\ns/title/{h=t}My Report/\ns/draft/{b c=green}final/\nEOF\n```\n\n---\n\n## Brace Syntax (Canonical)\n\nThe brace DSL is the primary way to format text. Braces go **before** the text by default:\n\n```bash\ns/text/{b}hello/ # braces before (default)\ns/text/hello{b}/ # braces after - same result\ns/text/{c=red}warning{b}/ # before and after\n```\n\n### Boolean Flags\n\n| Key | Long | Effect |\n|-----|------|--------|\n| `b` | `bold` | **Bold** |\n| `i` | `italic` | *Italic* |\n| `_` | `underline` | Underline |\n| `-` | `strike` | ~~Strikethrough~~ |\n| `#` | `code` | `Monospace` (Courier New + grey bg) |\n| `^` | `sup` | Superscript |\n| `,` | `sub` | Subscript |\n| `w` | `smallcaps` | Small Caps |\n\nNegate with `!`: `{!b}` removes bold, `{!i}` removes italic.\n\n```bash\ns/hello/{b}hello/ # bold\ns/world/{i _}world/ # italic + underline\ns/note/{b i}note/ # bold + italic\ns/draft/{-}draft/ # strikethrough\ns/code/{#}code/ # monospace\ns/TM/{^}TM/ # superscript\ns/H2O/H2O - {,}2/ # subscript\ns/Title/{w}Title/ # small caps\ns/loud/{!b}loud/ # remove bold\n```\n\n### Key=Value Properties\n\n| Key | Long | Value | Effect |\n|-----|------|-------|--------|\n| `c` | `color` | hex/name | Text color |\n| `z` | `bg` | hex/name | Background/highlight |\n| `f` | `font` | name | Font family |\n| `s` | `size` | pt | Font size |\n| `u` | `url` | URL | Hyperlink |\n| `h` | `heading` | 1-6/t/s | Heading level (t=title, s=subtitle) |\n| `a` | `align` | left/center/right | Paragraph alignment |\n| `l` | `leading` | pt | Line spacing |\n| `n` | `indent` | pt | Indentation |\n| `o` | `opacity` | 0-100 | Text opacity |\n| `k` | `kerning` | pt | Letter spacing |\n| `p` | `spacing` | before,after | Paragraph spacing (pt) |\n| `e` | `effect` | name | Text effect |\n| `x` | `width` | px | Image width |\n| `y` | `height` | px | Image height |\n\n```bash\ns/error/{c=red}error/ # red text\ns/warning/{z=#FFFF00}warning/ # yellow highlight\ns/title/{f=Georgia s=24}title/ # Georgia 24pt\ns/heading/{h=2}heading/ # Heading 2\ns/TITLE/{h=t}TITLE/ # Title style\ns/click here/{u=https:\\/\\/example.com}click here/ # hyperlink\ns/para/{a=center}para/ # center align\ns/note/{p=12,6}note/ # 12pt before, 6pt after\ns/fine/{o=50}fine/ # 50% opacity\n```\n\n### Combos\n\nCombine any flags and properties in one brace block:\n\n```bash\ns/heading/{b f=Montserrat s=18}heading/\ns/title/{h=3 f=Playfair+Display s=22 c=#333333}title/\ns/link/{b i u=https:\\/\\/example.com}link/\n```\n\n### Clear Formatting\n\n```bash\ns/messy/{0}messy/ # strip all formatting\n```\n\n### Bookmarks & Internal Links\n\n```bash\ns/Chapter 1/{@=ch1}Chapter 1/ # create bookmark anchor\ns/see chapter 1/{u=#ch1}see chapter 1/ # link to bookmark\n```\n\n---\n\n## Structural Commands (Brace)\n\n### Breaks\n\n```bash\ns/PAGEBREAK/{+=p}PAGEBREAK/ # page break\ns/COLBREAK/{+=c}COLBREAK/ # column break\ns/SECBREAK/{+=s}SECBREAK/ # section break\n```\n\n### Tables\n\n```bash\ns/placeholder/{T=4x3}placeholder/ # 4 rows x 3 cols\ns/placeholder/{T=4x3:header}placeholder/ # with header row\n```\n\n### Checkboxes\n\n```bash\ns/task/{check}task/ # unchecked checkbox\ns/done/{check=y}done/ # checked\ns/todo/{check=n}todo/ # explicitly unchecked\n```\n\n### Images\n\n```bash\ns/placeholder/{img=https:\\/\\/example.com\\/photo.jpg}placeholder/\ns/placeholder/{img=https:\\/\\/example.com\\/photo.jpg x=400}placeholder/\ns/placeholder/{img=https:\\/\\/example.com\\/photo.jpg x=200 y=68}placeholder/\n```\n\n---\n\n## Legacy Markdown Syntax\n\nMarkdown shortcuts are supported for convenience. The brace syntax is preferred.\n\n### Headings\n\n```bash\ns/text/# Heading 1/\ns/text/## Heading 2/\ns/text/### Heading 3/\ns/text/#### Heading 4/\ns/text/##### Heading 5/\ns/text/###### Heading 6/\n```\n\n### Inline Styles\n\n```bash\ns/text/**bold**/\ns/text/*italic*/\ns/text/***bold italic***/\ns/text/~~strikethrough~~/\ns/text/`monospace`/\ns/text/__underline__/\ns/text/^{superscript}/\ns/text/~{subscript}/\n```\n\n### Links & Images\n\n```bash\ns/text/[link text](https:\\/\\/example.com)/\ns/placeholder/![alt](https:\\/\\/example.com\\/img.png)/\ns/placeholder/![alt](https:\\/\\/example.com\\/img.png =400x200)/\n```\n\n### Lists\n\n```bash\ns/text/- bullet item/\ns/text/1. numbered item/\ns/text/ - nested bullet (2 spaces per level)/\ns/text/- [ ] unchecked checkbox/\ns/text/- [x] checked checkbox/\n```\n\n### Blocks\n\n```bash\ns/text/---/ # horizontal rule\ns/text/> blockquote text/\n```\n\n### Code Blocks\n\n````bash\ns/text/```\\ncode line 1\\ncode line 2\\n```/\n````\n\n### Footnotes\n\n```bash\ns/text/Some claim[^1]/\ns/FOOTNOTE/[^1]: Source citation/\n```\n\n### Pipe Tables\n\n```bash\ns/placeholder/| Col A | Col B |\\n| data1 | data2 |/\n```\n\n---\n\n## Sed Commands\n\n### Substitution\n\n```bash\ns/pattern/replacement/ # first match\ns/pattern/replacement/g # all matches (global)\ns/pattern/replacement/i # case-insensitive\ns/pattern/replacement/2 # nth match only\ns/pattern/replacement/m # multiline (^/$ match line boundaries)\ns/pattern/replacement/gi # combine flags\n```\n\n### Delete, Append, Insert, Transliterate\n\n```bash\nd/pattern/ # delete lines matching pattern\na/pattern/new text/ # append text after matching lines\ni/pattern/new text/ # insert text before matching lines\ny/abc/xyz/ # transliterate a->x, b->y, c->z\n```\n\n### Back-references\n\n```bash\ns/(important)/{b}$1/ # capture + format\ns/([A-Z]{2,})/{b}$1/g # bold all caps words\ns/\"([^\"]+)\"/{i}$1/g # italicize quoted text\ns/hello/{b}&/ # & = whole match\n```\n\n### Positional Insert\n\n```bash\ns/^$/Initial content/ # empty doc only\ns/^/Prepended text\\n/ # beginning of doc\ns/$/\\nAppended text/ # end of doc\n```\n\n---\n\n## Table Operations\n\nTables are numbered in document order (1-indexed). Use `|-1|` for last, `|*|` for all.\n\n### Cell References\n\n```bash\ns/|1|[1,1]/{b}Header/ # row 1, col 1\ns/|1|[2,3]/value/ # row 2, col 3\ns/|1|[1,*]/{b}&/ # bold entire row (wildcard)\ns/|1|[*,2]/data/ # set entire column\n```\n\n### Add Rows & Columns\n\n```bash\ns/|1|[+1,0]// # append row\ns/|1|[0,+1]// # append column\n```\n\n### Merge & Split\n\n```bash\ns/|1|[1,1:1,3]/merge/ # merge cells row1 col1-3\ns/|1|[2,2]/split/ # split merged cell\n```\n\n### Delete Tables\n\n```bash\ns/|1|// # delete first table\ns/|*|// # delete all tables\n```\n\n---\n\n## Image References\n\n```bash\ns/!(1)/!(https:\\/\\/new.png)/ # replace 1st image\ns/!(-1)// # delete last image\ns/!(*)/!(https:\\/\\/placeholder.png)/g # replace all images\ns/![logo]/!(https:\\/\\/new-logo.png)/ # match by alt text\n```\n\n---\n\n## Paragraph Addressing\n\nTarget specific paragraphs by number using address prefixes. Use `gog docs structure` to see paragraph numbers.\n\n```bash\n# Introspection - see paragraph numbers, types, and content\ngog docs structure \u003cDOC_ID> # show numbered structure\ngog docs cat \u003cDOC_ID> -N # cat with [N] prefixes\n\n# Delete by paragraph number\ngog docs sed \u003cDOC_ID> '5d' # delete paragraph 5\ngog docs sed \u003cDOC_ID> '3,7d' # delete paragraphs 3-7\ngog docs sed \u003cDOC_ID> '$d' # delete last paragraph\n\n# Substitute within addressed paragraphs\ngog docs sed \u003cDOC_ID> '5s/.*/New text/' # replace all text in paragraph 5\ngog docs sed \u003cDOC_ID> '3,7s/old/new/g' # replace within paragraphs 3-7\n\n# Insert/Append around addressed paragraphs\ngog docs sed \u003cDOC_ID> '5a/New line/' # append after paragraph 5\ngog docs sed \u003cDOC_ID> '3i/Before text/' # insert before paragraph 3\ngog docs sed \u003cDOC_ID> '$a/Last line/' # append after last paragraph\n```\n\n### Address Syntax\n\n| Address | Meaning |\n|---------|---------|\n| `N` | Paragraph number N (1-based) |\n| `N,M` | Range from paragraph N to M |\n| ` gog-cli — Skillopedia | Last paragraph |\n| `N, gog-cli — Skillopedia | From paragraph N to end |\n\n### Multi-Tab Support\n\n```bash\ngog docs structure \u003cDOC_ID> --tab \"Sheet1\"\ngog docs sed \u003cDOC_ID> --tab \"Sheet1\" '3d'\n```\n\n---\n\n## Batch Mode\n\nCreate a `.sed` file with one expression per line. Comments start with `#`.\n\n```bash\n# format-doc.sed\ns/QQQ_TITLE/{h=t}Report Title/\ns/QQQ_AUTHOR/{i c=gray}John Doe/\ns/QQQ_DATE/2026-02-22/\n\n# Apply\ngog docs sed \u003cDOC_ID> -a \u003caccount> -f format-doc.sed\n```\n\n### Seed + Format Workflow\n\n1. Clear the doc: `gog docs clear \u003cDOC_ID> -a \u003caccount>`\n2. Insert seed via positional insert: `gog docs sed \u003cDOC_ID> -f seed.sed -a \u003caccount>`\n3. Format it: `gog docs sed \u003cDOC_ID> -f format.sed -a \u003caccount>`\n\n---\n\n## Options\n\n| Flag | Effect |\n|------|--------|\n| `-f \u003cfile>` | Read expressions from file (batch mode) |\n| `-p` | Paste mode (insert file content as text) |\n| `-n` / `--dry-run` | Preview without applying changes |\n| `-a \u003caccount>` | Google account to use |\n\n---\n\n## See Also\n\n- `gog docs clear` - Clear all content from a document\n- `gog docs edit` - Simple find/replace without regex\n- `gog docs get` - Export document content\n- `gog docs images list` - List images in document\n- [sedmat.org](https://sedmat.org) - Full Sedmat specification\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":10337,"content_sha256":"570b83fce102757c6d11520eb6a39f9c1d1fefc583f2574c3884dd8bee9ab67e"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"gogcli (gog)","type":"text"}]},{"type":"paragraph","content":[{"text":"gog","type":"text","marks":[{"type":"code_inline"}]},{"text":" is a fast, script-friendly CLI for Google services. It is JSON-first, supports multiple accounts/OAuth clients, and has explicit guardrails for agent and CI usage.","type":"text"}]},{"type":"paragraph","content":[{"text":"Authoritative upstream: https://github.com/steipete/gogcli","type":"text"}]},{"type":"paragraph","content":[{"text":"This skill was refreshed against upstream ","type":"text"},{"text":"gog","type":"text","marks":[{"type":"code_inline"}]},{"text":" v0.13.0 (2026-04-20). When exact syntax matters, run ","type":"text"},{"text":"gog \u003ccommand> --help","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":"gog schema --json","type":"text","marks":[{"type":"code_inline"}]},{"text":"; the command surface moves quickly, rather inconveniently for anyone fond of stale notes.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Operating rules","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Prefer ","type":"text"},{"text":"gog --json ... | jq ...","type":"text","marks":[{"type":"code_inline"}]},{"text":" for inspection and scripting.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Use ","type":"text"},{"text":"--plain","type":"text","marks":[{"type":"code_inline"}]},{"text":" only when stable TSV is more convenient than JSON.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Use ","type":"text"},{"text":"--dry-run","type":"text","marks":[{"type":"code_inline"}]},{"text":" for supported mutating operations when preparing a change or when user intent is ambiguous.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Use ","type":"text"},{"text":"--no-input","type":"text","marks":[{"type":"code_inline"}]},{"text":" in automation so commands fail instead of prompting.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Use ","type":"text"},{"text":"--force","type":"text","marks":[{"type":"code_inline"}]},{"text":" only when the user asked for the destructive/public/send/admin operation or after you have clearly explained the effect.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Do not repair OAuth, consent, keyring, or Workspace delegation problems silently. Show the exact command the user should run.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Do not export tokens, print secrets, open public shares, add delegates/forwarding, send mail, suspend users, or permanently delete data unless the user explicitly requested that action.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"For agent runs that must not send mail, add ","type":"text"},{"text":"--gmail-no-send","type":"text","marks":[{"type":"code_inline"}]},{"text":", set ","type":"text"},{"text":"GOG_GMAIL_NO_SEND=1","type":"text","marks":[{"type":"code_inline"}]},{"text":", or configure ","type":"text"},{"text":"gog config no-send set \u003caccount>","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Install and auth","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"brew install gogcli\ngog auth credentials set ~/Downloads/client_secret_....json\ngog auth add [email protected] --services gmail,calendar,drive\ngog auth list --check","type":"text"}]},{"type":"paragraph","content":[{"text":"Notes:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Homebrew now uses ","type":"text"},{"text":"brew install gogcli","type":"text","marks":[{"type":"code_inline"}]},{"text":"; old tap examples are obsolete.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"gog auth add","type":"text","marks":[{"type":"code_inline"}]},{"text":" defaults to ","type":"text"},{"text":"--services user","type":"text","marks":[{"type":"code_inline"}]},{"text":". Request the services needed for the task.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"--services all","type":"text","marks":[{"type":"code_inline"}]},{"text":" is accepted only as a backwards-compatible alias for ","type":"text"},{"text":"user","type":"text","marks":[{"type":"code_inline"}]},{"text":"; do not use it when you need every API.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Use ","type":"text"},{"text":"--readonly","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"--drive-scope readonly|file|full","type":"text","marks":[{"type":"code_inline"}]},{"text":", and ","type":"text"},{"text":"--gmail-scope readonly|full","type":"text","marks":[{"type":"code_inline"}]},{"text":" for least privilege.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Keep and Admin require Workspace service-account/domain-wide delegation. Google Chat, Groups, directory, and Classroom also have Workspace restrictions.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"For headless/CI, consider ","type":"text"},{"text":"--manual","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"--remote","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"--access-token","type":"text","marks":[{"type":"code_inline"}]},{"text":", or ","type":"text"},{"text":"GOG_AUTH_MODE=adc","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Read ","type":"text"},{"text":"references/authentication.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" for full auth patterns.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Global flags","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"--account, -a \u003cemail|alias|auto> # account selection\n--client \u003cname> # named OAuth client/token bucket\n--access-token \u003ctoken> # direct short-lived token; also GOG_ACCESS_TOKEN\n--json, -j # machine-readable JSON\n--plain, -p # stable TSV\n--results-only # JSON primary result only\n--select \u003cfields> # best-effort JSON projection\n--dry-run, -n # preview supported writes\n--force, -y # skip confirmations\n--no-input # never prompt\n--enable-commands \u003ccsv> # allowlist top-level or dotted commands\n--disable-commands \u003ccsv> # denylist top-level or dotted commands\n--gmail-no-send # block Gmail send operations\n--verbose, -v # debug logging","type":"text"}]},{"type":"paragraph","content":[{"text":"Useful command aliases:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"gog send ... # alias for gog gmail send\ngog ls # alias for gog drive ls\ngog search \"budget\" # alias for gog drive search\ngog download \u003cfileId> # alias for gog drive download\ngog upload ./file.pdf # alias for gog drive upload\ngog me # alias for gog people me\ngog status # alias for gog auth status\ngog open \u003cid-or-url> # best-effort Google web URL, offline","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"High-value workflows","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Account selection","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"gog auth alias set work [email protected]\ngog --account work gmail search 'is:unread newer_than:2d'\nGOG_ACCOUNT=work gog calendar events primary --today\ngog --client work auth credentials set ~/Downloads/work-client.json\ngog --client work auth add [email protected] --services gmail,calendar","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Gmail","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"gog --json gmail search 'is:unread newer_than:7d' | jq -r '.threads[].id'\ngog gmail messages search 'from:[email protected] has:attachment' --include-body\ngog gmail messages search 'subject:report newer_than:30d' --full\ngog gmail thread get \u003cthreadId> --download --out-dir ./attachments\ngog gmail labels modify \u003cthreadId> --add Project --remove INBOX\ngog gmail messages modify \u003cmessageId> --add STARRED\ngog gmail send --to [email protected] --subject \"Hello\" --body-file ./body.txt\ngog gmail forward \u003cmessageId> --to [email protected] --note \"FYI\"","type":"text"}]},{"type":"paragraph","content":[{"text":"For forwarding, autoreply, watch/Pub/Sub, filters, delegates, send-as, label colours, batch operations, and tracking, read ","type":"text"},{"text":"references/gmail.md","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Calendar","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"gog calendar calendars\ngog calendar events primary --today --weekday\ngog calendar events --all --from \"2026-04-25T00:00:00+02:00\" --to \"2026-04-26T00:00:00+02:00\"\ngog calendar freebusy --cal primary --from \"2026-04-25T09:00:00+02:00\" --to \"2026-04-25T17:00:00+02:00\"\ngog calendar create primary --summary \"Planning\" --from \"2026-04-25T14:00:00+02:00\" --to \"2026-04-25T14:30:00+02:00\" --attendees \"[email protected],[email protected]\" --with-meet\ngog calendar respond primary \u003ceventId> --status accepted --send-updates all","type":"text"}]},{"type":"paragraph","content":[{"text":"Use RFC3339 with timezone offsets for generated datetimes. Read ","type":"text"},{"text":"references/calendar.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" for aliases, subscriptions, secondary calendars, extended properties, Focus Time, OOO, working locations, team calendars, and conflict detection.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Drive, Docs, Sheets, Slides, Forms, Apps Script","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"gog drive search \"invoice filetype:pdf\" --max 20\ngog drive upload ./report.md --convert-to doc --parent \u003cfolderId>\ngog drive upload ./deck.pdf --replace \u003cfileId> --name \"Board Deck.pdf\"\ngog drive share \u003cfileId> --to user --email [email protected] --role commenter\ngog docs write \u003cdocId> --file ./brief.md --replace --markdown\ngog docs sed \u003cdocId> 's/status/{b c=green}approved/g' --dry-run\ngog sheets update \u003cspreadsheetId> 'Sheet1!A1' '[[\"Name\",\"Score\"],[\"Ada\",98]]'\ngog sheets chart list \u003cspreadsheetId>\ngog slides thumbnail \u003cpresentationId> \u003cslideId> --out ./slide.png\ngog forms responses list \u003cformId> --max 20\ngog appscript run \u003cscriptId> myFunction --params '[\"arg1\", 123]'","type":"text"}]},{"type":"paragraph","content":[{"text":"Read ","type":"text"},{"text":"references/drive-docs.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" for current file/content commands. For Docs sed formatting, read ","type":"text"},{"text":"references/sedmat.md","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Other services","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"gog contacts search \"Ada\"\ngog tasks lists\ngog tasks add \u003ctasklistId> --title \"Weekly review\" --due \"2026-04-27\" --repeat weekly\ngog chat messages send spaces/\u003cspaceId> --text \"Build complete\"\ngog groups members [email protected]\ngog admin users list --domain example.com\ngog keep search \"receipt\"","type":"text"}]},{"type":"paragraph","content":[{"text":"Read ","type":"text"},{"text":"references/other-services.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" for Chat, Classroom, Contacts, Tasks, People, Groups, Admin, Keep, and time utilities.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Scripting patterns","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# Inspect shape first\ngog --json gmail search 'is:unread' --max 3 | jq .\n\n# Use pagination/all-pages where available\ngog --json calendar events primary --from today --to tomorrow --all-pages\n\n# Fail cleanly when a supported list command has no results\ngog --json calendar events primary --query \"unlikely query\" --fail-empty\n\n# Batch with xargs after checking output\ngog --json gmail search 'older_than:1y label:newsletter' --max 200 | \\\n jq -r '.threads[].id' | \\\n xargs -n 50 gog gmail labels modify --remove INBOX\n\n# Agent-safe command surface\nGOG_ENABLE_COMMANDS=calendar.events,calendar.freebusy,tasks \\\n gog --no-input --json calendar events primary --today","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Reference map","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"references/command-reference.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" - generated command index from ","type":"text"},{"text":"gog schema --json","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"references/authentication.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" - OAuth clients, service accounts, scopes, keyrings, headless auth","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"references/configuration.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" - config keys, environment variables, output modes, safety switches","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"references/gmail.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Gmail search, read, send, labels, settings, watch, tracking, autoreply","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"references/calendar.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Calendar listing, event writes, scheduling, special events, aliases","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"references/drive-docs.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Drive, Docs, Sheets, Slides, Forms, Apps Script","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"references/sedmat.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Docs sed/formatting DSL","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"references/other-services.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Chat, Classroom, Contacts, Tasks, People, Groups, Admin, Keep","type":"text"}]}]}]}]},"metadata":{"date":"2026-11-02","name":"gog-cli","author":"@skillopedia","source":{"stars":299,"repo_name":"agent-skills","origin_url":"https://github.com/intellectronica/agent-skills/blob/HEAD/skills/gog-cli/SKILL.md","repo_owner":"intellectronica","body_sha256":"7631ae971a701880e6b9139f60fa168ef73e26144c8af267ec7fccf4e609be82","cluster_key":"f542ec08512caff36af0e4c989ff21d41238bf189790a181136d66c324725bc9","clean_bundle":{"format":"clean-skill-bundle-v1","source":"intellectronica/agent-skills/skills/gog-cli/SKILL.md","text_bytes":92089,"source_commit":"9b0e00ad1b941165e2506545bbfddafa34cf2cb8","skills_sh_rank":14761,"attachment_count":8,"text_attachments":8,"attachment_storage":"skill_attachments","binary_attachments":0},"cluster_size":1,"skill_md_path":"skills/gog-cli/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","import_tag":"skills-sh-top20k-2026-11","description":"Use this skill whenever the user wants to operate Google Workspace from the command line with gog/gogcli, including Gmail, Calendar, Drive, Docs, Sheets, Slides, Forms, Apps Script, Chat, Classroom, Contacts, Tasks, People, Groups, Admin, Keep, auth, configuration, scripting, or agent-safe Google automation. Prefer this skill for Google account/file/mail/calendar work when the user mentions gog, gogcli, Google CLI, Gmail search/send, Calendar events, Drive files, Docs/Sheets/Slides editing, Forms, Apps Script, Workspace admin, or command-line Google automation."}},"renderedAt":1793665969840}

gogcli (gog) is a fast, script-friendly CLI for Google services. It is JSON-first, supports multiple accounts/OAuth clients, and has explicit guardrails for agent and CI usage. Authoritative upstream: https://github.com/steipete/gogcli This skill was refreshed against upstream v0.13.0 (2026-04-20). When exact syntax matters, run or ; the command surface moves quickly, rather inconveniently for anyone fond of stale notes. Operating rules - Prefer for inspection and scripting. - Use only when stable TSV is more convenient than JSON. - Use for supported mutating operations when preparing a chang…