openclaw/gogcliPublic

Google Workspace in your terminal.

AI summary: A unified, task-first CLI for automating Google Workspace operations.

Stars
8.3K
+7 today
Forks
662
Watchers
26
Open issues
4
Open PRs
6
Contributors
~120
Commits
1.8K
Branches
64

GoMITCreated Dec 12, 2025Last push 1d agoLatest release v0.34.1+30 stars this week+30 this month

Star history

since May 3, 2026
02.5K5K7.5KMay 2026Jun 2026Jul 2026Aug 2026
8.3K stars as of Aug 7, 2026, tracked back to May 3, 2026. Historical curve reconstructed from public GitHub event archives, calibrated to the current total.

Contribution activity

commits per day, last 52 weeks
AugSepOctNovDecJanFebMarAprMayJunJulMonWedFri2025-08-02: 0 commits2025-08-03: 0 commits2025-08-04: 0 commits2025-08-05: 0 commits2025-08-06: 0 commits2025-08-07: 0 commits2025-08-08: 0 commits2025-08-09: 0 commits2025-08-10: 0 commits2025-08-11: 0 commits2025-08-12: 0 commits2025-08-13: 0 commits2025-08-14: 0 commits2025-08-15: 0 commits2025-08-16: 0 commits2025-08-17: 0 commits2025-08-18: 0 commits2025-08-19: 0 commits2025-08-20: 0 commits2025-08-21: 0 commits2025-08-22: 0 commits2025-08-23: 0 commits2025-08-24: 0 commits2025-08-25: 0 commits2025-08-26: 0 commits2025-08-27: 0 commits2025-08-28: 0 commits2025-08-29: 0 commits2025-08-30: 0 commits2025-08-31: 0 commits2025-09-01: 0 commits2025-09-02: 0 commits2025-09-03: 0 commits2025-09-04: 0 commits2025-09-05: 0 commits2025-09-06: 0 commits2025-09-07: 0 commits2025-09-08: 0 commits2025-09-09: 0 commits2025-09-10: 0 commits2025-09-11: 0 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 0 commits2025-09-15: 0 commits2025-09-16: 0 commits2025-09-17: 0 commits2025-09-18: 0 commits2025-09-19: 0 commits2025-09-20: 0 commits2025-09-21: 0 commits2025-09-22: 0 commits2025-09-23: 0 commits2025-09-24: 0 commits2025-09-25: 0 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 40 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 2 commits2025-12-17: 11 commits2025-12-18: 3 commits2025-12-19: 0 commits2025-12-20: 3 commits2025-12-21: 1 commit2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 24 commits2025-12-25: 0 commits2025-12-26: 47 commits2025-12-27: 0 commits2025-12-28: 13 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 19 commits2026-01-01: 1 commit2026-01-02: 30 commits2026-01-03: 14 commits2026-01-04: 2 commits2026-01-05: 14 commits2026-01-06: 0 commits2026-01-07: 11 commits2026-01-08: 45 commits2026-01-09: 40 commits2026-01-10: 9 commits2026-01-11: 9 commits2026-01-12: 3 commits2026-01-13: 15 commits2026-01-14: 3 commits2026-01-15: 5 commits2026-01-16: 18 commits2026-01-17: 38 commits2026-01-18: 2 commits2026-01-19: 13 commits2026-01-20: 4 commits2026-01-21: 12 commits2026-01-22: 4 commits2026-01-23: 0 commits2026-01-24: 2 commits2026-01-25: 0 commits2026-01-26: 2 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 6 commits2026-01-31: 8 commits2026-02-01: 17 commits2026-02-02: 1 commit2026-02-03: 0 commits2026-02-04: 2 commits2026-02-05: 0 commits2026-02-06: 3 commits2026-02-07: 1 commit2026-02-08: 1 commit2026-02-09: 1 commit2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 2 commits2026-02-13: 11 commits2026-02-14: 36 commits2026-02-15: 17 commits2026-02-16: 15 commits2026-02-17: 1 commit2026-02-18: 2 commits2026-02-19: 1 commit2026-02-20: 0 commits2026-02-21: 1 commit2026-02-22: 0 commits2026-02-23: 3 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 5 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 3 commits2026-03-02: 7 commits2026-03-03: 13 commits2026-03-04: 0 commits2026-03-05: 1 commit2026-03-06: 0 commits2026-03-07: 46 commits2026-03-08: 65 commits2026-03-09: 37 commits2026-03-10: 0 commits2026-03-11: 1 commit2026-03-12: 0 commits2026-03-13: 1 commit2026-03-14: 1 commit2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 52 commits2026-04-21: 4 commits2026-04-22: 1 commit2026-04-23: 1 commit2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 2 commits2026-04-27: 42 commits2026-04-28: 32 commits2026-04-29: 1 commit2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 1 commit2026-05-04: 17 commits2026-05-05: 18 commits2026-05-06: 2 commits2026-05-07: 1 commit2026-05-08: 0 commits2026-05-09: 13 commits2026-05-10: 13 commits2026-05-11: 8 commits2026-05-12: 2 commits2026-05-13: 0 commits2026-05-14: 10 commits2026-05-15: 13 commits2026-05-16: 0 commits2026-05-17: 13 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 12 commits2026-05-21: 2 commits2026-05-22: 20 commits2026-05-23: 4 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 3 commits2026-05-29: 0 commits2026-05-30: 14 commits2026-05-31: 35 commits2026-06-01: 89 commits2026-06-02: 0 commits2026-06-03: 3 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 3 commits2026-06-07: 10 commits2026-06-08: 8 commits2026-06-09: 10 commits2026-06-10: 13 commits2026-06-11: 17 commits2026-06-12: 219 commits2026-06-13: 90 commits2026-06-14: 16 commits2026-06-15: 11 commits2026-06-16: 0 commits2026-06-17: 3 commits2026-06-18: 8 commits2026-06-19: 35 commits2026-06-20: 4 commits2026-06-21: 4 commits2026-06-22: 7 commits2026-06-23: 6 commits2026-06-24: 3 commits2026-06-25: 0 commits2026-06-26: 6 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 2 commits2026-07-01: 3 commits2026-07-02: 0 commits2026-07-03: 5 commits2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 9 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 4 commits2026-07-10: 3 commits2026-07-11: 10 commits2026-07-12: 0 commits2026-07-13: 1 commit2026-07-14: 0 commits2026-07-15: 1 commit2026-07-16: 4 commits2026-07-17: 0 commits2026-07-18: 0 commits2026-07-19: 1 commit2026-07-20: 0 commits2026-07-21: 4 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 1 commit2026-07-27: 8 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits
1,725 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Very active

    1,725 commits in 52 weeks

  • Community-driven

    ~120 contributors

  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

What gogcli does

