Skip to content

feat: add Google Workspace skill#589

Merged
taylorwilsdon merged 16 commits intotaylorwilsdon:mainfrom
mickey-mikey:feat/plugin-skill
Apr 14, 2026
Merged

feat: add Google Workspace skill#589
taylorwilsdon merged 16 commits intotaylorwilsdon:mainfrom
mickey-mikey:feat/plugin-skill

Conversation

@mickey-mikey
Copy link
Copy Markdown
Contributor

@mickey-mikey mickey-mikey commented Mar 19, 2026

Description

Adds a Claude Code skill for the Google Workspace MCP server.

The issue asks for progressive disclosure of tool schemas to reduce context wastage. MCP currently loads all 114 tool schemas at startup regardless of what the user needs.

The managing-google-workspace skill addresses this with a routing table and 14 reference files that load on demand, replacing 114 tool schemas with progressive disclosure.

With MCP enabled, the skill adds routing and workflow guidance on top of the existing tool schemas. With MCP disabled, the skill replaces them entirely via CLI fallback.

Marketplace deployment and env var filtering are in #623.

What's included

  • Skill (managing-google-workspace) -- tool routing, workflows, and parameter guidance for 114 tools across 12 services
  • 14 reference files: one per service + server options + docs layout workflow, with TOC for files over 100 lines
  • 3 evaluation scenarios

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update

Testing

  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • I have tested this change manually

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • My changes generate no new warnings
  • I have enabled "Allow edits from maintainers" for this pull request

Test plan

  • Check out branch and verify skill files are in skills/managing-google-workspace/
  • Verify skill triggers on Google Workspace prompts ("check my email", "find a file")
  • Test with MCP enabled -- tools work alongside skill routing
  • Test with MCP disabled -- skill falls back to CLI mode, no tool schemas in context
  • Verify reference files load on demand
  • Test credential setup flow (skill directs user to edit settings.local.json)
  • Test on Windows
  • Test with Haiku, Sonnet, and Opus

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Comprehensive Google Workspace skill docs added across 12 services, including tool references, parameter schemas, usage tips, OAuth first-time setup & credential guidance, server/transport options, runtime/CLI behaviors, example workflows, and a reusable Google Docs layout workflow.
  • Evaluations
    • New evaluation scenarios for editing Docs, searching email, and sharing Drive files.
  • Bug Fixes / Behavior
    • Docs editing tools now accept start_index=0 as an alias for the first writable main-body position.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 19, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a new "Google Workspace — Tool Router" skill with per-service MCP references for 12 services, three evaluation specs, a docs-layout workflow, server/options reference, and CLI/MCP routing rules; plus Docs API index normalization helpers, related docs_tools validation updates, and tests exercising start_index=0 normalization.

Changes

