v0.2.2
googleworkspace/cliv0.2.2Mar 4, 2026by github-actions[bot]
AI Summary
This patch release significantly improves authentication workflows, error handling, and output formatting for better user experience.
Key Highlights
- Added manual Google Cloud OAuth client setup and browser-assisted login guidance.
- Narrowed default OAuth scopes to avoid errors on unverified apps and added a `--full` flag.
- Added detection for disabled APIs with direct enable URLs in error messages.
- Fixed YAML output issues with special characters (e.g., `drive#file`).
- Fixed repeated headers in CSV/table output when using `--page-all`.
New Features
- OAuth scope management improvements
- API enablement detection
- Atomic credential file writes
- Output formatting fixes for pagination
Full Release Notes
## Release Notes
### Patch Changes
- f281797: docs(auth): add manual Google Cloud OAuth client setup and browser-assisted login guidance
Adds step-by-step guidance for creating a Desktop OAuth client in Google Cloud Console,
where to place `client_secret.json`, and how humans/agents can complete browser consent
(including unverified app and scope-selection prompts).
- ee2e216: Narrow default OAuth scopes to avoid `Error 403: restricted_client` on unverified apps and add a `--full` flag for broader access (fixes #25). Replace the cryptic non-interactive setup error with actionable step-by-step OAuth console instructions (fixes #24).
- de2787e: feat(error): detect disabled APIs and guide users to enable them
When the Google API returns a 403 `accessNotConfigured` error (i.e., the
required API has not been enabled for the GCP project), `gws` now:
- Extracts the GCP Console enable URL from the error message body.
- Prints the original error JSON to stdout (machine-readable, unchanged shape
except for an optional new `enable_url` field added to the error object).
- Prints a human-readable hint with the direct enable URL to stderr, along
with instructions to retry after enabling.
This prevents a dead-end experience where users see a raw 403 JSON blob
with no guidance. The JSON output is backward-compatible; only an optional
`enable_url` field is added when the URL is parseable from the message.
Fixes #31
- 9935dde: ci: auto-generate and commit skills on PR branch pushes
- 4b868c7: docs: add community guidance to gws-shared skill and gws --help output
Encourages agents and users to star the repository and directs bug reports
and feature requests to GitHub Issues, with guidance to check for existing
issues before opening new ones.
- 0603bce: fix: atomic credential file writes to prevent corruption on crash or Ctrl-C
- 666f9a8: fix(auth): support --help / -h flag on auth subcommand
- bcd2401: fix: flatten nested objects in table output and fix multi-byte char truncation panic
- ee35e4a: fix: warn to stderr when unknown --format value is provided
- e094b02: fix: YAML block scalar for strings with `#`/`:`, and repeated CSV/table headers with `--page-all`
**Bug 1 — YAML output: `drive#file` rendered as block scalar**
Strings containing `#` or `:` (e.g. `drive#file`, `https://…`) were
incorrectly emitted as YAML block scalars (`|`), producing output like:
```yaml
kind: |
drive#file
```
Block scalars add an implicit trailing newline which changes the string
value and produces invalid-looking output. The fix restricts block
scalar to strings that genuinely contain newlines; all other strings
are double-quoted, which is safe for any character sequence.
**Bug 2 — `--page-all` with `--format csv` / `--format table` repeats headers**
When paginating with `--page-all`, each page printed its own header row,
making the combined output unusable for downstream processing:
```
id,kind,name ← page 1 header
1,drive#file,foo.txt
id,kind,name ← page 2 header (unexpected!)
2,drive#file,bar.txt
```
Column headers (and the table separator line) are now emitted only for
the first page; continuation pages contain data rows only.
- 173d155: fix: add YAML document separators (---) when paginating with --page-all --format yaml
- 214fc18: ci: skip smoketest on fork pull requests
## Install gws 0.2.2
### Install prebuilt binaries via shell script
```sh
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/googleworkspace/cli/releases/download/v0.2.2/gws-installer.sh | sh
```
### Install prebuilt binaries via powershell script
```sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/googleworkspace/cli/releases/download/v0.2.2/gws-installer.ps1 | iex"
```
### Install prebuilt binaries into your npm project
```sh
npm install @googleworkspace/cli@0.2.2
```
## Download gws 0.2.2
| File | Platform | Checksum |
|--------|----------|----------|
| [gws-aarch64-apple-darwin.tar.gz](https://github.com/googleworkspace/cli/releases/download/v0.2.2/gws-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/googleworkspace/cli/releases/download/v0.2.2/gws-aarch64-apple-darwin.tar.gz.sha256) |
| [gws-x86_64-apple-darwin.tar.gz](https://github.com/googleworkspace/cli/releases/download/v0.2.2/gws-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/googleworkspace/cli/releases/download/v0.2.2/gws-x86_64-apple-darwin.tar.gz.sha256) |
| [gws-x86_64-pc-windows-msvc.tar.gz](https://github.com/googleworkspace/cli/releases/download/v0.2.2/gws-x86_64-pc-windows-msvc.tar.gz) | x64 Windows | [checksum](https://github.com/googleworkspace/cli/releases/download/v0.2.2/gws-x86_64-pc-windows-msvc.tar.gz.sha256) |
| [gws-x86_64-unknown-linux-gnu.tar.gz](https://github.com/googleworkspace/cli/releases/download/v0.2.2/gws-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/googleworkspace/cli/releases/download/v0.2.2/gws-x86_64-unknown-linux-gnu.tar.gz.sha256) |
## Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify):
```sh
gh attestation verify <file-path of downloaded artifact> --repo googleworkspace/cli
```
You can also download the attestation from [GitHub](https://github.com/googleworkspace/cli/attestations) and verify against that directly:
```sh
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
```