Consolidates Google Workspace APIs into a single CLI binary designed for both human operators and automated scripts. It provides task-first commands that abstract away the complexity of raw REST resources, enabling workflows like auditing Drive sharing, sending Gmail, and managing Workspace users. It enforces strict operational contracts, offering stable JSON output for CI environments, comprehensive exit codes, and read-only flags to prevent accidental modifications.

DevOps engineers, IT admins, and developers needing a scriptable, predictable interface to Google Workspace.

  • Unified Workspace access: manages Gmail, Calendar, Drive, Docs, Admin, and more from a single binary
  • Task-oriented abstraction: replaces raw API calls with practical workflows like finding unread mail or resolving calendar names
  • Automation-ready output: supports `--json` and `--plain` stdout for parsing, while routing warnings and prompts to stderr
  • Safety guardrails: includes `--readonly`, `--gmail-no-send`, and `--no-input` flags for secure, non-interactive CI execution
  • Flexible authentication: supports account aliases, OAuth clients, direct tokens, OS keyrings, and Workspace service accounts

Where teams use it

CI/CD reporting

Runs non-interactively in a CI pipeline to parse test results and append them directly to a Google Sheet.

Security auditing

Executes read-only queries to dump Drive folder sharing permissions to a JSON file for compliance reviews.

Agent tool integration

Provides coding agents with a predictable, CLI-based tool to interact with a user's calendar or email.

Getting started: gog --account you@gmail.com --readonly calendar events --today

README

main branch

gog — Google Workspace from the terminal

gogcli banner

One binary. Task-first commands. Predictable automation.

gog gives people, scripts, CI, and coding agents one CLI for Gmail, Calendar, Drive, Docs, Sheets, Slides, Forms, Meet, Apps Script, Analytics, Search Console, Contacts, Tasks, Classroom, Chat, YouTube, and Workspace admin.

# Find mail, inspect today's calendar, and audit a Drive folder.
gog --account you@gmail.com --readonly gmail search 'is:unread newer_than:7d' --max 10
gog --account you@gmail.com --readonly calendar events --today
gog --account you@gmail.com --readonly drive audit sharing --parent <folderId> --json

# Make automation parseable, non-interactive, read-only, and unable to send Gmail.
gog --readonly --gmail-no-send --no-input --json gmail search 'label:inbox'

Why gog

Google APIs expose resources and methods. Real work crosses them. gog keeps the raw capability, then adds the workflow and operational contracts a durable CLI needs:

  • Task-first workflows: search and sanitize mail, resolve calendar names, audit Drive sharing, edit Docs, append Sheet tables, build Slides, manage Workspace users, and back up accounts.
  • Automation that composes: stable --json and --plain stdout; prompts, progress, and warnings on stderr; documented exit codes; --no-input for CI.
  • Many identities, one install: account aliases, named OAuth clients, direct access tokens, ADC, OS/encrypted-file keyrings, and Workspace service accounts.
  • Agent safety with explicit boundaries: runtime --readonly, command allow/deny rules, --gmail-no-send, untrusted-content wrapping, dry-run plans, baked safety-profile binaries, and a typed MCP server that is read-only by default.
  • A discoverable contract: gog schema --json, generated reference pages for every command, and schema-generated service skills for agent workflows.

Read Why gog for the design tradeoffs, or go straight to: Install · Quickstart · Auth · Command index · Automation · Agent skills · MCP.

Rendered docs: https://gogcli.sh/. gog is open source and not affiliated with Google.

Install

See the full Install guide for Homebrew, Docker, Windows ZIPs, source builds, and headless/container keyring setup.

Homebrew

brew install openclaw/tap/gogcli
gog --version

Docker

docker run --rm ghcr.io/openclaw/gogcli:latest version

Authenticated container runs should use a persistent GOG_HOME directory and the encrypted file keyring:

docker volume create gogcli-state

docker run --rm -it \
  -e GOG_HOME=/persist/gogcli \
  -e GOG_KEYRING_BACKEND=file \
  -e GOG_KEYRING_PASSWORD \
  -v gogcli-state:/persist/gogcli \
  ghcr.io/openclaw/gogcli:latest \
  auth add you@gmail.com --services gmail,calendar,drive

Windows

Download gogcli_<version>_windows_amd64.zip or gogcli_<version>_windows_arm64.zip from the latest release, extract gog.exe, and put that directory on PATH.

Build from source

git clone https://github.com/openclaw/gogcli.git
cd gogcli
make
./bin/gog --version

Source builds require the Go version declared in go.mod.

Quick Start

The full walkthrough lives in Quickstart. For named OAuth clients, remote OAuth, direct access tokens, ADC, and Workspace service accounts, see Auth clients.

Create a Google Cloud project, enable the APIs you need, create a Desktop OAuth client, then store that client JSON in gog.

gog auth credentials ~/Downloads/client_secret_....json
gog auth add you@gmail.com --services gmail,calendar,drive,docs,sheets,contacts
gog auth doctor --check

export GOG_ACCOUNT=you@gmail.com
gog gmail search 'newer_than:7d' --max 10

Useful Google setup links:

Enable APIs in the same Cloud project that owns your OAuth client. If Google returns accessNotConfigured, enable that API and retry after propagation.

Consumer gmail.com accounts work for normal user APIs such as Gmail, Calendar, Drive, Docs, Sheets, Slides, Forms, Apps Script, Analytics, Search Console, Contacts/People, Tasks, and Classroom. Workspace-only APIs such as Admin Directory, Cloud Identity Groups, Chat, and Keep/domain-wide-delegation flows require a managed domain.

Avoid the seven-day OAuth expiry

If your OAuth app is External with publishing status Testing, Google refresh tokens for user-data scopes can expire after seven days. For a personal CLI app, publish it before the final authorization:

  1. Open Google Auth Platform → Audience in the same Cloud project that owns your Desktop OAuth client.

  2. Under Publishing status, click Publish app, then Confirm. This changes the app to In production; it does not submit the app for Google verification.

  3. If you already authorized while the app was in Testing, replace that token once, preserving the services you use:

    gog auth add you@gmail.com --services gmail,calendar,drive,docs,sheets,contacts --force-consent
    gog auth doctor --check

An unverified personal app can run In production, but sensitive scopes show an unverified-app warning and are subject to a lifetime 100-user cap. Public apps should complete Google's OAuth verification. See Google's refresh-token expiration rules and unverified-app limits.

Daily Examples

Every command below has generated reference docs in the Command index. The feature guides linked under each section explain the workflow shape and safety notes.

Gmail

Docs: Gmail workflows, Gmail watch, email tracking, gog gmail.

# Search mail and get sanitized message content for agents/scripts.
gog gmail search 'from:boss newer_than:30d' --json
gog gmail get <messageId> --sanitize-content --json

# Export Gmail filters in the format the Gmail web UI can import.
gog gmail settings filters export --out filters.xml

