
This is the foundational reference for using Google Workspace CLI commands through Claude. It covers OAuth and service account authentication, global output formatting options (JSON, table, YAML, CSV), and the core command syntax pattern. The security rules are solid, emphasizing dry-run validation and never exposing secrets. The shell tips are genuinely helpful, especially the zsh history expansion gotcha with exclamation marks in spreadsheet ranges. If you're building workflows that interact with Google Workspace APIs, this gives you the authentication patterns and safety guardrails you need before diving into service-specific commands.
$ npx -y skills add googleworkspace/cli --skill gws-shared --agent claude-codeInstalls into .claude/skills of the current project.
The gws binary must be on $PATH. See the project README for install options.
# Browser-based OAuth (interactive)
gws auth login
# Service Account
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json
| Flag | Description |
|---|---|
--format <FORMAT> | Output format: json (default), table, yaml, csv |
--dry-run | Validate locally without calling the API |
--sanitize <TEMPLATE> | Screen responses through Model Armor |
gws <service> <resource> [sub-resource] <method> [flags]
| Flag | Description |
|---|---|
--params '{"key": "val"}' | URL/query parameters |
--json '{"key": "val"}' | Request body |
-o, --output <PATH> | Save binary responses to file |
--upload <PATH> | Upload file content (multipart) |
--page-all | Auto-paginate (NDJSON output) |
--page-limit <N> | Max pages when using --page-all (default: 10) |
--page-delay <MS> | Delay between pages in ms (default: 100) |
--dry-run for destructive operations--sanitize for PII/content safety screening! expansion: Sheet ranges like Sheet1!A1 contain ! which zsh interprets as history expansion. Use double quotes with escaped inner quotes instead of single quotes:
# WRONG (zsh will mangle the !)
gws sheets +read --spreadsheet ID --range 'Sheet1!A1:D10'
# CORRECT
gws sheets +read --spreadsheet ID --range "Sheet1!A1:D10"
--params and --json values in single quotes so the shell does not interpret the inner double quotes:
gws drive files list --params '{"pageSize": 5}'
https://github.com/googleworkspace/clihttps://github.com/googleworkspace/cli/issuesSponsors