Skip to content

Commit cbf8687

Browse files
committed
chore(gws): sync skills with upstream gws CLI v0.22.5
Sync all 28 skill files with upstream googleworkspace/cli to pick up new flags (--meet, --attach, --draft, --from, --range, smartNotes) and normalize frontmatter to upstream format (metadata.version, block YAML arrays). Drop local CLAUDE_EFFORT customizations that duplicate harness behavior. Also remove defunct /gws-sync reference from README and add upstream sync process documentation. Assisted-by: Claude:claude-opus-4-6
1 parent 3867665 commit cbf8687

29 files changed

Lines changed: 173 additions & 105 deletions

File tree

gws/.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "gws",
3-
"version": "2.0.0",
3+
"version": "2.1.0",
44
"description": "Google Workspace CLI skills for Gmail, Calendar, Drive, Docs, Sheets, Slides, Meet, and Tasks",
55
"author": {
66
"name": "cblecker"

gws/README.md

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,39 @@ Multi-step productivity workflows:
4242
- `gws-workflow-weekly-digest` - Weekly activity summary
4343
- `gws-workflow-file-announce` - Share files with notifications
4444

45-
## Updating Skills
46-
47-
To sync with the latest upstream `gws` skills:
48-
49-
```text
50-
/gws-sync
51-
```
52-
53-
This runs the curation skill which compares upstream skills against your OAuth scopes and presents new, updated, or removed skills for review.
45+
## Syncing Skills with Upstream
46+
47+
This plugin carries a curated subset of skills from the upstream
48+
[gws CLI repository](https://github.com/googleworkspace/cli). The upstream
49+
generates skills via `gws generate-skills` and publishes them under `skills/`
50+
in the repo. We carry 28 of ~74 available skills (core services, helpers,
51+
and workflows — no personas or recipes).
52+
53+
### Process
54+
55+
1. Check the installed CLI version (`gws --version`) against the latest
56+
[upstream release](https://github.com/googleworkspace/cli/releases).
57+
Update the CLI if needed.
58+
2. For each local skill in `gws/skills/*/SKILL.md`, fetch the matching
59+
file from `googleworkspace/cli` `skills/` on the `main` branch.
60+
3. Overwrite the local file with the upstream content. Do not add local
61+
customizations — take upstream wholesale.
62+
4. Bump the plugin version in `.claude-plugin/plugin.json` (minor for
63+
content-only updates).
64+
5. Validate: `claude plugin validate ./gws`
65+
66+
### Guidelines
67+
68+
- **Go pure upstream.** Local customizations (extra sections, modified
69+
tips) create merge debt and tend to duplicate what the Claude Code
70+
harness already handles (e.g., effort-level scaling via `CLAUDE_EFFORT`).
71+
- **Frontmatter must match upstream format.** Version lives inside
72+
`metadata.version`, not as a top-level field. YAML arrays use block
73+
style (`- gws`), not inline (`["gws"]`).
74+
- **New upstream skills** (chat, forms, keep, people, classroom, events,
75+
script, admin-reports, modelarmor, personas, recipes) can be pulled in
76+
by creating the corresponding `skills/<name>/` directory and copying
77+
the upstream SKILL.md. No other files are needed per skill.
5478

5579
## Links
5680

gws/skills/gws-calendar-agenda/SKILL.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
---
22
name: gws-calendar-agenda
3-
version: 1.0.0
43
description: "Google Calendar: Show upcoming events across all calendars."
54
metadata:
5+
version: 0.22.5
66
openclaw:
77
category: "productivity"
88
requires:
9-
bins: ["gws"]
9+
bins:
10+
- gws
1011
cliHelp: "gws calendar +agenda --help"
1112
---
1213

gws/skills/gws-calendar-insert/SKILL.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
---
22
name: gws-calendar-insert
3-
version: 1.0.0
43
description: "Google Calendar: Create a new event."
54
metadata:
5+
version: 0.22.5
66
openclaw:
77
category: "productivity"
88
requires:
9-
bins: ["gws"]
9+
bins:
10+
- gws
1011
cliHelp: "gws calendar +insert --help"
1112
---
1213

@@ -33,18 +34,20 @@ gws calendar +insert --summary <TEXT> --start <TIME> --end <TIME>
3334
| `--location` ||| Event location |
3435
| `--description` ||| Event description/body |
3536
| `--attendee` ||| Attendee email (can be used multiple times) |
37+
| `--meet` ||| Add a Google Meet video conference link |
3638

3739
## Examples
3840

3941
```bash
4042
gws calendar +insert --summary 'Standup' --start '2026-06-17T09:00:00-07:00' --end '2026-06-17T09:30:00-07:00'
4143
gws calendar +insert --summary 'Review' --start ... --end ... --attendee alice@example.com
44+
gws calendar +insert --summary 'Meet' --start ... --end ... --meet
4245
```
4346

4447
## Tips
4548

4649
- Use RFC3339 format for times (e.g. 2026-06-17T09:00:00-07:00).
47-
- For recurring events or conference links, use the raw API instead.
50+
- The --meet flag automatically adds a Google Meet link to the event.
4851

4952
> [!CAUTION]
5053
> This is a **write** command — confirm with the user before executing.

gws/skills/gws-calendar/SKILL.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
---
22
name: gws-calendar
3-
version: 1.0.0
43
description: "Google Calendar: Manage calendars and events."
54
metadata:
5+
version: 0.22.5
66
openclaw:
77
category: "productivity"
88
requires:
9-
bins: ["gws"]
9+
bins:
10+
- gws
1011
cliHelp: "gws calendar --help"
1112
---
1213

@@ -105,4 +106,3 @@ gws schema calendar.<resource>.<method>
105106
```
106107

107108
Use `gws schema` output to build your `--params` and `--json` flags.
108-

gws/skills/gws-docs-write/SKILL.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
---
22
name: gws-docs-write
3-
version: 1.0.0
43
description: "Google Docs: Append text to a document."
54
metadata:
5+
version: 0.22.5
66
openclaw:
77
category: "productivity"
88
requires:
9-
bins: ["gws"]
9+
bins:
10+
- gws
1011
cliHelp: "gws docs +write --help"
1112
---
1213

gws/skills/gws-docs/SKILL.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
---
22
name: gws-docs
3-
version: 1.0.0
43
description: "Read and write Google Docs."
54
metadata:
5+
version: 0.22.5
66
openclaw:
77
category: "productivity"
88
requires:
9-
bins: ["gws"]
9+
bins:
10+
- gws
1011
cliHelp: "gws docs --help"
1112
---
1213

@@ -45,4 +46,3 @@ gws schema docs.<resource>.<method>
4546
```
4647

4748
Use `gws schema` output to build your `--params` and `--json` flags.
48-

gws/skills/gws-drive-upload/SKILL.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
---
22
name: gws-drive-upload
3-
version: 1.0.0
43
description: "Google Drive: Upload a file with automatic metadata."
54
metadata:
5+
version: 0.22.5
66
openclaw:
77
category: "productivity"
88
requires:
9-
bins: ["gws"]
9+
bins:
10+
- gws
1011
cliHelp: "gws drive +upload --help"
1112
---
1213

gws/skills/gws-drive/SKILL.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
---
22
name: gws-drive
3-
version: 1.0.0
43
description: "Google Drive: Manage files, folders, and shared drives."
54
metadata:
5+
version: 0.22.5
66
openclaw:
77
category: "productivity"
88
requires:
9-
bins: ["gws"]
9+
bins:
10+
- gws
1011
cliHelp: "gws drive --help"
1112
---
1213

@@ -69,19 +70,19 @@ gws drive <resource> <method> [flags]
6970
- `create` — Creates a shared drive. For more information, see [Manage shared drives](https://developers.google.com/workspace/drive/api/guides/manage-shareddrives).
7071
- `get` — Gets a shared drive's metadata by ID. For more information, see [Manage shared drives](https://developers.google.com/workspace/drive/api/guides/manage-shareddrives).
7172
- `hide` — Hides a shared drive from the default view. For more information, see [Manage shared drives](https://developers.google.com/workspace/drive/api/guides/manage-shareddrives).
72-
- `list` — Lists the user's shared drives. This method accepts the `q` parameter, which is a search query combining one or more search terms. For more information, see the [Search for shared drives](/workspace/drive/api/guides/search-shareddrives) guide.
73+
- `list` — Lists the user's shared drives. This method accepts the `q` parameter, which is a search query combining one or more search terms. For more information, see the [Search for shared drives](https://developers.google.com/workspace/drive/api/guides/search-shareddrives) guide.
7374
- `unhide` — Restores a shared drive to the default view. For more information, see [Manage shared drives](https://developers.google.com/workspace/drive/api/guides/manage-shareddrives).
7475
- `update` — Updates the metadata for a shared drive. For more information, see [Manage shared drives](https://developers.google.com/workspace/drive/api/guides/manage-shareddrives).
7576

7677
### files
7778

7879
- `copy` — Creates a copy of a file and applies any requested updates with patch semantics. For more information, see [Create and manage files](https://developers.google.com/workspace/drive/api/guides/create-file).
79-
- `create` — Creates a file. For more information, see [Create and manage files](/workspace/drive/api/guides/create-file). This method supports an */upload* URI and accepts uploaded media with the following characteristics: - *Maximum file size:* 5,120 GB - *Accepted Media MIME types:* `*/*` (Specify a valid MIME type, rather than the literal `*/*` value. The literal `*/*` is only used to indicate that any valid MIME type can be uploaded.
80+
- `create` — Creates a file. For more information, see [Create and manage files](https://developers.google.com/workspace/drive/api/guides/create-file). This method supports an */upload* URI and accepts uploaded media with the following characteristics: - *Maximum file size:* 5,120 GB - *Accepted Media MIME types:* `*/*` (Specify a valid MIME type, rather than the literal `*/*` value. The literal `*/*` is only used to indicate that any valid MIME type can be uploaded.
8081
- `download` — Downloads the content of a file. For more information, see [Download and export files](https://developers.google.com/workspace/drive/api/guides/manage-downloads). Operations are valid for 24 hours from the time of creation.
8182
- `export` — Exports a Google Workspace document to the requested MIME type and returns exported byte content. For more information, see [Download and export files](https://developers.google.com/workspace/drive/api/guides/manage-downloads). Note that the exported content is limited to 10 MB.
8283
- `generateIds` — Generates a set of file IDs which can be provided in create or copy requests. For more information, see [Create and manage files](https://developers.google.com/workspace/drive/api/guides/create-file).
83-
- `get` — Gets a file's metadata or content by ID. For more information, see [Search for files and folders](/workspace/drive/api/guides/search-files). If you provide the URL parameter `alt=media`, then the response includes the file contents in the response body. Downloading content with `alt=media` only works if the file is stored in Drive. To download Google Docs, Sheets, and Slides use [`files.export`](/workspace/drive/api/reference/rest/v3/files/export) instead.
84-
- `list` — Lists the user's files. For more information, see [Search for files and folders](/workspace/drive/api/guides/search-files). This method accepts the `q` parameter, which is a search query combining one or more search terms. This method returns *all* files by default, including trashed files. If you don't want trashed files to appear in the list, use the `trashed=false` query parameter to remove trashed files from the results.
84+
- `get` — Gets a file's metadata or content by ID. For more information, see [Search for files and folders](https://developers.google.com/workspace/drive/api/guides/search-files). If you provide the URL parameter `alt=media`, then the response includes the file contents in the response body. Downloading content with `alt=media` only works if the file is stored in Drive.
85+
- `list` — Lists the user's files. For more information, see [Search for files and folders](https://developers.google.com/workspace/drive/api/guides/search-files). This method accepts the `q` parameter, which is a search query combining one or more search terms. This method returns *all* files by default, including trashed files. If you don't want trashed files to appear in the list, use the `trashed=false` query parameter to remove trashed files from the results.
8586
- `listLabels` — Lists the labels on a file. For more information, see [List labels on a file](https://developers.google.com/workspace/drive/api/guides/list-labels).
8687
- `modifyLabels` — Modifies the set of labels applied to a file. For more information, see [Set a label field on a file](https://developers.google.com/workspace/drive/api/guides/set-label). Returns a list of the labels that were added or modified.
8788
- `update` — Updates a file's metadata, content, or both. When calling this method, only populate fields in the request that you want to modify. When updating fields, some fields might be changed automatically, such as `modifiedDate`. This method supports patch semantics. This method supports an */upload* URI and accepts uploaded media with the following characteristics: - *Maximum file size:* 5,120 GB - *Accepted Media MIME types:* `*/*` (Specify a valid MIME type, rather than the literal `*/*` value.
@@ -134,4 +135,3 @@ gws schema drive.<resource>.<method>
134135
```
135136

136137
Use `gws schema` output to build your `--params` and `--json` flags.
137-

gws/skills/gws-gmail-forward/SKILL.md

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
---
22
name: gws-gmail-forward
3-
version: 1.0.0
43
description: "Gmail: Forward a message to new recipients."
54
metadata:
5+
version: 0.22.5
66
openclaw:
77
category: "productivity"
88
requires:
9-
bins: ["gws"]
9+
bins:
10+
- gws
1011
cliHelp: "gws gmail +forward --help"
1112
---
1213

@@ -29,25 +30,38 @@ gws gmail +forward --message-id <ID> --to <EMAILS>
2930
| `--message-id` ||| Gmail message ID to forward |
3031
| `--to` ||| Recipient email address(es), comma-separated |
3132
| `--from` ||| Sender address (for send-as/alias; omit to use account default) |
33+
| `--body` ||| Optional note to include above the forwarded message (plain text, or HTML with --html) |
34+
| `--no-original-attachments` ||| Do not include file attachments from the original message (inline images in --html mode are preserved) |
35+
| `--attach` ||| Attach a file (can be specified multiple times) |
3236
| `--cc` ||| CC email address(es), comma-separated |
3337
| `--bcc` ||| BCC email address(es), comma-separated |
34-
| `--body` ||| Optional note to include above the forwarded message (plain text, or HTML with --html) |
35-
| `--html` ||| Send as HTML (formats forwarded block with Gmail styling; treat --body as HTML) |
38+
| `--html` ||| Treat --body as HTML content (default is plain text) |
3639
| `--dry-run` ||| Show the request that would be sent without executing it |
40+
| `--draft` ||| Save as draft instead of sending |
3741

3842
## Examples
3943

4044
```bash
4145
gws gmail +forward --message-id 18f1a2b3c4d --to dave@example.com
4246
gws gmail +forward --message-id 18f1a2b3c4d --to dave@example.com --body 'FYI see below'
4347
gws gmail +forward --message-id 18f1a2b3c4d --to dave@example.com --cc eve@example.com
44-
gws gmail +forward --message-id 18f1a2b3c4d --to dave@example.com --bcc secret@example.com
4548
gws gmail +forward --message-id 18f1a2b3c4d --to dave@example.com --body '<p>FYI</p>' --html
49+
gws gmail +forward --message-id 18f1a2b3c4d --to dave@example.com -a notes.pdf
50+
gws gmail +forward --message-id 18f1a2b3c4d --to dave@example.com --no-original-attachments
51+
gws gmail +forward --message-id 18f1a2b3c4d --to dave@example.com --draft
4652
```
4753

4854
## Tips
4955

5056
- Includes the original message with sender, date, subject, and recipients.
57+
- Original attachments are included by default (matching Gmail web behavior).
58+
- With --html, inline images are also preserved via cid: references.
59+
- In plain-text mode, inline images are not included (matching Gmail web).
60+
- Use --no-original-attachments to forward without the original message's files.
61+
- Use -a/--attach to add extra file attachments. Can be specified multiple times.
62+
- Combined size of original and user attachments is limited to 25MB.
63+
- With --html, the forwarded block uses Gmail's gmail_quote CSS classes and preserves HTML formatting. Use fragment tags (<p>, <b>, <a>, etc.) — no <html>/<body> wrapper needed.
64+
- Use --draft to save the forward as a draft instead of sending it immediately.
5165

5266
## See Also
5367

0 commit comments

Comments
 (0)