# Hard block send operations during automation.
gog --gmail-no-send gmail drafts create --to you@example.com --subject test

Permanent deletion with gog gmail batch delete requires the broader https://mail.google.com/ OAuth scope. The command reports an exact gog auth add ... --extra-scopes https://mail.google.com/ --force-consent reauthorization command when a known stored grant lacks it. Prefer gog gmail trash unless permanent deletion is intentional.

Calendar

Docs: gog calendar, calendar create, calendar update, calendar move, calendar delete-calendar, calendar unsubscribe, Zoom setup.

gog calendar events --today
gog calendar create --summary "Review" \
  --from "2026-05-06T10:00:00+02:00" \
  --to "2026-05-06T10:30:00+02:00"
gog calendar create primary --summary "Coffee" \
  --from "2026-05-06T10:00:00+02:00" \
  --to "2026-05-06T10:30:00+02:00" \
  --location-search "Elysian Coffee Vancouver"
gog calendar update primary <eventId> --with-meet
gog calendar update primary <eventId> \
  --attachment 'https://drive.google.com/open?id=<fileId>'
# Repeated --attachment values replace all attachments; an empty value clears them.
gog calendar update primary <eventId> --attachment ''
gog zoom auth setup
gog calendar create primary --summary "Client sync" \
  --from "2026-05-06T11:00:00+02:00" \
  --to "2026-05-06T11:30:00+02:00" \
  --with-zoom
gog calendar move primary <eventId> team-calendar@example.com
gog calendar create-calendar "Project calendar" --timezone Europe/London
gog calendar delete-calendar <calendarId> --force
gog calendar subscribe en.uk#holiday@group.v.calendar.google.com
gog calendar unsubscribe en.uk#holiday@group.v.calendar.google.com --force

Google Calendar appointment schedules are not exposed by the Calendar API, so gog cannot list or manage them.

Drive

Docs: Drive audits, polling, raw API dumps, gog drive, drive changes, drive revisions, drive activity.

# Read-only folder audits.
gog drive tree --parent <folderId> --depth 2
gog drive du --parent <folderId> --max 20 --json
gog drive inventory --parent <folderId> --json
gog drive audit sharing --parent <folderId> --internal-domain example.com --json
gog drive audit user clawdbot@gmail.com --parent <folderId> --json
gog drive bulk remove-public --parent <folderId> --dry-run
gog drive share <fileId> --to user --email person@example.com --notify --dry-run
gog drive labels list --json
gog drive labels file list <fileId> --json
gog drive labels file apply <fileId> <labelId> --text fieldId=value
# Drive Labels requires a Google Workspace customer.

# Recursively push local contents without deleting remote-only files.
gog drive sync push ./backup --parent <folderId> --dry-run --json
gog drive sync push ./backup --parent <folderId>

# Ask Drive for non-default fields.
gog drive get <fileId> --fields 'id,name,mimeType,size,owners,emailAddress' --json

# Track changes and audit activity.
gog drive changes start-token
gog drive changes list --token <token> --json
gog drive changes poll --state-file ~/.local/state/gog/drive-changes.json --json
gog drive changes serve --state-file ~/.local/state/gog/drive-serve.json \
  --channel-token-file ~/.config/gog/drive-channel-token --auto-renew \
  --webhook-url https://example.com/drive-changes
gog drive revisions list <fileId> --all --json
gog drive revisions get <fileId> <revisionId> --json
gog drive activity query --file <fileId> --actions edit,share --from 2026-01-01T00:00:00Z --json

# The Drive API exposes revision metadata and provider export links. For native
# Docs Editors files, it does not expose complete editor history or historical bodies.

# Lossless raw API JSON.
gog drive raw <fileId> --pretty

Maps

Docs: gog maps, maps places.

gog maps places search "Elysian Coffee Vancouver" --json
gog maps places details <placeId> --json
gog maps directions --origin "Vancouver, BC" --destination "Seattle, WA" --json
gog maps distance --origins "Vancouver BC" --destinations "Seattle WA" --json
gog maps geocode "1600 Amphitheatre Parkway, Mountain View, CA" --json
gog maps reverse-geocode --lat=37.422 --lng=-122.084 --json

Use comma-separated maps distance --origins/--destinations for multiple locations. If an address itself contains commas, pass it without commas or use a Place ID/lat,lng value to avoid splitting it.

Photos

Docs: gog photos and Photos Picker workflows.

Google Photos Library API access is limited to app-created media through photoslibrary.readonly.appcreateddata, and the Photos Library API must be enabled on the OAuth project used for gog auth add.

gog photos list --json
gog photos search --media-type PHOTO --from 2026-01-01 --to 2026-01-31 --json
gog photos download <mediaItemId> --out photo.jpg

For user-selected private media, enable the Photos Picker API and authorize its separate explicit-opt-in service. It is not included in the default user service set.

gog auth add you@gmail.com --services photospicker
gog photos picker create --max-items 20 --open --json
gog photos picker wait <sessionId> --json
gog photos picker list <sessionId> --all --json
gog photos picker download <sessionId> <mediaItemId> --out photo.jpg
gog photos picker delete <sessionId>

Contacts

Docs: contacts dedupe, JSON contact updates, gog contacts.

gog contacts search alice --json
gog contacts export --all --out contacts.vcf

# Preview by default.
gog contacts dedupe --json
gog contacts dedupe --match email,phone,name

# Inspect the mutation plan, then apply with confirmation.
gog contacts dedupe --apply --dry-run --json
gog contacts dedupe --apply

# Scope automation to exact reviewed contact resources.
gog contacts dedupe --resource people/123 --resource people/456 --apply --force --json

Docs

Docs: Google Docs editing, atomic Docs request batches, polling, sed-style document edits, gog docs.

gog docs write <docId> --append --markdown --text '## Status'
gog docs format <docId> --match Status --bold --font-size 18
gog docs format <docId> --match "Project site" --link https://example.com
gog docs format <docId> --match "Action item" --bullets --space-below 6
gog docs find-range <docId> "Release status" --json
gog docs insert-page-break <docId> --at-end
gog docs insert-table <docId> --rows 3 --cols 2 --at-end
gog docs named-range create <docId> --name Status --at "Ready"
gog docs insert-image <docId> --url https://example.com/chart.png --at end
gog docs add-tab <docId> --title "Notes"
gog docs tabs add <docId> --title "Notes"
gog docs comments poll <docId> --state-file ~/.local/state/gog/doc-comments.json --json
gog docs find-replace <docId> old new --tab "Notes" --dry-run
gog docs raw <docId> --pretty

Sheets

Docs: Sheets batch updates, Sheets tables, Sheets formatting, gog sheets.

