Use when automating Google Workspace (Docs, Sheets, Slides) operations - covers authentication, common patterns, and best practices for gspread and googleapiclient
This skill is not superseded by the gws-* skills. It is the umbrella entry
point that tells agents how to choose the right Google Workspace account before
using the domain-specific gws-drive, gws-docs, gws-calendar, gws-sheets,
gws-slides, gws-tasks, and related skills.
gws-account is the standard for Google Workspace access. It wraps gws with
the correct account profile. Do not use raw gws unless you explicitly set
GOOGLE_WORKSPACE_CLI_CONFIG_DIR.
Always select the profile by organization/context before running a command:
| User phrase / domain | Profile | Account |
|---|---|---|
| LightForge, LightForge Works, LFW | lfw |
braydon@lightforgeworks.com agent-safe artifact writes; no outbound send/invite |
| Explicit human-approved LFW write/send/calendar mutation | lfw-human |
braydon@lightforgeworks.com full write profile |
| MCCO, McCo, mcco.us | mcco |
b@mcco.us |
| Synthyra, synthyra.com | synthyra |
braydon@synthyra.com |
| Intempio, intempio.us | intempio |
braydon@intempio.us |
| Aclara, aclara.us | aclara |
b@aclara.us |
| personal Gmail | gmail |
braydonjm@gmail.com |
If the user says "Synthera", treat it as likely synthyra and confirm only if
the target account is ambiguous.
Before acting, inspect profiles:
/Users/braydon/projects/experiments/gws-profiles/bin/gws-account list
If a profile reports auth_method: none or an auth failure, stop and report that
the profile needs reauthorization before trying Drive/Docs/Calendar operations.
Email routing:
msgvault, not gws.LFW agent safety: The lfw profile may create/update Workspace artifacts
such as Drive files, Docs, Sheets, Slides, Tasks, and contacts. It must not have
Gmail send/modify scopes or Calendar write scopes. Do not use lfw-human unless
Braydon explicitly approves a live outbound send/calendar mutation. Google does
not provide a Calendar draft-invite mode, and Gmail draft-capable API scopes
also permit sending, so agents must not hold those outbound write scopes.
For LFW email drafting, use the n8n draft-only workflow:
curl -sS -X POST 'http://127.0.0.1:5678/webhook/email-draft-lfw-0e02ff130c72' \
-H 'Content-Type: application/json' \
-d '{"to":"recipient@example.com","subject":"Draft subject","body":"Draft body"}'
The workflow creates a Gmail draft for human review; it does not grant send permission to the agent.
See the gws-shared skill for global flags, syntax, and account details.
See individual skills for each service: gws-drive, gws-docs, gws-calendar, gws-sheets, gws-slides, gws-tasks, and related GWS service skills.
# List Drive files (always include shared drives flags for LFW)
/Users/braydon/projects/experiments/gws-profiles/bin/gws-account lfw drive files list --params '{"includeItemsFromAllDrives": true, "supportsAllDrives": true, "fields": "files(id,name,mimeType)"}'
# List MCCO Drive files
/Users/braydon/projects/experiments/gws-profiles/bin/gws-account mcco drive files list --params '{"includeItemsFromAllDrives": true, "supportsAllDrives": true, "fields": "files(id,name,mimeType)"}'
# List Synthyra Drive files
/Users/braydon/projects/experiments/gws-profiles/bin/gws-account synthyra drive files list --params '{"includeItemsFromAllDrives": true, "supportsAllDrives": true, "fields": "files(id,name,mimeType)"}'
# Search for docs by name
/Users/braydon/projects/experiments/gws-profiles/bin/gws-account lfw drive files list --params '{"q": "name contains '\''SOW'\''", "includeItemsFromAllDrives": true, "supportsAllDrives": true, "fields": "files(id,name)"}'
# Read a Google Doc
/Users/braydon/projects/experiments/gws-profiles/bin/gws-account lfw docs documents get --params '{"documentId": "<id>"}'
# Export a Google Doc as plain text
/Users/braydon/projects/experiments/gws-profiles/bin/gws-account lfw drive files export --params '{"fileId": "<id>", "mimeType": "text/plain"}'
# Search/read email history with msgvault, not GWS Gmail
MSGVAULT_HOME=/Volumes/data2/msgvault /Users/braydon/.local/bin/msgvault --home /Volumes/data2/msgvault --config /Volumes/data2/msgvault/config.toml search "subject:invoice" --json
# List calendar events
/Users/braydon/projects/experiments/gws-profiles/bin/gws-account lfw calendar events list --params '{"calendarId": "primary", "maxResults": 10}'
gspread / googleapiclient Python libraries — requires service account setup, adds code complexity