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] # https://github.com/googleworkspace/cli/blob/main/.env.example and the # project's README document ~/.config/gws as the default config directory. # The directory contains the CLI's local authentication and configuration # state; GOOGLE_WORKSPACE_CLI_CONFIG_DIR can override it. paths = ["~/.config/gws/"] # The official source/docs identify these local files as authentication state: # client_secret.json, credentials.enc, .encryption_key and token_cache.json. # They are all withheld as secrets while non-credential config in the directory # remains available to the dotfile consumer. 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 ` | 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"]