gog sheets get <spreadsheetId> 'Sheet1!A1:D20' --json
gog sheets update <spreadsheetId> 'Sheet1!B13' --values-json @formula.json --fail-on-formula-error --json
gog sheets batch-update <spreadsheetId> --data-json @updates.json --json
gog sheets table list <spreadsheetId>
gog sheets table append <spreadsheetId> Tasks 'Ship README|done'
gog sheets table clear <spreadsheetId> Tasks
gog sheets validation set <spreadsheetId> 'Sheet1!B2:B100' \
  --type ONE_OF_LIST --value Open --value Done
gog sheets links set <spreadsheetId> 'Sheet1!C2' https://example.com "Project"
gog sheets delete-dimension <spreadsheetId> 'Sheet1!3:3' --dimension ROWS --force
gog sheets conditional-format add <spreadsheetId> 'Sheet1!A2:A100' \
  --type text-contains \
  --expr blocked \
  --format-json '{"backgroundColor":{"red":1,"green":0.84,"blue":0.84}}'
gog sheets banding set <spreadsheetId> 'Sheet1!A1:D100'

Slides and Forms

Docs: Slides from Markdown, template replacement, introspection, text editing, tables, slide structure, gog slides, gog forms.

gog slides create-from-markdown "Weekly update" --content-file slides.md
gog slides info <presentationId> --json
gog slides read-slide <presentationId> <slideId> --detail --json
gog slides locate <presentationId> "Quarterly revenue" --all --json
gog slides style-text <presentationId> <objectId> --range 0:12 --bold --size 24
gog slides replace-text <presentationId> old new --object <objectId>
gog slides table create <presentationId> <slideId> --rows 2 --cols 3
gog slides insert-text <presentationId> <tableId> "Revenue" --row 0 --col 0 --replace
gog slides table row size <presentationId> <tableId> --row 0 --height 48
gog slides table cell style <presentationId> <tableId> --row 0 --col 0 --bold --fill-color '#3367d6'
gog slides new-slide <presentationId> --layout TITLE_AND_BODY --index 1
gog slides duplicate-slide <presentationId> <slideId> --to-index 2
gog slides move-slide <presentationId> <slideId> --to-index 0
gog slides insert-image <presentationId> <slideId> chart.png --x 24 --y 24 --width 240
gog slides insert-text <presentationId> <objectId> "New text"
gog forms update <formId> --quiz=true
gog forms add-question <formId> --title "What is 2+2?" --type radio -o 1 -o 4 --correct 4 --points 1
gog forms questions add <formId> --title "What is 2+2?" --type radio -o 1 -o 4 --correct 4 --points 1
gog forms publish <formId>
gog forms responses list <formId> --json
gog forms raw <formId> --pretty

YouTube

Docs: YouTube workflows, gog youtube, youtube channels, youtube videos, youtube activities, youtube subscriptions, youtube playlists.

gog config set youtube_api_key YOUR_API_KEY
gog yt channels list --id UC_x5XG1OV2P6uZZ5FSM9Ttw --json
gog yt videos list --chart mostPopular --region US --max 5
gog yt activities list --mine -a you@gmail.com
gog yt subscriptions list --all -a you@gmail.com
gog yt playlists list --mine -a you@gmail.com
gog yt playlists items list --playlist-id PLAYLIST_ID --all
gog yt videos list --my-rating like -a you@gmail.com   # your liked videos
gog yt playlists create --title "Research" -a you@gmail.com

For API-key reads, enable YouTube Data API v3 on the key's Google Cloud project and make sure API-key restrictions allow YouTube Data API calls. Authenticated --mine reads use OAuth instead. Subscription and playlist mutations require the narrower youtube.force-ssl write scope; authorize it explicitly before the first write:

gog auth add you@gmail.com --services youtube \
  --extra-scopes https://www.googleapis.com/auth/youtube.force-ssl \
  --force-consent

All YouTube mutations support --dry-run. Unsubscribe, playlist-item removal, and playlist deletion also require confirmation or --force. New playlists default to private; pass --privacy unlisted or --privacy public explicitly to broaden visibility. The authenticated Google account must already have a YouTube channel; initialize it once at youtube.com if the API reports youtubeSignupRequired.

Analytics and Search Console

Docs: gog analytics, analytics report, gog searchconsole, searchconsole query.

gog analytics accounts --all --json
gog analytics report 123456789 --from 7daysAgo --to today --dimensions date,country --metrics activeUsers,sessions
gog searchconsole sites
gog searchconsole query sc-domain:example.com --from 2026-02-01 --to 2026-02-07 --dimensions query,page --filter query:contains:gog
gog searchconsole sitemaps submit sc-domain:example.com https://example.com/sitemap.xml --force

Backup

Docs: Backup, gog backup.

gog backup init --repo ~/Backups/gog
gog backup push --services gmail,calendar,contacts,drive
gog backup verify
gog backup export --gmail-format markdown --out ~/Exports/gog

See docs/backup.md before running broad or unattended backup jobs.

Output and Automation

Docs: Automation, Safety Profiles, gog schema, gog config no-send.

Use --json for structured output and --plain for stable TSV. Prompts, progress, and warnings go to stderr so stdout stays parseable.

gog --json gmail search 'has:attachment newer_than:90d' --max 50 |
  jq -r '.threads[].id'

gog --plain calendar events --today
gog schema --json
gog schema --json | jq '.automation'

For APIs or methods not yet modeled as first-class commands, inspect and call Google's Discovery surface directly:

gog api describe gmail v1 gmail.users.labels.list
gog api call gmail v1 gmail.users.labels.list --params '{"userId":"me"}'

Generic mutations require --allow-write plus confirmation (or --force). Prefer first-class commands when available; api call intentionally grants a broader surface than a narrow command allowlist. With runtime command filters, each method also needs an explicit api.<method-id> rule such as api.gmail.users.labels.list; generic calls are unavailable in binaries built with a baked safety profile.

There is no separate agent execution mode. The same CLI behavior serves interactive use, scripts, CI, and agents: --json/--plain keep stdout parseable, --no-input prevents prompts, stable exit codes classify failures, --wrap-untrusted marks fetched free text, and runtime or baked command policies constrain available operations. GOG_HELP=agent gog --help emits a compact root-help contract with common read-only recipes; it does not change commands or authorization. gog schema --json exposes the complete command schema, exit-code map, and effective safety state. See Automation.

Agent evaluation

The reproducible gog/GWS comparison runs identical Gmail, Calendar, and exact-name Drive tasks through Codex and OpenClaw. In the final two-repetition, cache-counterbalanced matrix against GWS 0.22.5, all 24 task assertions passed:

Agent gog median tokens GWS median tokens gog median latency GWS median latency
Codex 94,078.5 97,546 13,735 ms 13,676 ms
OpenClaw 38,350.5 45,727 41,124.5 ms 45,597 ms

With correctness tied, gog used 3.6% fewer total tokens in Codex and 16.1% fewer in OpenClaw. The linked methodology documents fixtures, cache ordering, tool-call and uncached-token metrics, credential isolation, and reproduction.

