google-workspace
Google Workspace — gws CLI
Unified skill for interacting with Google Workspace services via the gws command-line tool.
CLI overview
All Google Workspace APIs share the same invocation pattern:
gws <service> <resource> [sub-resource] <method> [flags]
Common flags (available across all services):
| Flag | Purpose |
|---|---|
--params '<JSON>' |
URL / query parameters |
--json '<JSON>' |
Request body (POST / PATCH / PUT) |
--format <fmt> |
Output: json (default), table, yaml, csv |
--page-all |
Auto-paginate (NDJSON, one JSON object per line) |
--output <path> |
Write binary responses to a file |
Schema introspection — useful when you need to discover available fields or request shapes:
gws schema docs.documents.get
gws schema docs.documents.batchUpdate --resolve-refs # expand $ref pointers
Google Docs
Extracting a document ID from a URL
Google Docs URLs look like:
https://docs.google.com/document/d/<DOCUMENT_ID>/edit
The document ID is the long alphanumeric string between /d/ and /edit.
Reading a document
Raw JSON (full structure with styling metadata)
gws docs documents get --params '{"documentId": "<DOC_ID>"}'
Plain text (recommended for most use cases)
Pipe through the bundled extraction script — it strips styling metadata and preamble lines automatically:
gws docs documents get --params '{"documentId": "<DOC_ID>"}' | \
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/extract-doc-text.py"
The script detects where the JSON payload starts, so there is no need to
manually skip the Using keyring backend: ... line that gws sometimes
prints before the JSON.
Creating a document
gws docs documents create --json '{"title": "My New Document"}'
Returns the created document JSON including the new documentId.
Appending text
The +write helper is the simplest way to add content:
gws docs +write --document <DOC_ID> --text 'Text to append'
Text is inserted at the end of the document body. For richer edits
(formatting, insertion at a specific position, deletion), use batchUpdate.
Batch updates
For structured edits — insert at a position, delete a range, apply formatting:
gws docs documents batchUpdate \
--params '{"documentId": "<DOC_ID>"}' \
--json '{
"requests": [
{
"insertText": {
"location": { "index": 1 },
"text": "Hello, world!\n"
}
}
]
}'
Run gws schema docs.documents.batchUpdate --resolve-refs to explore the
full set of request types (insertText, deleteContentRange,
updateTextStyle, etc.).
Gotchas
- Keyring preamble —
gwsmay printUsing keyring backend: ...to stdout before the JSON payload. The bundledextract-doc-text.pyhandles this. If piping raw JSON elsewhere, skip the first line withtail -n +2. - Index math — document indices are 1-based. The body content starts at index 1. Fetch the document first to find correct insertion indices.
- Large documents — the
getresponse can be sizeable. Prefer the plain-text extraction path unless you specifically need the structural or styling metadata.
Future services
This skill will expand as new GWS integrations are needed. Each service
follows the same gws <service> <resource> <method> pattern. When a service
is added, it gets a new section here (or a references/<service>.md file if
the documentation grows large).
Planned:
- Drive —
gws drive files list|get|create|update|delete - Sheets —
gws sheets spreadsheets get|create|batchUpdate - Gmail —
gws gmail users messages list|get|send - Calendar —
gws calendar events list|get|insert|update|delete
More from atomlink-ye/my-claude-plugins
debug-workflow
Unified debug workflow skill for real-world issue reproduction, especially browser/UI/Web3 problems that need Playwright, shared Chrome/CDP, or agent-wallet. Use this whenever the user wants to confirm whether a workflow can reproduce real issues from walkthrough docs, issue lists, QA notes, or live bug reports. Start with the debug index, route to the right lane, and prefer deterministic local reproduction over fragile preview environments.
11task-iteration
Orchestrate end-to-end feature implementation from an exec-plan document. Use this whenever the user wants a structured Plan → Generate → Evaluate loop for a feature. It keeps planning and acceptance in Claude, pushes bounded coding/test execution to OpenCode companion sessions, reuses warm sessions across fix rounds, and gates completion on independent evaluation plus an advisory review.
11paseo-companion
Paseo CLI companion. Load whenever the user mentions paseo, paseo agents, paseo run/send/wait/logs/attach/ls, agent IDs, sending follow-ups to a running agent, loops, schedules, terminals, worktrees, chat, permits, daemon operations, or host/port targeting.
11opencode-orchestrator
Aggressively load this skill BEFORE any delegation decision — explore, plan, implement, review, adversarial second-opinion, bounded investigation, or any medium/heavy coding request. Also triggers for manager-vs-executor routing, OpenCode session reuse, multi-step coding orchestration, and work that likely exceeds 10 tool calls, 5 files, or repeated read/edit/test loops. When the live snapshot below shows OpenCode serve is reachable, this skill's routing takes precedence over the caller's generic delegation defaults across every delegated action, not only bounded coding execution. If serve is unreachable, fall back silently to the caller's defaults.
11daytona-companion
Daytona sandbox companion. Load for sandbox up/status/push/exec/pull/down/preview/smoke-test requests, adopting existing sandboxes, artifact and git-sync workflows, and sandbox environment variables or secrets.
11mcp-skill
Use MCPorter to call MCP servers on demand without keeping MCP servers running in OpenCode.
10