Chart To Drive
ai-analyst-lab/ai-analyst
Standardized workflow for uploading local chart PNGs to Google Drive and making them available for insertion into Google Docs and Slides.
Guidance for creating and editing Google Docs, Sheets and Slides through connectors, with per-app API rules and helper scripts for positions, ranges and slide layout.
The automated check flagged lines worth reading first. See the safety section below.
$ npx skills add asgeirtj/system_prompts_leaks --skill google-workspace -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install asgeirtj/system_prompts_leaks google-workspace --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/asgeirtj/system_prompts_leaks.git skills-src && mkdir -p .claude/skills && cp -r skills-src/Anthropic/claude-code/skills/google-workspace .claude/skills/google-workspace && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "google-workspace" agent skill from https://github.com/asgeirtj/system_prompts_leaks/tree/main/Anthropic/claude-code/skills/google-workspace into .claude/skills/google-workspace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-workspace", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/asgeirtj/system_prompts_leaks/tree/main/Anthropic/claude-code/skills/google-workspaceType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add asgeirtj/system_prompts_leaks --skill google-workspace -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install asgeirtj/system_prompts_leaks google-workspace --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/asgeirtj/system_prompts_leaks.git skills-src && mkdir -p .agents/skills && cp -r skills-src/Anthropic/claude-code/skills/google-workspace .agents/skills/google-workspace && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "google-workspace" agent skill from https://github.com/asgeirtj/system_prompts_leaks/tree/main/Anthropic/claude-code/skills/google-workspace into .agents/skills/google-workspace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-workspace", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add asgeirtj/system_prompts_leaks --skill google-workspace -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install asgeirtj/system_prompts_leaks google-workspace --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/asgeirtj/system_prompts_leaks.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/Anthropic/claude-code/skills/google-workspace .cursor/skills/google-workspace && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "google-workspace" agent skill from https://github.com/asgeirtj/system_prompts_leaks/tree/main/Anthropic/claude-code/skills/google-workspace into .cursor/skills/google-workspace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-workspace", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/asgeirtj/system_prompts_leaks.git --path Anthropic/claude-code/skills/google-workspace--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add asgeirtj/system_prompts_leaks --skill google-workspace -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install asgeirtj/system_prompts_leaks google-workspace --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/asgeirtj/system_prompts_leaks.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/Anthropic/claude-code/skills/google-workspace .gemini/skills/google-workspace && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "google-workspace" agent skill from https://github.com/asgeirtj/system_prompts_leaks/tree/main/Anthropic/claude-code/skills/google-workspace into .gemini/skills/google-workspace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-workspace", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install asgeirtj/system_prompts_leaks google-workspaceInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add asgeirtj/system_prompts_leaks --skill google-workspace -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/asgeirtj/system_prompts_leaks.git skills-src && mkdir -p .github/skills && cp -r skills-src/Anthropic/claude-code/skills/google-workspace .github/skills/google-workspace && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "google-workspace" agent skill from https://github.com/asgeirtj/system_prompts_leaks/tree/main/Anthropic/claude-code/skills/google-workspace into .github/skills/google-workspace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-workspace", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add asgeirtj/system_prompts_leaks --skill google-workspace -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install asgeirtj/system_prompts_leaks google-workspace --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/asgeirtj/system_prompts_leaks.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/Anthropic/claude-code/skills/google-workspace .opencode/skills/google-workspace && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "google-workspace" agent skill from https://github.com/asgeirtj/system_prompts_leaks/tree/main/Anthropic/claude-code/skills/google-workspace into .opencode/skills/google-workspace/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-workspace", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
google-workspaceGuidance for creating and editing Google Docs, Sheets and Slides through connectors, with per-app API rules and helper scripts for positions, ranges and slide layout.
This skill supplies the guidance that Google's thin connector wrappers lack: which connector does what, the rules that keep edits inside the user's existing file, and one reference file per app describing how each API actually behaves. The agent is told to read the reference for every app a task touches before the first edit, for example both the Sheets and Slides references when embedding a chart in a deck.
The references flag common traps. Docs edits use UTF-16 positions that shift after each insert and go stale after each write, and tabs and pending suggestions change them. Sheets writes are parsed like the Sheets UI, so text can silently become numbers or dates, and formatting needs numeric sheet IDs, 0-based ranges and field masks. In Slides, positions are in EMU, an element's real size is its size times its scale, and text is never shrunk to fit.
Helper scripts cover document positions, cell ranges and slide layout, plus rendering an export. Drive can create all three file types but cannot edit them afterward, so without the matching editor connector every change would mean a new file and a new link. The skill is not for read-only questions about a Google file or for Word, Excel, PowerPoint and PDF files.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 60d44cc. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 4 files in scripts/ (Python), which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Google Docs, Sheets and Slides Editing loads about 3.7k tokens when it runs, and up to ~39k if it reads all its reference files. Until then it costs about 240 tokens; SKILL.md has 2,286 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found patterns that need a careful read before installing.
file, even if a result said they could. Don't tell the user to use a card or preview unless a result said one is shown.Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from asgeirtj/system_prompts_leaks at commit 60d44cc, republished under its CC0-1.0 licence (© asgeirtj). 2,286 words, ~3,716 tokens.
.claude/skills/google-workspace/SKILL.md (or your agent's skills folder). This skill also uses 8 other files; get the full folder from GitHub.The Google connectors are thin wrappers over Google's raw APIs, with almost no guidance of their own. This skill supplies that guidance: which connector does what, the rules that keep edits in the user's file, and, in one reference file per app, how each API really behaves. Most of the app-specific rules in the references were tested against Google's Docs, Sheets and Slides APIs; the rest were seen through the connectors, and a few have not been checked yet.
| Working on | Read first | Why it matters |
|---|---|---|
| A Google Doc | references/docs.md | Docs edits address UTF-16 positions that shift after every insert and go stale after every write. Tabs and pending suggestions change the positions too. |
| A Google Sheet | references/sheets.md | Both write tools parse input like the Sheets UI, so text can silently become numbers or dates. Formatting needs numeric sheet IDs, 0-based ranges, and field masks without parentheses. |
| A Google Slides deck | references/slides.md | Positions are in EMU, an element's real size is its size times its scale, and an unmasked read can exceed 150 KB for three slides. Slides never shrinks text to fit. |
Read the reference for every app the task touches before the first edit. Embedding a Sheets chart in a deck means reading both. The references are short, and skipping one is how edits land in the wrong place.
| Connector | What it can do |
|---|---|
| Google Drive | Create files, upload and convert content, rename, read a file as text, export (PDF and other formats), search, trash |
| Google Docs | Read a doc's full structure and edit it in place, directly or as suggestions |
| Google Sheets | Read values and structure, write values and formulas, format, add tabs and charts |
| Google Slides | Read a deck, add and edit slides, shapes, text, tables, and linked charts |
Drive can create all three file types. It can't edit a file after that. Without the matching editor connector, every change means a new file and a new link, and the user loses the link they already have.
Example: "I can create the sheet now. If you want changes later, turn on the Google Sheets connector in this chat first. Then I can edit this file, and the link will stay the same."
writeControl.requiredRevisionId set to the revisionId from a read taken after your last write, including batches built on IDs or positions from your own earlier writes. The only exception is a batch made entirely of replaceAllText requests, even one limited to some tabs or slides. If the file changed since that read, whether from your own write or someone else's, Google rejects the whole batch instead of applying it at stale positions or IDs. Read again before each guarded batch, and don't reuse a revision ID from a write reply. On a rejection, read again and rebuild; never drop the guard. read_doc and read_presentation (the mask in references/slides.md includes it) return the ID. read_slide_page returns it only if its mask includes revisionId; read_slide_page_thumbnail and Drive read_file_content never do. For a saved read, the first line of docs_index.py outline or slides_helper.py outline shows it; if that line says None, read again with read_doc or read_presentation. get_spreadsheet returns a revisionId even with a field mask, but don't send it: send Sheets writes without writeControl, and read again right before a write that depends on positions.get_spreadsheet's fields list (["spreadsheetId", "sheets.properties"]), and comma-separated in a batch update request's fields string ("userEnteredFormat.numberFormat,userEnteredFormat.textFormat.bold").update_file. A rename keeps the same link.[Team roster](its link)." Don't set the file apart after a colon or on a line of its own ("I've created a file for you: Team roster"). If a Drive result says the user can already see or open a file from the chat, leave that file's link out unless they ask. Always give the link when the user asks for it, wants to send it to someone, or says they can't see or open the file, even if a result said they could. Don't tell the user to use a card or preview unless a result said one is shown. After an edit, say that the link stays the same.create_file with contentMimeType set to application/vnd.google-apps.document, .spreadsheet, or .presentation creates an empty file. Uploading content with a source type (HTML, CSV, .xlsx, .pptx) converts it into the matching Google type. Each reference says which route fits that app.read_file_content returns a compact text rendering: Markdown for a Doc. It is a few KB where the editor connector's full read can be over 100 KB, so use it to understand content, then use the editor read when you need positions.download_file_content with exportMimeType: "application/pdf" returns the rendered file as base64. It is large (about 65 KB of text for a four-slide deck), so export only for a visual check, and only where you can run code.The scripts/ folder next to this file holds tested helpers. They turn the APIs' raw JSON into short readable summaries, and turn simple specs into correct request batches, so the error-prone arithmetic never happens by hand. Use them wherever you can run Python. Run them by their full path inside this skill's folder; the references write that folder as <skill>.
| Script | Commands | Used for |
|---|---|---|
docs_index.py | outline, find, new-table, fill-table | Docs positions, text search with bold and suggestion state, adding a filled table in one call, filling an existing table |
sheets_helper.py | range, format, cells | A1 ranges to grid ranges, formatting batches from a short spec, reading formulas and error cells |
slides_helper.py | outline, build | Real slide geometry with overflow and overlap warnings, building slides from an inch-based spec |
render_export.py | one command | Decoding a PDF export into page images to look at |
Getting JSON to a script. Large tool results are often saved to a file by the app, and the result tells you the path. Point the script at that path; the scripts read the file as the app saved it. When a result comes back in context and is small (a few KB, such as a masked read or sheet metadata), write it to a file and run the script on it. Don't re-type a large result into a file: that doubles the cost and invites copying errors. If a large result was cut off and not saved, read a smaller slice instead (a field mask, a range, or one tab) rather than guessing.
Every script prints --help with its full usage. Each reference shows the commands in context.
| Symptom | Cause | Fix |
|---|---|---|
| "No such tool available" | The tool is deferred, or the name is different on this surface | Search for and load the tool. Use the exact name your surface lists. |
| Permission denied on a file you created | The file is in the trash | Ask the user to restore it from Drive's trash. You can't restore it with the connectors. |
| 400: required revision ID does not match | The file changed after your read: your own previous write, or someone else editing | Read again, rebuild the requests from the new read, and send them with the new revision. For Sheets, send them without writeControl. |
| A whole batch failed on one bad request | Batches are atomic | Fix the named request and resend the full batch. Nothing from the failed call was applied. |
| A read is too large or cut off | Unmasked editor reads include everything | Use Drive read_file_content, a field mask, a range, or a single tab. Run the helper on a saved result. |
| Two files where the user expected one | An edit was done by creating a new file | Make changes in place with the editor connector. Tell the user about the extra file; don't trash it without asking. |
Each reference ends with the failures specific to that app.
When a request runs into one of these, say so plainly and do the alternative. Reported: seen through the connectors or in their tool schemas. Untested: not yet checked.
read_doc has returned no comments even with commentsIncluded: true. To read comments, use Drive read_file_content with includeComments: true, or ask the user to paste them. update_doc has accepted insertComment in one report, although its description is cut before listing it; if that request fails, say you can't add comments and offer to list your notes in the reply. Reported.references/docs.md). Reported.update_doc, update_spreadsheet and update_presentation descriptions stop partway through their request lists. Requests missing from the description, such as addDocumentTab and addChart, have still worked, so try one before deciding it isn't supported. Reported.create_file takes the whole file as text or base64, so an .xlsx or .pptx upload is slow and often fails. Build in the file with the editor connectors where you can, and keep uploads small. Reported.createImage and Docs insertInlineImage fetch the image from a URL Google can reach; a file from the chat can't be inserted this way. For a deck, offer the .pptx route; otherwise ask the user to insert the image. Untested.addChart, then embed it with createSheetsChart. Reported.title, not name. name contains '…' fails with "Unsupported query field: name"; write title contains '…', and put the file type in a mimeType clause. Reported.© asgeirtj, CC0-1.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 8 other files (scripts, references) in Anthropic/claude-code/skills/google-workspace of asgeirtj/system_prompts_leaks.
Open the folder on GitHubat commit 60d44cc
Google Docs, Sheets and Slides Editing next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Google Docs, Sheets and Slides Editing this skillasgeirtj/system_prompts_leaks | 69k | — | ~3.7k | Automated safety check: Warn | CC0-1.0 | |
| Chart To Driveai-analyst-lab/ai-analyst | 304 | — | ~1.4k | Automated safety check: Pass | MIT | |
| Google Workspaceespennilsen/pi | 122 | — | ~3.4k | Automated safety check: Pass | MIT | |
| Managing Google Workspacetaylorwilsdon/google_workspace_mcp | 3.3k | — | ~2.9k | Automated safety check: Pass | MIT | |
| Gwskv0906/pm-kit | 138 | — | ~1.6k | Automated safety check: Pass | MIT | |
| Auth Preflightai-analyst-lab/ai-analyst | 304 | — | ~3.1k | Automated safety check: Pass | MIT |
ai-analyst-lab/ai-analyst
Standardized workflow for uploading local chart PNGs to Google Drive and making them available for insertion into Google Docs and Slides.
espennilsen/pi
Manage Google Workspace via the gws CLI — Drive, Gmail, Sheets, Docs, Slides, People, Chat, Meet, Forms, and cross-service workflows.
taylorwilsdon/google_workspace_mcp
Manages Google Workspace operations across 12 services (Gmail, Drive, Calendar, Docs, Sheets, Slides, Forms, Tasks, Contacts, Chat, Apps Script, Custom Search).
kv0906/pm-kit
This skill should be used when the user asks to "set up gws", "install Google Workspace CLI", "connect Gmail to Claude", "manage Google Drive from terminal", "send email from CLI", "check my…
ai-analyst-lab/ai-analyst
Verify Google Workspace MCP authentication at the start of any session that needs Google APIs (Docs, Slides, Drive).
affaan-m/ECC
Operate across Google Drive, Docs, Sheets, and Slides as one workflow surface for plans, trackers, decks, and shared documents.
asgeirtj/system_prompts_leaks
Shows one digest of coding-agent sessions across your connected machines and lets you open, read, steer, approve, stop and close them, over Herdr, tmux or MSP.
asgeirtj/system_prompts_leaks
Diagnoses a Muse Code installation's own failures from binary and session evidence, instead of treating the report as an ordinary repository bug.
asgeirtj/system_prompts_leaks
A skill your agent uses whenever the user wants to create, read, edit, or manipulate Word documents (.docx) or Word templates (.dotx).
asgeirtj/system_prompts_leaks
Runs a goal as a project in which the agent coordinates separate agent threads, judging when to split the work, and interviews you first when nothing can be verified.
asgeirtj/system_prompts_leaks
Creates and validates a new native Muse plugin package in the current workspace, limited to five capability families, and leaves installation to you.
asgeirtj/system_prompts_leaks
A skill your agent uses when the user's prompt requires (1) researching a topic across multiple sources, comparing options or alternatives, analyzing trends or history, understanding markets or…
Categories
Guidance for creating and editing Google Docs, Sheets and Slides through connectors, with per-app API rules and helper scripts for positions, ranges and slide layout. This skill supplies the guidance that Google's thin connector wrappers lack: which connector does what, the rules that keep edits inside the user's existing file, and one reference file per app describing how each API actually behaves. The agent is told to read the reference for every app a task touches before the first edit, for example both the Sheets and Slides references when embedding a chart in a deck.
Google Docs, Sheets and Slides Editing fits situations like: editing an existing Google Doc in place, directly or as suggestions; writing values, formulas or formatting into a Google Sheet; adding or changing slides, shapes and text in a Google Slides deck; following up on an earlier Google file edit with a request like adding a tab.
Run `npx skills add asgeirtj/system_prompts_leaks --skill google-workspace -a claude-code`. Or copy the skill folder (Anthropic/claude-code/skills/google-workspace in asgeirtj/system_prompts_leaks) into .claude/skills/google-workspace in your project. Claude Code loads it when a task matches its description.
Run `npx skills add asgeirtj/system_prompts_leaks --skill google-workspace -a codex`. Or copy the skill folder (Anthropic/claude-code/skills/google-workspace in asgeirtj/system_prompts_leaks) into .agents/skills/google-workspace in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add asgeirtj/system_prompts_leaks --skill google-workspace -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/google-workspace, .gemini/skills/google-workspace, .github/skills/google-workspace and .opencode/skills/google-workspace in your project.
Going by SKILL.md and its folder, Google Docs, Sheets and Slides Editing needs Python for the scripts in its folder. Our summary lists: Google Drive, Docs, Sheets and Slides connectors with access to the user's files; Python to run the bundled helper scripts.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md flagged 1 warning(s): contains instruction-override wording (e.g. “without asking the user”). Read the flagged lines before installing; the check is not a guarantee either way. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Google Docs, Sheets and Slides Editing is published under the CC0-1.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.7k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 35k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Google Docs, Sheets and Slides Editing: Chart To Drive (ai-analyst-lab/ai-analyst, 304 stars), Google Workspace (espennilsen/pi, 122 stars), Managing Google Workspace (taylorwilsdon/google_workspace_mcp, 3.3k stars) and Gws (kv0906/pm-kit, 138 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
asgeirtj (a GitHub user) maintains it in asgeirtj/system_prompts_leaks, which has 69,280 GitHub stars. The repository holds 128 skills in this directory. The repository was last updated on October 10, 2026.
Source: asgeirtj/system_prompts_leaks on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.