Useful global flags:

  • --account <email|alias|auto>: select an account
  • --client <name>: select a stored OAuth client
  • --json: JSON stdout
  • --plain: stable parseable text stdout
  • --select <csv>: in JSON mode, project output fields. --fields is accepted as an alias on commands that do not define their own API field-mask --fields.
  • --wrap-untrusted: in JSON/raw output, wrap fetched free-text fields with external untrusted-content markers for LLM/agent consumption
  • --dry-run: print intended actions where a command supports planning
  • --readonly: block mutating API requests before network dispatch; still allow known POST-based query APIs
  • --no-input: fail instead of prompting
  • --force: confirm destructive operations
  • --enable-commands <csv>: allow selected command prefixes. Parent paths allow children, so gmail allows the Gmail command family.
  • --enable-commands-exact <csv>: allow only exact command paths. Parent paths do not allow children, so gmail.search allows gog gmail search without allowing sibling commands like gog gmail send.
  • --disable-commands <csv>: block selected command paths
  • --gmail-no-send: block Gmail send operations

For coding agents or CI, prefer:

gog --account you@gmail.com \
  --enable-commands-exact gmail.search,gmail.get,drive.ls,docs.cat \
  --gmail-no-send \
  --readonly \
  --wrap-untrusted \
  --json \
  gmail search 'newer_than:7d'

For environment-configured agents or CI, set GOG_ENABLE_COMMANDS_EXACT to the same comma-separated exact command paths:

GOG_ENABLE_COMMANDS_EXACT=gmail.search,gmail.get,drive.ls,docs.cat \
GOG_GMAIL_NO_SEND=1 \
GOG_WRAP_UNTRUSTED=1 \
gog --json gmail search 'newer_than:7d'

For stricter agent deployments, build or download a baked safety-profile binary. See docs/safety-profiles.md.

MCP server

gog mcp exposes a typed MCP stdio server for agent clients. It registers specific Google tools such as gmail_search, docs_get, and sheets_read_range; it does not expose a generic gog_exec or arbitrary command bridge.

# Read-only server.
gog --account you@gmail.com mcp

# Docs tools only; writes require explicit opt-in.
gog --account you@gmail.com \
  --enable-commands-exact mcp,docs.cat,docs.write \
  mcp \
  --allow-write \
  --allow-tool 'docs.*'

See docs/mcp.md for client config, tool selection, safety behavior, persistent global/per-account capability ceilings, mcporter examples, and troubleshooting.

Auth and Accounts

Docs: Auth clients, gog auth, auth add, auth doctor, auth service-account.

OAuth clients

Store a Desktop OAuth client once:

gog auth setup you@gmail.com --gcloud-project my-gog-project --enable-apis --open-console
gog auth credentials ~/Downloads/client_secret_....json
gog auth add you@gmail.com --services gmail,calendar,drive

Use named clients when different accounts should use different Cloud projects:

gog --client work auth credentials ~/Downloads/work-client.json
gog --client work auth add you@company.com
gog auth credentials list

See docs/auth-clients.md for client selection rules, domain mapping, remote OAuth, direct access tokens, ADC, and service accounts.

Account selection

gog auth list --check
gog auth alias set work you@company.com

gog --account work gmail search 'is:unread'
export GOG_ACCOUNT=you@gmail.com
gog calendar events --today

Keyring backends

By default gog uses the best OS keyring available. For headless or container runs, use the encrypted file backend and inject GOG_KEYRING_PASSWORD from the current shell or secret store.

gog auth keyring
gog auth keyring file
GOG_KEYRING_BACKEND=file GOG_KEYRING_PASSWORD=... gog auth list --check

For systemd services, gateways, and coding agents, set the same variables on the service or agent process itself. A successful shell check does not mean the agent subprocess inherited GOG_KEYRING_PASSWORD; verify through the actual agent entrypoint with gog auth doctor --check --no-input.

Use GOG_HOME=/persist/gogcli to keep config, data, state, and cache under one portable root, or set GOG_CONFIG_DIR, GOG_DATA_DIR, GOG_STATE_DIR, and GOG_CACHE_DIR individually for split lifetimes. These overrides are above XDG paths and are useful in containers, CI, and agent sandboxes.

Never commit OAuth client JSON files, refresh tokens, service-account keys, or file-keyring passwords.

Workspace service accounts

Workspace admins can configure domain-wide delegation and then store a service-account key for the user to impersonate:

gog auth service-account set user@company.com --key ~/Downloads/service-account.json
gog --account user@company.com auth status

Service accounts are mainly useful for Workspace Admin, Groups, Keep, and domain-wide automation. They do not replace normal OAuth for consumer Gmail accounts.

Services

Docs: Command index, Workspace Admin, gog auth services.

Common user services:

  • Gmail, Calendar, Drive, Docs, Sheets, Slides, Forms, Meet, Zoom, Apps Script
  • Analytics and Search Console
  • Contacts, People, Tasks, Classroom
  • Chat for Workspace accounts
  • Backup and local utility commands

Workspace/admin services:

  • Admin Directory
  • Cloud Identity Groups
  • Keep with domain-wide delegation

Admin Directory includes Workspace user creation from the CLI:

gog --account admin@example.com admin users create ada@example.com \
  --first-name Ada \
  --last-name Lovelace \
  --password 'TempPass123!' \
  --change-password \
  --ou /Engineering

Omit --password to generate a temporary password. See docs/workspace-admin.md for service-account setup, user cleanup, recovery fields, organizational units, and group examples.

Workspace organizational units are covered too:

gog --account admin@example.com admin orgunits list --type all
gog --account admin@example.com admin orgunits create Engineering --parent /

Generated service scope table:

Service User APIs Scopes Notes
gmail yes Gmail API https://www.googleapis.com/auth/gmail.modify
https://www.googleapis.com/auth/gmail.settings.basic
https://www.googleapis.com/auth/gmail.settings.sharing
calendar yes Calendar API https://www.googleapis.com/auth/calendar
chat yes Chat API https://www.googleapis.com/auth/chat.spaces
https://www.googleapis.com/auth/chat.messages
https://www.googleapis.com/auth/chat.memberships
https://www.googleapis.com/auth/chat.users.readstate.readonly
https://www.googleapis.com/auth/chat.messages.reactions.create
https://www.googleapis.com/auth/chat.messages.reactions.readonly
classroom yes Classroom API https://www.googleapis.com/auth/classroom.courses
https://www.googleapis.com/auth/classroom.rosters
https://www.googleapis.com/auth/classroom.coursework.students
https://www.googleapis.com/auth/classroom.coursework.me
https://www.googleapis.com/auth/classroom.courseworkmaterials
https://www.googleapis.com/auth/classroom.announcements
https://www.googleapis.com/auth/classroom.topics
https://www.googleapis.com/auth/classroom.guardianlinks.students
https://www.googleapis.com/auth/classroom.profile.emails
https://www.googleapis.com/auth/classroom.profile.photos
drive yes Drive API https://www.googleapis.com/auth/drive
driveactivity yes Drive Activity API https://www.googleapis.com/auth/drive.activity.readonly Read-only audit/activity scope; authorize with --services driveactivity
drivelabels yes Drive Labels API https://www.googleapis.com/auth/drive.labels.readonly Read-only Drive label schema; authorize with --services drivelabels
docs yes Docs API, Drive API https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/documents
Export/copy/create via Drive
slides yes Slides API, Drive API https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/presentations
Create/edit presentations
contacts yes People API https://www.googleapis.com/auth/contacts
https://www.googleapis.com/auth/contacts.other.readonly
https://www.googleapis.com/auth/directory.readonly
Contacts + other contacts + directory
tasks yes Tasks API https://www.googleapis.com/auth/tasks
sheets yes Sheets API, Drive API https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/spreadsheets
Export via Drive
people yes People API profile OIDC profile scope
forms yes Forms API https://www.googleapis.com/auth/forms.body
https://www.googleapis.com/auth/forms.responses.readonly
sites yes Drive API https://www.googleapis.com/auth/drive New Google Sites are exposed as Drive files
meet yes Meet REST API https://www.googleapis.com/auth/meetings.space.created
https://www.googleapis.com/auth/meetings.space.readonly
https://www.googleapis.com/auth/meetings.space.settings
appscript yes Apps Script API https://www.googleapis.com/auth/script.projects
https://www.googleapis.com/auth/script.deployments
https://www.googleapis.com/auth/script.processes
analytics yes Analytics Admin API, Analytics Data API https://www.googleapis.com/auth/analytics.readonly GA4 account summaries + reporting
searchconsole yes Search Console API https://www.googleapis.com/auth/webmasters Search Analytics + sitemap management
ads yes Google Ads API https://www.googleapis.com/auth/adwords OAuth scope only
groups no Cloud Identity API https://www.googleapis.com/auth/cloud-identity.groups.readonly Workspace only
keep no Keep API https://www.googleapis.com/auth/keep Workspace only; service account (domain-wide delegation)
admin no Admin SDK Directory API https://www.googleapis.com/auth/admin.directory.user
https://www.googleapis.com/auth/admin.directory.group
https://www.googleapis.com/auth/admin.directory.group.member
Workspace only; service account with domain-wide delegation required
youtube yes YouTube Data API v3 https://www.googleapis.com/auth/youtube.readonly Most read operations also work with API key only (config youtube_api_key or GOG_YOUTUBE_API_KEY)
photos yes Photos Library API https://www.googleapis.com/auth/photoslibrary.readonly.appcreateddata Read-only app-created media only after Google Photos Library API scope changes
photospicker no Photos Picker API https://www.googleapis.com/auth/photospicker.mediaitems.readonly Consumer OAuth; explicit opt-in with --services photospicker; selected media only

Regenerate the table with:

go run scripts/gen-auth-services-md.go

Documentation

Every command also has help built in:

gog --help
gog gmail --help
gog drive inventory --help
gog schema --json

Development

make tools
make build
make fmt
make lint
make test
make ci

Generated command docs:

make docs-commands
make docs-site
open dist/docs-site/index.html

Live Google API smoke tests are opt-in:

scripts/live-test.sh --fast --account you@gmail.com
GOG_IT_ACCOUNT=you@gmail.com go test -tags=integration ./internal/integration

See docs/RELEASING.md for the release checklist.

Credits

Inspired by Mario Zechner's original Google CLIs:

License

MIT

View on GitHub

Recent activity

commits and pull requests

Recent open issues

view all

Releases and announcements

