[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71NKXMXAACZS92VQ3ENZ5KB":3,"skill-same:01M71NKXMXAACZS92VQ3ENZ5KB":109},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":67,"commitSha":68,"skillDirectory":69,"forksCount":70,"repositoryHtmlUrl":71,"repositoryHomepageUrl":6,"ownerHtmlUrl":72,"ownerBlogUrl":6,"ownerDescription":73,"updatedAt":74,"install":75,"resources":88},"01M71NKXMXAACZS92VQ3ENZ5KB","google-workspace",null,"Gmail, Calendar, Drive, Contacts, Sheets, and Docs integration via gws CLI (googleworkspace\u002Fcli). Uses OAuth2 with automatic token refresh via bridge script. Requires gws binary.","q2805187159\u002FAnvil","q2805187159","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F105276843?v=4","01M71KF4TN999VNJX9FY9QT06A","铁甲勇士宋小宝","01M71KF4V97XXQ7AGES97R4Q9F",3,"MIT","https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity\u002Fgoogle-workspace\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"google workspace","workspace","google","nous research","with","OAuth","sheets","email","automatic","gmail","token","hermes-agent","calendar","cli","credentials","gws","contacts","secret","google cloud","bridge","2026-11-10 10:56:23",false,"---\nname: google-workspace\ndescription: Gmail, Calendar, Drive, Contacts, Sheets, and Docs integration via gws CLI (googleworkspace\u002Fcli). Uses OAuth2 with automatic token refresh via bridge script. Requires gws binary.\nversion: 2.0.0\nauthor: Nous Research\nlicense: MIT\nrequired_credential_files:\n  - path: google_token.json\n    description: Google OAuth2 token (created by setup script)\n  - path: google_client_secret.json\n    description: Google OAuth2 client credentials (downloaded from Google Cloud Console)\nmetadata:\n  hermes:\n    tags: [Google, Gmail, Calendar, Drive, Sheets, Docs, Contacts, Email, OAuth, gws]\n    homepage: https:\u002F\u002Fgithub.com\u002FNousResearch\u002Fhermes-agent\n    related_skills: [himalaya]\n---\n\n# Google Workspace\n\nGmail, Calendar, Drive, Contacts, Sheets, and Docs — powered by `gws` (Google's official Rust CLI). The skill provides a backward-compatible Python wrapper that handles OAuth token refresh and delegates to `gws`.\n\n## Architecture\n\n```\ngoogle_api.py  →  gws_bridge.py  →  gws CLI\n(argparse compat)  (token refresh)    (Google APIs)\n```\n\n- `setup.py` handles OAuth2 (headless-compatible, works on CLI\u002FTelegram\u002FDiscord)\n- `gws_bridge.py` refreshes the Hermes token and injects it into `gws` via `GOOGLE_WORKSPACE_CLI_TOKEN`\n- `google_api.py` provides the same CLI interface as v1 but delegates to `gws`\n\n## References\n\n- `references\u002Fgmail-search-syntax.md` — Gmail search operators (is:unread, from:, newer_than:, etc.)\n\n## Scripts\n\n- `scripts\u002Fsetup.py` — OAuth2 setup (run once to authorize)\n- `scripts\u002Fgws_bridge.py` — Token refresh bridge to gws CLI\n- `scripts\u002Fgoogle_api.py` — Backward-compatible API wrapper (delegates to gws)\n\n## Prerequisites\n\nInstall `gws`:\n\n```bash\ncargo install google-workspace-cli\n# or via npm (recommended, downloads prebuilt binary):\nnpm install -g @googleworkspace\u002Fcli\n# or via Homebrew:\nbrew install googleworkspace-cli\n```\n\nVerify: `gws --version`\n\n## First-Time Setup\n\nThe setup is fully non-interactive — you drive it step by step so it works\non CLI, Telegram, Discord, or any platform.\n\nDefine a shorthand first:\n\n```bash\nHERMES_HOME=\"${HERMES_HOME:-$HOME\u002F.hermes}\"\nGWORKSPACE_SKILL_DIR=\"$HERMES_HOME\u002Fskills\u002Fproductivity\u002Fgoogle-workspace\"\nPYTHON_BIN=\"${HERMES_PYTHON:-python3}\"\nif [ -x \"$HERMES_HOME\u002Fhermes-agent\u002Fvenv\u002Fbin\u002Fpython\" ]; then\n  PYTHON_BIN=\"$HERMES_HOME\u002Fhermes-agent\u002Fvenv\u002Fbin\u002Fpython\"\nfi\nGSETUP=\"$PYTHON_BIN $GWORKSPACE_SKILL_DIR\u002Fscripts\u002Fsetup.py\"\n```\n\n### Step 0: Check if already set up\n\n```bash\n$GSETUP --check\n```\n\nIf it prints `AUTHENTICATED`, skip to Usage — setup is already done.\n\n### Step 1: Triage — ask the user what they need\n\n**Question 1: \"What Google services do you need? Just email, or also\nCalendar\u002FDrive\u002FSheets\u002FDocs?\"**\n\n- **Email only** → Use the `himalaya` skill instead — simpler setup.\n- **Calendar, Drive, Sheets, Docs (or email + these)** → Continue below.\n\n**Partial scopes**: Users can authorize only a subset of services. The setup\nscript accepts partial scopes and warns about missing ones.\n\n**Question 2: \"Does your Google account use Advanced Protection?\"**\n\n- **No \u002F Not sure** → Normal setup.\n- **Yes** → Workspace admin must add the OAuth client ID to allowed apps first.\n\n### Step 2: Create OAuth credentials (one-time, ~5 minutes)\n\nTell the user:\n\n> 1. Go to https:\u002F\u002Fconsole.cloud.google.com\u002Fapis\u002Fcredentials\n> 2. Create a project (or use an existing one)\n> 3. Enable the APIs you need (Gmail, Calendar, Drive, Sheets, Docs, People)\n> 4. Credentials → Create Credentials → OAuth 2.0 Client ID → Desktop app\n> 5. Download JSON and tell me the file path\n\n```bash\n$GSETUP --client-secret \u002Fpath\u002Fto\u002Fclient_secret.json\n```\n\n### Step 3: Get authorization URL\n\n```bash\n$GSETUP --auth-url\n```\n\nSend the URL to the user. After authorizing, they paste back the redirect URL or code.\n\n### Step 4: Exchange the code\n\n```bash\n$GSETUP --auth-code \"THE_URL_OR_CODE_THE_USER_PASTED\"\n```\n\n### Step 5: Verify\n\n```bash\n$GSETUP --check\n```\n\nShould print `AUTHENTICATED`. Token refreshes automatically from now on.\n\n## Usage\n\nAll commands go through the API script:\n\n```bash\nHERMES_HOME=\"${HERMES_HOME:-$HOME\u002F.hermes}\"\nGWORKSPACE_SKILL_DIR=\"$HERMES_HOME\u002Fskills\u002Fproductivity\u002Fgoogle-workspace\"\nPYTHON_BIN=\"${HERMES_PYTHON:-python3}\"\nif [ -x \"$HERMES_HOME\u002Fhermes-agent\u002Fvenv\u002Fbin\u002Fpython\" ]; then\n  PYTHON_BIN=\"$HERMES_HOME\u002Fhermes-agent\u002Fvenv\u002Fbin\u002Fpython\"\nfi\nGAPI=\"$PYTHON_BIN $GWORKSPACE_SKILL_DIR\u002Fscripts\u002Fgoogle_api.py\"\n```\n\n### Gmail\n\n```bash\n$GAPI gmail search \"is:unread\" --max 10\n$GAPI gmail get MESSAGE_ID\n$GAPI gmail send --to user@example.com --subject \"Hello\" --body \"Message text\"\n$GAPI gmail send --to user@example.com --subject \"Report\" --body \"\u003Ch1>Q4\u003C\u002Fh1>\" --html\n$GAPI gmail reply MESSAGE_ID --body \"Thanks, that works for me.\"\n$GAPI gmail labels\n$GAPI gmail modify MESSAGE_ID --add-labels LABEL_ID\n```\n\n### Calendar\n\n```bash\n$GAPI calendar list\n$GAPI calendar create --summary \"Standup\" --start 2026-03-01T10:00:00+01:00 --end 2026-03-01T10:30:00+01:00\n$GAPI calendar create --summary \"Review\" --start ... --end ... --attendees \"alice@co.com,bob@co.com\"\n$GAPI calendar delete EVENT_ID\n```\n\n### Drive\n\n```bash\n$GAPI drive search \"quarterly report\" --max 10\n$GAPI drive search \"mimeType='application\u002Fpdf'\" --raw-query --max 5\n```\n\n### Contacts\n\n```bash\n$GAPI contacts list --max 20\n```\n\n### Sheets\n\n```bash\n$GAPI sheets get SHEET_ID \"Sheet1!A1:D10\"\n$GAPI sheets update SHEET_ID \"Sheet1!A1:B2\" --values '[[\"Name\",\"Score\"],[\"Alice\",\"95\"]]'\n$GAPI sheets append SHEET_ID \"Sheet1!A:C\" --values '[[\"new\",\"row\",\"data\"]]'\n```\n\n### Docs\n\n```bash\n$GAPI docs get DOC_ID\n```\n\n### Direct gws access (advanced)\n\nFor operations not covered by the wrapper, use `gws_bridge.py` directly:\n\n```bash\nGBRIDGE=\"$PYTHON_BIN $GWORKSPACE_SKILL_DIR\u002Fscripts\u002Fgws_bridge.py\"\n$GBRIDGE calendar +agenda --today --format table\n$GBRIDGE gmail +triage --labels --format json\n$GBRIDGE drive +upload .\u002Freport.pdf\n$GBRIDGE sheets +read --spreadsheet SHEET_ID --range \"Sheet1!A1:D10\"\n```\n\n## Output Format\n\nAll commands return JSON via `gws --format json`. Key output shapes:\n\n- **Gmail search\u002Ftriage**: Array of message summaries (sender, subject, date, snippet)\n- **Gmail get\u002Fread**: Message object with headers and body text\n- **Gmail send\u002Freply**: Confirmation with message ID\n- **Calendar list\u002Fagenda**: Array of event objects (summary, start, end, location)\n- **Calendar create**: Confirmation with event ID and htmlLink\n- **Drive search**: Array of file objects (id, name, mimeType, webViewLink)\n- **Sheets get\u002Fread**: 2D array of cell values\n- **Docs get**: Full document JSON (use `body.content` for text extraction)\n- **Contacts list**: Array of person objects with names, emails, phones\n\nParse output with `jq` or read JSON directly.\n\n## Rules\n\n1. **Never send email or create\u002Fdelete events without confirming with the user first.**\n2. **Check auth before first use** — run `setup.py --check`.\n3. **Use the Gmail search syntax reference** for complex queries.\n4. **Calendar times must include timezone** — ISO 8601 with offset or UTC.\n5. **Respect rate limits** — avoid rapid-fire sequential API calls.\n\n## Troubleshooting\n\n| Problem | Fix |\n|---------|-----|\n| `NOT_AUTHENTICATED` | Run setup Steps 2-5 |\n| `REFRESH_FAILED` | Token revoked — redo Steps 3-5 |\n| `gws: command not found` | Install: `npm install -g @googleworkspace\u002Fcli` |\n| `HttpError 403` | Missing scope — `$GSETUP --revoke` then redo Steps 3-5 |\n| `HttpError 403: Access Not Configured` | Enable API in Google Cloud Console |\n| Advanced Protection blocks auth | Admin must allowlist the OAuth client ID |\n\n## Revoking Access\n\n```bash\n$GSETUP --revoke\n```\n","# Google Workspace\n\nGmail, Calendar, Drive, Contacts, Sheets, and Docs — powered by `gws` (Google's official Rust CLI). The skill provides a backward-compatible Python wrapper that handles OAuth token refresh and delegates to `gws`.\n\n## Architecture\n\n```\ngoogle_api.py  →  gws_bridge.py  →  gws CLI\n(argparse compat)  (token refresh)    (Google APIs)\n```\n\n- `setup.py` handles OAuth2 (headless-compatible, works on CLI\u002FTelegram\u002FDiscord)\n- `gws_bridge.py` refreshes the Hermes token and injects it into `gws` via `GOOGLE_WORKSPACE_CLI_TOKEN`\n- `google_api.py` provides the same CLI interface as v1 but delegates to `gws`\n\n## References\n\n- `references\u002Fgmail-search-syntax.md` — Gmail search operators (is:unread, from:, newer_than:, etc.)\n\n## Scripts\n\n- `scripts\u002Fsetup.py` — OAuth2 setup (run once to authorize)\n- `scripts\u002Fgws_bridge.py` — Token refresh bridge to gws CLI\n- `scripts\u002Fgoogle_api.py` — Backward-compatible API wrapper (delegates to gws)\n\n## Prerequisites\n\nInstall `gws`:\n\n```bash\ncargo install google-workspace-cli\n# or via npm (recommended, downloads prebuilt binary):\nnpm install -g @googleworkspace\u002Fcli\n# or via Homebrew:\nbrew install googleworkspace-cli\n```\n\nVerify: `gws --version`\n\n## First-Time Setup\n\nThe setup is fully non-interactive — you drive it step by step so it works\non CLI, Telegram, Discord, or any platform.\n\nDefine a shorthand first:\n\n```bash\nHERMES_HOME=\"${HERMES_HOME:-$HOME\u002F.hermes}\"\nGWORKSPACE_SKILL_DIR=\"$HERMES_HOME\u002Fskills\u002Fproductivity\u002Fgoogle-workspace\"\nPYTHON_BIN=\"${HERMES_PYTHON:-python3}\"\nif [ -x \"$HERMES_HOME\u002Fhermes-agent\u002Fvenv\u002Fbin\u002Fpython\" ]; then\n  PYTHON_BIN=\"$HERMES_HOME\u002Fhermes-agent\u002Fvenv\u002Fbin\u002Fpython\"\nfi\nGSETUP=\"$PYTHON_BIN $GWORKSPACE_SKILL_DIR\u002Fscripts\u002Fsetup.py\"\n```\n\n### Step 0: Check if already set up\n\n```bash\n$GSETUP --check\n```\n\nIf it prints `AUTHENTICATED`, skip to Usage — setup is already done.\n\n### Step 1: Triage — ask the user what they need\n\n**Question 1: \"What Google services do you need? Just email, or also\nCalendar\u002FDrive\u002FSheets\u002FDocs?\"**\n\n- **Email only** → Use the `himalaya` skill instead — simpler setup.\n- **Calendar, Drive, Sheets, Docs (or email + these)** → Continue below.\n\n**Partial scopes**: Users can authorize only a subset of services. The setup\nscript accepts partial scopes and warns about missing ones.\n\n**Question 2: \"Does your Google account use Advanced Protection?\"**\n\n- **No \u002F Not sure** → Normal setup.\n- **Yes** → Workspace admin must add the OAuth client ID to allowed apps first.\n\n### Step 2: Create OAuth credentials (one-time, ~5 minutes)\n\nTell the user:\n\n> 1. Go to https:\u002F\u002Fconsole.cloud.google.com\u002Fapis\u002Fcredentials\n> 2. Create a project (or use an existing one)\n> 3. Enable the APIs you need (Gmail, Calendar, Drive, Sheets, Docs, People)\n> 4. Credentials → Create Credentials → OAuth 2.0 Client ID → Desktop app\n> 5. Download JSON and tell me the file path\n\n```bash\n$GSETUP --client-secret \u002Fpath\u002Fto\u002Fclient_secret.json\n```\n\n### Step 3: Get authorization URL\n\n```bash\n$GSETUP --auth-url\n```\n\nSend the URL to the user. After authorizing, they paste back the redirect URL or code.\n\n### Step 4: Exchange the code\n\n```bash\n$GSETUP --auth-code \"THE_URL_OR_CODE_THE_USER_PASTED\"\n```\n\n### Step 5: Verify\n\n```bash\n$GSETUP --check\n```\n\nShould print `AUTHENTICATED`. Token refreshes automatically from now on.\n\n## Usage\n\nAll commands go through the API script:\n\n```bash\nHERMES_HOME=\"${HERMES_HOME:-$HOME\u002F.hermes}\"\nGWORKSPACE_SKILL_DIR=\"$HERMES_HOME\u002Fskills\u002Fproductivity\u002Fgoogle-workspace\"\nPYTHON_BIN=\"${HERMES_PYTHON:-python3}\"\nif [ -x \"$HERMES_HOME\u002Fhermes-agent\u002Fvenv\u002Fbin\u002Fpython\" ]; then\n  PYTHON_BIN=\"$HERMES_HOME\u002Fhermes-agent\u002Fvenv\u002Fbin\u002Fpython\"\nfi\nGAPI=\"$PYTHON_BIN $GWORKSPACE_SKILL_DIR\u002Fscripts\u002Fgoogle_api.py\"\n```\n\n### Gmail\n\n```bash\n$GAPI gmail search \"is:unread\" --max 10\n$GAPI gmail get MESSAGE_ID\n$GAPI gmail send --to user@example.com --subject \"Hello\" --body \"Message text\"\n$GAPI gmail send --to user@example.com --subject \"Report\" --body \"\u003Ch1>Q4\u003C\u002Fh1>\" --html\n$GAPI gmail reply MESSAGE_ID --body \"Thanks, that works for me.\"\n$GAPI gmail labels\n$GAPI gmail modify MESSAGE_ID --add-labels LABEL_ID\n```\n\n### Calendar\n\n```bash\n$GAPI calendar list\n$GAPI calendar create --summary \"Standup\" --start 2026-03-01T10:00:00+01:00 --end 2026-03-01T10:30:00+01:00\n$GAPI calendar create --summary \"Review\" --start ... --end ... --attendees \"alice@co.com,bob@co.com\"\n$GAPI calendar delete EVENT_ID\n```\n\n### Drive\n\n```bash\n$GAPI drive search \"quarterly report\" --max 10\n$GAPI drive search \"mimeType='application\u002Fpdf'\" --raw-query --max 5\n```\n\n### Contacts\n\n```bash\n$GAPI contacts list --max 20\n```\n\n### Sheets\n\n```bash\n$GAPI sheets get SHEET_ID \"Sheet1!A1:D10\"\n$GAPI sheets update SHEET_ID \"Sheet1!A1:B2\" --values '[[\"Name\",\"Score\"],[\"Alice\",\"95\"]]'\n$GAPI sheets append SHEET_ID \"Sheet1!A:C\" --values '[[\"new\",\"row\",\"data\"]]'\n```\n\n### Docs\n\n```bash\n$GAPI docs get DOC_ID\n```\n\n### Direct gws access (advanced)\n\nFor operations not covered by the wrapper, use `gws_bridge.py` directly:\n\n```bash\nGBRIDGE=\"$PYTHON_BIN $GWORKSPACE_SKILL_DIR\u002Fscripts\u002Fgws_bridge.py\"\n$GBRIDGE calendar +agenda --today --format table\n$GBRIDGE gmail +triage --labels --format json\n$GBRIDGE drive +upload .\u002Freport.pdf\n$GBRIDGE sheets +read --spreadsheet SHEET_ID --range \"Sheet1!A1:D10\"\n```\n\n## Output Format\n\nAll commands return JSON via `gws --format json`. Key output shapes:\n\n- **Gmail search\u002Ftriage**: Array of message summaries (sender, subject, date, snippet)\n- **Gmail get\u002Fread**: Message object with headers and body text\n- **Gmail send\u002Freply**: Confirmation with message ID\n- **Calendar list\u002Fagenda**: Array of event objects (summary, start, end, location)\n- **Calendar create**: Confirmation with event ID and htmlLink\n- **Drive search**: Array of file objects (id, name, mimeType, webViewLink)\n- **Sheets get\u002Fread**: 2D array of cell values\n- **Docs get**: Full document JSON (use `body.content` for text extraction)\n- **Contacts list**: Array of person objects with names, emails, phones\n\nParse output with `jq` or read JSON directly.\n\n## Rules\n\n1. **Never send email or create\u002Fdelete events without confirming with the user first.**\n2. **Check auth before first use** — run `setup.py --check`.\n3. **Use the Gmail search syntax reference** for complex queries.\n4. **Calendar times must include timezone** — ISO 8601 with offset or UTC.\n5. **Respect rate limits** — avoid rapid-fire sequential API calls.\n\n## Troubleshooting\n\n| Problem | Fix |\n|---------|-----|\n| `NOT_AUTHENTICATED` | Run setup Steps 2-5 |\n| `REFRESH_FAILED` | Token revoked — redo Steps 3-5 |\n| `gws: command not found` | Install: `npm install -g @googleworkspace\u002Fcli` |\n| `HttpError 403` | Missing scope — `$GSETUP --revoke` then redo Steps 3-5 |\n| `HttpError 403: Access Not Configured` | Enable API in Google Cloud Console |\n| Advanced Protection blocks auth | Admin must allowlist the OAuth client ID |\n\n## Revoking Access\n\n```bash\n$GSETUP --revoke\n```\n",{"name":5,"author":44,"license":15,"version":45,"metadata":46,"description":7,"required_credential_files":60},"Nous Research","2.0.0",{"hermes":47},{"tags":48,"homepage":57,"related_skills":58},[49,50,51,52,53,54,55,56,24,34],"Google","Gmail","Calendar","Drive","Sheets","Docs","Contacts","Email","https:\u002F\u002Fgithub.com\u002FNousResearch\u002Fhermes-agent",[59],"himalaya",[61,64],{"path":62,"description":63},"google_token.json","Google OAuth2 token (created by setup script)",{"path":65,"description":66},"google_client_secret.json","Google OAuth2 client credentials (downloaded from Google Cloud Console)","main","6ffadc67c9777282fa1f9330ec12ac8778064409","skills\u002Fproductivity\u002Fgoogle-workspace",0,"https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil","https:\u002F\u002Fgithub.com\u002Fq2805187159","Independent Researcher\r\n\r\nEmail: q2805187159@gmail.com\r\n\r\nGithub: q2805187159\r\n\r\nResearch Interests:\r\n- LLM Agents\r\n- Tool Routing\r\n- RAG","2026-06-24 18:31:41",{"source":8,"skillName":5,"commands":76,"prompt":86,"zipAvailable":87},[77,80,83],{"tool":78,"command":79},"npx","npx skills add q2805187159\u002FAnvil --skill google-workspace",{"tool":81,"command":82},"bunx","bunx skills add q2805187159\u002FAnvil --skill google-workspace",{"tool":84,"command":85},"pnpm","pnpm dlx skills add q2805187159\u002FAnvil --skill google-workspace","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity\u002Fgoogle-workspace\u002FSKILL.md",true,[89,95,101,105],{"path":90,"resourceType":91,"resourceTypeDesc":92,"sizeBytes":93,"sourceHtmlUrl":94},"references\u002Fgmail-search-syntax.md","REFERENCE","参考文档",2150,"https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity\u002Fgoogle-workspace\u002Freferences\u002Fgmail-search-syntax.md",{"path":96,"resourceType":97,"resourceTypeDesc":98,"sizeBytes":99,"sourceHtmlUrl":100},"scripts\u002Fgoogle_api.py","SCRIPT","脚本",10496,"https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity\u002Fgoogle-workspace\u002Fscripts\u002Fgoogle_api.py",{"path":102,"resourceType":97,"resourceTypeDesc":98,"sizeBytes":103,"sourceHtmlUrl":104},"scripts\u002Fgws_bridge.py",2703,"https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity\u002Fgoogle-workspace\u002Fscripts\u002Fgws_bridge.py",{"path":106,"resourceType":97,"resourceTypeDesc":98,"sizeBytes":107,"sourceHtmlUrl":108},"scripts\u002Fsetup.py",14743,"https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity\u002Fgoogle-workspace\u002Fscripts\u002Fsetup.py",[110,143,176,183,209,232],{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":114,"licenseFileUrl":115,"sourceHtmlUrl":116,"categories":117,"keywords":126,"publishedAt":39},"01M71NPWVVMB1AZ8XGKNJFT0YP","webapp-testing","Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fwebapp-testing\u002FSKILL.md",[118,123],{"categoryNo":119,"categoryName":120,"taxonomyType":121,"taxonomyTypeDesc":122},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":124,"categoryName":125,"taxonomyType":121,"taxonomyTypeDesc":122},"01JBSEEDCAT000000000000009","前端开发",[127,128,129,130,131,132,133,134,135,136,137,23,138,139,140,141,142],"webapp","testing","webapp testing","for","applications","local","frontend","debugging","toolkit","logs","browser","playwright","web","behavior","ui","screenshots",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":157,"publishedAt":39},"01M71NPTQ96H4XSZVZT422BNRB","web-design-guidelines","Review UI code for Web Interface Guidelines compliance. Use when asked to \"review my UI\", \"check accessibility\", \"audit design\", \"review UX\", or \"check my site against best practices\".","https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fweb-design-guidelines\u002FSKILL.md",[149,152],{"categoryNo":150,"categoryName":151,"taxonomyType":121,"taxonomyTypeDesc":122},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":153,"categoryName":154,"taxonomyType":155,"taxonomyTypeDesc":156},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[158,159,139,160,161,130,162,163,164,165,166,167,168,169,170,171,172,173,174,175],"guidelines","design","web design guidelines","web design","vercel","interface","web interface guidelines","use","when","best practices","file","code","review","check","compliance","audit","ux","accessibility",{"skillNo":177,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":178,"categories":179,"keywords":182,"publishedAt":39},"01M71NPS2D31Y2BGFYA9DB7CE4","https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fweb-design-guidelines copy\u002FSKILL.md",[180,181],{"categoryNo":150,"categoryName":151,"taxonomyType":121,"taxonomyTypeDesc":122},{"categoryNo":153,"categoryName":154,"taxonomyType":155,"taxonomyTypeDesc":156},[158,159,139,160,161,130,162,163,164,165,166,167,168,169,170,171,172,173,174,175],{"skillNo":184,"name":185,"nameZh":6,"description":186,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":187,"categories":188,"keywords":195,"publishedAt":39},"01M71NPQ9DRT54QSQJ0BHBM3VG","video-generation","Use this skill when the user requests to generate, create, or imagine videos. Supports structured prompts and reference image for guided generation.","https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fvideo-generation\u002FSKILL.md",[189,192],{"categoryNo":190,"categoryName":191,"taxonomyType":121,"taxonomyTypeDesc":122},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":193,"categoryName":194,"taxonomyType":121,"taxonomyTypeDesc":122},"01JBSEEDCAT000000000000023","Skill与智能体开发",[196,197,198,130,165,166,199,200,201,202,203,204,205,206,207,208],"Video","video generation","generation","image","create","imagine","requests","generate","videos","reference","prompts","user","structured",{"skillNo":210,"name":211,"nameZh":6,"description":212,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":213,"categories":214,"keywords":216,"publishedAt":39},"01M71NPN57CT154SWXAS52475X","youtube-downloader","Download YouTube videos with customizable quality and format options. Use this skill when the user asks to download, save, or grab YouTube videos. Supports various quality settings (best, 1080p, 720p, 480p, 360p), multiple formats (mp4, webm, mkv), and audio-only downloads as MP3.","https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fvideo-downloader\u002FSKILL.md",[215],{"categoryNo":190,"categoryName":191,"taxonomyType":121,"taxonomyTypeDesc":122},[217,218,219,220,221,222,223,165,166,224,23,225,226,227,228,229,204,230,207,231],"youtube","youtube downloader","mp4","as","downloads","Audio","only","mp3","options","quality","format","settings","grab","formats","download",{"skillNo":233,"name":234,"nameZh":6,"description":235,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":236,"categories":237,"keywords":238,"publishedAt":39},"01M71NPKD95YB8N3J6J78QGFFW","verification-before-completion","Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always","https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fverification-before-completion\u002FSKILL.md",[],[239,240,241,242,243,244,245,165,246,166,247,248,249,250,251,252],"verification","verification before completion","running","evidence","complete","prs","claim","assertions","committing","output","claims","work","about","commands"]