agentleFS
gemini-cli-extensionsgemini-cli-extensions/workspace/skills/google-docs/SKILL.md

google-docs

Skill646 starsChanged 5 months agoApache-2.0View on GitHub

CRITICAL: You MUST activate this skill BEFORE creating, editing, or managing Google Docs. Always trigger this skill as the first step when the user mentions "document", "doc", "google doc", or writing/editing document content. Contains strict formatting mandates that override default document behavior.

16 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use linear, slack and 1 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • OpenAISkill

    linear

    Manage issues, projects & team workflows in Linear. Use when the user wants to read, create or updates tickets in Linear.

    Also in 4 projects that use this

  • AnthropicSkill

    slack

    Also in 3 projects that use this

  • ElasticSkill

    create-skill

    Interactively create a new Claude Code skill and add it to the elastic-docs-skills catalog. Use when the user wants to generate a new skill, scaffold a slash command, or build automation for docs tasks.

    Also in 3 projects that use this

The file

Show its rules and text

We split this skill into the rules it gives an agent

13 rules. 0 are common, 4 are distinctive, and 9 are very specific to this project.

  • 0

    Common

    Most of the 15 edited versions we read keep these.

  • 4

    Distinctive

    This author's own choices. Worth a look.

  • 9

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    After inserting text, you know the content and can calculate character positions.

    line 26
  2. Distinctive:

    Create a doc with a heading and bold text:

    line 60
  3. Distinctive:

    When creating documents, use a clear heading hierarchy:

    line 82
  4. Very specific:

    Use docs.create to create new documents:

    line 159
  5. Very specific:

    In a specific folder: Add folderName to organize the document

    line 164
  6. Very specific:

    Use docs.writeText to add text to an existing document:

    line 176
  7. Very specific:

    Use docs.replaceText to find all occurrences of a string and replace them.

    line 192
  8. Very specific:

    All write tools (writeText, replaceText, formatText) accept an optional tabId parameter:

    line 209
  9. Very specific:

    Use drive.search with a document MIME type filter to find Google Docs:

    line 219
  10. Very specific:

    Use drive.moveFile to move a document to a different folder.

    line 232
  11. Very specific:

    Use drive.getComments to retrieve all comments on a document:

    line 239
  12. Very specific:

    Use docs.getSuggestions to retrieve suggested edits from a document:

    line 252
  13. Distinctive:

    All tools accept Google Drive URLs directly — no manual ID extraction needed

    line 269

“Common” is measured: kept by at least 6 in 10 of the 15 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Google Docs Expert

You are an expert at creating and managing documents through the Google Docs API. Follow these guidelines when helping users with document tasks.

Document Formatting — Two-Step Workflow

To create richly formatted documents, use a two-step process:

  1. Insert content using docs.create or docs.writeText — this inserts plain text
  2. Apply formatting using docs.formatText — this applies bold, italic, headings, links, and other styles to specific text ranges

Calculating Indices

After inserting text, you know the content and can calculate character positions. Indices are 1-based (index 1 is the start of the document body).

For example, if you insert:

Project Update\n\nStatus: On Track\n

Then:

  • "Project Update" spans indices 1–15
  • "Status: On Track" spans indices 17–33

Supported Formatting Styles

StyleEffectAPI
boldBold textupdateTextStyle
italicItalic textupdateTextStyle
underlineUnderlined textupdateTextStyle
strikethroughStrikethrough textupdateTextStyle
codeMonospace font (Courier New)updateTextStyle
linkHyperlink (requires url)updateTextStyle
heading1Heading 1updateParagraphStyle
heading2Heading 2updateParagraphStyle
heading3Heading 3updateParagraphStyle
heading4Heading 4updateParagraphStyle
heading5Heading 5updateParagraphStyle
heading6Heading 6updateParagraphStyle
normalTextReset to normal paragraph styleupdateParagraphStyle

Formatting Example

Create a doc with a heading and bold text:

// Step 1: Create with content
docs.create({
  title: "Weekly Report",
  content: "Weekly Report\n\nHighlights\n\n- Revenue up 12%\n- 3 new launches\n"
})

// Step 2: Apply formatting
docs.formatText({
  documentId: "<id-from-step-1>",
  formats: [
    { startIndex: 1, endIndex: 14, style: "heading1" },
    { startIndex: 16, endIndex: 26, style: "heading2" },
    { startIndex: 16, endIndex: 26, style: "bold" }
  ]
})

Professional Document Structure

When creating documents, use a clear heading hierarchy:

  • Heading 1 — Document title (use once, at the top)
  • Heading 2 — Major sections
  • Heading 3 — Subsections within a section
  • Bold — Labels, field names, and emphasis within body text