46 total
  1. v0.34.1v0.34.1Jul 16, 202614.3K downloads

    - Drive: add non-destructive `drive sync push` for recursive local-directory uploads with checksum skips, ID-preserving updates, full conflict preflight, deterministic dry-run plans, and shared-drive support. (#925) — thanks @Avg8888. - Gmail: add `gmail attachment --inline` for bounded base64 content output to remote callers while always fetching fresh bytes and retaining path-only fallback above 3 MiB. (#919) — thanks @chrischall. - Docs: preserve external and internal text-run link targets in `docs cat --chips`, JSON, tab, table, and numbered output while keeping default text unchanged. (#917, #921) — thanks @neo-wanderer. - Gmail: enforce per-account no-send guards before dry-run exits for first-class and Discovery send paths while preserving no-guard keyring avoidance. (#915, #916) — thanks @veteranbv. - Gmail: accept padded Gmail API base64url payloads in `gmail get --format raw` while retaining unpadded compatibility. (#922, #923) — thanks @goutamadwant. - MCP: add optional global and per-account capability ceilings in `config.json`, with narrow persistent write authorization, runtime-only restriction, and fail-closed selector validation. (#913) — thanks @mcaldas. Full ch

  2. v0.34.0v0.34.0Jul 11, 20268K downloads

    - Calendar: add `--timezone` / `--tz` display overrides to `calendar events` and `calendar event`, including uniform multi-calendar output without changing range parsing. (#908) — thanks @bxxd. - Calendar: render event-local fields in the event's own timezone when present, falling back to the containing calendar timezone. (#905) — thanks @Hilo-Hilo. - Docs: add opt-in smart-chip rendering to `docs cat --chips` and structured person, date, and rich-link metadata to JSON output while preserving default text output. (#907, #909) — thanks @TurboTheTurtle. - Release: sign and notarize macOS artifacts locally with the OpenClaw Foundation Developer ID while preserving the existing `com.steipete.gogcli.gog` identifier; ordinary builds and GitHub CI remain credential-free. Full changelog: https://github.com/openclaw/gogcli/blob/v0.34.0/CHANGELOG.md

  3. v0.33.0v0.33.0Jul 6, 20266.4K downloads

    ## 0.33.0 - Sheets: add `sheets filter set` for creating basic filters, with guarded replacement of an existing sheet filter. (#902) - Sheets: add gradient conditional formats through `--gradient-rule-json`, with strict nested color validation and rejection of unsupported alpha. (#901) - Auth: trust Developer-ID-signed release binaries when creating macOS Keychain items so upgrades read tokens without repeated permission prompts and preserve credential removal, while leaving ad-hoc/source builds unchanged and allowing `GOG_KEYCHAIN_TRUST_APPLICATION` overrides.

  4. v0.32.0v0.32.0Jul 3, 20263.4K downloads

    ## 0.32.0 - Docs: add `docs suggestions list` for read-only pending text insertions and deletions, including exact UTF-16 ranges, segment context, and tab selection. (#876) - Auth: retry one replayable Google API request after an `insufficient scopes` 403 by refreshing stored OAuth credentials, while preserving ordinary permission failures and non-replayable requests. (#889) — thanks @ortonom. - CLI: add read-only `update status` / `update check` release metadata, platform asset, checksum, and install-method reporting. (#882) — thanks @titus7490. - YouTube: add opt-in `videos list --parts all` full metadata while preserving the existing compact default and explicit owner-only part requests. (#871) — thanks @coeur-de-loup. - Docs: add `docs format --spacing-mode` for setting paragraph spacing collapse behavior alongside `--space-above` and `--space-below`. (#885) — thanks @odyssey4me.

  5. v0.31.1v0.31.1Jun 26, 20269.5K downloads

    ## 0.31.1 - Calendar: add `calendar changed` for listing recently modified events, including cancellations, across one or more calendars. (#875) — thanks @sorenisanerd. - Calendar: add a `;resource` attendee modifier for event create, attendee replacement, and additive attendee updates. (#881) — thanks @titus7490.

Code frequency

additions and deletions
+108.7K-108.7KWeek of 2025-12-07: +10,271 linesWeek of 2025-12-07: -263 linesWeek of 2025-12-14: +3,148 linesWeek of 2025-12-14: -73 linesWeek of 2025-12-21: +22,749 linesWeek of 2025-12-21: -4,666 linesWeek of 2025-12-28: +18,783 linesWeek of 2025-12-28: -10,099 linesWeek of 2026-01-04: +31,458 linesWeek of 2026-01-04: -4,295 linesWeek of 2026-01-11: +18,153 linesWeek of 2026-01-11: -1,976 linesWeek of 2026-01-18: +3,382 linesWeek of 2026-01-18: -560 linesWeek of 2026-01-25: +1,055 linesWeek of 2026-01-25: -381 linesWeek of 2026-02-01: +1,155 linesWeek of 2026-02-01: -205 linesWeek of 2026-02-08: +24,244 linesWeek of 2026-02-08: -3,516 linesWeek of 2026-02-15: +9,334 linesWeek of 2026-02-15: -1,325 linesWeek of 2026-02-22: +22,327 linesWeek of 2026-02-22: -403 linesWeek of 2026-03-01: +10,361 linesWeek of 2026-03-01: -1,559 linesWeek of 2026-03-08: +20,767 linesWeek of 2026-03-08: -10,498 linesWeek of 2026-03-15: +0 linesWeek of 2026-03-15: -0 linesWeek of 2026-03-22: +0 linesWeek of 2026-03-22: -0 linesWeek of 2026-03-29: +0 linesWeek of 2026-03-29: -0 linesWeek of 2026-04-05: +0 linesWeek of 2026-04-05: -0 linesWeek of 2026-04-12: +0 linesWeek of 2026-04-12: -0 linesWeek of 2026-04-19: +9,395 linesWeek of 2026-04-19: -1,792 linesWeek of 2026-04-26: +20,949 linesWeek of 2026-04-26: -3,043 linesWeek of 2026-05-03: +41,493 linesWeek of 2026-05-03: -6,458 linesWeek of 2026-05-10: +20,777 linesWeek of 2026-05-10: -3,783 linesWeek of 2026-05-17: +15,792 linesWeek of 2026-05-17: -853 linesWeek of 2026-05-24: +5,087 linesWeek of 2026-05-24: -712 linesWeek of 2026-05-31: +10,980 linesWeek of 2026-05-31: -1,560 linesWeek of 2026-06-07: +108,674 linesWeek of 2026-06-07: -56,031 linesWeek of 2026-06-14: +20,912 linesWeek of 2026-06-14: -8,816 linesWeek of 2026-06-21: +10,543 linesWeek of 2026-06-21: -382 linesWeek of 2026-06-28: +2,209 linesWeek of 2026-06-28: -78 linesWeek of 2026-07-05: +11,162 linesWeek of 2026-07-05: -1,861 linesWeek of 2026-07-12: +2,647 linesWeek of 2026-07-12: -86 linesWeek of 2026-07-19: +270 linesWeek of 2026-07-19: -16 linesWeek of 2026-07-26: +2,065 linesWeek of 2026-07-26: -508 linesDec 7, 2025Jul 26, 2026
+480.1K lines added, -125.8K removed over the last year.

Commits per week

last 52 weeks
3670Week of 2025-08-02: 0 commitsWeek of 2025-08-09: 0 commitsWeek of 2025-08-16: 0 commitsWeek of 2025-08-23: 0 commitsWeek of 2025-08-30: 0 commitsWeek of 2025-09-06: 0 commitsWeek of 2025-09-13: 0 commitsWeek of 2025-09-20: 0 commitsWeek of 2025-09-27: 0 commitsWeek of 2025-10-04: 0 commitsWeek of 2025-10-11: 0 commitsWeek of 2025-10-18: 0 commitsWeek of 2025-10-25: 0 commitsWeek of 2025-11-01: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 40 commitsWeek of 2025-12-14: 19 commitsWeek of 2025-12-21: 72 commitsWeek of 2025-12-28: 77 commitsWeek of 2026-01-04: 121 commitsWeek of 2026-01-11: 91 commitsWeek of 2026-01-18: 37 commitsWeek of 2026-01-25: 16 commitsWeek of 2026-02-01: 24 commitsWeek of 2026-02-08: 51 commitsWeek of 2026-02-15: 37 commitsWeek of 2026-02-22: 8 commitsWeek of 2026-03-01: 70 commitsWeek of 2026-03-08: 105 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 0 commitsWeek of 2026-03-29: 0 commitsWeek of 2026-04-05: 0 commitsWeek of 2026-04-12: 0 commitsWeek of 2026-04-19: 58 commitsWeek of 2026-04-26: 77 commitsWeek of 2026-05-03: 52 commitsWeek of 2026-05-10: 46 commitsWeek of 2026-05-17: 51 commitsWeek of 2026-05-24: 17 commitsWeek of 2026-05-31: 130 commitsWeek of 2026-06-07: 367 commitsWeek of 2026-06-14: 77 commitsWeek of 2026-06-21: 26 commitsWeek of 2026-06-28: 10 commitsWeek of 2026-07-05: 26 commitsWeek of 2026-07-12: 6 commitsWeek of 2026-07-19: 5 commitsWeek of 2026-07-26: 9 commitsAug 2, 2025Jul 26, 2026
1.7K commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 14 commitsSun 1:00 — 15 commitsSun 2:00 — 12 commitsSun 3:00 — 13 commitsSun 4:00 — 14 commitsSun 5:00 — 11 commitsSun 6:00 — 9 commitsSun 7:00 — 5 commitsSun 8:00 — 1 commitsSun 9:00 — 6 commitsSun 10:00 — 4 commitsSun 11:00 — 12 commitsSun 12:00 — 3 commitsSun 13:00 — 3 commitsSun 14:00 — 4 commitsSun 15:00 — 1 commitsSun 16:00 — 12 commitsSun 17:00 — 8 commitsSun 18:00 — 16 commitsSun 19:00 — 14 commitsSun 20:00 — 9 commitsSun 21:00 — 12 commitsSun 22:00 — 11 commitsSun 23:00 — 17 commitsMon 0:00 — 16 commitsMon 1:00 — 13 commitsMon 2:00 — 17 commitsMon 3:00 — 36 commitsMon 4:00 — 15 commitsMon 5:00 — 25 commitsMon 6:00 — 24 commitsMon 7:00 — 15 commitsMon 8:00 — 15 commitsMon 9:00 — 12 commitsMon 10:00 — 16 commitsMon 11:00 — 19 commitsMon 12:00 — 12 commitsMon 13:00 — 24 commitsMon 14:00 — 19 commitsMon 15:00 — 7 commitsMon 16:00 — 8 commitsMon 17:00 — 5 commitsMon 18:00 — 4 commitsMon 19:00 — 11 commitsMon 20:00 — 9 commitsMon 21:00 — 9 commitsMon 22:00 — 10 commitsMon 23:00 — 7 commitsTue 0:00 — 5 commitsTue 1:00 — 4 commitsTue 2:00 — 6 commitsTue 3:00 — 6 commitsTue 4:00 — 7 commitsTue 5:00 — 7 commitsTue 6:00 — 7 commitsTue 7:00 — 7 commitsTue 8:00 — 16 commitsTue 9:00 — 4 commitsTue 10:00 — 6 commitsTue 11:00 — 2 commitsTue 12:00 — 0 commitsTue 13:00 — 0 commitsTue 14:00 — 1 commitsTue 15:00 — 6 commitsTue 16:00 — 6 commitsTue 17:00 — 6 commitsTue 18:00 — 3 commitsTue 19:00 — 0 commitsTue 20:00 — 2 commitsTue 21:00 — 7 commitsTue 22:00 — 3 commitsTue 23:00 — 3 commitsWed 0:00 — 0 commitsWed 1:00 — 1 commitsWed 2:00 — 1 commitsWed 3:00 — 2 commitsWed 4:00 — 2 commitsWed 5:00 — 2 commitsWed 6:00 — 3 commitsWed 7:00 — 3 commitsWed 8:00 — 5 commitsWed 9:00 — 6 commitsWed 10:00 — 3 commitsWed 11:00 — 0 commitsWed 12:00 — 2 commitsWed 13:00 — 8 commitsWed 14:00 — 1 commitsWed 15:00 — 4 commitsWed 16:00 — 5 commitsWed 17:00 — 20 commitsWed 18:00 — 12 commitsWed 19:00 — 12 commitsWed 20:00 — 10 commitsWed 21:00 — 12 commitsWed 22:00 — 9 commitsWed 23:00 — 4 commitsThu 0:00 — 6 commitsThu 1:00 — 5 commitsThu 2:00 — 1 commitsThu 3:00 — 5 commitsThu 4:00 — 2 commitsThu 5:00 — 7 commitsThu 6:00 — 4 commitsThu 7:00 — 5 commitsThu 8:00 — 6 commitsThu 9:00 — 8 commitsThu 10:00 — 2 commitsThu 11:00 — 7 commitsThu 12:00 — 12 commitsThu 13:00 — 6 commitsThu 14:00 — 4 commitsThu 15:00 — 3 commitsThu 16:00 — 3 commitsThu 17:00 — 5 commitsThu 18:00 — 4 commitsThu 19:00 — 7 commitsThu 20:00 — 7 commitsThu 21:00 — 5 commitsThu 22:00 — 0 commitsThu 23:00 — 4 commitsFri 0:00 — 10 commitsFri 1:00 — 12 commitsFri 2:00 — 8 commitsFri 3:00 — 13 commitsFri 4:00 — 26 commitsFri 5:00 — 12 commitsFri 6:00 — 20 commitsFri 7:00 — 20 commitsFri 8:00 — 21 commitsFri 9:00 — 23 commitsFri 10:00 — 38 commitsFri 11:00 — 20 commitsFri 12:00 — 19 commitsFri 13:00 — 36 commitsFri 14:00 — 30 commitsFri 15:00 — 35 commitsFri 16:00 — 24 commitsFri 17:00 — 28 commitsFri 18:00 — 24 commitsFri 19:00 — 24 commitsFri 20:00 — 22 commitsFri 21:00 — 15 commitsFri 22:00 — 11 commitsFri 23:00 — 6 commitsSat 0:00 — 10 commitsSat 1:00 — 10 commitsSat 2:00 — 14 commitsSat 3:00 — 12 commitsSat 4:00 — 9 commitsSat 5:00 — 10 commitsSat 6:00 — 15 commitsSat 7:00 — 9 commitsSat 8:00 — 10 commitsSat 9:00 — 11 commitsSat 10:00 — 10 commitsSat 11:00 — 11 commitsSat 12:00 — 7 commitsSat 13:00 — 15 commitsSat 14:00 — 11 commitsSat 15:00 — 16 commitsSat 16:00 — 19 commitsSat 17:00 — 13 commitsSat 18:00 — 11 commitsSat 19:00 — 14 commitsSat 20:00 — 16 commitsSat 21:00 — 11 commitsSat 22:00 — 18 commitsSat 23:00 — 17 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.
  • avelino/awesome-go

    A curated list of awesome Go frameworks, libraries and software

    180.4K stars · Go

  • kubernetes/kubernetes

    Production-Grade Container Scheduling and Management

    124.3K stars · Go

  • asgeirtj/system_prompts_leaks

    Extracted system prompts from Anthropic - Claude Fable 5, Opus 5, Claude Design, Claude Code. OpenAI - ChatGPT GPT-5.6-Sol, Codex. Google - Gemini 3.5 Flash, 3.1 Pro, Antigravity. xAI - Grok, Cursor, Copilot, VS Code, Perplexity, and more. Updated regularly.

    62.5K stars · JavaScript

  • usememos/memos

    Open-source, self-hosted note-taking tool built for quick capture. Markdown-native, lightweight, and fully yours.

    62K stars · Go

  • hashicorp/terraform

    Terraform enables you to safely and predictably create, change, and improve infrastructure. It is a source-available tool that codifies APIs into declarative configuration files that can be shared amongst team members, treated as code, edited, reviewed, and versioned.

    49.4K stars · Go

  • elder-plinius/CL4R1T4S

    LEAKED SYSTEM PROMPTS FOR CHATGPT, CLAUDE, GEMINI, GROK, PERPLEXITY, CURSOR, LOVABLE, REPLIT, AND MORE! - AI SYSTEMS TRANSPARENCY FOR ALL! 👐

    46.8K stars