google_docs

$npx mdskill add obra/muse-skills/google_docs

Manage Google Docs through `hatch_gws_cli`; the vendored Google Workspace CLI is the only implementation path.

SKILL.md

.github/skills/google_docsView on GitHub ↗
---
name: "google_docs"
description: "Read, create, and edit the user's Google Docs."
metadata: { "includeInPrompt": false }
---

# Google Docs

## Purpose
Manage Google Docs through `hatch_gws_cli`; the vendored Google Workspace CLI is the only implementation path.

## Tooling
Use `exec` to run:

```sh
hatch_gws_cli docs <resource> <method> [flags]
```

### Connection management

```sh
hatch_gws_cli docs status
hatch_gws_cli docs disconnect
```

### Docs operations

Core patterns:
- `hatch_gws_cli docs status`
- `hatch_gws_cli docs disconnect`
- `hatch_gws_cli schema docs.documents.get`
- `hatch_gws_cli schema docs.documents.create`
- `hatch_gws_cli schema docs.documents.batchUpdate`

Common raw API calls:
- `hatch_gws_cli docs documents get --params '{"documentId":"<document_id>"}'`
- `hatch_gws_cli docs documents create --json '{"title":"Project Brief"}'`
- `hatch_gws_cli docs documents batchUpdate --params '{"documentId":"<document_id>"}' --json '{"requests":[{"insertText":{"location":{"index":1},"text":"Hello, world!"}}]}'`

Vendored helpers are also available:
- `hatch_gws_cli docs +write --document <document_id> --text 'Hello, world!'`

JSON output contract:
- `status`: parse `status`, `connect_url`, and `disconnect_url`
- `disconnect`: parse `ok`, `action`, `status`, and `disconnect_url`

## Composing document content

Never compose a document body through `batchUpdate` inserts or `docs +write`, whether new, rewritten, or reconstructed. Inserted plain text arrives unformatted. Build it as a document artifact first. The artifacts tool renders a styled `.docx` under `~/workspace/your_files/<artifact-slug>/`. Then put it in Google:

1. Mint the empty doc with `hatch_gws_cli docs documents create --json '{"title":"<title>"}'`.
2. Fill it from the built file: `hatch_gws_cli drive files update --params '{"fileId":"<document_id>"}' --upload "$JARVIS_HOME/workspace/your_files/<artifact-slug>/<name>.docx"`. Drive converts the upload into the Google Doc in place, formatting intact. The path must be absolute and inside the home directory. Relative and `/tmp` paths fail.
3. Read it back with `documents.get` and confirm the styling landed before you call it ready. A successful upload proves Drive converted the file, not that the page reads correctly.
4. To revise, edit the artifact and re-upload to the same document ID. The artifact is the working copy. The upload replaces the whole body, so it discards any edits made in Google since, including the user's. Read the published copy back first. If it changed, say so and wait for a yes.

## Auth
Authentication is handled by the wrapper's `status` and `disconnect` subcommands. Do not hand-write credential files or run raw `gws auth ...`.

## First-use setup flow
1. Run `hatch_gws_cli docs status`.
2. If `status` is `unavailable`, tell the user that Google Docs is not available on this device. Do not offer alternative integration approaches or ask the user for credentials.
3. If `status` is `not_connected` and `connect_url` is present, replace `<connect_url>` with the returned URL and share exactly this Markdown link: `[Connect Google Docs](<connect_url>)`; do not paste the raw URL separately. Wait for the user to reconnect.
4. Once `status` is `connected`, proceed with Docs operations.

## Operating Rules
1. Use `schema` before unfamiliar Docs methods so `--params` and `--json` match the current vendored CLI contract.
2. Creating a document and editing a document owned only by the user may proceed from a clear request. Confirm before editing a shared document because its contents can be exposed to or changed for other people.
3. Treat document IDs as opaque strings and only use IDs returned by prior commands or explicit user input.
4. Prefer `documents.get` before updating so you understand the current structure.
5. Run `hatch_gws_cli docs disconnect`. After running it, when `disconnect_url` is present, replace `<disconnect_url>` with the returned URL and share exactly this Markdown link: `[Disconnect Google Docs](<disconnect_url>)`; do not paste the raw URL separately.
6. Use `documents.batchUpdate` to change part of an existing document, and `docs +write` only to append plain text. To compose a body, follow "Composing document content" above.
7. After a read or write action, confirm the user-visible result only. Do not surface raw API identifiers (document IDs) or other internal response fields (revision IDs, raw JSON) in text shown to the user unless the user asks for them or you need them to troubleshoot a failure; keep using them internally to chain follow-up commands.

More from obra/muse-skills

SkillDescription
apple_healthkitThe user's synced Apple Health (HealthKit) data: daily metrics (steps, distance, calories, heart rate, HRV, VO2max), sleep sessions (stages, quality, efficiency), and workouts.
artifact_documentCreate, read, edit, or manipulate Word documents (.docx) and Word templates (.dotx). Use whenever a build task's artifact kind is document with the default docx output, or the task mentions a Word doc, .docx, or .dotx, extracts or reorganizes content from one, inserts or replaces images, does find-and-replace in one, or works with tracked changes (redlines) or comments. Covers python-docx generation, raw OOXML editing of existing files, document structure and formatting, and render verification. Not for PDFs, spreadsheets, or Google Docs.
artifact_markdownBuild or revise a plain markdown file (md) deliverable such as notes, a README, meeting minutes, documentation, or text the user will edit or paste elsewhere. Use whenever a build task's artifact kind is markdown. Covers markdown formatting conventions and read-back verification.
artifact_pdfBuild, revise, or manipulate a fixed-layout PDF (report, guide, one-pager, printable document). Use whenever a build task's artifact kind is pdf, a document build's output format is pdf, or the task reads, merges, splits, crops, or fills an existing PDF, including fillable AcroForms. Covers authoring the print-CSS HTML source, rendering, the geometry and validation gates, existing-PDF manipulation and form filling, and delivery under workspace/your_files.
artifact_presentationBuild or revise a slide deck (pptx by default; pdf or html on request). Use whenever a build task's artifact kind is presentation, or the user asks for a deck, slides, or a presentation. Covers per-slide HTML authoring, the StylePlan theme system, font embedding, deck assembly, render gates, and the PPTX export.
artifact_spreadsheetCreate, read, edit, fix, or clean spreadsheet files (.xlsx, .xlsm, .csv, .tsv). Use whenever a build task's artifact kind is spreadsheet, or the task names a spreadsheet file and wants something done to it or produced from it, including restructuring messy tabular data into a proper workbook. Covers openpyxl generation, formulas and recalculation, editing existing workbooks, and the validation gates. Not for tasks whose deliverable is a document, report, or web page that merely contains a table.
artifact_testingVerify an artifact before delivering it - file deliverables (pdf, pptx, docx, xlsx, csv) and web artifacts alike. Use whenever a build is about to return a link, or a build task asks for validation, QA, or a visual check. Covers the per-kind gate scripts, render-and-look verification, and leftover-placeholder scanning.
asana>-
bookingPrimary entry point for direct flight, hotel, restaurant, or event-ticket transactions and for bounded live availability checks delegated by Travel Planning. Always use before provider-specific skills or browser work when the user asks to find live availability or prices, compare bookable options, book, or continue an active booking. Do not use for trip planning itself, broad inspiration, opening hours, schedules, flight status, or other factual questions without transaction intent.
boxSearch, read, upload, download, move, rename, delete, restore, and share Box content; manage comments and metadata.