From gdrive-ftp
Use when a task needs to read or modify the user's Google Drive from the command line — listing or navigating My Drive and Shared Drives, downloading files, uploading files, creating folders, or trashing items — via the `gdrive-ftp` CLI. Covers the one-time auth setup and non-interactive one-shot command usage.
How this skill is triggered — by the user, by Claude, or both
Slash command
/gdrive-ftp:gdrive-ftpThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
`gdrive-ftp` is an FTP-style CLI for Google Drive. Use it to list, navigate,
gdrive-ftp is an FTP-style CLI for Google Drive. Use it to list, navigate,
download, upload, create folders, and trash files in My Drive and any
Shared Drives the user can access. Prefer one-shot commands
(gdrive-ftp <cmd> args) — each runs one command and exits, which is what you
want as an agent. The interactive shell (gdrive-ftp with no args) exists too
but you generally won't use it.
README.md in the gdrive-ftp repo is the authoritative spec; this skill must
stay consistent with it.
gdrive-ftp is on PATH (command -v gdrive-ftp).~/.config/gdrive-ftp/token.json. If it's missing, the user must run
gdrive-ftp auth interactively (it walks an OAuth consent flow). Do not
try to auth non-interactively — it blocks on a prompt. If a command fails with
an auth/consent error, tell the user to run gdrive-ftp auth.Never read, print, commit, or move credentials.json or token.json — they are
secrets.
My Drive (the personal drive's literal name)
or a Shared Drive's name."/My Drive/Work/report.pdf", "/Engineering Team/specs"."/My Drive/...".get/put/mkdir/rm at / fail with
"cd into a drive first" — always include a drive as the first component.# List all drives (My Drive + Shared Drives you are a member of)
gdrive-ftp ls /
# List a folder
gdrive-ftp ls "/My Drive/Work"
gdrive-ftp ls "/Engineering Team"
# Download a binary file (atomic: temp file renamed on success)
gdrive-ftp get "/My Drive/Work/report.pdf" ./report.pdf
# …into an existing local dir (kept under its remote name)
gdrive-ftp get "/My Drive/Work/report.pdf" ./downloads/
# Download a Google-native doc → auto-exported, extension appended:
# Docs→.docx Sheets→.xlsx Slides→.pptx Drawing→.png AppsScript→.json
gdrive-ftp get "/My Drive/notes" # saves notes.docx
# Upload: replaces a single exact-name match, else creates a new file
gdrive-ftp put ./report.pdf "/My Drive/Work"
gdrive-ftp put ./photo.jpg "/My Drive/Photos/photo.jpg" # rename remote target
# Make a folder
gdrive-ftp mkdir "/My Drive/Work/specs"
# Trash (reversible — NOT a permanent delete)
gdrive-ftp rm "/My Drive/Work/old.pdf"
Success output goes to stdout (e.g. downloaded …, uploaded …,
created specs/ (<id>), trashed old.pdf). ls rows are
<size> <modified> <name>, with a trailing / on folders/drives.
lcd / lls / lpwd are local-filesystem helpers and only meaningful inside
the interactive shell — ignore them in one-shot use.
Flags: -creds <path> and -token <path> override the credential/token
locations (defaults under ~/.config/gdrive-ftp/).
On failure, gdrive-ftp prints gdrive-ftp: <message> to stderr and exits
non-zero. Always check the exit code. Common messages:
no such file or directory — the path doesn't exist (check the drive name and
exact casing).ambiguous name (multiple matches); rename to disambiguate — two items share
the name; the tool refuses to guess. Names are matched exactly and
case-sensitively.... is a directory (recursive upload is not supported) — put is
single-file only (no recursive upload/download).cannot upload to the virtual root; cd into a drive first — you used /
without a drive component.rm trashes (recoverable from the Drive web UI), it does not hard-delete.ls /.README.md.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub qmu/gdrive-ftp --plugin gdrive-ftp