google-drive
Google Drive
Architecture
gdrive is a Python orchestrator CLI that uses rclone as its transport layer. rclone handles all Google Drive API communication -- OAuth, file transfers, format conversion, retry/rate-limiting. gdrive adds the intelligence on top: a manifest that tracks synced files, format-aware push/pull that re-imports Google Docs as native format, conflict detection, and multi-remote management. Think of rclone as the engine and gdrive as the driver.
Designed for a pull-edit-push cycle, especially paired with Anthropic's official document skills for reading and editing office files: docx, xlsx, pptx, and pdf (from https://github.com/anthropics/skills).
Before First Use
Before running any gdrive command, ensure dependencies are available. Check and install silently -- don't ask the user for permission to install these.
- rclone: Run
which rclone. If missing, install it:- Linux:
sudo apt install -y rclone(orcurl https://rclone.org/install.sh | sudo bash) - macOS:
brew install rclone
- Linux:
- uv: Run
which uv. If missing:curl -LsSf https://astral.sh/uv/install.sh | sh - Project sync: Run
uv sync --project <skill-dir>to ensure the venv and deps are ready. - Auth: Run
gdrive ls. If it shows "No remotes configured", the user needs to rungdrive auth setup(interactive -- tell the user what's about to happen and that they'll need to complete OAuth in a browser).
For headless machines (no $DISPLAY), instruct the user to set up an SSH tunnel first:
ssh -L 53682:localhost:53682 <remote-host>
Then run gdrive auth setup on the remote host and open the printed URL on their local machine.
See references/setup.md for the full setup guide.
Invocation
All commands use this pattern:
uv run --project /path/to/skills/google-drive gdrive <command> [args]
For brevity, examples below use gdrive directly.
Commands
auth -- Manage remotes
gdrive auth setup # interactive: configure rclone remotes (run once per machine)
gdrive auth status # report which remotes are configured and authenticate
gdrive auth logout # forget gdrive's remote registrations (rclone state stays)
ls -- List drives or files
# List configured remotes
gdrive ls
# List files at a remote path
gdrive ls mydrive:
gdrive ls mydrive:Projects/2025/
# Detailed listing
gdrive ls -l mydrive:Reports/
# Recursive listing
gdrive ls -R mydrive:Templates/
cp -- Copy files on remote
gdrive cp mydrive:Reports/Q4-Summary.docx mydrive:Archive/Q4-Summary.docx
Server-side copy. Works across different remotes (unlike mv). Does not update the manifest.
pull -- Download files
# Download to current directory
gdrive pull mydrive:Reports/Q4-Summary
# Download to specific location
gdrive pull mydrive:Reports/Q4-Summary ./reports/
# Force overwrite local changes
gdrive pull -f mydrive:Reports/Q4-Summary
# Pull all files in a folder
gdrive pull mydrive:Reports/
# Pull to a specific local directory
gdrive pull mydrive:Reports/ ./local-reports/
# Filter by glob pattern
gdrive pull mydrive:Reports/ --include "*.docx"
# Recursive pull (includes subdirectories)
gdrive pull -R mydrive:Projects/
Google Docs/Sheets/Slides are automatically exported:
| Google Format | Exported As |
|---|---|
| Google Doc | .docx |
| Google Sheet | .xlsx |
| Google Slides | .pptx |
The manifest tracks the original MIME type so push can re-import correctly.
push -- Upload files
# Push a tracked file (uses manifest for destination)
gdrive push ./Q4-Summary.docx
# Push to explicit destination
gdrive push ./report.docx mydrive:Reports/Q4-Summary.docx
# Force overwrite
gdrive push -f ./Q4-Summary.docx
# Push all locally-modified tracked files
gdrive push --all
# Filter batch push by remote
gdrive push --all -r mydrive
# Force batch push (skip conflict checks)
gdrive push --all -f
Format-aware upload: if a file was originally a Google Doc (per manifest), it's automatically re-imported as a Google Doc on push. For new files, you'll be prompted.
Conflict detection: if the remote file changed since last sync, push prompts before overwriting. Use -f to skip.
status -- Check sync state
# Show all tracked files
gdrive status
# Filter by remote
gdrive status -r mydrive
Categories:
- Up to date -- local matches last sync
- Local changes -- local file modified since last pull
- Missing locally -- tracked file deleted or moved locally
mkdir -- Create directories
gdrive mkdir mydrive:Projects/2025/NewProject
mv -- Move files on remote
gdrive mv mydrive:old/path.docx mydrive:new/path.docx
Updates manifest entries referencing the moved path.
search -- Find files
# Search all configured remotes
gdrive search budget
# Search a specific remote
gdrive search mydrive: budget report
Uses Google Drive's name-contains query. Shows results with file type, date, and web link.
rm -- Delete remote files
gdrive rm mydrive:path/to/old-file.docx
gdrive rm -f mydrive:path/to/old-file.docx # skip confirmation
Deletes the remote file and cleans up any matching manifest entries.
untrack -- Remove from manifest
gdrive untrack ./local-file.docx
Removes the file from manifest tracking without deleting anything locally or on the remote.
doctor -- Health check
gdrive doctor
Validates: rclone installed, config file exists, all remotes have working tokens, no orphaned rclone remotes, all manifest entries have existing local files.
open -- Get web URL
gdrive open mydrive:Reports/Q4-Summary
Prints the Google Drive web URL for the file.
link -- Get shareable link
gdrive link mydrive:Reports/Q4-Summary
Prints a shareable Google Drive link for the file.
share -- Set permissions
# Share with a user (default: reader)
gdrive share mydrive:Reports/Q4-Summary.docx user@example.com
# Share as writer
gdrive share mydrive:Reports/Q4-Summary.docx user@example.com --role writer
# Share as commenter
gdrive share mydrive:Reports/Q4-Summary.docx user@example.com --role commenter
# Share with anyone who has the link
gdrive share mydrive:Reports/Q4-Summary.docx --anyone
Calls the Google Drive API directly (rclone has no sharing support). Uses the OAuth token from rclone config.
Workflow: Pull-Edit-Push
The primary workflow for editing Google Drive documents:
# 1. Pull the document (exports Google Doc as .docx)
gdrive pull mydrive:Proposals/Client-Brief
# 2. Edit with a document skill
# (use docx, xlsx, or pptx skill to read/modify the file)
# 3. Check what changed
gdrive status
# 4. Push back (re-imports as Google Doc)
gdrive push ./Client-Brief.docx
Mixed editing (agent XML + user in Google Docs):
If the user edited the doc directly in Google Docs between sessions, the pulled version may have different structure (reordered sections, removed content). Always re-inspect with pandoc before editing XML. Don't assume previous XML line numbers or structure.
Manifest
The manifest at ~/.config/skills/gdrive/manifest.json tracks:
- Remote location and Google Drive file ID
- Original MIME type (for format-aware re-import)
- MD5 hashes at last sync (local and remote)
- Timestamps for change detection
The manifest enables:
- Pushing tracked files without specifying the remote path
- Detecting local modifications via MD5 comparison
- Re-importing exported Google Docs as native format on push
- Detecting moved files by MD5 hash
Remote Naming Convention
Shared drives are configured as separate rclone remotes. Pick a short prefix per drive so commands stay readable, e.g.:
mydrive-- a personal My Driveteam-engineering-- an engineering shared driveteam-design-- a design shared drive
Lowercased, hyphenated names work best. The auth wizard suggests names based on each drive's title and lets you override.
Troubleshooting
"File not found" on pull -- Check the path with gdrive ls remote:path/ first. Google Docs don't have file extensions on the remote.
Push doesn't re-import as Google Doc -- Ensure the file was originally pulled (has manifest entry with Google MIME type). For new files, use --drive-import-formats flag.
Manifest out of sync -- Run gdrive untrack on stale entries, or delete ~/.config/skills/gdrive/manifest.json to reset.
General setup issues -- Run gdrive doctor to diagnose problems with rclone, remotes, and manifest health.
Configuration Files
- Manifest:
~/.config/skills/gdrive/manifest.json - Config:
~/.config/skills/gdrive/config.json - rclone config:
~/.config/rclone/rclone.conf(managed by rclone) - Override the gdrive config dir with
GDRIVE_CONFIG_DIR=/path/to/dir
Migrating from earlier versions
If upgrading from a build that stored config at ~/.config/gdrive/, run gdrive config migrate --apply to move the manifest and config to the new location. gdrive auth status emits a deprecation_warning until the migration runs.
The interactive wizard previously invoked as gdrive auth is now gdrive auth setup. The bare gdrive auth is now a command group containing setup, status, and logout.
Add to .gitignore in any repo using this skill:
.gdrive-manifest.json
More from usetemi/skills
google-analytics
Query GA4 reports (users, sessions, conversions, funnels, realtime), manage properties / data streams / key events / custom dimensions / audiences / access bindings, and send Measurement Protocol events via the `ga4` CLI. Use this skill whenever the user mentions GA4, Google Analytics, property IDs starting with `properties/`, tracking events, engagement or traffic metrics, attribution, conversions, key events, audiences, BigQuery links, access roles, or realtime users — even if they don't explicitly say "GA4". Do not use for Google Search Console (see google-search-console skill) or generic web analytics where the source isn't GA4 (ask first).
12template-skill
Replace with a clear description of what this skill does and when Claude should use it. Be specific about trigger words and use cases.
12google-search-console
Query Google Search Console analytics, inspect URL indexing status, manage sitemaps, and run PageSpeed Insights audits. Use when the user needs SEO data, search performance reports, indexing diagnostics, or Core Web Vitals analysis.
12