{"id":"fddd52aa-2488-4ecf-a602-5389f7cf5d9a","shortId":"SZez4b","kind":"skill","title":"google-docs","tagline":"Manage Google Docs and Google Drive with full document operations and file management. Includes Markdown support for creating formatted documents with headings, bold, italic, lists, tables, and checkboxes. Also supports Drive operations (upload, download, share, search).","description":"# Google Docs & Drive Management Skill\n\n## Purpose\n\nManage Google Docs documents and Google Drive files with comprehensive operations:\n\n**Google Docs:**\n- Read document content and structure\n- Insert and append text\n- Find and replace text\n- Basic text formatting (bold, italic, underline)\n- Insert page breaks\n- Create new documents\n- Delete content ranges\n- Get document structure (headings)\n- Insert inline images from URLs\n\n**Google Drive:**\n- Upload files to Drive\n- Download files from Drive\n- Search and list files\n- Share files with users or publicly\n- Create folders\n- Move, copy, and delete files\n- Get file metadata\n\n**Integration**: The drive_manager.rb script shares OAuth credentials with docs_manager.rb\n\n**📚 Additional Resources**:\n- See `references/large-document-patterns.md` for inserting large formatted markdown into existing/template docs\n- See `references/integration-patterns.md` for complete workflow examples\n- See `references/troubleshooting.md` for error handling, debugging, Ruby version, and token format issues\n- See `references/cli-patterns.md` for CLI interface design rationale\n\n## When to Use This Skill\n\nUse this skill when:\n- User requests to read or view a Google Doc\n- User wants to create a new document\n- User wants to edit document content\n- User requests text formatting or modifications\n- User asks about document structure or headings\n- User wants to find and replace text\n- User needs to insert a **large markdown file** into an existing/template Google Doc\n- User wants to insert **local images** into a Google Doc (via Drive upload)\n- Keywords: \"Google Doc\", \"document\", \"edit doc\", \"format text\", \"insert text\", \"insert markdown\"\n\n**⚠️ Large Document Insertion**: For markdown files >5KB or documents with many tables, use `scripts/insert_markdown_to_doc.rb` instead of `docs_manager.rb insert-from-markdown`. It handles rate limiting, batching, real table insertion, and code font formatting. See `references/large-document-patterns.md`.\n\n**📋 Discovering Your Documents**:\nTo list or search for documents, use drive_manager.rb:\n```bash\n# List recent documents\nscripts/drive_manager.rb search \\\n  --query \"mimeType='application/vnd.google-apps.document'\" \\\n  --max-results 50\n\n# Search by name\nscripts/drive_manager.rb search \\\n  --query \"name contains 'Report' and mimeType='application/vnd.google-apps.document'\"\n```\n\n## Core Workflows\n\n### 1. Read Document\n\n**Read full document content**:\n```bash\nscripts/docs_manager.rb read <document_id>\n```\n\n**Get document structure (headings)**:\n```bash\nscripts/docs_manager.rb structure <document_id>\n```\n\n**Output**:\n- Full text content with paragraphs\n- Document metadata (title, revision ID)\n- Heading structure with levels and positions\n\n### 2. Create Documents\n\n**Create new document (plain text)**:\n```bash\necho '{\n  \"title\": \"Project Proposal\",\n  \"content\": \"Initial plain text content...\"\n}' | scripts/docs_manager.rb create\n```\n\n**Create document from Markdown (RECOMMENDED)**:\n```bash\necho '{\n  \"title\": \"Project Proposal\",\n  \"markdown\": \"# Project Proposal\\n\\n## Overview\\n\\nThis is **bold** and *italic* text.\\n\\n- Bullet point 1\\n- Bullet point 2\\n\\n| Column 1 | Column 2 |\\n|----------|----------|\\n| Data 1   | Data 2   |\"\n}' | scripts/docs_manager.rb create-from-markdown\n```\n\n**Supported Markdown Features**:\n- Headings: `#`, `##`, `###`, `####` → Google Docs HEADING_1 through HEADING_4\n- Bold: `**text**`\n- Italic: `*text*`\n- Code: `` `text` `` → Consolas font (docs_manager uses Courier New; insert_markdown_to_doc uses Consolas)\n- Code blocks: ` ``` ` → Consolas font (only in `insert_markdown_to_doc.rb`)\n- Bullet lists: `- item` or `* item`\n- Numbered lists: `1. item`\n- Checkboxes: `- [ ] unchecked` and `- [x] checked`\n- Horizontal rules: `---`\n- Tables: `| col1 | col2 |` (with separator row, bold header in `insert_markdown_to_doc.rb`)\n- Images: `![alt](path)` → uploaded to Drive and inserted inline (only in `insert_markdown_to_doc.rb` with `--insert-images`)\n\n**Document ID**:\n- Returned in response for future operations\n- Use with drive_manager.rb for sharing/organizing\n\n### 3. Insert and Append Text\n\n**Insert plain text at specific position**:\n```bash\necho '{\n  \"document_id\": \"abc123\",\n  \"text\": \"This text will be inserted at the beginning.\\n\\n\",\n  \"index\": 1\n}' | scripts/docs_manager.rb insert\n```\n\n**Insert formatted Markdown (RECOMMENDED)**:\n```bash\necho '{\n  \"document_id\": \"abc123\",\n  \"markdown\": \"## New Section\\n\\nThis has **bold** and *italic* formatting.\\n\\n- Item 1\\n- Item 2\",\n  \"index\": 1\n}' | scripts/docs_manager.rb insert-from-markdown\n```\n\n**Append text to end of document**:\n```bash\necho '{\n  \"document_id\": \"abc123\",\n  \"text\": \"\\n\\nThis text will be appended to the end.\"\n}' | scripts/docs_manager.rb append\n```\n\n**Index Positions**:\n- Document starts at index 1\n- Use `read` command to see current content\n- Use `structure` command to find heading positions\n- End of document: use `append` instead of calculating index\n- For `insert-from-markdown`, omit index to append at end\n\n### 4. Find and Replace\n\n**Simple find and replace**:\n```bash\necho '{\n  \"document_id\": \"abc123\",\n  \"find\": \"old text\",\n  \"replace\": \"new text\"\n}' | scripts/docs_manager.rb replace\n```\n\n**Case-sensitive replacement**:\n```bash\necho '{\n  \"document_id\": \"abc123\",\n  \"find\": \"IMPORTANT\",\n  \"replace\": \"CRITICAL\",\n  \"match_case\": true\n}' | scripts/docs_manager.rb replace\n```\n\n**Replace all occurrences**:\n- Automatically replaces all matches\n- Returns count of replacements made\n- Use for bulk text updates\n\n### 5. Text Formatting\n\n**Format text range (bold)**:\n```bash\necho '{\n  \"document_id\": \"abc123\",\n  \"start_index\": 1,\n  \"end_index\": 20,\n  \"bold\": true\n}' | scripts/docs_manager.rb format\n```\n\n**Multiple formatting options**:\n```bash\necho '{\n  \"document_id\": \"abc123\",\n  \"start_index\": 50,\n  \"end_index\": 100,\n  \"bold\": true,\n  \"italic\": true,\n  \"underline\": true\n}' | scripts/docs_manager.rb format\n```\n\n**Formatting Options**:\n- `bold`: true/false\n- `italic`: true/false\n- `underline`: true/false\n- All options are independent and can be combined\n\n### 6. Page Breaks\n\n**Insert page break**:\n```bash\necho '{\n  \"document_id\": \"abc123\",\n  \"index\": 500\n}' | scripts/docs_manager.rb page-break\n```\n\n**Use Cases**:\n- Separate document sections\n- Start new content on fresh page\n- Organize long documents\n\n### 7. Delete Content\n\n**Delete text range**:\n```bash\necho '{\n  \"document_id\": \"abc123\",\n  \"start_index\": 100,\n  \"end_index\": 200\n}' | scripts/docs_manager.rb delete\n```\n\n**Clear entire document**:\n```bash\n# Read document first to get end index\nscripts/docs_manager.rb read abc123\n\n# Then delete all content (start at 1, end at last index - 1)\necho '{\n  \"document_id\": \"abc123\",\n  \"start_index\": 1,\n  \"end_index\": 500\n}' | scripts/docs_manager.rb delete\n```\n\n### 8. Insert Images\n\n**Insert image from URL**:\n```bash\necho '{\n  \"document_id\": \"abc123\",\n  \"image_url\": \"https://storage.googleapis.com/bucket/image.png\"\n}' | scripts/docs_manager.rb insert-image\n```\n\n**Insert image with specific size**:\n```bash\necho '{\n  \"document_id\": \"abc123\",\n  \"image_url\": \"https://storage.googleapis.com/bucket/image.png\",\n  \"width\": 400,\n  \"height\": 300\n}' | scripts/docs_manager.rb insert-image\n```\n\n**Insert image at specific position**:\n```bash\necho '{\n  \"document_id\": \"abc123\",\n  \"image_url\": \"https://storage.googleapis.com/bucket/image.png\",\n  \"index\": 100\n}' | scripts/docs_manager.rb insert-image\n```\n\n**Image URL Requirements**:\n- URL must be publicly accessible (Google Docs fetches the image)\n- Supported formats: PNG, JPEG, GIF\n- SVG is NOT supported - convert to PNG first\n- For private/local images: upload to Drive first, share publicly, then use the Drive URL\n- Use `insert_markdown_to_doc.rb --insert-images` to automate this workflow for local images referenced in markdown\n\n**Sizing Tips**:\n- To fit page width with default margins: use `width: 468` (points)\n- Specifying only width will auto-scale height proportionally\n- Specifying only height will auto-scale width proportionally\n- 1 inch = 72 points\n\n### 9. Insert Tables\n\n**Insert empty table**:\n```bash\necho '{\n  \"document_id\": \"abc123\",\n  \"rows\": 3,\n  \"cols\": 4\n}' | scripts/docs_manager.rb insert-table\n```\n\n**Insert table with data**:\n```bash\necho '{\n  \"document_id\": \"abc123\",\n  \"rows\": 3,\n  \"cols\": 2,\n  \"data\": [\n    [\"Header 1\", \"Header 2\"],\n    [\"Row 1 Col 1\", \"Row 1 Col 2\"],\n    [\"Row 2 Col 1\", \"Row 2 Col 2\"]\n  ]\n}' | scripts/docs_manager.rb insert-table\n```\n\n**Insert table at specific position**:\n```bash\necho '{\n  \"document_id\": \"abc123\",\n  \"rows\": 2,\n  \"cols\": 3,\n  \"index\": 100,\n  \"data\": [[\"A\", \"B\", \"C\"], [\"1\", \"2\", \"3\"]]\n}' | scripts/docs_manager.rb insert-table\n```\n\n**Note**: Tables can also be created via Markdown in `create-from-markdown`:\n```markdown\n| Column 1 | Column 2 | Column 3 |\n|----------|----------|----------|\n| Data 1   | Data 2   | Data 3   |\n```\n\n### 10. Large Document Insertion (insert_markdown_to_doc.rb)\n\n**Use this** instead of `insert-from-markdown` for documents over ~5KB, or any document with many tables/code blocks.\n\n**Insert markdown into an existing template doc** (preserving cover page):\n```bash\nscripts/insert_markdown_to_doc.rb \\\n  --clear-after 1234 \\\n  --code-font Consolas \\\n  --insert-images \\\n  --image-base-dir ./docs \\\n  <document_id> ./docs/my_document.md\n```\n\n**Insert markdown into an empty doc**:\n```bash\nscripts/insert_markdown_to_doc.rb <document_id> ./content.md\n```\n\n**Key Features**:\n- Batched API calls (1 insert + 1 format per segment) to avoid rate limits\n- Real Google Docs tables with bold headers\n- Code blocks and inline code in Consolas font (configurable)\n- H1-H4 heading support\n- Automatic mermaid diagram → placeholder conversion\n- Local image upload to Drive + inline insertion\n- Chunking for documents over 20KB\n- Rate limit recovery with sleep between batches\n\n**See `references/large-document-patterns.md`** for detailed strategy, error recovery, and chunking guide.\n\n## Natural Language Examples\n\n### User Says: \"Read the content of this Google Doc: abc123\"\n```bash\nscripts/docs_manager.rb read abc123\n```\n\n### User Says: \"Create a new document called 'Meeting Notes' with the text 'Attendees: John, Sarah'\"\n```bash\necho '{\n  \"title\": \"Meeting Notes\",\n  \"content\": \"Attendees: John, Sarah\"\n}' | scripts/docs_manager.rb create\n```\n\n### User Says: \"Add 'Next Steps' section to the end of document abc123\"\n```bash\necho '{\n  \"document_id\": \"abc123\",\n  \"text\": \"\\n\\n## Next Steps\\n\\n- Review proposals\\n- Schedule follow-up\"\n}' | scripts/docs_manager.rb append\n```\n\n### User Says: \"Replace all instances of 'Q3' with 'Q4' in document abc123\"\n```bash\necho '{\n  \"document_id\": \"abc123\",\n  \"find\": \"Q3\",\n  \"replace\": \"Q4\"\n}' | scripts/docs_manager.rb replace\n```\n\n### User Says: \"Make the first 50 characters of document abc123 bold\"\n```bash\necho '{\n  \"document_id\": \"abc123\",\n  \"start_index\": 1,\n  \"end_index\": 50,\n  \"bold\": true\n}' | scripts/docs_manager.rb format\n```\n\n## Understanding Document Index Positions\n\n**Index System**:\n- Documents use zero-based indexing with offset\n- Index 1 = start of document (after title)\n- Each character (including spaces and newlines) has an index\n- Use `read` to see current content and plan insertions\n- Use `structure` to find heading positions\n\n**Finding Positions**:\n1. Read document to see content\n2. Count characters to desired position\n3. Or use heading structure for section starts\n4. Remember: index 1 = very beginning\n\n**Example**:\n```\n\"Hello World\\n\\nSecond paragraph\"\n\nIndex 1: \"H\" (start)\nIndex 11: \"\\n\" (first newline)\nIndex 13: \"S\" (start of \"Second\")\nIndex 29: end of document\n```\n\n## Google Drive Operations\n\nThe `drive_manager.rb` script provides comprehensive Google Drive file management.\n\n### Upload Files\n\n```bash\n# Upload a file to Drive root\nscripts/drive_manager.rb upload --file ./document.pdf\n\n# Upload to specific folder\nscripts/drive_manager.rb upload --file ./diagram.excalidraw --folder-id abc123\n\n# Upload with custom name\nscripts/drive_manager.rb upload --file ./local.txt --name \"Remote Name.txt\"\n```\n\n### Download Files\n\n```bash\n# Download a file\nscripts/drive_manager.rb download --file-id abc123 --output ./local_copy.pdf\n\n# Export Google Doc as PDF\nscripts/drive_manager.rb download --file-id abc123 --output ./doc.pdf --export-as pdf\n\n# Export Google Sheet as CSV\nscripts/drive_manager.rb download --file-id abc123 --output ./data.csv --export-as csv\n```\n\n### Search and List Files\n\n```bash\n# List recent files\nscripts/drive_manager.rb list --max-results 20\n\n# Search by name\nscripts/drive_manager.rb search --query \"name contains 'Report'\"\n\n# Search by type\nscripts/drive_manager.rb search --query \"mimeType='application/vnd.google-apps.document'\"\n\n# Search in folder\nscripts/drive_manager.rb search --query \"'folder_id' in parents\"\n\n# Combine queries\nscripts/drive_manager.rb search --query \"name contains '.excalidraw' and modifiedTime > '2024-01-01'\"\n```\n\n### Share Files\n\n```bash\n# Share with specific user (reader)\nscripts/drive_manager.rb share --file-id abc123 --email user@example.com --role reader\n\n# Share with write access\nscripts/drive_manager.rb share --file-id abc123 --email user@example.com --role writer\n\n# Make publicly accessible (anyone with link)\nscripts/drive_manager.rb share --file-id abc123 --type anyone --role reader\n\n# Share with entire domain\nscripts/drive_manager.rb share --file-id abc123 --type domain --domain example.com --role reader\n```\n\n### Folder Management\n\n```bash\n# Create a folder\nscripts/drive_manager.rb create-folder --name \"Project Documents\"\n\n# Create folder inside another folder\nscripts/drive_manager.rb create-folder --name \"Diagrams\" --parent-id abc123\n\n# Move file to folder\nscripts/drive_manager.rb move --file-id file123 --folder-id folder456\n```\n\n### Other Operations\n\n```bash\n# Get file metadata\nscripts/drive_manager.rb get-metadata --file-id abc123\n\n# Copy a file\nscripts/drive_manager.rb copy --file-id abc123 --name \"Copy of Document\"\n\n# Update file content (replace)\nscripts/drive_manager.rb update --file-id abc123 --file ./new_content.pdf\n\n# Delete file (moves to trash)\nscripts/drive_manager.rb delete --file-id abc123\n```\n\n### Output Format\n\nAll commands return JSON with consistent structure:\n```json\n{\n  \"status\": \"success\",\n  \"operation\": \"upload\",\n  \"file\": {\n    \"id\": \"1abc...\",\n    \"name\": \"document.pdf\",\n    \"mime_type\": \"application/pdf\",\n    \"web_view_link\": \"https://drive.google.com/file/d/1abc.../view\",\n    \"web_content_link\": \"https://drive.google.com/uc?id=1abc...\",\n    \"created_time\": \"2024-01-15T10:30:00Z\",\n    \"modified_time\": \"2024-01-15T10:30:00Z\",\n    \"size\": 12345\n  }\n}\n```\n\n---\n\n## Integration Workflows\n\n### Create and Organize Documents\n\n```bash\n# Step 1: Create document (returns document_id)\necho '{\"title\":\"Report\"}' | scripts/docs_manager.rb create\n# Returns: {\"document_id\": \"abc123\"}\n\n# Step 2: Add content\necho '{\"document_id\":\"abc123\",\"text\":\"# Report\\n\\nContent here\"}' | scripts/docs_manager.rb insert\n\n# Step 3: Organize in folder\nscripts/drive_manager.rb move --file-id abc123 --folder-id [folder_id]\n\n# Step 4: Share with team\nscripts/drive_manager.rb share --file-id abc123 --email team@company.com --role writer\n```\n\n### Export Document to PDF\n\n```bash\nscripts/drive_manager.rb download --file-id abc123 --output ./report.pdf --export-as pdf\n```\n\n### Excalidraw Diagrams Workflow\n\nFor creating and managing Excalidraw diagrams, see the `excalidraw-diagrams` skill which integrates with drive_manager.rb for:\n- Uploading .excalidraw files to Drive\n- Getting shareable edit URLs for Excalidraw web\n- Round-trip editing between AI and human\n\n## Authentication Setup\n\n**Shared with Other Google Skills**:\n- Uses same OAuth credentials and token\n- Located at: `~/.claude/.google/client_secret.json` and `~/.claude/.google/token.json`\n- Shares token with email, calendar, contacts, drive, and sheets skills\n- Requires Documents, Drive, Sheets, Calendar, Contacts, and Gmail API scopes\n\n**First Time Setup**:\n1. Run any docs operation\n2. Script will prompt for authorization URL\n3. Visit URL and authorize all Google services\n4. Enter authorization code when prompted\n5. Token stored for all Google skills\n\n**Re-authorization**:\n- Token automatically refreshes when expired\n- If refresh fails, re-run authorization flow\n- All Google skills will work after single re-auth\n\n## Bundled Resources\n\n### Scripts\n\n**`scripts/docs_manager.rb`**\n- Comprehensive Google Docs API wrapper\n- All document operations: read, create, insert, append, replace, format, delete\n- Document structure analysis (headings)\n- Automatic token refresh\n- Shared OAuth with other Google skills\n\n**Operations**:\n- `read`: View document content\n- `structure`: Get document headings and structure\n- `insert`: Insert plain text at specific index\n- `insert-from-markdown`: Insert formatted markdown content\n- `append`: Append text to end\n- `replace`: Find and replace text\n- `format`: Apply text formatting (bold, italic, underline)\n- `page-break`: Insert page break\n- `create`: Create new document (plain text)\n- `create-from-markdown`: Create document with formatted markdown\n- `delete`: Delete content range\n- `insert-image`: Insert inline image from URL\n- `insert-table`: Insert table with optional data\n\n**Output Format**:\n- JSON with `status: 'success'` or `status: 'error'`\n- Document operations return document_id and revision_id\n- See script help: `scripts/docs_manager.rb --help`\n\n**⚠️ Limitation**: `insert-from-markdown` works for small content but has formatting index offset bugs on large documents or documents with existing content. Use `insert_markdown_to_doc.rb` for large docs.\n\n**`scripts/insert_markdown_to_doc.rb`**\n- Large document insertion with rate limiting and batching\n- Handles documents 100KB+ with many tables and code blocks\n- Real Google Docs tables with bold headers (not pipe-separated text)\n- Code blocks and inline code in Consolas font (configurable via `--code-font`)\n- H1-H4 heading support\n- Mermaid diagram preprocessing (replaced with placeholders)\n- Local image upload to Drive + inline insertion (`--insert-images`)\n- Template document support (`--clear-after INDEX` preserves cover page)\n- Auto-chunking to stay under API rate limits\n\n**Usage**: `scripts/insert_markdown_to_doc.rb [options] <document_id> <markdown_file>`\n\n**Options**: `--code-font`, `--start-index`, `--clear-after`, `--insert-images`, `--image-base-dir`, `--chunk-size`\n\n**See `references/large-document-patterns.md`** for full documentation.\n\n### References\n\n**`references/large-document-patterns.md`**\n- Battle-tested patterns for large markdown insertion\n- Chunking, batching, and rate limiting strategy\n- Template document preservation\n- Image insertion via Drive workflow\n- Table insertion details and error recovery\n\n**`references/docs_operations.md`**\n- Complete operation reference\n- Parameter documentation\n- Index position examples\n- Common workflows\n\n**`references/formatting_guide.md`**\n- Text formatting options\n- Style guidelines\n- Document structure best practices\n- Heading hierarchy\n\n### Examples\n\n**`examples/sample_operations.md`**\n- Common document operations\n- Workflow examples\n- Index calculation examples\n- Integration with drive_manager.rb for file operations\n\n## Error Handling\n\n**Authentication Error**:\n```json\n{\n  \"status\": \"error\",\n  \"code\": \"AUTH_ERROR\",\n  \"message\": \"Token refresh failed: ...\"\n}\n```\n**Action**: Guide user through re-authorization\n\n**Document Not Found**:\n```json\n{\n  \"status\": \"error\",\n  \"code\": \"API_ERROR\",\n  \"message\": \"Document not found\"\n}\n```\n**Action**: Verify document ID, check permissions\n\n**Invalid Index**:\n```json\n{\n  \"status\": \"error\",\n  \"code\": \"API_ERROR\",\n  \"message\": \"Invalid index position\"\n}\n```\n**Action**: Read document to verify current length, adjust index\n\n**API Error**:\n```json\n{\n  \"status\": \"error\",\n  \"code\": \"API_ERROR\",\n  \"message\": \"Failed to update document: ...\"\n}\n```\n**Action**: Display error to user, suggest troubleshooting steps\n\n## Best Practices\n\n### Document Creation\n1. Always provide meaningful title\n2. Add initial content when creating for better context\n3. Save returned document_id for future operations\n4. Use drive_manager.rb to organize and share\n\n### Text Insertion\n1. Read document first to understand current structure\n2. Use `structure` command to find heading positions\n3. Index 1 = start of document\n4. Use `append` for adding to end (simpler than calculating index)\n5. Include newlines (\\n) for proper formatting\n\n### Find and Replace\n1. Test pattern match first on small section\n2. Use case-sensitive matching for precise replacements\n3. Returns count of replacements made\n4. Cannot undo - consider reading document first for backup\n\n### Text Formatting\n1. Calculate index positions carefully\n2. Read document to verify text location\n3. Can combine bold, italic, underline\n4. Formatting applies to exact character range\n\n### Document Structure\n1. Use heading structure for navigation\n2. Insert page breaks between major sections\n3. Maintain consistent formatting throughout\n4. Use `structure` command to validate hierarchy\n\n## Quick Reference\n\n**Read document**:\n```bash\nscripts/docs_manager.rb read <document_id>\n```\n\n**Create document from Markdown (RECOMMENDED)**:\n```bash\necho '{\"title\":\"My Doc\",\"markdown\":\"# Heading\\n\\nParagraph with **bold**.\"}' | scripts/docs_manager.rb create-from-markdown\n```\n\n**Create document (plain text)**:\n```bash\necho '{\"title\":\"My Doc\",\"content\":\"Initial text\"}' | scripts/docs_manager.rb create\n```\n\n**Insert formatted Markdown**:\n```bash\necho '{\"document_id\":\"abc123\",\"markdown\":\"## Section\\n\\n- Item 1\\n- Item 2\"}' | scripts/docs_manager.rb insert-from-markdown\n```\n\n**Insert plain text at beginning**:\n```bash\necho '{\"document_id\":\"abc123\",\"text\":\"New text\",\"index\":1}' | scripts/docs_manager.rb insert\n```\n\n**Append to end**:\n```bash\necho '{\"document_id\":\"abc123\",\"text\":\"Appended text\"}' | scripts/docs_manager.rb append\n```\n\n**Find and replace**:\n```bash\necho '{\"document_id\":\"abc123\",\"find\":\"old\",\"replace\":\"new\"}' | scripts/docs_manager.rb replace\n```\n\n**Format text**:\n```bash\necho '{\"document_id\":\"abc123\",\"start_index\":1,\"end_index\":50,\"bold\":true}' | scripts/docs_manager.rb format\n```\n\n**Get document structure**:\n```bash\nscripts/docs_manager.rb structure <document_id>\n```\n\n**Insert table**:\n```bash\necho '{\"document_id\":\"abc123\",\"rows\":3,\"cols\":2,\"data\":[[\"A\",\"B\"],[\"1\",\"2\"],[\"3\",\"4\"]]}' | scripts/docs_manager.rb insert-table\n```\n\n**Insert image from URL**:\n```bash\necho '{\"document_id\":\"abc123\",\"image_url\":\"https://example.com/image.png\"}' | scripts/docs_manager.rb insert-image\n```\n\n**Insert large markdown into template doc** (RECOMMENDED for large docs):\n```bash\nscripts/insert_markdown_to_doc.rb --clear-after 1234 --insert-images --image-base-dir ./docs abc123 ./docs/content.md\n```\n\n## Example Workflow: Creating and Editing a Report\n\n1. **Create document with formatted content**:\n   ```bash\n   echo '{\n     \"title\": \"Q4 Report\",\n     \"markdown\": \"# Q4 Report\\n\\n## Executive Summary\\n\\nRevenue increased **25%** over Q3 targets.\\n\\n## Key Metrics\\n\\n| Metric | Q3 | Q4 |\\n|--------|-----|-----|\\n| Revenue | $1M | $1.25M |\\n| Users | 10K | 15K |\\n\\n## Next Steps\\n\\n- [ ] Finalize budget\\n- [ ] Schedule review meeting\\n- [x] Complete analysis\"\n   }' | scripts/docs_manager.rb create-from-markdown\n   # Returns: {\"document_id\": \"abc123\"}\n   ```\n\n2. **Add more content later**:\n   ```bash\n   echo '{\n     \"document_id\": \"abc123\",\n     \"markdown\": \"\\n\\n## Appendix\\n\\nAdditional *details* and **notes** here.\"\n   }' | scripts/docs_manager.rb insert-from-markdown\n   ```\n\n3. **Replace text if needed**:\n   ```bash\n   echo '{\n     \"document_id\": \"abc123\",\n     \"find\": \"Q3\",\n     \"replace\": \"Q4\"\n   }' | scripts/docs_manager.rb replace\n   ```\n\n4. **Share with team**:\n   ```bash\n   scripts/drive_manager.rb share --file-id abc123 --email team@company.com --role writer\n   ```\n\n## Version History\n\n- **1.3.0** (2026-02-18) - Added `insert_markdown_to_doc.rb` for large document insertion with rate limiting, batching, real tables, code font (Consolas), H4 headings, mermaid preprocessing, local image upload via Drive, and template doc support. Added `references/large-document-patterns.md`. Updated troubleshooting with Ruby version, token YAML format, and Drive API enablement issues.\n- **1.2.0** (2025-12-25) - Added markdown support documentation: `create-from-markdown`, `insert-from-markdown`, `insert-table` commands. Supports headings, bold, italic, code, lists, checkboxes, tables, and horizontal rules.\n- **1.1.0** (2025-12-20) - Added Google Drive operations via drive_manager.rb: upload, download, search, list, share, move, copy, delete, folder management. Integrated with excalidraw-diagrams skill for diagram workflows.\n- **1.0.0** (2025-11-10) - Initial Google Docs skill with full document operations: read, create, insert, append, replace, format, page breaks, structure analysis. Shared OAuth token with email, calendar, contacts, drive, and sheets skills.\n\n---\n\n**Dependencies**: Ruby (3.0+ via Homebrew recommended) with `google-apis-docs_v1`, `google-apis-drive_v3`, `googleauth` gems (shared with other Google skills). System Ruby (macOS 2.6) is too old — use `/opt/homebrew/opt/ruby/bin/ruby`.","tags":["google","docs","skill","danielkwapien","agent-skills","claude-code","gemini-cli-extension","google-docs","google-drive"],"capabilities":["skill","source-danielkwapien","skill-google-docs-skill","topic-agent-skills","topic-claude-code","topic-gemini-cli-extension","topic-google-docs","topic-google-drive"],"categories":["google-docs-skill"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/danielkwapien/google-docs-skill","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add danielkwapien/google-docs-skill","source_repo":"https://github.com/danielkwapien/google-docs-skill","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 8 github stars · SKILL.md body (25,225 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:08:55.917Z","embedding":null,"createdAt":"2026-05-18T13:14:40.354Z","updatedAt":"2026-05-18T19:08:55.917Z","lastSeenAt":"2026-05-18T19:08:55.917Z","tsv":"'-01':1630,1631,1825,1833 '-02':2991 '-10':3099 '-11':3098 '-12':3038,3069 '-15':1826,1834 '-18':2992 '-20':3070 '-25':3039 '/.claude/.google/client_secret.json':1981 '/.claude/.google/token.json':1983 '/bucket/image.png':877,896,919 '/content.md':1187 '/data.csv':1573 '/diagram.excalidraw':1514 '/doc.pdf':1556 '/docs':1177,2852 '/docs/content.md':2854 '/docs/my_document.md':1178 '/document.pdf':1506 '/file/d/1abc.../view':1815 '/image.png':2824 '/local.txt':1526 '/local_copy.pdf':1543 '/new_content.pdf':1776 '/opt/homebrew/opt/ruby/bin/ruby':3161 '/report.pdf':1921 '/uc?id=1abc...':1821 '00z':1829,1837 '1':334,415,423,429,444,481,557,582,587,622,727,843,848,855,1012,1050,1054,1056,1058,1064,1093,1115,1121,1193,1195,1375,1398,1430,1453,1463,1848,2007,2498,2529,2547,2572,2606,2633,2713,2736,2775,2803,2862 '1.0.0':3096 '1.1.0':3067 '1.2.0':3036 '1.25':2900 '1.3.0':2989 '10':1126 '100':748,817,921,1088 '100kb':2243 '10k':2904 '11':1467 '1234':1165,2844 '12345':1839 '13':1472 '15k':2905 '1abc':1804 '1m':2899 '2':368,419,425,431,585,1047,1052,1060,1062,1066,1068,1084,1094,1117,1123,1436,1864,2012,2503,2537,2580,2611,2639,2716,2799,2804,2931 '2.6':3156 '20':730,1591 '200':820 '2024':1629,1824,1832 '2025':3037,3068,3097 '2026':2990 '20kb':1240 '25':2883 '29':1478 '3':529,1028,1045,1086,1095,1119,1125,1442,1879,2019,2512,2545,2589,2618,2646,2797,2805,2956 '3.0':3131 '30':1828,1836 '300':900 '4':447,657,1030,1450,1895,2027,2520,2551,2595,2624,2651,2806,2972 '400':898 '468':992 '5':713,2033,2562 '50':319,745,1362,1378,2778 '500':785,858 '5kb':267,1142 '6':773 '7':804 '72':1014 '8':861 '9':1016 'abc123':544,568,603,669,686,724,742,783,814,836,852,872,891,914,1026,1043,1082,1270,1274,1312,1317,1345,1350,1366,1372,1518,1541,1554,1571,1645,1659,1675,1689,1723,1751,1760,1774,1787,1862,1870,1888,1904,1919,2707,2731,2746,2759,2772,2795,2819,2853,2930,2940,2965,2982 'access':933,1653,1666 'action':2426,2446,2464,2486 'ad':2555,2993,3021,3040,3071 'add':1303,1865,2504,2932 'addit':135 'adjust':2471 'ai':1963 'also':32,1103 'alt':501 'alway':2499 'analysi':2087,2921,3117 'anoth':1712 'anyon':1667,1677 'api':1191,2002,2073,2312,2440,2458,2473,2479,3033,3138,3143 'append':66,532,593,610,615,641,654,1333,2081,2124,2125,2553,2739,2748,2751,3111 'appendix':2944 'appli':2135,2626 'application/pdf':1809 'application/vnd.google-apps.document':315,331,1608 'ask':210 'attende':1287,1296 'auth':2065,2420 'authent':1966,2414 'author':2017,2023,2029,2042,2054,2432 'auto':999,1008,2307 'auto-chunk':2306 'auto-scal':998,1007 'autom':972 'automat':699,1224,2044,2089 'avoid':1200 'b':1091,2802 'backup':2603 'base':1175,1393,2333,2850 'bash':307,341,348,376,393,540,564,599,665,682,720,738,779,810,826,868,887,910,1022,1039,1078,1160,1185,1271,1290,1313,1346,1368,1496,1532,1582,1634,1698,1740,1846,1913,2662,2670,2690,2703,2727,2742,2755,2768,2786,2791,2815,2839,2868,2936,2961,2976 'basic':72 'batch':286,1190,1247,2240,2354,3002 'battl':2346 'battle-test':2345 'begin':553,1455,2726 'best':2392,2494 'better':2510 'block':468,1149,1211,2249,2263 'bold':26,75,407,448,496,575,719,731,749,759,1208,1367,1379,2138,2255,2621,2680,2779,3058 'break':80,775,778,789,2143,2146,2642,3115 'budget':2913 'bug':2218 'bulk':710 'bullet':413,417,474 'bundl':2066 'c':1092 'calcul':644,2404,2560,2607 'calendar':1988,1998,3123 'call':1192,1281 'cannot':2596 'care':2610 'case':679,692,791,2583 'case-sensit':678,2582 'charact':1363,1405,1438,2629 'check':487,2450 'checkbox':31,483,3062 'chunk':1236,1256,2308,2336,2353 'chunk-siz':2335 'clear':823,1163,2300,2326,2842 'clear-aft':1162,2299,2325,2841 'cli':168 'code':291,452,467,1167,1210,1214,2030,2248,2262,2266,2273,2320,2419,2439,2457,2478,3005,3060 'code-font':1166,2272,2319 'col':1029,1046,1055,1059,1063,1067,1085,2798 'col1':491 'col2':492 'column':422,424,1114,1116,1118 'combin':772,1619,2620 'command':625,632,1791,2540,2654,3055 'common':2382,2398 'complet':150,2374,2920 'comprehens':55,1489,2070 'configur':1218,2270 'consid':2598 'consist':1795,2648 'consola':454,466,469,1169,1216,2268,3007 'contact':1989,1999,3124 'contain':327,1599,1625 'content':61,85,202,340,354,381,385,629,797,806,840,1265,1295,1418,1435,1767,1817,1866,2102,2123,2164,2212,2226,2506,2695,2867,2934 'context':2511 'convers':1228 'convert':948 'copi':119,1752,1756,1762,3083 'core':332 'count':704,1437,2591 'courier':459 'cover':1158,2304 'creat':21,81,116,193,369,371,387,388,434,1105,1110,1277,1300,1699,1704,1709,1716,1822,1842,1849,1858,1930,2079,2147,2148,2154,2157,2508,2665,2683,2686,2699,2857,2863,2924,3045,3109 'create-fold':1703,1715 'create-from-markdown':433,1109,2153,2682,2923,3044 'creation':2497 'credenti':132,1976 'critic':690 'csv':1565,1577 'current':628,1417,2469,2535 'custom':1521 'data':428,430,1038,1048,1089,1120,1122,1124,2181,2800 'debug':158 'default':988 'delet':84,121,805,807,822,838,860,1777,1783,2084,2162,2163,3084 'depend':3129 'design':170 'desir':1440 'detail':1251,2369,2947 'diagram':1226,1719,1927,1934,1939,2281,3091,3094 'dir':1176,2334,2851 'discov':296 'display':2487 'doc':3,6,41,48,58,146,189,235,245,251,254,442,456,464,935,1156,1184,1205,1269,1546,2010,2072,2231,2252,2674,2694,2834,2838,3019,3102,3139 'docs_manager.rb':134,277 'document':12,23,49,60,83,88,196,201,212,252,262,269,298,304,310,336,339,345,357,370,373,389,516,542,566,598,601,618,639,667,684,722,740,781,793,803,812,825,828,850,870,889,912,1024,1041,1080,1128,1140,1145,1238,1280,1311,1315,1344,1348,1365,1370,1384,1389,1401,1432,1481,1708,1764,1845,1850,1852,1860,1868,1910,1995,2076,2085,2101,2105,2150,2158,2191,2194,2221,2223,2234,2242,2297,2342,2360,2378,2390,2399,2433,2443,2448,2466,2485,2496,2515,2531,2550,2600,2613,2631,2661,2666,2687,2705,2729,2744,2757,2770,2784,2793,2817,2864,2928,2938,2963,2997,3043,3106 'document.pdf':1806 'domain':1683,1691,1692 'download':37,102,1530,1533,1537,1550,1567,1915,3078 'drive':9,34,42,52,97,101,105,247,505,957,964,1233,1483,1491,1501,1950,1990,1996,2290,2365,3016,3032,3073,3125,3144 'drive.google.com':1814,1820 'drive.google.com/file/d/1abc.../view':1813 'drive.google.com/uc?id=1abc...':1819 'drive_manager.rb':128,306,526,1486,1944,2408,2522,3076 'echo':377,394,541,565,600,666,683,721,739,780,811,849,869,888,911,1023,1040,1079,1291,1314,1347,1369,1854,1867,2671,2691,2704,2728,2743,2756,2769,2792,2816,2869,2937,2962 'edit':200,253,1953,1961,2859 'email':1646,1660,1905,1987,2983,3122 'empti':1020,1183 'enabl':3034 'end':596,613,637,656,728,746,818,832,844,856,1309,1376,1479,2128,2557,2741,2776 'enter':2028 'entir':824,1682 'error':156,1253,2190,2371,2412,2415,2418,2421,2438,2441,2456,2459,2474,2477,2480,2488 'exact':2628 'exampl':152,1260,1456,2381,2396,2402,2405,2855 'example.com':1693,2823 'example.com/image.png':2822 'examples/sample_operations.md':2397 'excalidraw':1626,1926,1933,1938,1947,1956,3090 'excalidraw-diagram':1937,3089 'execut':2878 'exist':1154,2225 'existing/template':145,233 'expir':2047 'export':1544,1558,1561,1575,1909,1923 'export-a':1557,1574,1922 'fail':2050,2425,2482 'featur':439,1189 'fetch':936 'file':15,53,99,103,109,111,122,124,230,266,1492,1495,1499,1505,1513,1525,1531,1535,1539,1552,1569,1581,1585,1633,1643,1657,1673,1687,1725,1731,1742,1749,1754,1758,1766,1772,1775,1778,1785,1802,1886,1902,1917,1948,2410,2980 'file-id':1538,1551,1568,1642,1656,1672,1686,1730,1748,1757,1771,1784,1885,1901,1916,2979 'file123':1733 'final':2912 'find':68,219,634,658,662,670,687,1351,1425,1428,2130,2542,2569,2752,2760,2966 'first':829,951,958,1361,1469,2004,2532,2576,2601 'fit':984 'flow':2055 'folder':117,1510,1516,1611,1615,1696,1701,1705,1710,1713,1717,1727,1735,1882,1890,1892,3085 'folder-id':1515,1734,1889 'folder456':1737 'follow':1330 'follow-up':1329 'font':292,455,470,1168,1217,2269,2274,2321,3006 'format':22,74,142,163,206,255,293,561,578,715,716,734,736,756,757,940,1196,1382,1789,2083,2121,2134,2137,2160,2183,2215,2386,2568,2605,2625,2649,2701,2766,2782,2866,3030,3113 'found':2435,2445 'fresh':799 'full':11,338,352,2341,3105 'futur':522,2518 'gem':3147 'get':87,123,344,831,1741,1746,1951,2104,2783 'get-metadata':1745 'gif':943 'gmail':2001 'googl':2,5,8,40,47,51,57,96,188,234,244,250,441,934,1204,1268,1482,1490,1545,1562,1971,2025,2038,2057,2071,2096,2251,3072,3101,3137,3142,3151 'google-apis-doc':3136 'google-apis-dr':3141 'google-doc':1 'googleauth':3146 'guid':1257,2427 'guidelin':2389 'h':1464 'h1':1220,2276 'h1-h4':1219,2275 'h4':1221,2277,3008 'handl':157,283,2241,2413 'head':25,90,215,347,362,440,443,446,635,1222,1426,1445,2088,2106,2278,2394,2543,2635,2676,3009,3057 'header':497,1049,1051,1209,2256 'height':899,1001,1005 'hello':1457 'help':2201,2203 'hierarchi':2395,2657 'histori':2988 'homebrew':3133 'horizont':488,3065 'human':1965 'id':361,517,543,567,602,668,685,723,741,782,813,851,871,890,913,1025,1042,1081,1316,1349,1371,1517,1540,1553,1570,1616,1644,1658,1674,1688,1722,1732,1736,1750,1759,1773,1786,1803,1853,1861,1869,1887,1891,1893,1903,1918,2195,2198,2449,2516,2706,2730,2745,2758,2771,2794,2818,2929,2939,2964,2981 'imag':93,241,500,515,863,865,873,881,883,892,904,906,915,925,926,938,954,970,977,1172,1174,1230,2168,2171,2287,2295,2330,2332,2362,2812,2820,2828,2847,2849,3013 'image-base-dir':1173,2331,2848 'import':688 'inch':1013 'includ':17,1406,2563 'increas':2882 'independ':768 'index':556,586,616,621,645,652,726,729,744,747,784,816,819,833,847,854,857,920,1087,1374,1377,1385,1387,1394,1397,1412,1452,1462,1466,1471,1477,2115,2216,2302,2324,2379,2403,2453,2462,2472,2546,2561,2608,2735,2774,2777 'initi':382,2505,2696,3100 'inlin':92,508,1213,1234,2170,2265,2291 'insert':64,78,91,140,226,239,257,259,263,279,289,461,507,514,530,534,550,559,560,590,648,776,862,864,880,882,903,905,924,969,1017,1019,1033,1035,1071,1073,1098,1129,1136,1150,1171,1179,1194,1235,1421,1877,2080,2109,2110,2117,2120,2144,2167,2169,2175,2177,2206,2235,2292,2294,2329,2352,2363,2368,2528,2640,2700,2719,2722,2738,2789,2809,2811,2827,2829,2846,2953,2998,3049,3053,3110 'insert-from-markdown':278,589,647,1135,2116,2205,2718,2952,3048 'insert-imag':513,879,902,923,968,1170,2166,2293,2328,2826,2845 'insert-t':1032,1070,1097,2174,2808,3052 'insert_markdown_to_doc.rb':473,499,511,967,1130,2228,2994 'insid':1711 'instanc':1338 'instead':275,642,1133 'integr':126,1840,1942,2406,3087 'interfac':169 'invalid':2452,2461 'issu':164,3035 'ital':27,76,409,450,577,751,761,2139,2622,3059 'item':476,478,482,581,584,2712,2715 'john':1288,1297 'jpeg':942 'json':1793,1797,2184,2416,2436,2454,2475 'key':1188,2889 'keyword':249 'languag':1259 'larg':141,228,261,1127,2220,2230,2233,2350,2830,2837,2996 'last':846 'later':2935 'length':2470 'level':365 'limit':285,1202,1242,2204,2238,2314,2357,3001 'link':1669,1812,1818 'list':28,108,300,308,475,480,1580,1583,1587,3061,3080 'local':240,976,1229,2286,3012 'locat':1979,2617 'long':802 'm':2901 'maco':3155 'made':707,2594 'maintain':2647 'major':2644 'make':1359,1664 'manag':4,16,43,46,457,1493,1697,1932,3086 'mani':271,1147,2245 'margin':989 'markdown':18,143,229,260,265,281,391,398,436,438,462,562,569,592,650,980,1107,1112,1113,1138,1151,1180,2119,2122,2156,2161,2208,2351,2668,2675,2685,2702,2708,2721,2831,2873,2926,2941,2955,3041,3047,3051 'match':691,702,2575,2585 'max':317,1589 'max-result':316,1588 'meaning':2501 'meet':1282,1293,2917 'mermaid':1225,2280,3010 'messag':2422,2442,2460,2481 'metadata':125,358,1743,1747 'metric':2890,2893 'mime':1807 'mimetyp':314,330,1607 'modif':208 'modifi':1830 'modifiedtim':1628 'move':118,1724,1729,1779,1884,3082 'multipl':735 'must':930 'n':401,402,404,411,412,416,420,421,426,427,554,555,572,579,580,583,605,1319,1320,1323,1324,1327,1459,1468,1873,2565,2677,2710,2711,2714,2876,2877,2880,2887,2888,2891,2892,2896,2897,2902,2906,2907,2910,2911,2914,2918,2942,2943,2945 'naddit':2946 'name':322,326,1522,1527,1594,1598,1624,1706,1718,1761,1805 'name.txt':1529 'natur':1258 'navig':2638 'ncontent':1874 'need':224,2960 'new':82,195,372,460,570,674,796,1279,2149,2733,2763 'newlin':1409,1470,2564 'next':1304,1321,2908 'note':1100,1283,1294,2949 'nparagraph':2678 'nrevenu':2881 'nsecond':1460 'nthis':405,573,606 'number':479 'oauth':131,1975,2093,3119 'occurr':698 'offset':1396,2217 'old':671,2761,3159 'omit':651 'oper':13,35,56,523,1484,1739,1800,2011,2077,2098,2192,2375,2400,2411,2519,3074,3107 'option':737,758,766,2180,2317,2318,2387 'organ':801,1844,1880,2524 'output':351,1542,1555,1572,1788,1920,2182 'overview':403 'page':79,774,777,788,800,985,1159,2142,2145,2305,2641,3114 'page-break':787,2141 'paragraph':356,1461 'paramet':2377 'parent':1618,1721 'parent-id':1720 'path':502 'pattern':2348,2574 'pdf':1548,1560,1912,1925 'per':1197 'permiss':2451 'pipe':2259 'pipe-separ':2258 'placehold':1227,2285 'plain':374,383,535,2111,2151,2688,2723 'plan':1420 'png':941,950 'point':414,418,993,1015 'posit':367,539,617,636,909,1077,1386,1427,1429,1441,2380,2463,2544,2609 'practic':2393,2495 'precis':2587 'preprocess':2282,3011 'preserv':1157,2303,2361 'private/local':953 'project':379,396,399,1707 'prompt':2015,2032 'proper':2567 'proport':1002,1011 'propos':380,397,400,1326 'provid':1488,2500 'public':115,932,960,1665 'purpos':45 'q3':1340,1352,2885,2894,2967 'q4':1342,1354,2871,2874,2895,2969 'queri':313,325,1597,1606,1614,1620,1623 'quick':2658 'rang':86,718,809,2165,2630 'rate':284,1201,1241,2237,2313,2356,3000 'rational':171 're':2041,2052,2064,2431 're-auth':2063 're-author':2040,2430 're-run':2051 'read':59,184,335,337,343,624,827,835,1263,1273,1414,1431,2078,2099,2465,2530,2599,2612,2660,2664,3108 'reader':1639,1649,1679,1695 'real':287,1203,2250,3003 'recent':309,1584 'recommend':392,563,2669,2835,3134 'recoveri':1243,1254,2372 'refer':2343,2376,2659 'referenc':978 'references/cli-patterns.md':166 'references/docs_operations.md':2373 'references/formatting_guide.md':2384 'references/integration-patterns.md':148 'references/large-document-patterns.md':138,295,1249,2339,2344,3022 'references/troubleshooting.md':154 'refresh':2045,2049,2091,2424 'rememb':1451 'remot':1528 'replac':70,221,660,664,673,677,681,689,695,696,700,706,1336,1353,1356,1768,2082,2129,2132,2283,2571,2588,2593,2754,2762,2765,2957,2968,2971,3112 'report':328,1600,1856,1872,2861,2872,2875 'request':182,204 'requir':928,1994 'resourc':136,2067 'respons':520 'result':318,1590 'return':518,703,1792,1851,1859,2193,2514,2590,2927 'revenu':2898 'review':1325,2916 'revis':360,2197 'role':1648,1662,1678,1694,1907,2985 'root':1502 'round':1959 'round-trip':1958 'row':495,1027,1044,1053,1057,1061,1065,1083,2796 'rubi':159,3026,3130,3154 'rule':489,3066 'run':2008,2053 'sarah':1289,1298 'save':2513 'say':1262,1276,1302,1335,1358 'scale':1000,1009 'schedul':1328,2915 'scope':2003 'script':129,1487,2013,2068,2200 'scripts/docs_manager.rb':342,349,386,432,558,588,614,676,694,733,755,786,821,834,859,878,901,922,1031,1069,1096,1272,1299,1332,1355,1381,1857,1876,2069,2202,2663,2681,2698,2717,2737,2750,2764,2781,2787,2807,2825,2922,2951,2970 'scripts/drive_manager.rb':311,323,1503,1511,1523,1536,1549,1566,1586,1595,1604,1612,1621,1640,1654,1670,1684,1702,1714,1728,1744,1755,1769,1782,1883,1899,1914,2977 'scripts/insert_markdown_to_doc.rb':274,1161,1186,2232,2316,2840 'search':39,106,302,312,320,324,1578,1592,1596,1601,1605,1609,1613,1622,3079 'second':1476 'section':571,794,1306,1448,2579,2645,2709 'see':137,147,153,165,294,627,1248,1416,1434,1935,2199,2338 'segment':1198 'sensit':680,2584 'separ':494,792,2260 'servic':2026 'setup':1967,2006 'share':38,110,130,959,1632,1635,1641,1650,1655,1671,1680,1685,1896,1900,1968,1984,2092,2526,2973,2978,3081,3118,3148 'shareabl':1952 'sharing/organizing':528 'sheet':1563,1992,1997,3127 'simpl':661 'simpler':2558 'singl':2062 'size':886,981,1838,2337 'skill':44,176,179,1940,1972,1993,2039,2058,2097,3092,3103,3128,3152 'skill-google-docs-skill' 'sleep':1245 'small':2211,2578 'source-danielkwapien' 'space':1407 'specif':538,885,908,1076,1509,1637,2114 'specifi':994,1003 'start':619,725,743,795,815,841,853,1373,1399,1449,1465,1474,2323,2548,2773 'start-index':2322 'status':1798,2186,2189,2417,2437,2455,2476 'stay':2310 'step':1305,1322,1847,1863,1878,1894,2493,2909 'storage.googleapis.com':876,895,918 'storage.googleapis.com/bucket/image.png':875,894,917 'store':2035 'strategi':1252,2358 'structur':63,89,213,346,350,363,631,1423,1446,1796,2086,2103,2108,2391,2536,2539,2632,2636,2653,2785,2788,3116 'style':2388 'success':1799,2187 'suggest':2491 'summari':2879 'support':19,33,437,939,947,1223,2279,2298,3020,3042,3056 'svg':944 'system':1388,3153 't10':1827,1835 'tabl':29,272,288,490,1018,1021,1034,1036,1072,1074,1099,1101,1206,2176,2178,2246,2253,2367,2790,2810,3004,3054,3063 'tables/code':1148 'target':2886 'team':1898,2975 'team@company.com':1906,2984 'templat':1155,2296,2359,2833,3018 'test':2347,2573 'text':67,71,73,205,222,256,258,353,375,384,410,449,451,453,533,536,545,547,594,604,607,672,675,711,714,717,808,1286,1318,1871,2112,2126,2133,2136,2152,2261,2385,2527,2604,2616,2689,2697,2724,2732,2734,2747,2749,2767,2958 'throughout':2650 'time':1823,1831,2005 'tip':982 'titl':359,378,395,1292,1403,1855,2502,2672,2692,2870 'token':162,1978,1985,2034,2043,2090,2423,3028,3120 'topic-agent-skills' 'topic-claude-code' 'topic-gemini-cli-extension' 'topic-google-docs' 'topic-google-drive' 'trash':1781 'trip':1960 'troubleshoot':2492,3024 'true':693,732,750,752,754,1380,2780 'true/false':760,762,764 'type':1603,1676,1690,1808 'uncheck':484 'underlin':77,753,763,2140,2623 'understand':1383,2534 'undo':2597 'updat':712,1765,1770,2484,3023 'upload':36,98,248,503,955,1231,1494,1497,1504,1507,1512,1519,1524,1801,1946,2288,3014,3077 'url':95,867,874,893,916,927,929,965,1954,2018,2021,2173,2814,2821 'usag':2315 'use':174,177,273,305,458,465,524,623,630,640,708,790,962,966,990,1131,1390,1413,1422,1444,1973,2227,2521,2538,2552,2581,2634,2652,3160 'user':113,181,190,197,203,209,216,223,236,1261,1275,1301,1334,1357,1638,2428,2490,2903 'user@example.com':1647,1661 'v1':3140 'v3':3145 'valid':2656 'verifi':2447,2468,2615 'version':160,2987,3027 'via':246,1106,2271,2364,3015,3075,3132 'view':186,1811,2100 'visit':2020 'want':191,198,217,237 'web':1810,1816,1957 'width':897,986,991,996,1010 'work':2060,2209 'workflow':151,333,974,1841,1928,2366,2383,2401,2856,3095 'world':1458 'wrapper':2074 'write':1652 'writer':1663,1908,2986 'x':486,2919 'yaml':3029 'zero':1392 'zero-bas':1391","prices":[{"id":"75bf7024-a822-409c-813a-6f43ced648ec","listingId":"fddd52aa-2488-4ecf-a602-5389f7cf5d9a","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"danielkwapien","category":"google-docs-skill","install_from":"skills.sh"},"createdAt":"2026-05-18T13:14:40.354Z"}],"sources":[{"listingId":"fddd52aa-2488-4ecf-a602-5389f7cf5d9a","source":"github","sourceId":"danielkwapien/google-docs-skill","sourceUrl":"https://github.com/danielkwapien/google-docs-skill","isPrimary":false,"firstSeenAt":"2026-05-18T13:14:40.354Z","lastSeenAt":"2026-05-18T19:08:55.917Z"}],"details":{"listingId":"fddd52aa-2488-4ecf-a602-5389f7cf5d9a","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"danielkwapien","slug":"google-docs-skill","github":{"repo":"danielkwapien/google-docs-skill","stars":8,"topics":["agent-skills","claude-code","gemini-cli-extension","google-docs","google-drive"],"license":"mit","html_url":"https://github.com/danielkwapien/google-docs-skill","pushed_at":"2026-02-20T14:37:44Z","description":"Google Docs & Drive skill for AI coding assistants (Claude Code, gemini-cli, Codex, Cursor). Fork of robtaylor/google-docs-skill with Markdown support & large doc insertion.","skill_md_sha":"12705fa58f0c51569736d4b34c13dbec72897a6d","skill_md_path":"SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/danielkwapien/google-docs-skill"},"layout":"root","source":"github","category":"google-docs-skill","frontmatter":{"name":"google-docs","description":"Manage Google Docs and Google Drive with full document operations and file management. Includes Markdown support for creating formatted documents with headings, bold, italic, lists, tables, and checkboxes. Also supports Drive operations (upload, download, share, search)."},"skills_sh_url":"https://skills.sh/danielkwapien/google-docs-skill"},"updatedAt":"2026-05-18T19:08:55.917Z"}}