skills/wb-drive/SKILL.md
Weekend Business Shared Drive: Browse, search, upload, and manage files. Triggers: 'weekend business drive', 'wb drive', 'upload to brand', 'shared drive', 'WB shared drive', 'list WB files', 'find in drive'
npx skillsauth add silvabyte/skills wb-driveInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
PREREQUISITE: Read
../gws-shared/SKILL.mdfor auth, global flags, and security rules.
DRIVE_ID = 0APkifbJ0Yk3mUk9PVA
This is the only hardcoded value. All folder and file IDs are discovered at runtime.
Every gws drive call against this shared drive must include these params:
{ "supportsAllDrives": true, "includeItemsFromAllDrives": true }
Without these, the API returns empty results or 404 errors for shared drive content.
Never assume folder IDs. Always discover the current structure first.
gws drive files list \
--params '{
"q": "\"0APkifbJ0Yk3mUk9PVA\" in parents and mimeType=\"application/vnd.google-apps.folder\" and trashed=false",
"driveId": "0APkifbJ0Yk3mUk9PVA",
"corpora": "drive",
"supportsAllDrives": true,
"includeItemsFromAllDrives": true,
"fields": "files(id,name)"
}' --format table
Use the folder ID from Step 1 to list its contents:
gws drive files list \
--params '{
"q": "\"FOLDER_ID\" in parents and trashed=false",
"supportsAllDrives": true,
"includeItemsFromAllDrives": true,
"fields": "files(id,name,mimeType,modifiedTime)"
}' --format table
Use the discovered ID for get, download, upload, update, etc.
Instead of drilling one folder at a time, discover the entire drive structure in one shot. Run both queries in parallel at session start, then use the parents field to reconstruct the tree in memory.
# Discover all folders in the drive
gws drive files list \
--params '{
"q": "mimeType=\"application/vnd.google-apps.folder\" and trashed=false",
"driveId": "0APkifbJ0Yk3mUk9PVA",
"corpora": "drive",
"supportsAllDrives": true,
"includeItemsFromAllDrives": true,
"fields": "files(id,name,parents)"
}' --page-all
# Discover all Google Docs in the drive
gws drive files list \
--params '{
"q": "mimeType=\"application/vnd.google-apps.document\" and trashed=false",
"driveId": "0APkifbJ0Yk3mUk9PVA",
"corpora": "drive",
"supportsAllDrives": true,
"includeItemsFromAllDrives": true,
"fields": "files(id,name,parents)"
}' --page-all
Cache the results for the rest of the session to avoid redundant lookups.
# List top-level folders
gws drive files list \
--params '{
"q": "\"0APkifbJ0Yk3mUk9PVA\" in parents and mimeType=\"application/vnd.google-apps.folder\" and trashed=false",
"driveId": "0APkifbJ0Yk3mUk9PVA",
"corpora": "drive",
"supportsAllDrives": true,
"includeItemsFromAllDrives": true,
"fields": "files(id,name)"
}' --format table
# List contents of a subfolder (replace FOLDER_ID)
gws drive files list \
--params '{
"q": "\"FOLDER_ID\" in parents and trashed=false",
"supportsAllDrives": true,
"includeItemsFromAllDrives": true,
"fields": "files(id,name,mimeType,modifiedTime)"
}' --format table
gws drive files list \
--params '{
"q": "name=\"Brand\" and mimeType=\"application/vnd.google-apps.folder\" and trashed=false",
"driveId": "0APkifbJ0Yk3mUk9PVA",
"corpora": "drive",
"supportsAllDrives": true,
"includeItemsFromAllDrives": true,
"fields": "files(id,name,parents)"
}'
gws drive files list \
--params '{
"q": "\"FOLDER_ID\" in parents and trashed=false",
"supportsAllDrives": true,
"includeItemsFromAllDrives": true,
"fields": "files(id,name,mimeType,size,modifiedTime)",
"orderBy": "modifiedTime desc"
}' --format table
gws drive +upload ./file.pdf --parent FOLDER_ID
Or with the low-level API for more control:
gws drive files create \
--upload ./file.pdf \
--params '{"supportsAllDrives": true}' \
--json '{"name": "file.pdf", "parents": ["FOLDER_ID"]}'
[!CAUTION] This is a write command — confirm with the user before executing.
# By name (partial match)
gws drive files list \
--params '{
"q": "name contains \"logo\" and trashed=false",
"driveId": "0APkifbJ0Yk3mUk9PVA",
"corpora": "drive",
"supportsAllDrives": true,
"includeItemsFromAllDrives": true,
"fields": "files(id,name,mimeType,parents,modifiedTime)"
}' --format table
# By MIME type (e.g., all PDFs)
gws drive files list \
--params '{
"q": "mimeType=\"application/pdf\" and trashed=false",
"driveId": "0APkifbJ0Yk3mUk9PVA",
"corpora": "drive",
"supportsAllDrives": true,
"includeItemsFromAllDrives": true,
"fields": "files(id,name,parents,modifiedTime)"
}' --format table
# Metadata
gws drive files get \
--params '{
"fileId": "FILE_ID",
"supportsAllDrives": true,
"fields": "id,name,mimeType,size,modifiedTime,webViewLink"
}'
# Download binary file
gws drive files get \
--params '{
"fileId": "FILE_ID",
"supportsAllDrives": true,
"alt": "media"
}' --output ./downloaded-file.pdf
# Export Google Doc as PDF
gws drive files export \
--params '{
"fileId": "FILE_ID",
"mimeType": "application/pdf"
}' --output ./exported.pdf
gws drive files delete --params '{"fileId": "FILE_ID", "supportsAllDrives": true}'
[!CAUTION] This is a write command — confirm with the user before executing.
gws drive files create \
--params '{"supportsAllDrives": true}' \
--json '{
"name": "New Folder",
"mimeType": "application/vnd.google-apps.folder",
"parents": ["PARENT_FOLDER_ID"]
}'
[!CAUTION] This is a write command — confirm with the user before executing.
gws drive files export \
--params '{"fileId": "DOC_ID", "mimeType": "text/markdown"}' \
--output ./doc.md
gws docs +write --document DOC_ID --text 'Text to append'
For link updates, text replacements, and structural changes:
# 1. Get the doc structure to find element positions
gws docs documents get --params '{"documentId": "DOC_ID"}'
# 2. Apply changes via batchUpdate (example: update a link URL)
gws docs documents batchUpdate \
--params '{"documentId": "DOC_ID"}' \
--json '{
"requests": [
{
"updateTextStyle": {
"range": {"startIndex": START, "endIndex": END},
"textStyle": {"link": {"url": "https://new-url.com"}},
"fields": "link"
}
}
]
}'
Tips for batchUpdate:
deleteContentRange then insertText at the start index.Direct upload with mimeType: application/vnd.google-apps.document returns 400. Use this workaround:
# 1. Convert markdown to HTML
pandoc -f markdown -t html -o ./file.html ./file.md
# 2. Upload the HTML file
gws drive files create \
--upload ./file.html \
--json '{"name": "temp-upload", "parents": ["FOLDER_ID"]}' \
--params '{"supportsAllDrives": true}'
# Note the returned file ID → HTML_ID
# 3. Copy with conversion to Google Doc
gws drive files copy \
--params '{"fileId": "HTML_ID", "supportsAllDrives": true}' \
--json '{"name": "My Document", "mimeType": "application/vnd.google-apps.document", "parents": ["FOLDER_ID"]}'
# 4. Delete the temp HTML file
gws drive files delete --params '{"fileId": "HTML_ID", "supportsAllDrives": true}'
[!CAUTION] Steps 2–4 are write commands — confirm with the user before executing.
fields on every call to limit response size and avoid quota issues.--format table for human-readable output; omit it (defaults to JSON) for piping.--page-all when a folder may have more than 100 items.q syntax: name contains "x", name = "x", mimeType = "...", "parentId" in parents, modifiedTime > "2024-01-01".and: name contains "logo" and mimeType = "image/png" and trashed = false.application/vnd.google-apps.folder.documentation
--- name: unglaze description: Rewrite glazy, eye-glazing generated content into a tight, scannable, bullet-tight engineering voice. Use when the user says "unglaze", "ungloss this", "punch this up", "tighten this", "less glazy", "eyes glaze", "make my eyes not glaze", "cut the fluff", "rewrite punchier", "make it sharper", "less corporate", "de-fluff", "less LLM-flavored". Also auto-triggers on dissatisfaction signals like "ugh too long", "tldr this", "this is boring", "too much". Applies to PR
content-media
Transcribe audio and video files using Audetic whisper service. Use when: (1) User wants to transcribe an audio or video file (2) User has a recording and needs a text transcript (3) User wants transcript analysis (gaps, speech rate, silence detection) (4) User wants to transcribe all media files in a directory Triggers: "transcribe", "transcription", "transcript", "speech to text", "audio to text", "transcribe audio", "transcribe video", "transcribe recording"
development
Testing Trophy philosophy for JS/TS. Use when: writing tests, deciding what/how to test, reviewing tests, choosing unit/integration/E2E, mocking decisions. Triggers: "write tests", "what should I test", "test this component", "review my tests", "testing strategy", "mock this", "test setup".
tools
Drive a UI flow with chrome-devtools, capture a screenshot per step, then render a self-contained HTML report (report.html) showing each step with status pills, full console log, and full network log per step. Use when: (1) User asks to "QA this flow", "walk through X with screenshots", "verify [feature] end-to-end with a report" (2) User wants screenshot-backed evidence that a multi-step UI flow worked (3) User wants a single artifact they can attach to a PR or share as proof of a manual walkthrough Do NOT use for one-off "open this page and check console", for automated regression testing (a Playwright/Cypress suite is the right tool), or for single-screenshot bug repros. Triggers: "QA this flow", "qa flow report", "walk through X with screenshots", "verify end-to-end with a report", "screenshot-backed evidence", "manual QA report"