Structure the content first, then apply formatting generously. A well-formatted document uses headings for every distinct section — not just the title. Think of each logical group of content as deserving its own heading.

Example: PR Summary Document

Step 1 — Content:

PR Summary Report

PR #246: Add Gmail Skill

Author: Allen Hutchison
Status: Merged

This PR introduces a new agent skill for Gmail with rich HTML formatting
guidance, establishing the skills architecture for the extension.

Key Changes:
- Added skills/gmail/SKILL.md with email formatting instructions
- Updated WORKSPACE-Context.md to cross-reference the new skill
- Modified release script to bundle the skills directory

PR #245: Bump rollup from 4.57.1 to 4.59.0

Author: dependabot
Status: Merged

Routine dependency update for the build pipeline.

Step 2 — Formatting:

docs.formatText({
  documentId: "<id>",
  formats: [
    // Document title
    { startIndex: 1, endIndex: 18, style: "heading1" },
    // PR section headings
    { startIndex: 20, endIndex: 45, style: "heading2" },
    { startIndex: 287, endIndex: 325, style: "heading2" },
    // Field labels
    { startIndex: 47, endIndex: 54, style: "bold" },
    { startIndex: 73, endIndex: 80, style: "bold" },
    { startIndex: 89, endIndex: 101, style: "bold" },
    { startIndex: 327, endIndex: 334, style: "bold" },
    { startIndex: 347, endIndex: 354, style: "bold" },
  ]
})

Formatting Best Practices

  1. Always insert text first, then apply formatting — formatting operates on existing text ranges
  2. Calculate indices carefully — count characters including newlines (\n)
  3. Heading styles apply to the entire paragraph — even if the range covers only part of it
  4. Multiple styles can stack — apply both heading2 and bold to the same range for bold headings
  5. Use links for URLs — apply link style with a url field instead of pasting raw URLs
  6. Format generously — use heading2 for every major section, bold for every label or field name. A document with only a heading1 title and plain text body looks unprofessional

Creating Documents

Use docs.create to create new documents:

  • Blank document: Provide only a title
  • Document with content: Provide title and content — the content is inserted into the document after creation
  • In a specific folder: Add folderName to organize the document
docs.create({
  title: "Weekly Status Report",
  content: "Status Report - Week of March 10\n\nHighlights\n\n- ...",
  folderName: "Team Reports"
})

Writing Text

Use docs.writeText to add text to an existing document:

  • Append to end (default): position: "end" or omit position
  • Insert at beginning: position: "beginning"
  • Insert at specific index: position: "5" (numeric string)
docs.writeText({
  documentId: "doc-id",
  text: "New content\n",
  position: "end"
})

Find and Replace

Use docs.replaceText to find all occurrences of a string and replace them. This works across all tabs by default, or in a specific tab with tabId.

Tab Management

Google Docs supports multiple tabs within a single document.

Reading Tabs

  • Single tab: docs.getText returns plain text directly
  • Multiple tabs: Returns JSON array with tabId, title, content, and index for each tab
  • Specific tab: Pass tabId to read only that tab
  • Nested tabs: Child tabs are flattened and included in results

Writing to Tabs

All write tools (writeText, replaceText, formatText) accept an optional tabId parameter:

  • Without tabId: Operates on the first tab (default)
  • With tabId: Operates on the specified tab, including nested child tabs

Document Organization

Finding Documents

Use drive.search with a document MIME type filter to find Google Docs:

drive.search({
  query: "mimeType='application/vnd.google-apps.document' and name contains 'Weekly Report'"
})

For full-text search across document content, use fullText contains instead of name contains.

Moving Documents

Use drive.moveFile to move a document to a different folder. You can specify the destination by folder ID or folder name.

Comments & Suggestions

Reading Comments

Use drive.getComments to retrieve all comments on a document:

  • Returns comment threads with author, content, timestamp, and resolution status
  • Includes threaded replies with author, content, timestamp, and action (e.g., resolve, reopen)
  • Includes quoted file content showing what text the comment is anchored to
drive.getComments({ fileId: "doc-id" })

Reading Suggestions

Use docs.getSuggestions to retrieve suggested edits from a document:

  • Insertions — text proposed for addition (suggestedInsertionIds)
  • Deletions — text proposed for removal (suggestedDeletionIds)
  • Style changes — text formatting changes (bold, italic, etc.)
  • Paragraph style changes — heading level changes (e.g., NORMAL_TEXT → HEADING_2)

Each suggestion includes the affected text, suggestion IDs, and start/end indices.

docs.getSuggestions({ documentId: "doc-id" })

ID Handling

  • All tools accept Google Drive URLs directly — no manual ID extraction needed
  • IDs and URLs are interchangeable in all documentId parameters

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.