Add gws skill; update blocklist and known_marketplaces plugins
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
0af5e9cabf
commit
4b832ffed5
@ -1,5 +1,5 @@
|
||||
{
|
||||
"fetchedAt": "2026-03-15T06:00:47.530Z",
|
||||
"fetchedAt": "2026-03-16T06:30:48.027Z",
|
||||
"plugins": [
|
||||
{
|
||||
"plugin": "code-review@claude-plugins-official",
|
||||
|
||||
@ -13,6 +13,6 @@
|
||||
"repo": "anthropics/claude-code"
|
||||
},
|
||||
"installLocation": "/home/cal/.claude/plugins/marketplaces/claude-code-plugins",
|
||||
"lastUpdated": "2026-03-15T07:00:48.362Z"
|
||||
"lastUpdated": "2026-03-16T07:00:48.787Z"
|
||||
}
|
||||
}
|
||||
1
sessions/1636882.json
Normal file
1
sessions/1636882.json
Normal file
@ -0,0 +1 @@
|
||||
{"pid":1636882,"sessionId":"cd9dce66-bb03-423d-b42a-9222213941a9","cwd":"/mnt/NV2/Development/paper-dynasty/card-creation","startedAt":1773618059537}
|
||||
98
skills/gws/SKILL.md
Normal file
98
skills/gws/SKILL.md
Normal file
@ -0,0 +1,98 @@
|
||||
---
|
||||
name: gws
|
||||
description: Google Workspace CLI for Drive, Sheets, Gmail, and Calendar. USE WHEN user mentions "spreadsheet", "google sheets", "google drive", "gmail", "google calendar", "gws", or wants to read/write/create Google Workspace documents.
|
||||
---
|
||||
|
||||
# GWS - Google Workspace CLI
|
||||
|
||||
**SCOPE**: Use when interacting with Google Drive, Sheets, Gmail, or Calendar via the `gws` CLI.
|
||||
|
||||
## When to Activate
|
||||
|
||||
- "update the spreadsheet", "read the sheet", "add a row"
|
||||
- "create a spreadsheet", "make a Google Sheet"
|
||||
- "check my email", "search Gmail"
|
||||
- "list my Drive files", "find a file in Drive"
|
||||
- "check my calendar", "list events"
|
||||
- Any task involving a Google Sheets spreadsheet ID
|
||||
|
||||
## Quick Reference
|
||||
|
||||
All commands run via Bash. Output is JSON by default. Add `--format table` for human-readable output.
|
||||
|
||||
### Sheets (most common)
|
||||
|
||||
```bash
|
||||
# Read a range
|
||||
gws sheets +read --spreadsheet "$ID" --range 'Sheet1!A1:D10'
|
||||
|
||||
# Append a row
|
||||
gws sheets +append --spreadsheet "$ID" --values 'val1,val2,val3'
|
||||
|
||||
# Append multiple rows
|
||||
gws sheets +append --spreadsheet "$ID" --json-values '[["a","b"],["c","d"]]'
|
||||
|
||||
# Update specific cells
|
||||
gws sheets spreadsheets values update \
|
||||
--params "{\"spreadsheetId\": \"$ID\", \"range\": \"Sheet1\u0021A1:B2\", \"valueInputOption\": \"USER_ENTERED\"}" \
|
||||
--json '{"values": [["new1","new2"],["new3","new4"]]}'
|
||||
|
||||
# Create a spreadsheet
|
||||
gws sheets spreadsheets create --json '{"properties": {"title": "My Sheet"}}'
|
||||
|
||||
# Clear a range
|
||||
gws sheets spreadsheets values clear \
|
||||
--params "{\"spreadsheetId\": \"$ID\", \"range\": \"Sheet1\u0021A1:Z100\"}"
|
||||
```
|
||||
|
||||
### Drive
|
||||
|
||||
```bash
|
||||
# List files
|
||||
gws drive files list --params '{"pageSize": 10}'
|
||||
|
||||
# Search files
|
||||
gws drive files list --params '{"q": "name contains \"keyword\""}'
|
||||
```
|
||||
|
||||
### Gmail
|
||||
|
||||
```bash
|
||||
# Unread messages
|
||||
gws gmail users messages list --params '{"userId": "me", "q": "is:unread"}'
|
||||
```
|
||||
|
||||
### Calendar
|
||||
|
||||
```bash
|
||||
# Upcoming events
|
||||
gws calendar events list --params '{"calendarId": "primary", "maxResults": 5}'
|
||||
```
|
||||
|
||||
## Critical Gotchas
|
||||
|
||||
1. **`!` in ranges** — In double-quoted JSON, use `\u0021` instead of `!` (bash history expansion breaks it). Single-quoted JSON is safe: `'Sheet1!A1:B2'`
|
||||
2. **`--params` vs `--json`** — URL/query params (spreadsheetId, range, valueInputOption) go in `--params`. Request body (values, properties) goes in `--json`
|
||||
3. **valueInputOption** — Required for writes. Use `USER_ENTERED` (parses formulas/numbers) or `RAW` (literal strings)
|
||||
4. **Helpers vs raw API** — `+read` and `+append` are convenient shortcuts. For updates, batch operations, or clearing, use the raw `spreadsheets values` subcommands
|
||||
|
||||
## Auth & Config
|
||||
|
||||
- OAuth credentials encrypted in OS keyring
|
||||
- Config dir: `~/.config/gws/`
|
||||
- Authenticated scopes: drive, gmail, calendar, sheets
|
||||
- Add `--dry-run` to any command to validate without sending
|
||||
- Introspect any API method: `gws schema sheets.spreadsheets.values.update`
|
||||
|
||||
## Output Formats
|
||||
|
||||
`--format json` (default) | `--format table` | `--format csv` | `--format yaml`
|
||||
|
||||
## Detailed Examples (load on demand)
|
||||
|
||||
| Product | File |
|
||||
|---------|------|
|
||||
| Sheets | `~/.claude/skills/gws/examples-sheets.md` — batch update/get, add/rename/delete tabs, formatting, freeze rows |
|
||||
| Drive | `~/.claude/skills/gws/examples-drive.md` — search, MIME filters, folder listing, pagination |
|
||||
| Gmail | `~/.claude/skills/gws/examples-gmail.md` — search filters, read messages |
|
||||
| Calendar | `~/.claude/skills/gws/examples-calendar.md` — date ranges, create events, all-day events |
|
||||
45
skills/gws/examples-calendar.md
Normal file
45
skills/gws/examples-calendar.md
Normal file
@ -0,0 +1,45 @@
|
||||
# GWS Calendar Examples & Reference
|
||||
|
||||
Load when working with Google Calendar.
|
||||
|
||||
## List Upcoming Events
|
||||
|
||||
```bash
|
||||
gws calendar events list --params '{"calendarId": "primary", "maxResults": 5}'
|
||||
```
|
||||
|
||||
## List Events in a Date Range
|
||||
|
||||
```bash
|
||||
gws calendar events list --params '{
|
||||
"calendarId": "primary",
|
||||
"timeMin": "2026-03-15T00:00:00Z",
|
||||
"timeMax": "2026-03-22T00:00:00Z",
|
||||
"singleEvents": true,
|
||||
"orderBy": "startTime"
|
||||
}'
|
||||
```
|
||||
|
||||
## Create an Event
|
||||
|
||||
```bash
|
||||
gws calendar events insert \
|
||||
--params '{"calendarId": "primary"}' \
|
||||
--json '{
|
||||
"summary": "Team Meeting",
|
||||
"start": {"dateTime": "2026-03-20T14:00:00-05:00"},
|
||||
"end": {"dateTime": "2026-03-20T15:00:00-05:00"}
|
||||
}'
|
||||
```
|
||||
|
||||
## Create an All-Day Event
|
||||
|
||||
```bash
|
||||
gws calendar events insert \
|
||||
--params '{"calendarId": "primary"}' \
|
||||
--json '{
|
||||
"summary": "Day Off",
|
||||
"start": {"date": "2026-03-20"},
|
||||
"end": {"date": "2026-03-21"}
|
||||
}'
|
||||
```
|
||||
41
skills/gws/examples-drive.md
Normal file
41
skills/gws/examples-drive.md
Normal file
@ -0,0 +1,41 @@
|
||||
# GWS Drive Examples & Reference
|
||||
|
||||
Load when working with Google Drive.
|
||||
|
||||
## List Files
|
||||
|
||||
```bash
|
||||
gws drive files list --params '{"pageSize": 10}'
|
||||
```
|
||||
|
||||
## Search by Name
|
||||
|
||||
```bash
|
||||
gws drive files list --params '{"q": "name contains \"keyword\""}'
|
||||
```
|
||||
|
||||
## Search by MIME Type
|
||||
|
||||
```bash
|
||||
# Find all spreadsheets
|
||||
gws drive files list --params '{"q": "mimeType=\"application/vnd.google-apps.spreadsheet\""}'
|
||||
|
||||
# Find all folders
|
||||
gws drive files list --params '{"q": "mimeType=\"application/vnd.google-apps.folder\""}'
|
||||
```
|
||||
|
||||
## List Files in a Specific Folder
|
||||
|
||||
```bash
|
||||
gws drive files list --params '{"q": "\"FOLDER_ID\" in parents"}'
|
||||
```
|
||||
|
||||
## Pagination
|
||||
|
||||
```bash
|
||||
# Auto-paginate (NDJSON, one line per page)
|
||||
gws drive files list --params '{"pageSize": 100}' --page-all
|
||||
|
||||
# Limit pages
|
||||
gws drive files list --params '{"pageSize": 100}' --page-all --page-limit 3
|
||||
```
|
||||
34
skills/gws/examples-gmail.md
Normal file
34
skills/gws/examples-gmail.md
Normal file
@ -0,0 +1,34 @@
|
||||
# GWS Gmail Examples & Reference
|
||||
|
||||
Load when working with Gmail.
|
||||
|
||||
## List Unread Messages
|
||||
|
||||
```bash
|
||||
gws gmail users messages list --params '{"userId": "me", "q": "is:unread"}'
|
||||
```
|
||||
|
||||
## Search with Filters
|
||||
|
||||
```bash
|
||||
# From a specific sender in the last week
|
||||
gws gmail users messages list --params '{"userId": "me", "q": "from:someone@example.com newer_than:7d"}'
|
||||
|
||||
# With attachment
|
||||
gws gmail users messages list --params '{"userId": "me", "q": "has:attachment filename:pdf"}'
|
||||
|
||||
# Labeled messages
|
||||
gws gmail users messages list --params '{"userId": "me", "q": "label:important"}'
|
||||
```
|
||||
|
||||
## Read a Message
|
||||
|
||||
```bash
|
||||
gws gmail users messages get --params '{"userId": "me", "id": "MESSAGE_ID"}'
|
||||
```
|
||||
|
||||
## Read Message (minimal format, faster)
|
||||
|
||||
```bash
|
||||
gws gmail users messages get --params '{"userId": "me", "id": "MESSAGE_ID", "format": "minimal"}'
|
||||
```
|
||||
136
skills/gws/examples-sheets.md
Normal file
136
skills/gws/examples-sheets.md
Normal file
@ -0,0 +1,136 @@
|
||||
# GWS Sheets Examples & Reference
|
||||
|
||||
Load when working with Google Sheets. Contains verbose JSON shapes and less common patterns.
|
||||
|
||||
## Batch Update (write to multiple ranges at once)
|
||||
|
||||
```bash
|
||||
gws sheets spreadsheets values batchUpdate \
|
||||
--params "{\"spreadsheetId\": \"$ID\", \"valueInputOption\": \"USER_ENTERED\"}" \
|
||||
--json '{
|
||||
"data": [
|
||||
{"range": "Sheet1\u0021A1:C1", "values": [["Header1", "Header2", "Header3"]]},
|
||||
{"range": "Sheet1\u0021A2:C4", "values": [
|
||||
["row1a", "row1b", "row1c"],
|
||||
["row2a", "row2b", "row2c"],
|
||||
["row3a", "row3b", "row3c"]
|
||||
]}
|
||||
]
|
||||
}'
|
||||
```
|
||||
|
||||
## Batch Get (read multiple ranges at once)
|
||||
|
||||
```bash
|
||||
gws sheets spreadsheets values batchGet \
|
||||
--params "{\"spreadsheetId\": \"$ID\", \"ranges\": [\"Sheet1\u0021A1:C1\", \"Sheet1\u0021A5:C10\"]}"
|
||||
```
|
||||
|
||||
## Get Spreadsheet Metadata (sheet names, grid size)
|
||||
|
||||
```bash
|
||||
gws sheets spreadsheets get \
|
||||
--params "{\"spreadsheetId\": \"$ID\", \"includeGridData\": false}"
|
||||
```
|
||||
|
||||
Useful to discover sheet names before reading/writing.
|
||||
|
||||
## Add a New Sheet Tab
|
||||
|
||||
```bash
|
||||
gws sheets spreadsheets batchUpdate \
|
||||
--params "{\"spreadsheetId\": \"$ID\"}" \
|
||||
--json '{
|
||||
"requests": [
|
||||
{"addSheet": {"properties": {"title": "NewTab", "index": 1}}}
|
||||
]
|
||||
}'
|
||||
```
|
||||
|
||||
## Delete a Sheet Tab
|
||||
|
||||
```bash
|
||||
# Get the sheetId first from spreadsheets get, then:
|
||||
gws sheets spreadsheets batchUpdate \
|
||||
--params "{\"spreadsheetId\": \"$ID\"}" \
|
||||
--json '{
|
||||
"requests": [
|
||||
{"deleteSheet": {"sheetId": 123456789}}
|
||||
]
|
||||
}'
|
||||
```
|
||||
|
||||
## Rename a Sheet Tab
|
||||
|
||||
```bash
|
||||
gws sheets spreadsheets batchUpdate \
|
||||
--params "{\"spreadsheetId\": \"$ID\"}" \
|
||||
--json '{
|
||||
"requests": [
|
||||
{"updateSheetProperties": {
|
||||
"properties": {"sheetId": 0, "title": "Draft Board"},
|
||||
"fields": "title"
|
||||
}}
|
||||
]
|
||||
}'
|
||||
```
|
||||
|
||||
## Auto-resize Columns
|
||||
|
||||
```bash
|
||||
gws sheets spreadsheets batchUpdate \
|
||||
--params "{\"spreadsheetId\": \"$ID\"}" \
|
||||
--json '{
|
||||
"requests": [
|
||||
{"autoResizeDimensions": {
|
||||
"dimensions": {
|
||||
"sheetId": 0,
|
||||
"dimension": "COLUMNS",
|
||||
"startIndex": 0,
|
||||
"endIndex": 10
|
||||
}
|
||||
}}
|
||||
]
|
||||
}'
|
||||
```
|
||||
|
||||
## Format Header Row (bold, background color)
|
||||
|
||||
```bash
|
||||
gws sheets spreadsheets batchUpdate \
|
||||
--params "{\"spreadsheetId\": \"$ID\"}" \
|
||||
--json '{
|
||||
"requests": [
|
||||
{
|
||||
"repeatCell": {
|
||||
"range": {"sheetId": 0, "startRowIndex": 0, "endRowIndex": 1},
|
||||
"cell": {
|
||||
"userEnteredFormat": {
|
||||
"backgroundColor": {"red": 0.2, "green": 0.4, "blue": 0.8},
|
||||
"textFormat": {"bold": true, "foregroundColor": {"red": 1, "green": 1, "blue": 1}}
|
||||
}
|
||||
},
|
||||
"fields": "userEnteredFormat(backgroundColor,textFormat)"
|
||||
}
|
||||
}
|
||||
]
|
||||
}'
|
||||
```
|
||||
|
||||
## Freeze Header Row
|
||||
|
||||
```bash
|
||||
gws sheets spreadsheets batchUpdate \
|
||||
--params "{\"spreadsheetId\": \"$ID\"}" \
|
||||
--json '{
|
||||
"requests": [
|
||||
{"updateSheetProperties": {
|
||||
"properties": {
|
||||
"sheetId": 0,
|
||||
"gridProperties": {"frozenRowCount": 1}
|
||||
},
|
||||
"fields": "gridProperties.frozenRowCount"
|
||||
}}
|
||||
]
|
||||
}'
|
||||
```
|
||||
Loading…
Reference in New Issue
Block a user