Cohort / File(s) Summary
Skill Definition
skills/managing-google-workspace/SKILL.md
New skill doc defining the Google Workspace Tool Router, MCP vs CLI runtime routing, JSON args format, required consulting of references/*.md, OAuth first-time setup and credential storage, auth-mode differences, credential caching, and service→tool mappings with examples.
Evaluations
skills/managing-google-workspace/evaluations/edit_doc.json, skills/managing-google-workspace/evaluations/search_email.json, skills/managing-google-workspace/evaluations/share_file.json
Three new evaluation specs: edit-doc heading workflow; Gmail search+summarize for recent messages; Drive spreadsheet search + disambiguation + share + link generation.
Service References (12 docs)
skills/managing-google-workspace/references/apps-script.md, .../calendar.md, .../chat.md, .../contacts.md, .../docs.md, .../drive.md, .../forms.md, .../gmail.md, .../search.md, .../sheets.md, .../slides.md, .../tasks.md
Adds per-service MCP reference pages documenting tool names, required user_google_email, parameter tables (required/optional/defaults), manage_* action conventions, behavioral notes (pagination, indexing, attachment/URL semantics), tips, and common workflows.
Docs Layout Workflow
skills/managing-google-workspace/references/docs-layout-workflow.md
New workflow create-google-doc-with-layout: ordered batched insertions, immediate style application, re-read-for-indices rules, list/table insertion ordering, cell-fill ordering, and PDF verification guidance.
Server & Deployment Options
skills/managing-google-workspace/references/server-options.md
New server/options doc covering transports (stdio, --transport streamable-http), OAuth modes (OAuth2.0/2.1/external/single-user/stateless), tool filtering/permission flags, plugin env overrides, credential resolution, and example uvx/deployment snippets.
gdocs helpers & tools
gdocs/docs_helpers.py, gdocs/docs_tools.py
Added _normalize_body_start_index(...) and applied normalization in paragraph-style and bullet-list helpers; updated modify_doc_text/update_paragraph_style docstrings and validation to accept start_index=0 as alias for first writable main-body position.
Tests
tests/gdocs/test_advanced_doc_formatting.py, tests/gdocs/test_paragraph_style.py
New tests validating that start_index=0 is normalized to range.startIndex=1 in helper and batch request paths, and asserting correct request payload keys for heading/list creation.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant SkillRouter as "Skill Router\n(Google Workspace SKILL)" 
  participant MCPServer as "Workspace MCP\n(stream or stdio)"
  participant CLI as "uvx CLI\n(workspace-mcp --cli)"
  participant OAuth as "OAuth (Google)\nClient Credentials"
  participant GoogleAPIs as "Google APIs\n(Gmail/Drive/Sheets/...)"

  User->>SkillRouter: Request tool (base name + JSON args + user_email)
  alt MCP available
    SkillRouter->>MCPServer: Route tool call (tool + args + user_email)
    MCPServer->>OAuth: Ensure auth (start_google_auth if needed)
    OAuth-->>MCPServer: OAuth tokens
    MCPServer->>GoogleAPIs: Call service API
    GoogleAPIs-->>MCPServer: Response / artifacts
    MCPServer-->>SkillRouter: Tool result
  else MCP unavailable / CLI fallback
    SkillRouter->>CLI: Invoke CLI tool (base + JSON args)
    CLI->>OAuth: Start OAuth on first use (interactive)
    OAuth-->>CLI: OAuth tokens
    CLI->>GoogleAPIs: Call service API
    GoogleAPIs-->>CLI: Response / artifacts
    CLI-->>SkillRouter: Tool result
  end
  SkillRouter-->>User: Return aggregated result / messages
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Poem

🐰 I hopped through docs with a tiny pen,

routed tools and OAuth for curious men,
indices tamed, lists and headings in line,
Drive, Docs, and Sheets now hum and shine,
a carrot-coded cheer — your workspace looks fine!

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 44.44% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat: add Google Workspace skill' clearly and concisely describes the main change: adding a new Google Workspace skill to the codebase.
Description check ✅ Passed The PR description comprehensively covers the purpose (progressive disclosure of tool schemas), what's included (skill, 14 reference files, 3 evaluations), type of change, testing status, checklist items, and a detailed test plan with multiple verification scenarios.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

mickey-mikey added a commit to mickey-mikey/google_workspace_mcp that referenced this pull request Mar 19, 2026
SKILL.md:
- Fix "every tool requires user_google_email" (generate_trigger_code doesn't)
- Add start_google_auth to routing tables
- Add missing reference file links for Forms, Tasks, Contacts, Chat, Apps Script, Search
- Move import_to_google_doc to Drive section (per tool_tiers.yaml)
- Remove non-standard metadata frontmatter field
- Rewrite setup: skill guides credential config into ~/.claude/settings.local.json
- Add PYTHONIOENCODING=utf-8 for Windows
- Add Windows cmd.exe quoting note for CLI mode

plugin.json:
- Add author field

Reference files:
- apps-script.md: fix header re generate_trigger_code
- docs.md: add user_google_email to all 12 tables that were missing it
- sheets.md: add missing include_notes parameter to read_sheet_values
- contacts.md, forms.md, gmail.md, drive.md, tasks.md: fix page_token type to any

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@mickey-mikey mickey-mikey marked this pull request as ready for review March 19, 2026 11:27
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

🧹 Nitpick comments (3)
skills/managing-google-workspace/evaluations/share_file.json (1)

5-8: Consider adding disambiguation behavior for duplicate file matches.

If multiple files match “Q1 budget,” this eval can become nondeterministic. Consider expecting either a follow-up clarification or a deterministic tie-break rule (e.g., most recently modified spreadsheet).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@skills/managing-google-workspace/evaluations/share_file.json` around lines 5
- 8, The eval currently calls search_drive_files, manage_drive_access, and
get_drive_shareable_link but doesn't handle duplicate matches; update the
evaluation flow in share_file.json so that when search_drive_files returns
multiple results it either (a) emits a follow-up clarification asking which file
the user means, or (b) applies a deterministic tie-break (e.g., prefer
spreadsheets and then choose the most recently modified file) before calling
manage_drive_access and get_drive_shareable_link; reference the
search_drive_files result handling logic and implement the disambiguation/path
selection there so downstream calls use a single unambiguous file.
skills/managing-google-workspace/evaluations/search_email.json (1)

5-5: Make the date-filter expectation explicit for deterministic evals.

“a date filter” is broad; consider naming a concrete Gmail query form (e.g., newer_than:7d) so scorer/evaluator behavior is unambiguous.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@skills/managing-google-workspace/evaluations/search_email.json` at line 5,
The description string "Calls search_gmail_messages with a query combining
from:alice and a date filter" is ambiguous; update that entry in
search_email.json to specify an explicit Gmail date filter (for example: "Calls
search_gmail_messages with a query combining from:alice and newer_than:7d") so
evaluators and scorers have a deterministic expectation; ensure the new string
replaces the vague "a date filter" phrase and uses the chosen concrete query
form (e.g., newer_than:7d or after:YYYY/MM/DD).
skills/managing-google-workspace/references/search.md (1)

17-24: Use concrete types instead of any for typed parameters.

Lines 17-24 can be more precise (e.g., search_type: string, site_search: string, site_search_filter: string, date_restrict: string, file_type: string, language: string, country: string, sites: array[string]) to match tool signatures and reduce invocation errors.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@skills/managing-google-workspace/references/search.md` around lines 17 - 24,
Replace the loose `any` types in the search parameter docs with concrete types
matching the tool signature: change `search_type`, `site_search`,
`site_search_filter`, `date_restrict`, `file_type`, `language`, and `country` to
`string`, and change `sites` to an array of strings (e.g., `string[]` or
"array[string]" notation used elsewhere); update the table entries for
`search_type`, `site_search`, `site_search_filter`, `date_restrict`,
`file_type`, `language`, `country`, and `sites` accordingly so callers and type
checkers get exact expected types.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@skills/managing-google-workspace/references/gmail.md`:
- Line 114: The docs currently list the parameter quote_original in the Gmail
tool schema as a stable option; update the documentation for the
symbol/parameter quote_original to indicate it's unreleased/preview (or remove
it) so consumers won't make invalid calls against the published plugin. Edit the
entry that defines quote_original to add a clear "unreleased" or "preview" note
(or hide it until the tool schema is released) and ensure any examples or tables
referencing quote_original are updated to match.
- Line 200: Remove the trailing space inside the inline code span for the reply
subject so it uses `Re:` instead of `` `Re: ` ``; update the sentence that
references `thread_id`, `in_reply_to`, `references` to keep the same meaning but
change the code span to `Re:` (no internal spaces) so it satisfies markdownlint
MD038.

In `@skills/managing-google-workspace/references/search.md`:
- Line 7: Change the heading level for "search_custom" from H3 to H2 to fix the
skipped heading level; locate the line containing "### search_custom" and
replace it with "## search_custom" so the document's heading hierarchy is
consistent.

In `@skills/managing-google-workspace/references/server-options.md`:
- Around line 40-47: The fenced code block containing multiple JSON command
objects should declare its language to satisfy markdown linting—change the
opening fence from ``` to ```json in the block that includes the JSON-like
commands (e.g., the lines starting with {"command": "uvx", "args":
["workspace-mcp"], ...}) so the block is treated and highlighted as JSON.

In `@skills/managing-google-workspace/references/sheets.md`:
- Line 46: The docs list the parameter include_notes which is not yet released
and can break users; either remove the include_notes row from the sheets.md
parameter table or mark it clearly as "requires unreleased build" (e.g., add a
short footnote next to include_notes and a header comment explaining the plugin
manifest version gating). Update the sheets.md entry for include_notes and any
related manifest/version note so the documentation matches the released plugin
manifest.
- Line 56: The parameter description for "values" is a fragment; update the note
for the "values" parameter to be a complete sentence that clarifies accepted
formats (e.g., "Can be provided as a JSON string or as a list") and keep the
reference to `clear_values=true` intact; modify the table cell that currently
reads "Can be JSON string or list" to the suggested full phrase and ensure
punctuation and spacing match the surrounding table row for "values".

In `@skills/managing-google-workspace/SKILL.md`:
- Line 248: The SKILL.md parameter docs for start_google_auth are reversed:
update the text so it matches the actual function signature (start_google_auth)
— document user_google_email as a required string parameter and service_name as
optional with default "Google Workspace" (string); keep the legacy OAuth 2.0
note but ensure the examples and any call-site guidance reflect that
user_google_email is required and service_name is optional.
- Line 56: Update the SKILL.md line that claims "Credentials are cached in
`store_creds/`" to accurately reflect the implementation in
auth/credential_store.py: list the actual priority used to locate credential
caches (1) the WORKSPACE_MCP_CREDENTIALS_DIR or GOOGLE_MCP_CREDENTIALS_DIR env
vars, (2) ~/.claude/.credentials if ~/.claude exists, and (3) .credentials in
the local directory as fallback; remove any mention of a non-existent
store_creds/ directory so the docs match the code paths in
auth/credential_store.py.

---

Nitpick comments:
In `@skills/managing-google-workspace/evaluations/search_email.json`:
- Line 5: The description string "Calls search_gmail_messages with a query
combining from:alice and a date filter" is ambiguous; update that entry in
search_email.json to specify an explicit Gmail date filter (for example: "Calls
search_gmail_messages with a query combining from:alice and newer_than:7d") so
evaluators and scorers have a deterministic expectation; ensure the new string
replaces the vague "a date filter" phrase and uses the chosen concrete query
form (e.g., newer_than:7d or after:YYYY/MM/DD).

In `@skills/managing-google-workspace/evaluations/share_file.json`:
- Around line 5-8: The eval currently calls search_drive_files,
manage_drive_access, and get_drive_shareable_link but doesn't handle duplicate
matches; update the evaluation flow in share_file.json so that when
search_drive_files returns multiple results it either (a) emits a follow-up
clarification asking which file the user means, or (b) applies a deterministic
tie-break (e.g., prefer spreadsheets and then choose the most recently modified
file) before calling manage_drive_access and get_drive_shareable_link; reference
the search_drive_files result handling logic and implement the
disambiguation/path selection there so downstream calls use a single unambiguous
file.

In `@skills/managing-google-workspace/references/search.md`:
- Around line 17-24: Replace the loose `any` types in the search parameter docs
with concrete types matching the tool signature: change `search_type`,
`site_search`, `site_search_filter`, `date_restrict`, `file_type`, `language`,
and `country` to `string`, and change `sites` to an array of strings (e.g.,
`string[]` or "array[string]" notation used elsewhere); update the table entries
for `search_type`, `site_search`, `site_search_filter`, `date_restrict`,
`file_type`, `language`, `country`, and `sites` accordingly so callers and type
checkers get exact expected types.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: a0d278ce-260e-4852-a0a6-781f68f11770

📥 Commits

Reviewing files that changed from the base of the PR and between b7a69c0 and f26e3bc.

📒 Files selected for processing (19)
  • .claude-plugin/marketplace.json
  • .claude-plugin/plugin.json
  • skills/managing-google-workspace/SKILL.md
  • skills/managing-google-workspace/evaluations/edit_doc.json
  • skills/managing-google-workspace/evaluations/search_email.json
  • skills/managing-google-workspace/evaluations/share_file.json
  • skills/managing-google-workspace/references/apps-script.md
  • skills/managing-google-workspace/references/calendar.md
  • skills/managing-google-workspace/references/chat.md
  • skills/managing-google-workspace/references/contacts.md
  • skills/managing-google-workspace/references/docs.md
  • skills/managing-google-workspace/references/drive.md
  • skills/managing-google-workspace/references/forms.md
  • skills/managing-google-workspace/references/gmail.md
  • skills/managing-google-workspace/references/search.md
  • skills/managing-google-workspace/references/server-options.md
  • skills/managing-google-workspace/references/sheets.md
  • skills/managing-google-workspace/references/slides.md
  • skills/managing-google-workspace/references/tasks.md

Comment thread skills/managing-google-workspace/references/gmail.md
Comment thread skills/managing-google-workspace/references/gmail.md Outdated
Comment thread skills/managing-google-workspace/references/search.md
Comment thread skills/managing-google-workspace/references/server-options.md
Comment thread skills/managing-google-workspace/references/sheets.md
Comment thread skills/managing-google-workspace/references/sheets.md Outdated
Comment thread skills/managing-google-workspace/SKILL.md Outdated
Comment thread skills/managing-google-workspace/SKILL.md Outdated
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
skills/managing-google-workspace/references/search.md (1)

7-7: ⚠️ Potential issue | 🟡 Minor

Use an H2 heading at Line 7 to avoid heading-level skip.

### search_custom should be ## search_custom to keep heading hierarchy valid (MD001).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@skills/managing-google-workspace/references/search.md` at line 7, The heading
"search_custom" is using H3 (###) which causes a heading-level skip; change the
Markdown heading for "search_custom" from H3 to H2 (replace "### search_custom"
with "## search_custom") so the document maintains correct heading hierarchy and
satisfies MD001.
🧹 Nitpick comments (1)
skills/managing-google-workspace/references/calendar.md (1)

1-88: Excellent documentation—clear, accurate, and well-structured.

The reference documentation accurately reflects the implementation based on the provided code snippets. Parameter tables are complete with correct types, defaults (e.g., calendar_id: "primary", max_results: 25, detailed: false), and helpful usage notes. The Tips section provides valuable guidance on Calendar IDs, RFC 3339 time formatting, all-day events, and attendee formats.

The structure is consistent across all four tool sections, making it easy to scan and reference during development.


Optional: Address markdownlint warnings for strict compliance.

The linter flagged MD058 warnings about blank lines around tables on lines 67 and 87. After inspection, these appear to be false positives—all tables already have proper blank lines before and after them. However, if your team enforces strict linter compliance, you may want to investigate the specific expectations of markdownlint-cli2 0.21.0 for this rule.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@skills/managing-google-workspace/references/calendar.md` around lines 1 - 88,
Linter MD058 flagged "blank lines around tables" in this markdown; to fix,
ensure each table (e.g., the tables under the "get_events", "manage_event", and
"query_freebusy" sections and the "Calendars & Events" header) has a single
blank line immediately before and after the pipe-table block so
markdownlint-cli2 recognizes the spacing; update the affected table blocks to
add or normalize those blank lines, then re-run markdownlint-cli2 to confirm, or
alternatively add an MD058 rule exception in the repo's markdownlint
configuration if these are false positives.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@skills/managing-google-workspace/references/sheets.md`:
- Line 155: Update the gradient rules documentation for `gradient_points` to
state that each point must include `type` and `color` but `value` is optional;
only include `value` when your rule requires a concrete anchor (e.g., for
`NUMBER`, `PERCENT`, `PERCENTILE` usages) and omit it for `MIN`/`MAX` points —
reference the `gradient_points` structure and the `type`, `value`, `color` keys
when making this change so the doc matches the implementation.

---

Duplicate comments:
In `@skills/managing-google-workspace/references/search.md`:
- Line 7: The heading "search_custom" is using H3 (###) which causes a
heading-level skip; change the Markdown heading for "search_custom" from H3 to
H2 (replace "### search_custom" with "## search_custom") so the document
maintains correct heading hierarchy and satisfies MD001.

---

Nitpick comments:
In `@skills/managing-google-workspace/references/calendar.md`:
- Around line 1-88: Linter MD058 flagged "blank lines around tables" in this
markdown; to fix, ensure each table (e.g., the tables under the "get_events",
"manage_event", and "query_freebusy" sections and the "Calendars & Events"
header) has a single blank line immediately before and after the pipe-table
block so markdownlint-cli2 recognizes the spacing; update the affected table
blocks to add or normalize those blank lines, then re-run markdownlint-cli2 to
confirm, or alternatively add an MD058 rule exception in the repo's markdownlint
configuration if these are false positives.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 5d2a4bb9-c494-45b7-9bb5-929f3ac1f1a6

📥 Commits

Reviewing files that changed from the base of the PR and between f26e3bc and 9003a54.

📒 Files selected for processing (19)
  • .claude-plugin/marketplace.json
  • .claude-plugin/plugin.json
  • skills/managing-google-workspace/SKILL.md
  • skills/managing-google-workspace/evaluations/edit_doc.json
  • skills/managing-google-workspace/evaluations/search_email.json
  • skills/managing-google-workspace/evaluations/share_file.json
  • skills/managing-google-workspace/references/apps-script.md
  • skills/managing-google-workspace/references/calendar.md
  • skills/managing-google-workspace/references/chat.md
  • skills/managing-google-workspace/references/contacts.md
  • skills/managing-google-workspace/references/docs.md
  • skills/managing-google-workspace/references/drive.md
  • skills/managing-google-workspace/references/forms.md
  • skills/managing-google-workspace/references/gmail.md
  • skills/managing-google-workspace/references/search.md
  • skills/managing-google-workspace/references/server-options.md
  • skills/managing-google-workspace/references/sheets.md
  • skills/managing-google-workspace/references/slides.md
  • skills/managing-google-workspace/references/tasks.md
✅ Files skipped from review due to trivial changes (14)
  • skills/managing-google-workspace/evaluations/edit_doc.json
  • .claude-plugin/plugin.json
  • skills/managing-google-workspace/evaluations/search_email.json
  • .claude-plugin/marketplace.json
  • skills/managing-google-workspace/references/gmail.md
  • skills/managing-google-workspace/evaluations/share_file.json
  • skills/managing-google-workspace/references/docs.md
  • skills/managing-google-workspace/references/drive.md
  • skills/managing-google-workspace/SKILL.md
  • skills/managing-google-workspace/references/forms.md
  • skills/managing-google-workspace/references/contacts.md
  • skills/managing-google-workspace/references/slides.md
  • skills/managing-google-workspace/references/apps-script.md
  • skills/managing-google-workspace/references/tasks.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • skills/managing-google-workspace/references/chat.md

Comment thread skills/managing-google-workspace/references/sheets.md Outdated
@mickey-mikey mickey-mikey force-pushed the feat/plugin-skill branch 3 times, most recently from 2630103 to 8759a96 Compare March 19, 2026 12:01
@mickey-mikey
Copy link
Copy Markdown
Contributor Author

@coderabbitai resume

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 19, 2026

✅ Actions performed

Reviews resumed.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

♻️ Duplicate comments (1)
skills/managing-google-workspace/SKILL.md (1)

248-248: ⚠️ Potential issue | 🟡 Minor

Correct start_google_auth parameter requirements (currently reversed).

Line 248 marks user_google_email as optional and service_name as required, but this should be the opposite for accurate invocation guidance.

📝 Proposed fix
-Parameters: `user_google_email` (string, optional), `service_name` (string, required -- e.g. `"gmail"`, `"drive"`). Legacy OAuth 2.0 only -- disabled when OAuth 2.1 is enabled. In most cases, just call the tool you need and auth happens automatically.
+Parameters: `user_google_email` (string, required), `service_name` (string, optional, default: `"Google Workspace"`). Legacy OAuth 2.0 only -- disabled when OAuth 2.1 is enabled. In most cases, just call the tool you need and auth happens automatically.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@skills/managing-google-workspace/SKILL.md` at line 248, The parameter docs
for start_google_auth are reversed: update the SKILL.md description so that
start_google_auth lists user_google_email as required (string) and service_name
as optional (string, e.g. "gmail", "drive"); replace the current
"user_google_email (string, optional), service_name (string, required)" text
with "user_google_email (string, required), service_name (string, optional --
e.g. 'gmail', 'drive')" and keep the note about Legacy OAuth 2.0 behavior
unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@skills/managing-google-workspace/references/apps-script.md`:
- Around line 67-73: Add a blank line before and after each Markdown table so
MD058 no longer triggers; locate the table blocks starting with the header row
"| Parameter | Type | Required | Default | Notes |" and the other table headers
at the ranges noted (around lines 87-94, 107-113, 117-120, 141-148, 156-163,
168-172) and ensure there is at least one empty line immediately above and below
each table block (i.e., insert a blank line before the header line and one after
the final table row).

In `@skills/managing-google-workspace/references/calendar.md`:
- Around line 69-76: The markdown table starting with the header row "|
Parameter | Type | Required | Default | Notes |" needs blank-line separators
above and below it to satisfy MD058; edit the Availability section (the table
block containing the calendar parameters like user_google_email, time_min,
time_max, calendar_ids, group_expansion_max, calendar_expansion_max) and insert
one empty line immediately before the table and one empty line immediately after
the table so the table is isolated from surrounding paragraphs.

In `@skills/managing-google-workspace/SKILL.md`:
- Around line 67-83: The markdown tables in
skills/managing-google-workspace/SKILL.md are missing surrounding blank lines
which triggers repeated MD058 warnings; update each service table block (the
Task/Tool tables such as the block listing search_gmail_messages,
get_gmail_message_content, etc.) by adding a blank line immediately before and
after each table so they are separated from surrounding paragraphs and
headings—apply the same fix to the other table blocks referenced in the review
(the blocks around the other listed line ranges) to normalize spacing and
silence the markdownlint MD058 errors.

---

Duplicate comments:
In `@skills/managing-google-workspace/SKILL.md`:
- Line 248: The parameter docs for start_google_auth are reversed: update the
SKILL.md description so that start_google_auth lists user_google_email as
required (string) and service_name as optional (string, e.g. "gmail", "drive");
replace the current "user_google_email (string, optional), service_name (string,
required)" text with "user_google_email (string, required), service_name
(string, optional -- e.g. 'gmail', 'drive')" and keep the note about Legacy
OAuth 2.0 behavior unchanged.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 3a822b4f-1bff-4d3c-8d66-6577e18e1764

📥 Commits

Reviewing files that changed from the base of the PR and between 2630103 and 82cc2e8.

📒 Files selected for processing (19)
  • .claude-plugin/marketplace.json
  • .claude-plugin/plugin.json
  • skills/managing-google-workspace/SKILL.md
  • skills/managing-google-workspace/evaluations/edit_doc.json
  • skills/managing-google-workspace/evaluations/search_email.json
  • skills/managing-google-workspace/evaluations/share_file.json
  • skills/managing-google-workspace/references/apps-script.md
  • skills/managing-google-workspace/references/calendar.md
  • skills/managing-google-workspace/references/chat.md
  • skills/managing-google-workspace/references/contacts.md
  • skills/managing-google-workspace/references/docs.md
  • skills/managing-google-workspace/references/drive.md
  • skills/managing-google-workspace/references/forms.md
  • skills/managing-google-workspace/references/gmail.md
  • skills/managing-google-workspace/references/search.md
  • skills/managing-google-workspace/references/server-options.md
  • skills/managing-google-workspace/references/sheets.md
  • skills/managing-google-workspace/references/slides.md
  • skills/managing-google-workspace/references/tasks.md
✅ Files skipped from review due to trivial changes (15)
  • skills/managing-google-workspace/evaluations/edit_doc.json
  • skills/managing-google-workspace/evaluations/share_file.json
  • skills/managing-google-workspace/references/search.md
  • skills/managing-google-workspace/references/gmail.md
  • skills/managing-google-workspace/references/docs.md
  • skills/managing-google-workspace/references/sheets.md
  • .claude-plugin/marketplace.json
  • skills/managing-google-workspace/references/chat.md
  • skills/managing-google-workspace/references/server-options.md
  • skills/managing-google-workspace/references/forms.md
  • skills/managing-google-workspace/references/slides.md
  • skills/managing-google-workspace/references/contacts.md
  • skills/managing-google-workspace/references/tasks.md
  • skills/managing-google-workspace/references/drive.md
  • .claude-plugin/plugin.json
🚧 Files skipped from review as they are similar to previous changes (1)
  • skills/managing-google-workspace/evaluations/search_email.json

Comment thread skills/managing-google-workspace/references/apps-script.md
Comment thread skills/managing-google-workspace/references/calendar.md
Comment thread skills/managing-google-workspace/SKILL.md
@mickey-mikey
Copy link
Copy Markdown
Contributor Author

@coderabbitai resolve

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 19, 2026

✅ Actions performed

Comments resolved. Auto-approval is disabled; enable reviews.request_changes_workflow to approve automatically.

@mickey-mikey
Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 19, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@mickey-mikey
Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 19, 2026

✅ Actions performed

Full review triggered.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@skills/managing-google-workspace/evaluations/share_file.json`:
- Around line 6-8: The flow currently auto-selects the "most recently modified"
spreadsheet when multiple matches and then calls manage_drive_access and
get_drive_shareable_link; change this to require explicit user confirmation
before any permission-changing call: when multiple candidates are returned, do
not auto-select by modification date—present the candidate list and pause for an
explicit user selection/confirmation, and only after the user confirms the
chosen file invoke manage_drive_access and then get_drive_shareable_link
(reference functions manage_drive_access and get_drive_shareable_link).

In `@skills/managing-google-workspace/references/apps-script.md`:
- Line 182: Update the text to reflect the actual implementation: change the
sentence that mandates calling create_version before manage_deployment to state
that manage_deployment (create action) will create a version internally, so
calling create_version is not required when using manage_deployment; reference
the functions create_version and manage_deployment in the updated wording and
clarify that create_version can still be used if callers want to explicitly
create a named/versioned snapshot before deployment.

In `@skills/managing-google-workspace/references/chat.md`:
- Line 64: Update the table row for the parameter emoji_unicode to clearly state
it expects a literal Unicode emoji character (not a shortcode); change the
example from "e.g. thumbs-up" to something like "e.g. 👍 (literal Unicode
emoji), not 'thumbs-up' shortcode" and ensure the description for emoji_unicode
mirrors the wording used elsewhere in the doc (the emoji_unicode parameter) so
readers understand it requires the actual emoji character.

In `@skills/managing-google-workspace/references/gmail.md`:
- Line 114: Update the docs to reflect that quote_original is implemented: in
the gmail.md entries for the parameter quote_original (both occurrences) remove
the "(unreleased)" label and mark it as supported/available (or the correct
release/version), and ensure the description matches the behavior implemented in
gmail/gmail_tools.py (the tool that handles quote_original/thread_id logic);
make both occurrences consistent with the actual function signature and
behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 800e5af1-5561-47d4-ac71-7eec04b284ee

📥 Commits

Reviewing files that changed from the base of the PR and between b7a69c0 and 82cc2e8.

📒 Files selected for processing (19)
  • .claude-plugin/marketplace.json
  • .claude-plugin/plugin.json
  • skills/managing-google-workspace/SKILL.md
  • skills/managing-google-workspace/evaluations/edit_doc.json
  • skills/managing-google-workspace/evaluations/search_email.json
  • skills/managing-google-workspace/evaluations/share_file.json
  • skills/managing-google-workspace/references/apps-script.md
  • skills/managing-google-workspace/references/calendar.md
  • skills/managing-google-workspace/references/chat.md
  • skills/managing-google-workspace/references/contacts.md
  • skills/managing-google-workspace/references/docs.md
  • skills/managing-google-workspace/references/drive.md
  • skills/managing-google-workspace/references/forms.md
  • skills/managing-google-workspace/references/gmail.md
  • skills/managing-google-workspace/references/search.md
  • skills/managing-google-workspace/references/server-options.md
  • skills/managing-google-workspace/references/sheets.md
  • skills/managing-google-workspace/references/slides.md
  • skills/managing-google-workspace/references/tasks.md

Comment thread skills/managing-google-workspace/evaluations/share_file.json Outdated
Comment thread skills/managing-google-workspace/references/apps-script.md Outdated
Comment thread skills/managing-google-workspace/references/chat.md Outdated
Comment thread skills/managing-google-workspace/references/gmail.md Outdated
@taylorwilsdon taylorwilsdon self-assigned this Mar 19, 2026
@taylorwilsdon taylorwilsdon added the enhancement New feature or request label Mar 19, 2026
@taylorwilsdon
Copy link
Copy Markdown
Owner

I appreciate the diligence in review process here! Very interesting - will take it for a spin, thank you for putting this together

@mickey-mikey
Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 25, 2026

✅ Actions performed

Full review triggered.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
skills/managing-google-workspace/SKILL.md (1)

68-243: Add blank lines around tables for markdown compliance.

The service tool tables are missing blank line separators, triggering multiple MD058 linting warnings. Adding a blank line immediately before and after each table will satisfy markdown linting and improve readability.

📋 Example fix for the Gmail section
 ### Gmail
+
 | Task | Tool |
 |------|------|
 | Search/find emails | `search_gmail_messages` |
 ...
 | List filters | `list_gmail_filters` |
+
 For parameters: [references/gmail.md](references/gmail.md)

Apply the same pattern to all service tables (Drive, Calendar, Docs, Sheets, Slides, Forms, Tasks, Contacts, Chat, Apps Script, Custom Search, and Auth).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@skills/managing-google-workspace/SKILL.md` around lines 68 - 243, The
markdown tables under each service header (e.g., the Gmail table starting under
"### Gmail" listing tools like `search_gmail_messages`,
`get_gmail_message_content`, etc.) need a blank line immediately before and
after the table to satisfy MD058; for each section (Gmail, Google Drive, Google
Calendar, Google Docs, Google Sheets, Google Slides, Google Forms, Google Tasks,
Google Contacts, Google Chat, Google Apps Script, Google Custom Search) insert
one empty line above the table start and one empty line after the table end so
every table is separated from surrounding text.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@skills/managing-google-workspace/references/apps-script.md`:
- Around line 69-73: Several markdown table blocks (e.g., the table containing
"user_google_email", "script_id", and "files") lack a blank line after the table
which triggers MD058; add a single blank line after each table block to separate
it from the following content. Update the table ending after the row with
`files` and similarly fix the other table blocks referenced (lines with the
blocks containing "user_google_email"/"script_id"/"files" and the blocks at
93-97, 106-113, 117-121, 137-142, 159-164, 168-173) so each table is followed by
one empty line.

In `@skills/managing-google-workspace/SKILL.md`:
- Line 58: Update the documentation line that currently says credentials are
cached in `~/.claude/.credentials` to reflect the actual implementation: change
it to state credentials are cached in `~/.google_workspace_mcp/credentials` by
default and mention the override environment variables
`WORKSPACE_MCP_CREDENTIALS_DIR` (preferred) and `GOOGLE_MCP_CREDENTIALS_DIR`
(backwards compatible); adjust the text in SKILL.md near the credentials
description so readers see the correct default path and both env var options.

---

Nitpick comments:
In `@skills/managing-google-workspace/SKILL.md`:
- Around line 68-243: The markdown tables under each service header (e.g., the
Gmail table starting under "### Gmail" listing tools like
`search_gmail_messages`, `get_gmail_message_content`, etc.) need a blank line
immediately before and after the table to satisfy MD058; for each section
(Gmail, Google Drive, Google Calendar, Google Docs, Google Sheets, Google
Slides, Google Forms, Google Tasks, Google Contacts, Google Chat, Google Apps
Script, Google Custom Search) insert one empty line above the table start and
one empty line after the table end so every table is separated from surrounding
text.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: f1b65201-2298-4725-849c-d734c9deadac

📥 Commits

Reviewing files that changed from the base of the PR and between fc7c61b and ddbbb1c.

📒 Files selected for processing (19)
  • .claude-plugin/marketplace.json
  • .claude-plugin/plugin.json
  • skills/managing-google-workspace/SKILL.md
  • skills/managing-google-workspace/evaluations/edit_doc.json
  • skills/managing-google-workspace/evaluations/search_email.json
  • skills/managing-google-workspace/evaluations/share_file.json
  • skills/managing-google-workspace/references/apps-script.md
  • skills/managing-google-workspace/references/calendar.md
  • skills/managing-google-workspace/references/chat.md
  • skills/managing-google-workspace/references/contacts.md
  • skills/managing-google-workspace/references/docs.md
  • skills/managing-google-workspace/references/drive.md
  • skills/managing-google-workspace/references/forms.md
  • skills/managing-google-workspace/references/gmail.md
  • skills/managing-google-workspace/references/search.md
  • skills/managing-google-workspace/references/server-options.md
  • skills/managing-google-workspace/references/sheets.md
  • skills/managing-google-workspace/references/slides.md
  • skills/managing-google-workspace/references/tasks.md

Comment thread skills/managing-google-workspace/references/apps-script.md
Comment thread skills/managing-google-workspace/SKILL.md Outdated
@mickey-mikey mickey-mikey marked this pull request as draft March 25, 2026 01:40
Add managing-google-workspace skill with routing table for 114 tools
across 12 services. Uses progressive disclosure to reduce context
overhead vs loading all tool schemas upfront.

Addresses taylorwilsdon#242.

- SKILL.md with service routing, workflows, and OAuth setup guide
- 13 reference files (one per service + server options)
- 3 evaluation scenarios (edit doc, search email, share file)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@taylorwilsdon taylorwilsdon marked this pull request as ready for review April 5, 2026 15:23
@mickey-mikey mickey-mikey changed the title feat: add Claude Code plugin with Google Workspace skill feat: add Google Workspace skill Apr 7, 2026
@mickey-mikey
Copy link
Copy Markdown
Contributor Author

@coderabbitai resume

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 14, 2026

✅ Actions performed

Reviews resumed.

@reinlemmens
Copy link
Copy Markdown
Contributor

Hey — I had a separate PR (#684, now closed) adding a Claude Code skill specifically for creating formatted Google Docs. Your PR is the better home for this content, so posting it here as a suggested addition.

Your references/docs.md covers the tool parameters and tips well. What it doesn't cover yet are the workflow patterns needed to avoid the Google Docs API's formatting pitfalls when combining multiple tools to build a structured document. These are non-obvious failure modes that agents hit consistently:

The problems

Pitfall What happens Root cause
Style cascade Body text renders as heading (large/colored) Heading + body inserted in same text block, or NORMAL_TEXT not applied after heading body
Stale indices Style applied to wrong paragraph Positions not refreshed after insertion
List fragmentation Multiple single-item lists instead of one List items inserted as separate operations
Table cell corruption Cells end up empty or misplaced Cells filled top-to-bottom (indices shift)

The batch pattern that avoids them

For each content section, repeat:

  1. Insert heading text (one paragraph, ending \n)
  2. Apply heading style (update_paragraph_style, heading_level=1/2/3)
  3. Insert body text (ending \n)
  4. Apply named_style_type="NORMAL_TEXT" to the body paragraphs
  5. Re-read doc (get_doc_content) for fresh positions

Key rules:

  • Never insert heading + body in the same text block — both get heading style
  • Always reset to NORMAL_TEXT after a heading's body — prevents next insertion inheriting the style
  • For lists: insert ALL items in ONE block ("Item 1\nItem 2\nItem 3\n") then apply list_type to the whole range in one call
  • For tables: fill cells bottom-right to top-left — prevents index shifting
  • Always export to PDF and verify before claiming done

I had this as a standalone skill file with the full detail including a pitfalls/fixes table and quick reference. Happy to contribute it as a reference file (e.g. references/docs-layout-workflow.md) or as an addition to the existing references/docs.md — whatever fits your structure best. The full content is in the diff of #684 if useful.

reinlemmens and others added 2 commits April 14, 2026 19:43
Adds agent-facing guidance for navigating Google Docs API formatting
pitfalls (style cascade, index shifting, list merging, table cell
ordering) when using this MCP's document creation tools.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
skills/managing-google-workspace/references/docs-layout-workflow.md (1)

122-124: Add language specifiers to code blocks.

Both code blocks are missing language specifiers. This improves syntax highlighting and accessibility.

🎨 Proposed fix

For the PDF export example:

-```
+```python
 mcp__google-workspace__export_doc_to_pdf(document_id="<doc_id>")

For the Quick Reference examples:
```diff
-```
+```python
 # Heading 1
 update_paragraph_style(start_index=X, end_index=Y, heading_level=1)

Based on learnings: As per coding guidelines, fenced code blocks should have a language specified (markdownlint MD040).

Also applies to: 151-166

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@skills/managing-google-workspace/references/docs-layout-workflow.md` around
lines 122 - 124, Add language specifiers to the fenced code blocks so markdown
renders with syntax highlighting: update the block containing the call
mcp__google-workspace__export_doc_to_pdf(document_id="<doc_id>") to use a python
specifier (```python) and similarly add a language specifier (e.g., ```python)
to the Quick Reference examples that show update_paragraph_style(start_index=X,
end_index=Y, heading_level=1) and the other code fences between lines ~151-166.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@skills/managing-google-workspace/references/docs-layout-workflow.md`:
- Around line 29-34: The install example uses the wrong source path and target
directory; update the instructions so the source is the actual file name
(skills/managing-google-workspace/references/docs-layout-workflow.md) and the
target directory matches the skill structure
(~/.claude/skills/managing-google-workspace/references/) by replacing the
cp/mkdir lines in the docs-layout-workflow.md section, or alternatively remove
the manual install steps and note that docs-layout-workflow.md is included
automatically when the managing-google-workspace skill is installed; ensure
references to "create-google-doc-with-layout" are changed to
"managing-google-workspace" and update the directory path accordingly.

---

Nitpick comments:
In `@skills/managing-google-workspace/references/docs-layout-workflow.md`:
- Around line 122-124: Add language specifiers to the fenced code blocks so
markdown renders with syntax highlighting: update the block containing the call
mcp__google-workspace__export_doc_to_pdf(document_id="<doc_id>") to use a python
specifier (```python) and similarly add a language specifier (e.g., ```python)
to the Quick Reference examples that show update_paragraph_style(start_index=X,
end_index=Y, heading_level=1) and the other code fences between lines ~151-166.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 231342eb-d6b8-4336-b5b7-bec6a9972078

📥 Commits

Reviewing files that changed from the base of the PR and between 33f50f3 and b8cac5c.

📒 Files selected for processing (1)
  • skills/managing-google-workspace/references/docs-layout-workflow.md

Comment thread skills/managing-google-workspace/references/docs-layout-workflow.md Outdated
@mickey-mikey
Copy link
Copy Markdown
Contributor Author

@coderabbitai resume

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 14, 2026

✅ Actions performed

Reviews resumed.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@skills/managing-google-workspace/references/docs-layout-workflow.md`:
- Around line 46-51: The docs currently claim update_paragraph_style doesn't
support tab_id, but the function signature update_paragraph_style (see
gdocs/docs_tools.py at the function definition around line 1965) accepts tab_id:
str = None; verify whether that parameter is actually honored (run a quick
integration unit or inspect the implementation) and then update the text at the
two locations (the sentence at Step 1 and the pitfalls table entry) to match
reality: if tab_id is non-functional, explicitly document that the parameter
exists but is ignored and recommend single-tab templates; if tab_id works,
remove the warning and add a short usage note showing how to pass tab_id to
target a specific tab.
- Around line 168-171: The two helpers modify_doc_text and
update_paragraph_style use inconsistent index bases; standardize both to 0-based
to match Google Docs: update the docstrings for modify_doc_text and
update_paragraph_style to state "start_index: Start position (0-based)", remove
or adjust the special-case logic that treats start_index == 0 in
modify_doc_text, and change the validation in update_paragraph_style that
currently rejects start_index < 1 so it instead accepts 0 (e.g., allow
start_index >= 0); ensure any internal conversions or callers use the unified
0-based convention and update any tests/comments accordingly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 9c74fa55-95e8-47f9-9f91-cdb40da64e71

📥 Commits

Reviewing files that changed from the base of the PR and between b8cac5c and 7609a09.

📒 Files selected for processing (1)
  • skills/managing-google-workspace/references/docs-layout-workflow.md

Comment thread skills/managing-google-workspace/references/docs-layout-workflow.md
Comment thread skills/managing-google-workspace/references/docs-layout-workflow.md
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
gdocs/docs_helpers.py (1)

156-170: Consider adding explicit tests for non-body targets (tab_id / segment_id).

A small regression test that confirms start_index=0 is not remapped when tab_id or segment_id is set would lock in the guard behavior.

Suggested test additions
+def test_zero_start_not_normalized_when_tab_id_is_set():
+    result = create_update_paragraph_style_request(
+        0, 10, heading_level=1, tab_id="tab-123"
+    )
+    inner = result["updateParagraphStyle"]
+    assert inner["range"]["startIndex"] == 0
+
+def test_zero_start_not_normalized_when_segment_id_is_set():
+    result = create_update_paragraph_style_request(
+        0, 10, heading_level=1, segment_id="kix.header"
+    )
+    inner = result["updateParagraphStyle"]
+    assert inner["range"]["startIndex"] == 0
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@gdocs/docs_helpers.py` around lines 156 - 170, Add unit tests for
_normalize_body_start_index to lock in the guard behavior: assert that when both
tab_id and segment_id are None and start_index==0 the function returns 1, and
assert that when either tab_id or segment_id is provided (e.g., tab_id="t1" and
segment_id=None, and vice versa) a start_index of 0 is preserved (returns 0).
Target tests to call _normalize_body_start_index directly and include cases for
non-zero start_index as a control.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@gdocs/docs_helpers.py`:
- Around line 156-170: Add unit tests for _normalize_body_start_index to lock in
the guard behavior: assert that when both tab_id and segment_id are None and
start_index==0 the function returns 1, and assert that when either tab_id or
segment_id is provided (e.g., tab_id="t1" and segment_id=None, and vice versa) a
start_index of 0 is preserved (returns 0). Target tests to call
_normalize_body_start_index directly and include cases for non-zero start_index
as a control.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 643b496d-5944-43f0-9149-ce09a436ffa8

📥 Commits

Reviewing files that changed from the base of the PR and between e0fda2b and e7fba7e.

📒 Files selected for processing (6)
  • gdocs/docs_helpers.py
  • gdocs/docs_tools.py
  • skills/managing-google-workspace/references/docs-layout-workflow.md
  • skills/managing-google-workspace/references/docs.md
  • tests/gdocs/test_advanced_doc_formatting.py
  • tests/gdocs/test_paragraph_style.py
✅ Files skipped from review due to trivial changes (2)
  • skills/managing-google-workspace/references/docs-layout-workflow.md
  • skills/managing-google-workspace/references/docs.md

@taylorwilsdon
Copy link
Copy Markdown
Owner

Thanks! Getting this merged now.

@taylorwilsdon taylorwilsdon merged commit e66412f into taylorwilsdon:main Apr 14, 2026
5 checks passed
@mickey-mikey mickey-mikey deleted the feat/plugin-skill branch April 14, 2026 23:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants