{"id":"65fb5c5e-eaf2-4f88-a2b5-373bc43bca56","shortId":"HUWMyG","kind":"skill","title":"google-drive","tagline":"Read, search, upload, rename, move and delete Google Drive files / folders / shared content via the Drive v3 REST API. Use when the user mentions Drive files, \"my drive\", shared documents, Google Docs / Sheets / Slides, exporting / downloading a Drive file, searching by name / ow","description":"Drive Google Drive via `curl + jq`. The user's OAuth bearer token is\nin `$GOOGLE_DRIVE_TOKEN`; every call needs it as\n`Authorization: Bearer $GOOGLE_DRIVE_TOKEN`. At minimum the token\ncarries `drive.readonly` plus the identity scopes\n(`openid email profile`); if the user opted in to write at install\ntime it also carries the broader `drive` scope (full read + write).\n\nThe Drive API returns standard JSON; failures surface as\n`{\"error\": {\"code\": 401|403|..., \"message\": \"...\"}}` — show that\nerror verbatim to the user. `401` means the token expired and the\nuser must re-install the connector. `403 insufficientPermissions`\non a write means the user did not grant the `drive` scope at install\n— ask them to re-install with the read+write box checked.\n\n**Before any destructive write** (renaming, moving, trashing, or\nbulk-mutating files) show the exact target list and ask the user to\nconfirm. Never trash by guessing an id — always echo back the file\nname + path you're about to touch.\n\n**Always start with `/about?fields=user`** to confirm the connection\nworks AND learn which Google account you're operating against.\n\n## Optional: Google Workspace CLI (`gws`) for uploads\n\n[`gws`](https://github.com/googleworkspace/cli) is Google's official CLI\n(not officially supported — community-maintained on the `googleworkspace`\norg). It dynamically builds its command surface from Google's Discovery\nDocument, exits non-zero on API errors, supports `--page-all`\nauto-pagination, and ships a `+upload` helper that wraps the multipart\nupload protocol.\n\n**Use `gws` for uploads.** A Drive multipart upload requires a\nhand-formatted `multipart/related` body with a JSON metadata part and a\nbinary file part separated by a boundary string — easy to get wrong from\ncurl. `gws drive +upload` does it correctly. **For everything else**\n(list, search, get, export, rename, move, trash, delete) the curl recipes\nbelow are equivalent and shorter — stay on those.\n\n### Install\n\n```sh\nnpm install -g @googleworkspace/cli   # or: brew install googleworkspace-cli\n# Pre-built binaries also at https://github.com/googleworkspace/cli/releases\ngws --version\n```\n\n### Auth\n\n`gws` reads its OAuth bearer token from the `GOOGLE_WORKSPACE_CLI_TOKEN`\nenvironment variable. The Drive token used in this skill is in\n`$GOOGLE_DRIVE_TOKEN`, so re-export it once at the top of every shell\nblock that calls `gws`:\n\n```sh\nexport GOOGLE_WORKSPACE_CLI_TOKEN=\"$GOOGLE_DRIVE_TOKEN\"\n```\n\n### Upload\n\n```sh\n# Simple upload to My Drive (auto-detects MIME type, sets the file name\n# from --name; falls back to the local filename if --name is omitted)\ngws drive +upload ./report.pdf --name \"Q1 Report\"\n\n# Upload into a specific folder, or with explicit metadata, via the\n# generic Discovery method + --upload (multipart wire format handled\n# for you)\ngws drive files create \\\n  --json '{\"name\":\"report.pdf\",\"parents\":[\"FOLDER_ID\"],\"description\":\"Q1\"}' \\\n  --upload ./report.pdf\n```\n\nBoth exit non-zero with a structured JSON error on stderr if Google\nrejects the request — surface that verbatim. Uploads need the broader\n`drive` scope; on `403 insufficientPermissions` ask the user to\nre-install the connector with read+write checked.\n\n## Recipes\n\n### Verify auth (always run first)\n\n```sh\ncurl -sS -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  \"https://www.googleapis.com/drive/v3/about?fields=user(displayName,emailAddress,photoLink),storageQuota(usage,limit)\" \\\n  | jq '{user, quota: .storageQuota}'\n```\n\n### List recent files (last modified first)\n\n```sh\ncurl -sS -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  \"https://www.googleapis.com/drive/v3/files?orderBy=modifiedTime%20desc&pageSize=20&fields=files(id,name,mimeType,modifiedTime,owners(emailAddress),webViewLink,parents)\" \\\n  | jq '.files[] | {id, name, mimeType, modified: .modifiedTime, owner: .owners[0].emailAddress, webViewLink}'\n```\n\n`pageSize` max is 1000; default is 100. Use `pageToken` from the\nresponse (`nextPageToken`) for follow-up pages.\n\n### Search by name / fulltext\n\n```sh\n# Exact-name fragments — note \"name contains\" supports tokens, not regex\nQ='name contains \"季度复盘\" and trashed = false'\ncurl -sS -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  --get \"https://www.googleapis.com/drive/v3/files\" \\\n  --data-urlencode \"q=$Q\" \\\n  --data-urlencode 'fields=files(id,name,mimeType,modifiedTime,webViewLink,owners(emailAddress))' \\\n  --data-urlencode 'pageSize=20' \\\n  | jq '.files[] | {id, name, modified: .modifiedTime, owner: .owners[0].emailAddress}'\n\n# Full-text search (body + title)\nQ='fullText contains \"OKR 2026Q2\" and trashed = false'\ncurl -sS -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  --get \"https://www.googleapis.com/drive/v3/files\" \\\n  --data-urlencode \"q=$Q\" \\\n  --data-urlencode 'fields=files(id,name,modifiedTime,webViewLink)' \\\n  | jq '.files[]'\n```\n\nThe `q` param uses [Drive's mini query language](https://developers.google.com/drive/api/guides/search-files):\n`name`, `fullText`, `mimeType`, `parents`, `'<email>' in owners`,\n`'<email>' in writers`, `modifiedTime > '2026-01-01T00:00:00'`,\n`sharedWithMe`, `trashed`, joined by `and` / `or` / `not`.\n\n### List files shared with me\n\n```sh\ncurl -sS -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  --get \"https://www.googleapis.com/drive/v3/files\" \\\n  --data-urlencode 'q=sharedWithMe and trashed = false' \\\n  --data-urlencode 'orderBy=sharedWithMeTime desc' \\\n  --data-urlencode 'fields=files(id,name,mimeType,sharedWithMeTime,owners(displayName,emailAddress))' \\\n  --data-urlencode 'pageSize=30' \\\n  | jq '.files[] | {name, sharedAt: .sharedWithMeTime, sharedBy: .owners[0]}'\n```\n\n### List children of a folder\n\n```sh\nFOLDER_ID='1A2B3CdEfGhIjKlMn'\ncurl -sS -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  --get \"https://www.googleapis.com/drive/v3/files\" \\\n  --data-urlencode \"q='$FOLDER_ID' in parents and trashed = false\" \\\n  --data-urlencode 'fields=files(id,name,mimeType,size,modifiedTime),nextPageToken' \\\n  | jq '.files'\n```\n\n### Get metadata for a single file\n\n```sh\nFILE_ID='1A2B3CdEfGhIjKlMn'\ncurl -sS -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  \"https://www.googleapis.com/drive/v3/files/$FILE_ID?fields=id,name,mimeType,size,modifiedTime,parents,owners,webViewLink,description\"\n```\n\n### Download a binary file (PDF / image / zip / …)\n\n```sh\nFILE_ID='1A2B3CdEfGhIjKlMn'\nOUT=/tmp/download.bin\ncurl -sS -L -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  \"https://www.googleapis.com/drive/v3/files/$FILE_ID?alt=media\" \\\n  -o \"$OUT\"\nfile \"$OUT\" && wc -c \"$OUT\"\n```\n\n### Read a Google Doc as plain markdown / text\n\nGoogle-native files (Docs, Sheets, Slides) **don't have raw bytes** —\nyou have to ask Drive to *export* them to a concrete MIME type:\n\n```sh\nDOC_ID='1A2B3CdEfGhIjKlMn'\n\n# Markdown (best for chat-friendly summaries)\ncurl -sS -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  \"https://www.googleapis.com/drive/v3/files/$DOC_ID/export?mimeType=text/markdown\" \\\n  > /tmp/doc.md\nhead -40 /tmp/doc.md\n\n# Plain text fallback for older docs\ncurl -sS -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  \"https://www.googleapis.com/drive/v3/files/$DOC_ID/export?mimeType=text/plain\" \\\n  > /tmp/doc.txt\n```\n\nCommon export MIME types:\n\n| native MIME | export to |\n|---|---|\n| `application/vnd.google-apps.document` | `text/markdown`, `text/plain`, `text/html`, `application/pdf`, `application/vnd.openxmlformats-officedocument.wordprocessingml.document` |\n| `application/vnd.google-apps.spreadsheet` | `text/csv`, `application/pdf`, `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` |\n| `application/vnd.google-apps.presentation` | `application/pdf`, `text/plain`, `application/vnd.openxmlformats-officedocument.presentationml.presentation` |\n\n### Read a Google Sheet as CSV\n\n```sh\nSHEET_ID='1A2B3CdEfGhIjKlMn'\ncurl -sS -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  \"https://www.googleapis.com/drive/v3/files/$SHEET_ID/export?mimeType=text/csv\" \\\n  > /tmp/sheet.csv\nhead /tmp/sheet.csv\n```\n\nThe Drive `export` endpoint returns the **first sheet only**. For\nmulti-tab access the user needs to install a separate Google Sheets\nconnector (currently out of catalog) — explain that and stop.\n\n### Get permissions / sharing on a file\n\n```sh\nFILE_ID='1A2B3CdEfGhIjKlMn'\ncurl -sS -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  \"https://www.googleapis.com/drive/v3/files/$FILE_ID/permissions?fields=permissions(id,type,role,emailAddress,domain,deleted)\" \\\n  | jq '.permissions[] | {who: (.emailAddress // .domain // .type), role}'\n```\n\n### Pagination boilerplate\n\n```sh\nPAGE_TOKEN=''\nwhile : ; do\n  RESP=$(curl -sS -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n    --get \"https://www.googleapis.com/drive/v3/files\" \\\n    --data-urlencode 'q=trashed = false' \\\n    --data-urlencode 'fields=files(id,name),nextPageToken' \\\n    --data-urlencode 'pageSize=200' \\\n    ${PAGE_TOKEN:+--data-urlencode \"pageToken=$PAGE_TOKEN\"})\n  echo \"$RESP\" | jq -c '.files[]'\n  PAGE_TOKEN=$(echo \"$RESP\" | jq -r '.nextPageToken // empty')\n  [ -z \"$PAGE_TOKEN\" ] && break\ndone\n```\n\n## Write recipes\n\nThese all need the broader `drive` scope. If the user only granted\n`drive.readonly` you'll get `403 insufficientPermissions` — surface\nthat and suggest re-installing with the read+write box checked.\n**Always echo the target name + path back to the user before\ntrashing or bulk-moving anything.**\n\n### Rename a file\n\n```sh\nFILE_ID='1A2B3CdEfGhIjKlMn'\nNEW_NAME='2026 Q2 OKR (final).gdoc'\ncurl -sS -X PATCH -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  -H 'Content-Type: application/json' \\\n  --data \"{\\\"name\\\":$(jq -nr --arg n \"$NEW_NAME\" '$n')}\" \\\n  \"https://www.googleapis.com/drive/v3/files/$FILE_ID?fields=id,name\"\n```\n\n### Move a file to a different folder\n\nDrive's folder model is parent-id based. Move = remove old parent,\nadd new parent:\n\n```sh\nFILE_ID='1A2B3CdEfGhIjKlMn'\nNEW_PARENT='1XYZnewFolderId'\n\n# Read existing parents (so we can pass them in removeParents)\nOLD_PARENTS=$(curl -sS -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  \"https://www.googleapis.com/drive/v3/files/$FILE_ID?fields=parents\" \\\n  | jq -r '.parents | join(\",\")')\n\ncurl -sS -X PATCH -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  --data '' \\\n  \"https://www.googleapis.com/drive/v3/files/$FILE_ID?addParents=$NEW_PARENT&removeParents=$OLD_PARENTS&fields=id,name,parents\"\n```\n\n### Create a new folder\n\n```sh\nPARENT_ID='1XYZparentFolderId'  # or 'root' for My Drive root\ncurl -sS -X POST -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  -H 'Content-Type: application/json' \\\n  --data \"{\\\"name\\\":\\\"Reports / 2026Q2\\\",\\\"mimeType\\\":\\\"application/vnd.google-apps.folder\\\",\\\"parents\\\":[\\\"$PARENT_ID\\\"]}\" \\\n  \"https://www.googleapis.com/drive/v3/files?fields=id,name,webViewLink\" \\\n  | jq\n```\n\n### Upload a file (multipart so metadata + bytes go in one request)\n\n```sh\nLOCAL=/tmp/report.pdf\nNAME='Q2 report.pdf'\nPARENT_ID='1XYZparentFolderId'\nMIME='application/pdf'\n\nBOUNDARY='aceDataBoundary'\nMETA=$(jq -nc --arg n \"$NAME\" --arg p \"$PARENT_ID\" '{name:$n, parents:[$p]}')\n{\n  printf -- '--%s\\r\\n' \"$BOUNDARY\"\n  printf 'Content-Type: application/json; charset=UTF-8\\r\\n\\r\\n'\n  printf '%s\\r\\n' \"$META\"\n  printf -- '--%s\\r\\n' \"$BOUNDARY\"\n  printf 'Content-Type: %s\\r\\n\\r\\n' \"$MIME\"\n  cat \"$LOCAL\"\n  printf '\\r\\n--%s--\\r\\n' \"$BOUNDARY\"\n} > /tmp/_drive_upload.bin\n\ncurl -sS -X POST -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  -H \"Content-Type: multipart/related; boundary=$BOUNDARY\" \\\n  --data-binary @/tmp/_drive_upload.bin \\\n  \"https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=id,name,webViewLink\" \\\n  | jq\n```\n\nFor a **media-only** upload (no metadata) use `uploadType=media`; for\nfiles >5 MB use `uploadType=resumable` (covered in [Drive's docs]\n(https://developers.google.com/drive/api/guides/manage-uploads#resumable)).\n\n### Replace the contents of an existing file\n\n```sh\nFILE_ID='1A2B3CdEfGhIjKlMn'\nLOCAL=/tmp/report-v2.pdf\ncurl -sS -X PATCH -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  -H 'Content-Type: application/pdf' \\\n  --data-binary @\"$LOCAL\" \\\n  \"https://www.googleapis.com/upload/drive/v3/files/$FILE_ID?uploadType=media&fields=id,name,modifiedTime\"\n```\n\nMetadata stays the same (id / parents / name) — only the bytes are\nreplaced and Drive bumps `modifiedTime`.\n\n### Trash a file (or restore one)\n\n```sh\nFILE_ID='1A2B3CdEfGhIjKlMn'\ncurl -sS -X PATCH -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  -H 'Content-Type: application/json' \\\n  --data '{\"trashed\":true}' \\\n  \"https://www.googleapis.com/drive/v3/files/$FILE_ID?fields=id,name,trashed\"\n\n# Restore:\ncurl -sS -X PATCH -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  -H 'Content-Type: application/json' \\\n  --data '{\"trashed\":false}' \\\n  \"https://www.googleapis.com/drive/v3/files/$FILE_ID?fields=id,name,trashed\"\n```\n\nPrefer `trashed:true` over `DELETE` — `DELETE` is permanent and the\nuser can't undo it. Only use `DELETE` when they explicitly say\n\"permanently delete\".\n\n### Bulk \"move every PDF in the root to /Documents/PDF\" (confirmation pattern)\n\n```sh\n# 1. List candidates and show the user before doing anything\nDST_FOLDER_ID='1XYZdocsPdfFolder'\nROOT_ID='root'\n\nCANDS=$(curl -sS -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n  --get \"https://www.googleapis.com/drive/v3/files\" \\\n  --data-urlencode \"q='$ROOT_ID' in parents and mimeType='application/pdf' and trashed=false\" \\\n  --data-urlencode 'fields=files(id,name,webViewLink)' \\\n  | jq '.files')\necho \"$CANDS\" | jq -r '.[] | \"- \\(.name)\"'\n\n# 2. (after user confirms) actually move\necho \"$CANDS\" | jq -r '.[] | .id' | while read FID; do\n  curl -sS -X PATCH -H \"Authorization: Bearer $GOOGLE_DRIVE_TOKEN\" \\\n    --data '' \\\n    \"https://www.googleapis.com/drive/v3/files/$FID?addParents=$DST_FOLDER_ID&removeParents=$ROOT_ID&fields=id,name,parents\" \\\n    | jq -c '{id, name, parents}'\ndone\n```\n\n## Common error codes\n\n| HTTP | meaning | what to tell the user |\n|---|---|---|\n| `401 UNAUTHENTICATED` | token expired / revoked | \"Reconnect the Google Drive connector on the Connections page.\" |\n| `403 insufficientPermissions` | write scope missing | \"This action needs the Drive read+write scope, but only `drive.readonly` was granted at install. Re-install the connector and check the read+write box.\" |\n| `403 userRateLimitExceeded` | quota | retry once after 5–10s; if it persists, tell the user. |\n| `404 notFound` | wrong file id OR file isn't visible to this account | double-check the id; if shared, use `sharedWithMe` query above. |\n| `400 invalidQuery` | malformed `q` | print the `q` you sent + the error message back to the user. |\n\nNever log or echo `$GOOGLE_DRIVE_TOKEN` — treat it as a secret.\n\nNever log or echo `$GOOGLE_DRIVE_TOKEN` — treat it as a secret.","tags":["google","drive","skills","acedatacloud","acedata-cloud","agent-skills","agentskills","ai-image","ai-music","ai-tools","ai-video","claude-code"],"capabilities":["skill","source-acedatacloud","skill-google-drive","topic-acedata-cloud","topic-agent-skills","topic-agentskills","topic-ai-image","topic-ai-music","topic-ai-tools","topic-ai-video","topic-claude-code","topic-cursor","topic-gemini-cli","topic-github-copilot","topic-mcp"],"categories":["Skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/AceDataCloud/Skills/google-drive","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add AceDataCloud/Skills","source_repo":"https://github.com/AceDataCloud/Skills","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 7 github stars · SKILL.md body (14,679 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:14:02.301Z","embedding":null,"createdAt":"2026-05-18T13:21:32.676Z","updatedAt":"2026-05-18T19:14:02.301Z","lastSeenAt":"2026-05-18T19:14:02.301Z","tsv":"'-01':745,746 '-40':969 '-8':1414 '/about':214 '/documents/pdf':1636 '/drive/api/guides/manage-uploads#resumable)).':1499 '/drive/api/guides/search-files):':734 '/drive/v3/about?fields=user(displayname,emailaddress,photolink),storagequota(usage,limit)':561 '/drive/v3/files':648,706,774,834,1114,1669 '/drive/v3/files/$doc_id/export?mimetype=text/markdown':966 '/drive/v3/files/$doc_id/export?mimetype=text/plain':987 '/drive/v3/files/$fid?addparents=$dst_folder_id&removeparents=$root_id&fields=id,name,parents':1727 '/drive/v3/files/$file_id/permissions?fields=permissions(id,type,role,emailaddress,domain,deleted)':1087 '/drive/v3/files/$file_id?addparents=$new_parent&removeparents=$old_parents&fields=id,name,parents':1321 '/drive/v3/files/$file_id?alt=media':904 '/drive/v3/files/$file_id?fields=id,name':1250 '/drive/v3/files/$file_id?fields=id,name,mimetype,size,modifiedtime,parents,owners,webviewlink,description':879 '/drive/v3/files/$file_id?fields=id,name,trashed':1581,1603 '/drive/v3/files/$file_id?fields=parents':1303 '/drive/v3/files/$sheet_id/export?mimetype=text/csv':1031 '/drive/v3/files?fields=id,name,webviewlink':1362 '/drive/v3/files?orderby=modifiedtime%20desc&pagesize=20&fields=files(id,name,mimetype,modifiedtime,owners(emailaddress),webviewlink,parents)':583 '/googleworkspace/cli)':241 '/googleworkspace/cli/releases':377 '/report.pdf':463,501 '/tmp/_drive_upload.bin':1448,1469 '/tmp/doc.md':967,970 '/tmp/doc.txt':988 '/tmp/download.bin':892 '/tmp/report-v2.pdf':1512 '/tmp/report.pdf':1377 '/tmp/sheet.csv':1032,1034 '/upload/drive/v3/files/$file_id?uploadtype=media&fields=id,name,modifiedtime':1534 '/upload/drive/v3/files?uploadtype=multipart&fields=id,name,webviewlink':1472 '0':593,679,813 '00':748,749 '1':1640 '100':602 '1000':599 '10s':1796 '1a2b3cdefghijklmn':822,868,890,948,1020,1076,1216,1277,1510,1560 '1xyzdocspdffolder':1653 '1xyznewfolderid':1280 '1xyzparentfolderid':1329,1383 '2':1699 '20':670 '200':1133 '2026':744,1219 '2026q2':691,1354 '30':805 '400':1827 '401':118,128,1744 '403':119,142,529,1178,1758,1789 '404':1803 '5':1487,1795 'access':1048 'account':226,1815 'acedataboundari':1387 'action':1764 'actual':1703 'add':1271 'also':98,373 'alway':199,211,547,1193 'anyth':1209,1649 'api':22,109,273 'application/json':1238,1350,1411,1575,1597 'application/pdf':1001,1005,1008,1385,1527,1680 'application/vnd.google-apps.document':997 'application/vnd.google-apps.folder':1356 'application/vnd.google-apps.presentation':1007 'application/vnd.google-apps.spreadsheet':1003 'application/vnd.openxmlformats-officedocument.presentationml.presentation':1010 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':1006 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':1002 'arg':1243,1391,1394 'ask':158,188,531,935 'auth':380,546 'author':69,554,576,640,698,766,826,872,897,959,980,1024,1080,1106,1229,1296,1313,1341,1454,1518,1566,1588,1661,1719 'auto':280,440 'auto-detect':439 'auto-pagin':279 'back':201,451,1199,1839 'base':1266 'bearer':57,70,385,555,577,641,699,767,827,873,898,960,981,1025,1081,1107,1230,1297,1314,1342,1455,1519,1567,1589,1662,1720 'best':950 'binari':315,372,882,1468,1530 'block':419 'bodi':307,685 'boilerpl':1096 'boundari':321,1386,1406,1428,1447,1464,1465 'box':168,1191,1788 'break':1158 'brew':364 'broader':101,525,1166 'build':259 'built':371 'bulk':179,1207,1628 'bulk-mov':1206 'bulk-mut':178 'bump':1549 'byte':931,1370,1544 'c':910,1145,1729 'call':65,421 'cand':1657,1695,1706 'candid':1642 'carri':78,99 'cat':1439 'catalog':1062 'charset':1412 'chat':953 'chat-friend':952 'check':169,543,1192,1784,1818 'children':815 'cli':234,246,368,391,427 'code':117,1736 'command':261 'common':989,1734 'communiti':251 'community-maintain':250 'concret':942 'confirm':192,218,1637,1702 'connect':220,1756 'connector':141,539,1058,1753,1782 'contain':625,632,689 'content':16,1236,1348,1409,1431,1461,1502,1525,1573,1595 'content-typ':1235,1347,1408,1430,1460,1524,1572,1594 'correct':334 'cover':1492 'creat':491,1322 'csv':1016 'curl':51,328,347,551,573,637,695,763,823,869,893,956,977,1021,1077,1103,1224,1293,1308,1336,1449,1513,1561,1583,1658,1714 'current':1059 'data':650,655,667,708,713,776,784,790,802,836,847,1116,1122,1130,1137,1239,1318,1351,1467,1529,1576,1598,1671,1685,1724 'data-binari':1466,1528 'data-urlencod':649,654,666,707,712,775,783,789,801,835,846,1115,1121,1129,1136,1670,1684 'default':600 'delet':10,345,1608,1609,1621,1627 'desc':788 'descript':498 'destruct':172 'detect':441 'developers.google.com':733,1498 'developers.google.com/drive/api/guides/manage-uploads#resumable)).':1497 'developers.google.com/drive/api/guides/search-files):':732 'differ':1256 'discoveri':266,479 'displaynam':799 'doc':35,915,924,946,976,1496 'document':33,267 'domain':1092 'done':1159,1733 'doubl':1817 'double-check':1816 'download':39,880 'drive':3,12,19,28,31,41,47,49,62,72,102,108,154,298,330,396,405,430,438,461,489,526,557,579,643,701,727,769,829,875,900,936,962,983,1027,1036,1083,1109,1167,1232,1258,1299,1316,1334,1344,1457,1494,1521,1548,1569,1591,1664,1722,1752,1767,1848,1860 'drive.readonly':79,1174,1773 'dst':1650 'dynam':258 'easi':323 'echo':200,1142,1149,1194,1694,1705,1846,1858 'els':337 'email':85 'emailaddress':594,665,680,800,1091 'empti':1154 'endpoint':1038 'environ':393 'equival':351 'error':116,123,274,511,1735,1837 'everi':64,417,1630 'everyth':336 'exact':184,620 'exact-nam':619 'exist':1282,1505 'exit':268,503 'expir':132,1747 'explain':1063 'explicit':474,1624 'export':38,341,410,424,938,990,995,1037 'failur':113 'fall':450 'fallback':973 'fals':636,694,782,845,1120,1600,1683 'fid':1712 'field':215,657,715,792,849,1124,1687 'file':13,29,42,181,203,316,446,490,568,585,658,672,716,722,758,793,807,850,858,864,866,883,888,907,923,1072,1074,1125,1146,1212,1214,1253,1275,1366,1486,1506,1508,1553,1558,1688,1693,1806,1809 'filenam':455 'final':1222 'first':549,571,1041 'folder':14,471,496,818,820,839,1257,1260,1325,1651 'follow':611 'follow-up':610 'format':305,484 'fragment':622 'friend':954 'full':104,682 'full-text':681 'fulltext':617,688,736 'g':361 'gdoc':1223 'generic':478 'get':325,340,645,703,771,831,859,1067,1111,1177,1666 'github.com':240,376 'github.com/googleworkspace/cli)':239 'github.com/googleworkspace/cli/releases':375 'go':1371 'googl':2,11,34,48,61,71,225,232,243,264,389,404,425,429,515,556,578,642,700,768,828,874,899,914,921,961,982,1013,1026,1056,1082,1108,1231,1298,1315,1343,1456,1520,1568,1590,1663,1721,1751,1847,1859 'google-dr':1 'google-n':920 'googleworkspac':255,367 'googleworkspace-c':366 'googleworkspace/cli':362 'grant':152,1173,1775 'guess':196 'gws':235,238,294,329,378,381,422,460,488 'h':553,575,639,697,765,825,871,896,958,979,1023,1079,1105,1228,1234,1295,1312,1340,1346,1453,1459,1517,1523,1565,1571,1587,1593,1660,1718 'hand':304 'hand-format':303 'handl':485 'head':968,1033 'helper':286 'http':1737 'id':198,497,586,659,673,717,794,821,840,851,867,889,947,1019,1075,1126,1215,1265,1276,1328,1359,1382,1397,1509,1539,1559,1652,1655,1675,1689,1709,1730,1807,1820 'ident':82 'imag':885 'instal':95,139,157,163,357,360,365,537,1053,1186,1777,1780 'insufficientpermiss':143,530,1179,1759 'invalidqueri':1828 'isn':1810 'join':752,1307 'jq':52,562,584,671,721,806,857,1088,1144,1151,1241,1304,1363,1389,1473,1692,1696,1707,1728 'json':112,310,492,510 'l':895 'languag':731 'last':569 'learn':223 'list':186,338,566,757,814,1641 'll':1176 'local':454,1376,1440,1511,1531 'log':1844,1856 'maintain':252 'malform':1829 'markdown':918,949 'max':597 'mb':1488 'mean':129,147,1738 'media':1477,1484 'media-on':1476 'mention':27 'messag':120,1838 'meta':1388,1423 'metadata':311,475,860,1369,1481,1535 'method':480 'mime':442,943,991,994,1384,1438 'mimetyp':588,661,737,796,853,1355,1679 'mini':729 'minimum':75 'miss':1762 'model':1261 'modifi':570,589,675 'modifiedtim':590,662,676,719,743,855,1550 'move':8,175,343,1208,1251,1267,1629,1704 'multi':1046 'multi-tab':1045 'multipart':290,299,482,1367 'multipart/related':306,1463 'must':136 'mutat':180 'n':1244,1247,1392,1399,1405,1416,1418,1422,1427,1435,1437,1443,1446 'name':45,204,447,449,457,464,493,587,616,621,624,631,660,674,718,735,795,808,852,1127,1197,1218,1240,1246,1352,1378,1393,1398,1541,1690,1698,1731 'nativ':922,993 'nc':1390 'need':66,523,1051,1164,1765 'never':193,1843,1855 'new':1217,1245,1272,1278,1324 'nextpagetoken':608,856,1128,1153 'non':270,505 'non-zero':269,504 'note':623 'notfound':1804 'npm':359 'nr':1242 'o':905 'oauth':56,384 'offici':245,248 'okr':690,1221 'old':1269,1291 'older':975 'omit':459 'one':1373,1556 'openid':84 'oper':229 'opt':90 'option':231 'orderbi':786 'org':256 'ow':46 'owner':591,592,664,677,678,740,798,812 'p':1395,1401 'page':277,613,1098,1134,1140,1147,1156,1757 'page-al':276 'pages':596,669,804,1132 'pagetoken':604,1139 'pagin':281,1095 'param':725 'parent':495,738,842,1264,1270,1273,1279,1283,1292,1306,1327,1357,1358,1381,1396,1400,1540,1677,1732 'parent-id':1263 'part':312,317 'pass':1287 'patch':1227,1311,1516,1564,1586,1717 'path':205,1198 'pattern':1638 'pdf':884,1631 'perman':1611,1626 'permiss':1068,1089 'persist':1799 'plain':917,971 'plus':80 'post':1339,1452 'pre':370 'pre-built':369 'prefer':1604 'print':1831 'printf':1402,1407,1419,1424,1429,1441 'profil':86 'protocol':292 'q':630,652,653,687,710,711,724,778,838,1118,1673,1830,1833 'q1':465,499 'q2':1220,1379 'queri':730,1825 'quota':564,1791 'r':1152,1305,1404,1415,1417,1421,1426,1434,1436,1442,1445,1697,1708 'raw':930 're':138,162,207,228,409,536,1185,1779 're-export':408 're-instal':137,161,535,1184,1778 'read':4,105,166,382,541,912,1011,1189,1281,1711,1768,1786 'recent':567 'recip':348,544,1161 'reconnect':1749 'regex':629 'reject':516 'remov':1268 'removepar':1290 'renam':7,174,342,1210 'replac':1500,1546 'report':466,1353 'report.pdf':494,1380 'request':518,1374 'requir':301 'resp':1102,1143,1150 'respons':607 'rest':21 'restor':1555,1582 'resum':1491 'retri':1792 'return':110,1039 'revok':1748 'role':1094 'root':1331,1335,1634,1654,1656,1674 'run':548 'say':1625 'scope':83,103,155,527,1168,1761,1770 'search':5,43,339,614,684 'secret':1854,1866 'sent':1835 'separ':318,1055 'set':444 'sh':358,423,433,550,572,618,762,819,865,887,945,1017,1073,1097,1213,1274,1326,1375,1507,1557,1639 'share':15,32,759,1069,1822 'sharedat':809 'sharedbi':811 'sharedwithm':750,779,1824 'sharedwithmetim':787,797,810 'sheet':36,925,1014,1018,1042,1057 'shell':418 'ship':283 'shorter':353 'show':121,182,1644 'simpl':434 'singl':863 'size':854 'skill':401 'skill-google-drive' 'slide':37,926 'source-acedatacloud' 'specif':470 'ss':552,574,638,696,764,824,870,894,957,978,1022,1078,1104,1225,1294,1309,1337,1450,1514,1562,1584,1659,1715 'standard':111 'start':212 'stay':354,1536 'stderr':513 'stop':1066 'storagequota':565 'string':322 'structur':509 'suggest':1183 'summari':955 'support':249,275,626 'surfac':114,262,519,1180 't00':747 'tab':1047 'target':185,1196 'tell':1741,1800 'text':683,919,972 'text/csv':1004 'text/html':1000 'text/markdown':998 'text/plain':999,1009 'time':96 'titl':686 'token':58,63,73,77,131,386,392,397,406,428,431,558,580,627,644,702,770,830,876,901,963,984,1028,1084,1099,1110,1135,1141,1148,1157,1233,1300,1317,1345,1458,1522,1570,1592,1665,1723,1746,1849,1861 'top':415 'topic-acedata-cloud' 'topic-agent-skills' 'topic-agentskills' 'topic-ai-image' 'topic-ai-music' 'topic-ai-tools' 'topic-ai-video' 'topic-claude-code' 'topic-cursor' 'topic-gemini-cli' 'topic-github-copilot' 'topic-mcp' 'touch':210 'trash':176,194,344,635,693,751,781,844,1119,1204,1551,1577,1599,1605,1682 'treat':1850,1862 'true':1578,1606 'type':443,944,992,1093,1237,1349,1410,1432,1462,1526,1574,1596 'unauthent':1745 'undo':1617 'upload':6,237,285,291,296,300,331,432,435,462,467,481,500,522,1364,1479 'uploadtyp':1483,1490 'urlencod':651,656,668,709,714,777,785,791,803,837,848,1117,1123,1131,1138,1672,1686 'use':23,293,398,603,726,1482,1489,1620,1823 'user':26,54,89,127,135,149,190,216,533,563,1050,1171,1202,1614,1646,1701,1743,1802,1842 'userratelimitexceed':1790 'utf':1413 'v3':20 'variabl':394 'verbatim':124,521 'verifi':545 'version':379 'via':17,50,476 'visibl':1812 'wc':909 'webviewlink':595,663,720,1691 'wire':483 'work':221 'workspac':233,390,426 'wrap':288 'write':93,106,146,167,173,542,1160,1190,1760,1769,1787 'writer':742 'wrong':326,1805 'www.googleapis.com':560,582,647,705,773,833,878,903,965,986,1030,1086,1113,1249,1302,1320,1361,1471,1533,1580,1602,1668,1726 'www.googleapis.com/drive/v3/about?fields=user(displayname,emailaddress,photolink),storagequota(usage,limit)':559 'www.googleapis.com/drive/v3/files':646,704,772,832,1112,1667 'www.googleapis.com/drive/v3/files/$doc_id/export?mimetype=text/markdown':964 'www.googleapis.com/drive/v3/files/$doc_id/export?mimetype=text/plain':985 'www.googleapis.com/drive/v3/files/$fid?addparents=$dst_folder_id&removeparents=$root_id&fields=id,name,parents':1725 'www.googleapis.com/drive/v3/files/$file_id/permissions?fields=permissions(id,type,role,emailaddress,domain,deleted)':1085 'www.googleapis.com/drive/v3/files/$file_id?addparents=$new_parent&removeparents=$old_parents&fields=id,name,parents':1319 'www.googleapis.com/drive/v3/files/$file_id?alt=media':902 'www.googleapis.com/drive/v3/files/$file_id?fields=id,name':1248 'www.googleapis.com/drive/v3/files/$file_id?fields=id,name,mimetype,size,modifiedtime,parents,owners,webviewlink,description':877 'www.googleapis.com/drive/v3/files/$file_id?fields=id,name,trashed':1579,1601 'www.googleapis.com/drive/v3/files/$file_id?fields=parents':1301 'www.googleapis.com/drive/v3/files/$sheet_id/export?mimetype=text/csv':1029 'www.googleapis.com/drive/v3/files?fields=id,name,webviewlink':1360 'www.googleapis.com/drive/v3/files?orderby=modifiedtime%20desc&pagesize=20&fields=files(id,name,mimetype,modifiedtime,owners(emailaddress),webviewlink,parents)':581 'www.googleapis.com/upload/drive/v3/files/$file_id?uploadtype=media&fields=id,name,modifiedtime':1532 'www.googleapis.com/upload/drive/v3/files?uploadtype=multipart&fields=id,name,webviewlink':1470 'x':1226,1310,1338,1451,1515,1563,1585,1716 'z':1155 'zero':271,506 'zip':886 '季度复盘':633","prices":[{"id":"1a156b35-bc4d-4ce3-b967-705d34de9507","listingId":"65fb5c5e-eaf2-4f88-a2b5-373bc43bca56","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"AceDataCloud","category":"Skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:21:32.676Z"}],"sources":[{"listingId":"65fb5c5e-eaf2-4f88-a2b5-373bc43bca56","source":"github","sourceId":"AceDataCloud/Skills/google-drive","sourceUrl":"https://github.com/AceDataCloud/Skills/tree/main/skills/google-drive","isPrimary":false,"firstSeenAt":"2026-05-18T13:21:32.676Z","lastSeenAt":"2026-05-18T19:14:02.301Z"}],"details":{"listingId":"65fb5c5e-eaf2-4f88-a2b5-373bc43bca56","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"AceDataCloud","slug":"google-drive","github":{"repo":"AceDataCloud/Skills","stars":7,"topics":["acedata-cloud","agent-skills","agentskills","ai-image","ai-music","ai-tools","ai-video","claude-code","cursor","gemini-cli","github-copilot","mcp","npm","openai-codex","roo-code"],"license":"other","html_url":"https://github.com/AceDataCloud/Skills","pushed_at":"2026-05-18T07:35:03Z","description":"Agent Skills for AceDataCloud AI services — music, image, video generation, web search, and more. Compatible with Claude Code, GitHub Copilot, Gemini CLI, and all agentskills.io-compatible agents.","skill_md_sha":"0156bb0472e606f72bc6ea9799a9a3905509534c","skill_md_path":"skills/google-drive/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/AceDataCloud/Skills/tree/main/skills/google-drive"},"layout":"multi","source":"github","category":"Skills","frontmatter":{"name":"google-drive","license":"Apache-2.0","description":"Read, search, upload, rename, move and delete Google Drive files / folders / shared content via the Drive v3 REST API. Use when the user mentions Drive files, \"my drive\", shared documents, Google Docs / Sheets / Slides, exporting / downloading a Drive file, searching by name / owner / folder, uploading a new file, renaming or moving files, or organising folders."},"skills_sh_url":"https://skills.sh/AceDataCloud/Skills/google-drive"},"updatedAt":"2026-05-18T19:14:02.301Z"}}