Google Workspace
RedWoodOG/Hermes-Desktop
Gmail, Calendar, Drive, Contacts, Sheets, and Docs integration via Python.
A skill your agent uses when server-side code reads or writes Gmail, Drive, Calendar, or Sheets with a GCP service account and no human in the OAuth loop: picking the auth mode (app-owned vs…
$ npx skills add ericrisco/rsc-harness --skill google-workspace -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ericrisco/rsc-harness google-workspace --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/google-workspace .claude/skills/google-workspace && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "google-workspace" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/google-workspace into .claude/skills/google-workspace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-workspace", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ericrisco/rsc-harness/tree/main/skills/google-workspaceType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ericrisco/rsc-harness --skill google-workspace -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ericrisco/rsc-harness google-workspace --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/google-workspace .agents/skills/google-workspace && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "google-workspace" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/google-workspace into .agents/skills/google-workspace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-workspace", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ericrisco/rsc-harness --skill google-workspace -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ericrisco/rsc-harness google-workspace --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/google-workspace .cursor/skills/google-workspace && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "google-workspace" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/google-workspace into .cursor/skills/google-workspace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-workspace", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ericrisco/rsc-harness.git --path skills/google-workspace--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ericrisco/rsc-harness --skill google-workspace -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ericrisco/rsc-harness google-workspace --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/google-workspace .gemini/skills/google-workspace && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "google-workspace" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/google-workspace into .gemini/skills/google-workspace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-workspace", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ericrisco/rsc-harness google-workspaceInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ericrisco/rsc-harness --skill google-workspace -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/google-workspace .github/skills/google-workspace && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "google-workspace" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/google-workspace into .github/skills/google-workspace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-workspace", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ericrisco/rsc-harness --skill google-workspace -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ericrisco/rsc-harness google-workspace --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/google-workspace .opencode/skills/google-workspace && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "google-workspace" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/google-workspace into .opencode/skills/google-workspace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-workspace", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
google-workspaceA skill your agent uses when server-side code reads or writes Gmail, Drive, Calendar, or Sheets with a GCP service account and no human in the OAuth loop: picking the auth mode (app-owned vs…
Google Workspace is an agent skill from ericrisco/rsc-harness. Use when server-side code reads or writes Gmail, Drive, Calendar, or Sheets with a GCP service account and no human in the OAuth loop: picking the auth mode (app-owned vs domain-wide delegation vs keyless), scoping to least privilege, building the authed Node/Python client, staying under per-user quota, and debugging unauthorizedclient / 403 / 429. NOT SMTP providers or deliverability (that is email-connector), NOT slot-finding and booking UX (that is calendar-scheduling).
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including scripts and reference files (for example `evals/README.md`, `evals/cases.yaml` and `references/api-recipes.md`).
It sits in Backend & APIs, covering Transactional email, Email management and Cloud office suites. It works with Google Workspace, Gmail, Google Cloud and Python. The repository describes itself as: Your agent invents things because it has no memory, and can't touch your database because it has no arms. rsc is the meta-harness that gives it both, plus the trade to know the… The licence is MIT.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 92fde8f. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Shell), which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
googleapis.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
SA_PRIVATE_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Google Workspace loads about 3.2k tokens when it runs, and up to ~5.6k if it reads all its reference files. Until then it costs about 125 tokens; SKILL.md has 1,153 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from ericrisco/rsc-harness at commit 92fde8f, republished under its MIT licence (© ericrisco). 1,153 words, ~3,220 tokens.
.claude/skills/google-workspace/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.This skill owns one layer: authenticating to and calling the four Google Workspace REST APIs from server-side code. Everything here is service-account / machine auth — if a real user must click "Allow", that is interactive OAuth and out of scope.
Where the neighbouring layers live:
| Not this skill | Goes to | This skill's slice |
|---|---|---|
| SMTP/provider choice, transactional/marketing sends | email-connector | Gmail-the-API inside a Workspace mailbox |
| SPF/DKIM, inbox placement | email-deliverability | — |
| Availability search, booking-link UX, timezone-as-a-feature | calendar-scheduling | Raw Calendar event CRUD underneath |
| Sheet data modeling, formulas, pivots | spreadsheet-ops | Sheets API read/write transport |
| Doc/PDF parsing, extraction, OCR | document-processing | Drive as storage transport (upload/download/move/permissions) |
| Chaining several connectors into one flow | automation-flows | The individual Google calls |
| Notion as the backend / generic REST wrapping | notion-connector, api-connector-builder | — |
| Receiving Gmail/Drive push notifications | webhooks | — |
Choose first — it dictates scopes, the Admin-console step, and the client build.
| Situation | Mode | Why |
|---|---|---|
| App owns the data (its own Drive folder, its own calendar, a shared drive it was added to) | Service account, no delegation | The SA is its own identity; no need to act as a human. Simplest, no Admin step. |
Must act AS each Workspace user (send from ops@acme.com, read their inbox/calendar) | Service account + domain-wide delegation + subject | Gmail has no "shared mailbox via SA" — to touch a user's mail/calendar you impersonate them. Requires a Workspace admin to authorize the SA. |
| Code runs on GCP (Cloud Run, GKE, Functions) or CI with WIF | Keyless: Application Default Credentials / Workload Identity Federation | No long-lived key file to leak or rotate. The runtime mints short-lived tokens. Always prefer this when the platform supports it. |
Rule: never reach for domain-wide delegation if app-owned resources suffice. DWD lets the SA impersonate anyone in the org for the granted scopes — it is a large blast radius. Use it only when you genuinely must act as the user.
Do these in order. references/auth-setup.md has the full Cloud + Admin
click-path, the scope catalog, DWD authorization, keyless WIF/ADC, and a longer
troubleshooting matrix.
403 regardless of
scopes.client_id, not the
email) plus the exact comma-separated scope list. A scope requested in
code but not authorized here is the #1 cause of unauthorized_client.Request the narrowest scope that does the job. Broad scopes also force a stricter Google verification review and widen what a leaked key can touch.
# Bad — full read/write to ALL of the user's Drive
https://www.googleapis.com/auth/drive
# Good — only files this app created or was explicitly shared
https://www.googleapis.com/auth/drive.file| Task | Scope | Note |
|---|---|---|
| Send mail only | gmail.send | Cannot read the inbox — ideal for notifications. |
| Read mail | gmail.readonly | Read, no modify/delete. |
| Modify labels/state | gmail.modify | Avoid full mail.google.com unless you truly need delete + settings. |
| App-created Drive files | drive.file | Cannot see the user's other files — smallest footprint. |
| Read all Drive | drive.readonly | Prefer over full drive. |
| Calendar events | calendar.events | Narrower than full calendar. |
| Read/write Sheets | spreadsheets | Use spreadsheets.readonly if you only read. |
Node uses googleapis (latest 173.x, maintenance mode — bugs/security only) with
google-auth-library (10.6.2). Python uses google-auth +
google-api-python-client. The impersonation line is the subject / with_subject.
// Node — service account, optionally impersonating a Workspace user.
import { google } from 'googleapis';
const auth = new google.auth.JWT({
email: process.env.SA_CLIENT_EMAIL,
key: process.env.SA_PRIVATE_KEY.replace(/\\n/g, '\n'), // from secret mgr, never a file in the repo
scopes: ['https://www.googleapis.com/auth/gmail.send'],
subject: 'ops@acme.com', // omit this line for app-owned (no-delegation) mode
});
const gmail = google.gmail({ version: 'v1', auth });// Node — keyless on GCP (Cloud Run / GKE / CI with WIF). No key in code at all.
import { google } from 'googleapis';
const auth = new google.auth.GoogleAuth({
scopes: ['https://www.googleapis.com/auth/spreadsheets.readonly'],
});
const sheets = google.sheets({ version: 'v4', auth });# Python — service account from credentials, impersonating a user.
from google.oauth2 import service_account
from googleapiclient.discovery import build
SCOPES = ["https://www.googleapis.com/auth/gmail.send"]
creds = service_account.Credentials.from_service_account_info(
sa_info, scopes=SCOPES # sa_info loaded from secret mgr, not a tracked file
).with_subject("ops@acme.com") # drop .with_subject(...) for app-owned mode
gmail = build("gmail", "v1", credentials=creds, cache_discovery=False)Copy-paste-ready minimums. Longer recipes (raw MIME with attachments, resumable
uploads, batchUpdate, recurring/timezone-correct events) are in
references/api-recipes.md.
// Gmail: send. Body must be base64url-encoded RFC 822 (note -_ , no padding).
const raw = Buffer.from(
'To: a@acme.com\r\nSubject: Report\r\n\r\nHello.'
).toString('base64url');
await gmail.users.messages.send({ userId: 'me', requestBody: { raw } });// Drive: create a file, then grant read to one person (least-privilege share).
const file = await drive.files.create({
requestBody: { name: 'report.pdf' },
media: { mimeType: 'application/pdf', body: stream },
fields: 'id', // partial response — ask only for what you use
});
await drive.permissions.create({
fileId: file.data.id,
requestBody: { role: 'reader', type: 'user', emailAddress: 'a@acme.com' },
});# Calendar: insert an event (always send explicit IANA timeZone).
event = {
"summary": "Sync",
"start": {"dateTime": "2026-06-10T10:00:00", "timeZone": "Europe/Andorra"},
"end": {"dateTime": "2026-06-10T10:30:00", "timeZone": "Europe/Andorra"},
}
cal.events().insert(calendarId="primary", body=event).execute()# Sheets: write a range. Use values.batchUpdate to write many ranges in one call.
sheets.spreadsheets().values().update(
spreadsheetId=SID, range="Sheet1!A2",
valueInputOption="USER_ENTERED",
body={"values": [["2026-06-02", 1290]]},
).execute()The per-user ceiling is the one that bites a cron looping over a mailbox.
messages.send 100, messages.get 20, messages.list 5,
messages.modify 5, drafts.create 10. Hard cap 500 recipients/message.Three habits keep you under it:
fields partial responses — ask only for the fields you read; smaller
responses, lower cost, faster.values.batchUpdate, Gmail batch requests, Drive batch —
one call instead of N cuts per-user request count directly.403 rateLimitExceeded and 429 —
retrying immediately just burns more quota.# Backoff: min((2^n) + random_ms, max_backoff). Cap 32–64s. Jitter avoids
# thundering-herd retries syncing up.
import random, time
from googleapiclient.errors import HttpError
def with_backoff(call, max_retries=6, max_backoff=64):
for n in range(max_retries):
try:
return call()
except HttpError as e:
if e.resp.status not in (403, 429) or n == max_retries - 1:
raise
time.sleep(min((2 ** n) + random.random(), max_backoff))service_account.json is game over. Add *.json SA patterns to
.gitignore; the verify.sh here flags tracked keys.drive.file key sees app files; a leaked full
drive key sees everything. The scope IS the blast radius.| Error | Likely cause | Fix |
|---|---|---|
unauthorized_client | SA client ID / scope not authorized for DWD | Add the client ID + exact scopes in Admin console Manage DWD |
403 insufficient permissions | Scope too narrow, or API not enabled | Widen to the right scope (still least), enable the API |
403 rateLimitExceeded / 429 | Per-user or per-project quota hit | Exponential backoff + jitter; batch; spread load |
400 failedPrecondition on impersonation | subject set but DWD not configured | Either remove subject (app-owned) or finish DWD setup |
invalid_grant | Clock skew or stale/rotated key | Sync clock; re-issue the key |
| Anti-pattern | Why it breaks | Do instead |
|---|---|---|
Committing service_account.json to the repo | Long-lived key in git history = full compromise; can't un-leak | Keyless ADC/WIF, or key in a secret manager + .gitignore |
Requesting auth/drive / mail.google.com "to be safe" | Max blast radius, stricter Google review, more to leak | Narrowest scope: drive.file, gmail.send, spreadsheets.readonly |
Using DWD subject for app-owned data | Impersonating users when the SA could own the resource — needless blast radius + an Admin dependency | Drop subject; let the SA own the folder/calendar/shared drive |
Looping messages.send/values.update per row with no backoff | Trips the 6k/min (Gmail) or 60/min (Sheets) per-user cap → 429 storm | Batch (values.batchUpdate) + exponential backoff with jitter |
Reading whole resources without fields | Bigger payloads, higher quota cost, slower | Request only the fields you use (fields: 'id') |
| Hardcoding the private key inline in source | Can't rotate, leaks via logs/screenshots/history | Inject from env/secret manager; \n-unescape at load |
Pasting raw text into Gmail raw | API needs base64url RFC 822, not plain text → 400 | Build a MIME message, base64url-encode it |
Before this connector ships, run the secret-handling and key-rotation pass in
../secure-coding/SKILL.md.
© ericrisco, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files (scripts, references) in skills/google-workspace of ericrisco/rsc-harness.
Open the folder on GitHubat commit 92fde8f
Google Workspace next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Google Workspace this skillericrisco/rsc-harness | 156 | — | ~3.2k | Automated safety check: Pass | MIT | |
| Google WorkspaceRedWoodOG/Hermes-Desktop | 177 | — | ~2.1k | Automated safety check: Pass | MIT | |
| GCP Workspace Pivotwgpsec/AboutSecurity | 1.8k | — | ~2.9k | Automated safety check: Pass | None | |
| Community Google WorkspaceArgentAIOS/argentos-core | 126 | — | ~2.8k | Automated safety check: Pass | MIT | |
| Google WorkspaceTommy-yw/RunbookHermes | 546 | 1 repos | ~2.7k | Automated safety check: Pass | MIT | |
| Google Workspacetaracodlabs/aiden | 849 | — | ~1.1k | Automated safety check: Pass | Apache-2.0 |
RedWoodOG/Hermes-Desktop
Gmail, Calendar, Drive, Contacts, Sheets, and Docs integration via Python.
wgpsec/AboutSecurity
GCP 到 Google Workspace 的穿越攻击方法论。当已获取 GCP Service Account 或 Project 权限并发现目标组织使用 Google Workspace、需要从云平台穿越到企业邮件/文档/管理控制台、或发现 Domain-Wide Delegation 配置时使用。覆盖 Domain-Wide Delegation 滥用、OAuth…
ArgentAIOS/argentos-core
Gmail, Calendar, Drive, Contacts, Sheets, and Docs integration for community skills.
Tommy-yw/RunbookHermes
Gmail, Calendar, Drive, Contacts, Sheets, and Docs integration for Hermes.
taracodlabs/aiden
Gmail, Calendar, Drive, Sheets, Docs via Google API (SA / OAuth)
AlexAI-MCP/hermes-CCC
Automate Google Workspace — Gmail, Drive, Sheets, Docs, Calendar via Google API Python client or gcloud CLI.
ericrisco/rsc-harness
A skill your agent uses when designing or analyzing a controlled experiment — falsifiable hypothesis, sample size from an MDE, reading significance/CI/power, CUPED, or rescuing tests that won't go…
ericrisco/rsc-harness
A skill your agent uses when making a web UI conform to WCAG 2.2 Level AA — axe-core or Lighthouse a11y violations, keyboard operability, focus management, ARIA roles/names/live regions, contrast…
ericrisco/rsc-harness
A skill your agent uses when running or fixing paid acquisition on Google or Meta — campaign structure (Performance Max, Demand Gen, Search, Advantage+), platform-fit creative, budget/scaling rules…
ericrisco/rsc-harness
A skill your agent uses when measuring whether an LLM or agent system actually got better and gating merges on it: golden sets, fixing an inflated LLM-as-judge, scoring RAG (faithfulness, contextual…
ericrisco/rsc-harness
A skill your agent uses when a creative goal must become a finished media file: pick and order generative-media models per modality — AI voiceover, image-to-video clips, score — then glue them with…
ericrisco/rsc-harness
A skill your agent uses when instrumenting product or web analytics — GA4/PostHog SDK wiring, event taxonomy, funnels, double-counted events, consent gating, PII scrubbing.
Works with
Categories
A skill your agent uses when server-side code reads or writes Gmail, Drive, Calendar, or Sheets with a GCP service account and no human in the OAuth loop: picking the auth mode (app-owned vs…. Google Workspace is an agent skill from ericrisco/rsc-harness. Use when server-side code reads or writes Gmail, Drive, Calendar, or Sheets with a GCP service account and no human in the OAuth loop: picking the auth mode (app-owned vs domain-wide delegation vs keyless), scoping to least privilege, building the authed Node/Python client, staying under per-user quota, and debugging unauthorizedclient / 403 / 429.
Google Workspace fits situations like: server-side code reads; sheets with a GCP service account and no human in the OAuth loop: picking the auth mode (app-owned vs domain-wide delegation vs keyless); scoping to least privilege; building the authed Node/Python client.
Run `npx skills add ericrisco/rsc-harness --skill google-workspace -a claude-code`. Or copy the skill folder (skills/google-workspace in ericrisco/rsc-harness) into .claude/skills/google-workspace in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ericrisco/rsc-harness --skill google-workspace -a codex`. Or copy the skill folder (skills/google-workspace in ericrisco/rsc-harness) into .agents/skills/google-workspace in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ericrisco/rsc-harness --skill google-workspace -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/google-workspace, .gemini/skills/google-workspace, .github/skills/google-workspace and .opencode/skills/google-workspace in your project.
Going by SKILL.md and its folder, Google Workspace needs a shell for the scripts in its folder and credentials named SA_PRIVATE_KEY. Our summary lists: Python 3; A Bash shell; A credential in SA_PRIVATE_KEY.
SKILL.md names 1 domain. In commands or code: googleapis.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Google Workspace is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.4k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Google Workspace: Google Workspace (RedWoodOG/Hermes-Desktop, 177 stars), GCP Workspace Pivot (wgpsec/AboutSecurity, 1.8k stars), Community Google Workspace (ArgentAIOS/argentos-core, 126 stars) and Google Workspace (Tommy-yw/RunbookHermes, 546 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ericrisco (a GitHub user) maintains it in ericrisco/rsc-harness, which has 156 GitHub stars. The repository holds 229 skills in this directory. The repository was last updated on October 6, 2026.
Source: ericrisco/rsc-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.