google-workspace
Google Workspace CLI (gws)
One CLI for all of Google Workspace. Reads Google's Discovery Service at runtime, so new API endpoints are available automatically.
Prerequisites
gwsbinary on$PATH(install:pnpm add -g @googleworkspace/cli)- Authenticated:
gws auth login(OAuth via browser) - Auth status:
gws auth status
Reference
All gws skill files are symlinked from the upstream Gemini extension at:
./gws-skills/
Key references:
./gws-skills/gws-shared/SKILL.md- Auth, global flags, security rules./gws-skills/gws-drive/SKILL.md- Drive file/folder operations./gws-skills/gws-docs/SKILL.md- Google Docs read/write./gws-skills/gws-docs-write/SKILL.md- Append text to docs./gws-skills/gws-sheets/SKILL.md- Sheets operations./gws-skills/gws-gmail/SKILL.md- Gmail operations./gws-skills/gws-calendar/SKILL.md- Calendar operations./CONTEXT.md- Core syntax and usage patterns
Read the relevant skill file before executing commands you haven't used before.
Core Syntax
gws <service> <resource> [sub-resource] <method> [flags]
Common Flags
| Flag | Description |
|---|---|
--params '<JSON>' |
URL/query parameters |
--json '<JSON>' |
Request body (POST/PUT/PATCH) |
--fields '<MASK>' |
Limit response fields (critical for context window) |
--page-all |
Auto-paginate (NDJSON output) |
--upload <PATH> |
File for multipart uploads |
--output <PATH> |
Save binary downloads |
--dry-run |
Validate without calling the API |
Schema Discovery
If you don't know the payload structure, check the schema first:
gws schema <service>.<resource>.<method>
# Example: gws schema drive.files.list
# Example: gws schema docs.documents.batchUpdate
Common Patterns
Drive - List/Search Files
gws drive files list --params '{"q": "name contains \"Report\"", "pageSize": 10}' --fields "files(id,name,mimeType)"
Drive - Create Folder
gws drive files create --json '{"name": "My Folder", "mimeType": "application/vnd.google-apps.folder"}'
Drive - Move File to Folder
gws drive files update --params '{"fileId": "FILE_ID", "addParents": "FOLDER_ID"}'
Drive - Export Google Doc as Plain Text
gws drive files export --params '{"fileId": "DOC_ID", "mimeType": "text/plain"}' --output /tmp/doc.txt
Docs - Read Document
gws docs documents get --params '{"documentId": "DOC_ID", "fields": "title,body"}'
Docs - Write to Document (batchUpdate)
For inserting/replacing text, build a JSON payload file to avoid shell escaping:
import json
payload = {
"requests": [
{"insertText": {"location": {"index": 1}, "text": "Hello world"}}
]
}
with open('/tmp/payload.json', 'w') as f:
json.dump(payload, f)
gws docs documents batchUpdate --params '{"documentId": "DOC_ID"}' --json "$(cat /tmp/payload.json)"
Docs - Append Text (Helper)
gws docs +write --document DOC_ID --text 'Text to append'
Sheets - Read Cells
gws sheets spreadsheets values get --params '{"spreadsheetId": "ID", "range": "Sheet1!A1:C10"}'
Gmail - Search Messages
gws gmail users messages list --params '{"userId": "me", "q": "from:someone@example.com"}'
Agentic Workflow & Vibe Coding
- Iterative API Execution: Do not expect complex Workspace API payloads to succeed on the first try. Draft the payload, run it with the
--dry-runflag, review the expected changes, isolate any schema errors, fix ONE field at a time, and re-test until the payload is valid before executing the actual mutation. - Vibe Coding: Save your complex JSON payloads or script sequences to local files and commit them before running irreversible batch operations across Drive or Docs.
Rules
- Context window protection: ALWAYS use
--fieldson list/get to avoid massive JSON responses - Dry-run first: Use
--dry-runfor destructive operations before executing - Confirm writes: Ask the user before executing write/delete commands
- Shell escaping: For Sheets ranges with
!, use single quotes to prevent bash history expansion - Large payloads: Write JSON to a temp file and use
$(cat /tmp/file.json)instead of inline
More from baphomet480/claude-skills
kitchen-sink-design-system
Kitchen Sink design system workflow for Next.js and React projects, with secondary support for Astro, SvelteKit, Nuxt, and static HTML. Use when asked for a Kitchen Sink page, Design System, UI Audit, Style Guide, or Component Inventory, or when a project needs a component inventory plus component creation and a sink page implementation. Covers CVA variant architecture, Tailwind v3/v4 token systems, shadcn/ui integration, and TinaCMS content modeling.
40deep-research
Conduct comprehensive, multi-round research that produces rich visual reports. Use when asked for "deep research", "comprehensive analysis", "compare frameworks", "evaluate options", "research the state of X", or any task requiring investigation across 10+ sources. NOT for quick lookups — this is a 5-15 minute deep dive that produces a briefing-quality artifact with screenshots, diagrams, tables, and cited findings.
37design-lookup
Search and retrieve CSS components, SVG icons, design patterns, and visual inspiration from the web. Use when the user asks to find, look up, or search for CSS snippets, SVG icons, UI components, loading spinners, animations, design inspiration, or any visual/frontend design resource. Triggers on requests like "find me a CSS button", "look up an SVG spinner", "search for a card component", "find a wave divider SVG", or "get design inspiration for a dashboard".
34nextjs-tinacms
Build Next.js 16 + React 19 + TinaCMS sites with visual editing, blocks-based page builder, and complete SEO. Use this skill whenever the user mentions TinaCMS, Tina CMS, Next.js with a CMS, visual editing with Next.js, click-to-edit, content-managed Next.js site, blocks pattern page builder, or migrating to Next.js + TinaCMS. Also trigger for TinaCMS schema design, self-hosted TinaCMS, TinaCMS media configuration, or any TinaCMS troubleshooting. Covers Day 0-2 setup from scaffolding through production deployment on Vercel.
32cloudflare-pages
Deploy static sites to Cloudflare Pages with custom domains and CI/CD. Use when the user wants to deploy a site to Cloudflare Pages, add a custom domain to a Pages project, set up GitHub Actions CI/CD for Cloudflare Pages, roll back a deployment, or verify deployment status. Triggers on "deploy to Cloudflare", "Cloudflare Pages", "add custom domain", "pages deploy", or any Cloudflare Pages hosting workflow.
31local-ocr
Local OCR pipeline for AI agents featuring auto-rotation, deskew, and searchable PDF generation via ocrmypdf and Tesseract.
23