Purpose
Manage Google Sheets through hatch_gws_cli; the vendored Google Workspace CLI is the only implementation path.
Tooling
Use exec to run:
hatch_gws_cli sheets <resource> <method> [flags]
Connection management
hatch_gws_cli sheets status
hatch_gws_cli sheets disconnect
Sheets operations
Core patterns:
hatch_gws_cli sheets statushatch_gws_cli sheets disconnecthatch_gws_cli schema sheets.spreadsheets.gethatch_gws_cli schema sheets.spreadsheets.createhatch_gws_cli schema sheets.spreadsheets.values.gethatch_gws_cli schema sheets.spreadsheets.values.appendhatch_gws_cli schema sheets.spreadsheets.batchUpdate
Common raw API calls:
hatch_gws_cli sheets spreadsheets get --params '{"spreadsheetId":"<spreadsheet_id>"}'hatch_gws_cli sheets spreadsheets create --json '{"properties":{"title":"My Spreadsheet"}}'hatch_gws_cli sheets spreadsheets values get --params '{"spreadsheetId":"<spreadsheet_id>","range":"Sheet1!A1:D10"}'hatch_gws_cli sheets spreadsheets values append --params '{"spreadsheetId":"<spreadsheet_id>","range":"Sheet1!A:D","valueInputOption":"USER_ENTERED"}' --json '{"values":[["a","b"],["c","d"]]}'hatch_gws_cli sheets spreadsheets batchUpdate --params '{"spreadsheetId":"<spreadsheet_id>"}' --json '{"requests":[{"addSheet":{"properties":{"title":"Q2"}}}]}'
Vendored helpers are also available:
hatch_gws_cli sheets +read ...hatch_gws_cli sheets +append ...
JSON output contract:
status: parsestatus,connect_url, anddisconnect_urldisconnect: parseok,action,status, anddisconnect_url
Formatting spreadsheet content
Write and format the spreadsheet through the Sheets API. Do not upload a file over it.
- Write the values with
spreadsheets.create,values.update, orvalues.append. SetvalueInputOptiontoUSER_ENTEREDso Sheets parses dates, currency, and formulas. - Set the styling in one
spreadsheets.batchUpdatecall.repeatCellwithuserEnteredFormatsets the header style and the number formats.updateSheetPropertiesfreezes the header row.updateDimensionPropertiessets column widths. A new spreadsheet can carry these formats in thespreadsheets.createbody instead. - Read the result back before you call it ready. A successful write proves the API accepted the request, not that the sheet reads correctly.
spreadsheets.getreturns no cell data by default, so pass a field mask:hatch_gws_cli sheets spreadsheets get --params '{"spreadsheetId":"<spreadsheet_id>","ranges":"<tab>!A1:F10","fields":"sheets(properties(title,gridProperties(frozenRowCount)),data(rowData(values(formattedValue,effectiveFormat(backgroundColor,numberFormat,textFormat)))))"}' - Never publish a
.xlsxfile over a spreadsheet withdrive files update. Google replaces the full contents of the file, so that upload discards every other tab and every edit the user made. To change one part of a spreadsheet, usevalues.updateorspreadsheets.batchUpdate. To give the user a workbook to download, build a spreadsheet artifact and attach the file.
Auth
Authentication is handled by the wrapper's status and disconnect subcommands. Do not hand-write credential files or run raw gws auth ....
First-use setup flow
- Run
hatch_gws_cli sheets status. - If
statusisunavailable, tell the user that Google Sheets is not available on this device. Do not offer alternative integration approaches or ask the user for credentials. - If
statusisnot_connectedandconnect_urlis present, replace<connect_url>with the returned URL and share exactly this Markdown link:[Connect Google Sheets](<connect_url>); do not paste the raw URL separately. Wait for the user to reconnect. - Once
statusisconnected, proceed with Sheets operations.
Operating Rules
- Use
schemabefore unfamiliar Sheets methods so--paramsand--jsonmatch the current vendored CLI contract. - Use A1 notation for ranges unless the user explicitly wants a different API path.
- Creating a spreadsheet, clearing cells, and editing a spreadsheet owned only by the user may proceed from a clear request. Confirm before editing a shared spreadsheet because its contents can be exposed to or changed for other people.
- Treat spreadsheet IDs and sheet IDs as opaque strings and only use IDs returned by prior commands or explicit user input.
- Run
hatch_gws_cli sheets disconnect. After running it, whendisconnect_urlis present, replace<disconnect_url>with the returned URL and share exactly this Markdown link:[Disconnect Google Sheets](<disconnect_url>); do not paste the raw URL separately. - Prefer
spreadsheets.getorsheets +readbefore writing when you need to inspect current sheet structure or cell contents. To write or style a sheet, follow "Formatting spreadsheet content" above. - After a read or write action, confirm the user-visible result only. Do not surface raw API identifiers (spreadsheet and sheet IDs) or other internal response fields (page tokens/cursors, raw JSON) in text shown to the user unless the user asks for them or you need them to troubleshoot a failure; keep using them internally to chain follow-up commands.