id = "googleworkspace-cli"
name = "Google Workspace CLI"
homepage = "https://github.com/googleworkspace/cli"
description = "A command-line interface for Google Drive, Gmail, Calendar, Sheets, Docs, Chat and Admin."
executables = ["gws"]
[dotfiles]
paths = ["~/.config/gws/"]
secret = [
"~/.config/gws/client_secret.json",
"~/.config/gws/credentials.enc",
"~/.config/gws/.encryption_key",
"~/.config/gws/token_cache.json",
]
side_effect = false
[commands]
format = 1
label = "Call a Workspace API"
description = "Run one Discovery-style call such as 'gws drive files list' with JSON params or body, optional dry-run and pagination. Auth setup, helper commands (+send, +agenda) and uploads are not covered."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = false, short_attached = false, short_bundles = false }
[[commands.source]]
id = "readme"
kind = "help"
url = "https://raw.githubusercontent.com/googleworkspace/cli/HEAD/README.md"
revision = "2026-10-27"
evidence = """
gws drive files list --params '{"pageSize": 5}'
gws sheets spreadsheets create --json '{"properties": {"title": "Q1 Budget"}}'
gws chat spaces messages create \\
--params '{"parent": "spaces/xyz"}' \\
--json '{"text": "Deploy complete."}' \\
--dry-run
gws drive files list --params '{"pageSize": 100}' --page-all | jq -r '.files[].name'
| `--page-all` | Auto-paginate, one JSON line per page (NDJSON) | off |
| `--page-limit <N>` | Max pages to fetch | 10 |
"""
[[commands.field]]
id = "service"
label = "Service"
type = "string"
position = 0
min = 1
suggestions = [{ value = "drive", label = "Drive" }, { value = "gmail", label = "Gmail" }, { value = "calendar", label = "Calendar" }, { value = "sheets", label = "Sheets" }, { value = "chat", label = "Chat" }]
sources = ["readme"]
[[commands.field]]
id = "method_path"
label = "Resource and method"
description = "For example: files list, or spreadsheets create."
type = "string"
position = 1
multiple = true
min = 1
sources = ["readme"]
[[commands.field]]
id = "params"
label = "Parameters (JSON)"
type = "string"
option = ["--params"]
sources = ["readme"]
[[commands.field]]
id = "json"
label = "Request body (JSON)"
type = "string"
option = ["--json"]
sources = ["readme"]
[[commands.field]]
id = "dry_run"
label = "Dry run"
description = "Preview the request without sending it."
type = "boolean"
option = ["--dry-run"]
sources = ["readme"]
[[commands.field]]
id = "page_all"
label = "Fetch all pages"
type = "boolean"
option = ["--page-all"]
sources = ["readme"]
[[commands.field]]
id = "page_limit"
label = "Max pages"
type = "integer"
option = ["--page-limit"]
sources = ["readme"]
[[commands.task]]
id = "list"
label = "List with all pages"
fields = ["service", "method_path", "params", "page_all", "page_limit"]
required = ["service", "method_path"]
[[commands.task]]
id = "preview"
label = "Preview a write call"
fields = ["service", "method_path", "params", "json", "dry_run"]
required = ["service", "method_path"]
set = { dry_run = [true] }
[[commands.group]]
id = "basic"
label = "Basic"
fields = ["service", "method_path", "params", "json", "dry_run"]
[[commands.group]]
id = "advanced"
label = "Advanced"
fields = ["page_all", "page_limit"]