From 8d93e8ed6dadd306c2cf6562b453b7217a3944da Mon Sep 17 00:00:00 2001 From: Christoph Blecker Date: Wed, 6 May 2026 09:54:29 -0700 Subject: [PATCH] feat(gws)\!: remove recipe and persona skills, update sync workflow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removes 34 recipe skills and 5 persona skills (58% reduction, 67→28 skills) to eliminate low-value bloat. Recipes are 2–4 step procedures Claude can compose from existing service/helper skills; personas are thin wrappers that overlap heavily with each other. Updates gws-sync skill to filter recipe-* and persona-* from upstream output before diffing, preventing future syncs from re-introducing these categories. Also enables skill-creator plugin in project settings. Assisted-by: Claude:claude-sonnet-4-6[1m] --- .claude/settings.json | 3 +- .claude/skills/gws-sync.md | 27 +++++++++---- gws/.claude-plugin/plugin.json | 2 +- gws/README.md | 11 ----- gws/skills/persona-exec-assistant/SKILL.md | 35 ---------------- gws/skills/persona-it-admin/SKILL.md | 34 ---------------- gws/skills/persona-researcher/SKILL.md | 38 ------------------ gws/skills/persona-sales-ops/SKILL.md | 40 ------------------- gws/skills/persona-team-lead/SKILL.md | 36 ----------------- .../recipe-backup-sheet-as-csv/SKILL.md | 25 ------------ .../recipe-batch-invite-to-event/SKILL.md | 25 ------------ gws/skills/recipe-block-focus-time/SKILL.md | 24 ----------- .../recipe-bulk-download-folder/SKILL.md | 25 ------------ gws/skills/recipe-compare-sheet-tabs/SKILL.md | 25 ------------ .../recipe-copy-sheet-for-new-month/SKILL.md | 25 ------------ .../recipe-create-doc-from-template/SKILL.md | 29 -------------- .../recipe-create-events-from-sheet/SKILL.md | 24 ----------- .../recipe-create-expense-tracker/SKILL.md | 26 ------------ .../recipe-create-gmail-filter/SKILL.md | 26 ------------ gws/skills/recipe-create-meet-space/SKILL.md | 25 ------------ .../recipe-create-presentation/SKILL.md | 25 ------------ .../recipe-create-shared-drive/SKILL.md | 25 ------------ .../recipe-create-vacation-responder/SKILL.md | 25 ------------ .../recipe-draft-email-from-doc/SKILL.md | 25 ------------ gws/skills/recipe-email-drive-link/SKILL.md | 25 ------------ gws/skills/recipe-find-free-time/SKILL.md | 25 ------------ gws/skills/recipe-find-large-files/SKILL.md | 24 ----------- .../recipe-forward-labeled-emails/SKILL.md | 27 ------------- .../SKILL.md | 34 ---------------- .../recipe-label-and-archive-emails/SKILL.md | 25 ------------ gws/skills/recipe-log-deal-update/SKILL.md | 25 ------------ .../recipe-organize-drive-folder/SKILL.md | 26 ------------ .../recipe-plan-weekly-schedule/SKILL.md | 26 ------------ gws/skills/recipe-post-mortem-setup/SKILL.md | 25 ------------ gws/skills/recipe-reschedule-meeting/SKILL.md | 25 ------------ .../recipe-review-meet-participants/SKILL.md | 25 ------------ .../recipe-review-overdue-tasks/SKILL.md | 27 ------------- .../recipe-save-email-attachments/SKILL.md | 26 ------------ gws/skills/recipe-save-email-to-doc/SKILL.md | 29 -------------- .../recipe-schedule-recurring-event/SKILL.md | 24 ----------- .../recipe-share-doc-and-notify/SKILL.md | 25 ------------ .../recipe-share-event-materials/SKILL.md | 25 ------------ .../recipe-share-folder-with-team/SKILL.md | 26 ------------ 43 files changed, 22 insertions(+), 1077 deletions(-) delete mode 100644 gws/skills/persona-exec-assistant/SKILL.md delete mode 100644 gws/skills/persona-it-admin/SKILL.md delete mode 100644 gws/skills/persona-researcher/SKILL.md delete mode 100644 gws/skills/persona-sales-ops/SKILL.md delete mode 100644 gws/skills/persona-team-lead/SKILL.md delete mode 100644 gws/skills/recipe-backup-sheet-as-csv/SKILL.md delete mode 100644 gws/skills/recipe-batch-invite-to-event/SKILL.md delete mode 100644 gws/skills/recipe-block-focus-time/SKILL.md delete mode 100644 gws/skills/recipe-bulk-download-folder/SKILL.md delete mode 100644 gws/skills/recipe-compare-sheet-tabs/SKILL.md delete mode 100644 gws/skills/recipe-copy-sheet-for-new-month/SKILL.md delete mode 100644 gws/skills/recipe-create-doc-from-template/SKILL.md delete mode 100644 gws/skills/recipe-create-events-from-sheet/SKILL.md delete mode 100644 gws/skills/recipe-create-expense-tracker/SKILL.md delete mode 100644 gws/skills/recipe-create-gmail-filter/SKILL.md delete mode 100644 gws/skills/recipe-create-meet-space/SKILL.md delete mode 100644 gws/skills/recipe-create-presentation/SKILL.md delete mode 100644 gws/skills/recipe-create-shared-drive/SKILL.md delete mode 100644 gws/skills/recipe-create-vacation-responder/SKILL.md delete mode 100644 gws/skills/recipe-draft-email-from-doc/SKILL.md delete mode 100644 gws/skills/recipe-email-drive-link/SKILL.md delete mode 100644 gws/skills/recipe-find-free-time/SKILL.md delete mode 100644 gws/skills/recipe-find-large-files/SKILL.md delete mode 100644 gws/skills/recipe-forward-labeled-emails/SKILL.md delete mode 100644 gws/skills/recipe-generate-report-from-sheet/SKILL.md delete mode 100644 gws/skills/recipe-label-and-archive-emails/SKILL.md delete mode 100644 gws/skills/recipe-log-deal-update/SKILL.md delete mode 100644 gws/skills/recipe-organize-drive-folder/SKILL.md delete mode 100644 gws/skills/recipe-plan-weekly-schedule/SKILL.md delete mode 100644 gws/skills/recipe-post-mortem-setup/SKILL.md delete mode 100644 gws/skills/recipe-reschedule-meeting/SKILL.md delete mode 100644 gws/skills/recipe-review-meet-participants/SKILL.md delete mode 100644 gws/skills/recipe-review-overdue-tasks/SKILL.md delete mode 100644 gws/skills/recipe-save-email-attachments/SKILL.md delete mode 100644 gws/skills/recipe-save-email-to-doc/SKILL.md delete mode 100644 gws/skills/recipe-schedule-recurring-event/SKILL.md delete mode 100644 gws/skills/recipe-share-doc-and-notify/SKILL.md delete mode 100644 gws/skills/recipe-share-event-materials/SKILL.md delete mode 100644 gws/skills/recipe-share-folder-with-team/SKILL.md diff --git a/.claude/settings.json b/.claude/settings.json index 6ba2e93..15de29c 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -10,6 +10,7 @@ "ask": [] }, "enabledPlugins": { - "plugin-dev@claude-plugins-official": true + "plugin-dev@claude-plugins-official": true, + "skill-creator@claude-plugins-official": true } } diff --git a/.claude/skills/gws-sync.md b/.claude/skills/gws-sync.md index d65bc9f..615f872 100644 --- a/.claude/skills/gws-sync.md +++ b/.claude/skills/gws-sync.md @@ -17,7 +17,18 @@ GWS_TMP_DIR="$(mktemp -d)" gws generate-skills --output-dir "$GWS_TMP_DIR" ``` -### 2. Check current OAuth scopes +### 2. Filter upstream output + +Remove curated-out categories before diffing: + +```bash +rm -rf "$GWS_TMP_DIR"/recipe-* "$GWS_TMP_DIR"/persona-* +``` + +These categories are intentionally excluded: recipes are short step-by-step procedures +Claude can compose from service/helper skills; personas are thin wrappers that overlap heavily. + +### 3. Check current OAuth scopes ```bash gws auth status --format json @@ -40,11 +51,11 @@ Extract the `scopes` array. Map scopes to services: | `tasks` | Tasks | | `admin.reports` | Admin Reports | -### 3. Inventory current skills +### 4. Inventory current skills List all directories in `gws/skills/` to get the current vendored set. -### 4. Diff upstream vs current +### 5. Diff upstream vs current For each upstream skill directory: @@ -59,7 +70,7 @@ For each upstream skill directory: Always include `gws-shared` regardless of scopes (it has no service dependency). -### 5. Present findings +### 6. Present findings Use AskUserQuestion to present: - New scoped skills (recommended for inclusion) @@ -69,7 +80,7 @@ Use AskUserQuestion to present: Let the user select which to add/update/remove. -### 6. Apply changes +### 7. Apply changes For each selected skill: - Copy the `SKILL.md` from the upstream temp directory to `gws/skills//SKILL.md` @@ -77,16 +88,16 @@ For each selected skill: For removals, delete the skill directory from `gws/skills/`. -### 7. Bump version +### 8. Bump version After applying changes, bump the patch version in `gws/.claude-plugin/plugin.json`. -### 8. Cleanup +### 9. Cleanup ```bash rm -rf "${GWS_TMP_DIR:?}" ``` -### 9. Summary +### 10. Summary Report what was added, updated, and removed. diff --git a/gws/.claude-plugin/plugin.json b/gws/.claude-plugin/plugin.json index f4d1716..8734cda 100644 --- a/gws/.claude-plugin/plugin.json +++ b/gws/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "gws", - "version": "1.2.0", + "version": "2.0.0", "description": "Google Workspace CLI skills for Gmail, Calendar, Drive, Docs, Sheets, Slides, Meet, and Tasks", "author": { "name": "cblecker" diff --git a/gws/README.md b/gws/README.md index a50cf84..2a41715 100644 --- a/gws/README.md +++ b/gws/README.md @@ -42,17 +42,6 @@ Multi-step productivity workflows: - `gws-workflow-weekly-digest` - Weekly activity summary - `gws-workflow-file-announce` - Share files with notifications -### Personas - -Role-based skill bundles: - -- `persona-exec-assistant` - Executive assistant workflows -- `persona-team-lead` - Team leadership workflows - -### Recipes - -Pre-built task automations using scoped services (~33 recipes covering email management, calendar scheduling, document creation, spreadsheet operations, and more). - ## Updating Skills To sync with the latest upstream `gws` skills: diff --git a/gws/skills/persona-exec-assistant/SKILL.md b/gws/skills/persona-exec-assistant/SKILL.md deleted file mode 100644 index f0aed66..0000000 --- a/gws/skills/persona-exec-assistant/SKILL.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -name: persona-exec-assistant -version: 1.0.0 -description: "Manage an executive's schedule, inbox, and communications." -metadata: - openclaw: - category: "persona" - requires: - bins: ["gws"] - skills: ["gws-gmail", "gws-calendar", "gws-drive", "gws-chat"] ---- - -# Executive Assistant - -> **PREREQUISITE:** Load the following utility skills to operate as this persona: `gws-gmail`, `gws-calendar`, `gws-drive`, `gws-chat` - -Manage an executive's schedule, inbox, and communications. - -## Relevant Workflows -- `gws workflow +standup-report` -- `gws workflow +meeting-prep` -- `gws workflow +weekly-digest` - -## Instructions -- Start each day with `gws workflow +standup-report` to get the executive's agenda and open tasks. -- Before each meeting, run `gws workflow +meeting-prep` to see attendees, description, and linked docs. -- Triage the inbox with `gws gmail +triage --max 10` — prioritize emails from direct reports and leadership. -- Schedule meetings with `gws calendar +insert` — always check for conflicts first using `gws calendar +agenda`. -- Draft replies with `gws gmail +send` — keep tone professional and concise. - -## Tips -- Always confirm calendar changes with the executive before committing. -- Use `--format table` for quick visual scans of agenda and triage output. -- Check `gws calendar +agenda --week` on Monday mornings for weekly planning. - diff --git a/gws/skills/persona-it-admin/SKILL.md b/gws/skills/persona-it-admin/SKILL.md deleted file mode 100644 index 270fdef..0000000 --- a/gws/skills/persona-it-admin/SKILL.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -name: persona-it-admin -description: "Administer IT — monitor security and configure Workspace." -metadata: - version: 0.22.5 - openclaw: - category: "persona" - requires: - bins: - - gws - skills: - - gws-gmail - - gws-drive - - gws-calendar ---- - -# IT Administrator - -> **PREREQUISITE:** Load the following utility skills to operate as this persona: `gws-gmail`, `gws-drive`, `gws-calendar` - -Administer IT — monitor security and configure Workspace. - -## Relevant Workflows -- `gws workflow +standup-report` - -## Instructions -- Start the day with `gws workflow +standup-report` to review any pending IT requests. -- Monitor suspicious login activity and review audit logs. -- Configure Drive sharing policies to enforce organizational security. - -## Tips -- Always use `--dry-run` before bulk operations. -- Review `gws auth status` regularly to verify service account permissions. - diff --git a/gws/skills/persona-researcher/SKILL.md b/gws/skills/persona-researcher/SKILL.md deleted file mode 100644 index ef0068c..0000000 --- a/gws/skills/persona-researcher/SKILL.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -name: persona-researcher -description: "Organize research — manage references, notes, and collaboration." -metadata: - version: 0.22.5 - openclaw: - category: "persona" - requires: - bins: - - gws - skills: - - gws-drive - - gws-docs - - gws-sheets - - gws-gmail ---- - -# Researcher - -> **PREREQUISITE:** Load the following utility skills to operate as this persona: `gws-drive`, `gws-docs`, `gws-sheets`, `gws-gmail` - -Organize research — manage references, notes, and collaboration. - -## Relevant Workflows -- `gws workflow +file-announce` - -## Instructions -- Organize research papers and notes in Drive folders. -- Write research notes and summaries with `gws docs +write`. -- Track research data in Sheets — use `gws sheets +append` for data logging. -- Share findings with collaborators via `gws workflow +file-announce`. -- Request peer reviews via `gws gmail +send`. - -## Tips -- Use `gws drive files list` with search queries to find specific documents. -- Keep a running log of experiments and findings in a shared Sheet. -- Use `--format csv` when exporting data for analysis tools. - diff --git a/gws/skills/persona-sales-ops/SKILL.md b/gws/skills/persona-sales-ops/SKILL.md deleted file mode 100644 index b22f755..0000000 --- a/gws/skills/persona-sales-ops/SKILL.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -name: persona-sales-ops -description: "Manage sales workflows — track deals, schedule calls, client comms." -metadata: - version: 0.22.5 - openclaw: - category: "persona" - requires: - bins: - - gws - skills: - - gws-gmail - - gws-calendar - - gws-sheets - - gws-drive ---- - -# Sales Operations - -> **PREREQUISITE:** Load the following utility skills to operate as this persona: `gws-gmail`, `gws-calendar`, `gws-sheets`, `gws-drive` - -Manage sales workflows — track deals, schedule calls, client comms. - -## Relevant Workflows -- `gws workflow +meeting-prep` -- `gws workflow +email-to-task` -- `gws workflow +weekly-digest` - -## Instructions -- Prepare for client calls with `gws workflow +meeting-prep` to review attendees and agenda. -- Log deal updates in a tracking spreadsheet with `gws sheets +append`. -- Convert follow-up emails into tasks with `gws workflow +email-to-task`. -- Share proposals by uploading to Drive with `gws drive +upload`. -- Get a weekly sales pipeline summary with `gws workflow +weekly-digest`. - -## Tips -- Use `gws gmail +triage --query 'from:client-domain.com'` to filter client emails. -- Schedule follow-up calls immediately after meetings to maintain momentum. -- Keep all client-facing documents in a dedicated shared Drive folder. - diff --git a/gws/skills/persona-team-lead/SKILL.md b/gws/skills/persona-team-lead/SKILL.md deleted file mode 100644 index e4758ff..0000000 --- a/gws/skills/persona-team-lead/SKILL.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -name: persona-team-lead -version: 1.0.0 -description: "Lead a team — run standups, coordinate tasks, and communicate." -metadata: - openclaw: - category: "persona" - requires: - bins: ["gws"] - skills: ["gws-calendar", "gws-gmail", "gws-chat", "gws-drive", "gws-sheets"] ---- - -# Team Lead - -> **PREREQUISITE:** Load the following utility skills to operate as this persona: `gws-calendar`, `gws-gmail`, `gws-chat`, `gws-drive`, `gws-sheets` - -Lead a team — run standups, coordinate tasks, and communicate. - -## Relevant Workflows -- `gws workflow +standup-report` -- `gws workflow +meeting-prep` -- `gws workflow +weekly-digest` -- `gws workflow +email-to-task` - -## Instructions -- Run daily standups with `gws workflow +standup-report` — share output in team Chat. -- Prepare for 1:1s with `gws workflow +meeting-prep`. -- Get weekly snapshots with `gws workflow +weekly-digest`. -- Delegate email action items with `gws workflow +email-to-task`. -- Track team OKRs in a shared Sheet with `gws sheets +append`. - -## Tips -- Use `gws calendar +agenda --week --format table` for weekly team calendar views. -- Pipe standup reports to Chat with `gws chat spaces messages create`. -- Use `--sanitize` for any operations involving sensitive team data. - diff --git a/gws/skills/recipe-backup-sheet-as-csv/SKILL.md b/gws/skills/recipe-backup-sheet-as-csv/SKILL.md deleted file mode 100644 index 1656e64..0000000 --- a/gws/skills/recipe-backup-sheet-as-csv/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: recipe-backup-sheet-as-csv -version: 1.0.0 -description: "Export a Google Sheets spreadsheet as a CSV file for local backup or processing." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-sheets", "gws-drive"] ---- - -# Export a Google Sheet as CSV - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-sheets`, `gws-drive` - -Export a Google Sheets spreadsheet as a CSV file for local backup or processing. - -## Steps - -1. Get spreadsheet details: `gws sheets spreadsheets get --params '{"spreadsheetId": "SHEET_ID"}'` -2. Export as CSV: `gws drive files export --params '{"fileId": "SHEET_ID", "mimeType": "text/csv"}'` -3. Or read values directly: `gws sheets +read --spreadsheet SHEET_ID --range 'Sheet1' --format csv` - diff --git a/gws/skills/recipe-batch-invite-to-event/SKILL.md b/gws/skills/recipe-batch-invite-to-event/SKILL.md deleted file mode 100644 index 73333f5..0000000 --- a/gws/skills/recipe-batch-invite-to-event/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: recipe-batch-invite-to-event -version: 1.0.0 -description: "Add a list of attendees to an existing Google Calendar event and send notifications." -metadata: - openclaw: - category: "recipe" - domain: "scheduling" - requires: - bins: ["gws"] - skills: ["gws-calendar"] ---- - -# Add Multiple Attendees to a Calendar Event - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar` - -Add a list of attendees to an existing Google Calendar event and send notifications. - -## Steps - -1. Get the event: `gws calendar events get --params '{"calendarId": "primary", "eventId": "EVENT_ID"}'` -2. Add attendees: `gws calendar events patch --params '{"calendarId": "primary", "eventId": "EVENT_ID", "sendUpdates": "all"}' --json '{"attendees": [{"email": "alice@company.com"}, {"email": "bob@company.com"}, {"email": "carol@company.com"}]}'` -3. Verify attendees: `gws calendar events get --params '{"calendarId": "primary", "eventId": "EVENT_ID"}'` - diff --git a/gws/skills/recipe-block-focus-time/SKILL.md b/gws/skills/recipe-block-focus-time/SKILL.md deleted file mode 100644 index c2798dc..0000000 --- a/gws/skills/recipe-block-focus-time/SKILL.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: recipe-block-focus-time -version: 1.0.0 -description: "Create recurring focus time blocks on Google Calendar to protect deep work hours." -metadata: - openclaw: - category: "recipe" - domain: "scheduling" - requires: - bins: ["gws"] - skills: ["gws-calendar"] ---- - -# Block Focus Time on Google Calendar - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar` - -Create recurring focus time blocks on Google Calendar to protect deep work hours. - -## Steps - -1. Create recurring focus block: `gws calendar events insert --params '{"calendarId": "primary"}' --json '{"summary": "Focus Time", "description": "Protected deep work block", "start": {"dateTime": "2025-01-20T09:00:00", "timeZone": "America/New_York"}, "end": {"dateTime": "2025-01-20T11:00:00", "timeZone": "America/New_York"}, "recurrence": ["RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR"], "transparency": "opaque"}'` -2. Verify it shows as busy: `gws calendar +agenda` - diff --git a/gws/skills/recipe-bulk-download-folder/SKILL.md b/gws/skills/recipe-bulk-download-folder/SKILL.md deleted file mode 100644 index d45d0a0..0000000 --- a/gws/skills/recipe-bulk-download-folder/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: recipe-bulk-download-folder -version: 1.0.0 -description: "List and download all files from a Google Drive folder." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-drive"] ---- - -# Bulk Download Drive Folder - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive` - -List and download all files from a Google Drive folder. - -## Steps - -1. List files in folder: `gws drive files list --params '{"q": "'\''FOLDER_ID'\'' in parents"}' --format json` -2. Download each file: `gws drive files get --params '{"fileId": "FILE_ID", "alt": "media"}' -o filename.ext` -3. Export Google Docs as PDF: `gws drive files export --params '{"fileId": "FILE_ID", "mimeType": "application/pdf"}' -o document.pdf` - diff --git a/gws/skills/recipe-compare-sheet-tabs/SKILL.md b/gws/skills/recipe-compare-sheet-tabs/SKILL.md deleted file mode 100644 index c176702..0000000 --- a/gws/skills/recipe-compare-sheet-tabs/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: recipe-compare-sheet-tabs -version: 1.0.0 -description: "Read data from two tabs in a Google Sheet to compare and identify differences." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-sheets"] ---- - -# Compare Two Google Sheets Tabs - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-sheets` - -Read data from two tabs in a Google Sheet to compare and identify differences. - -## Steps - -1. Read the first tab: `gws sheets +read --spreadsheet SHEET_ID --range "January!A1:D"` -2. Read the second tab: `gws sheets +read --spreadsheet SHEET_ID --range "February!A1:D"` -3. Compare the data and identify changes - diff --git a/gws/skills/recipe-copy-sheet-for-new-month/SKILL.md b/gws/skills/recipe-copy-sheet-for-new-month/SKILL.md deleted file mode 100644 index cb93b68..0000000 --- a/gws/skills/recipe-copy-sheet-for-new-month/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: recipe-copy-sheet-for-new-month -version: 1.0.0 -description: "Duplicate a Google Sheets template tab for a new month of tracking." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-sheets"] ---- - -# Copy a Google Sheet for a New Month - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-sheets` - -Duplicate a Google Sheets template tab for a new month of tracking. - -## Steps - -1. Get spreadsheet details: `gws sheets spreadsheets get --params '{"spreadsheetId": "SHEET_ID"}'` -2. Copy the template sheet: `gws sheets spreadsheets sheets copyTo --params '{"spreadsheetId": "SHEET_ID", "sheetId": 0}' --json '{"destinationSpreadsheetId": "SHEET_ID"}'` -3. Rename the new tab: `gws sheets spreadsheets batchUpdate --params '{"spreadsheetId": "SHEET_ID"}' --json '{"requests": [{"updateSheetProperties": {"properties": {"sheetId": 123, "title": "February 2025"}, "fields": "title"}}]}'` - diff --git a/gws/skills/recipe-create-doc-from-template/SKILL.md b/gws/skills/recipe-create-doc-from-template/SKILL.md deleted file mode 100644 index dd92337..0000000 --- a/gws/skills/recipe-create-doc-from-template/SKILL.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -name: recipe-create-doc-from-template -version: 1.0.0 -description: "Copy a Google Docs template, fill in content, and share with collaborators." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-drive", "gws-docs"] ---- - -# Create a Google Doc from a Template - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive`, `gws-docs` - -Copy a Google Docs template, fill in content, and share with collaborators. - -## Steps - -1. Copy the template: `gws drive files copy --params '{"fileId": "TEMPLATE_DOC_ID"}' --json '{"name": "Project Brief - Q2 Launch"}'` -2. Get the new doc ID from the response -3. Add content: `gws docs +write --document-id NEW_DOC_ID --text '## Project: Q2 Launch - -### Objective -Launch the new feature by end of Q2.'` -4. Share with team: `gws drive permissions create --params '{"fileId": "NEW_DOC_ID"}' --json '{"role": "writer", "type": "user", "emailAddress": "team@company.com"}'` - diff --git a/gws/skills/recipe-create-events-from-sheet/SKILL.md b/gws/skills/recipe-create-events-from-sheet/SKILL.md deleted file mode 100644 index 3a65181..0000000 --- a/gws/skills/recipe-create-events-from-sheet/SKILL.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: recipe-create-events-from-sheet -version: 1.0.0 -description: "Read event data from a Google Sheets spreadsheet and create Google Calendar entries for each row." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-sheets", "gws-calendar"] ---- - -# Create Google Calendar Events from a Sheet - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-sheets`, `gws-calendar` - -Read event data from a Google Sheets spreadsheet and create Google Calendar entries for each row. - -## Steps - -1. Read event data: `gws sheets +read --spreadsheet SHEET_ID --range "Events!A2:D"` -2. For each row, create a calendar event: `gws calendar +insert --summary 'Team Standup' --start '2026-01-20T09:00:00' --end '2026-01-20T09:30:00' --attendee alice@company.com --attendee bob@company.com` - diff --git a/gws/skills/recipe-create-expense-tracker/SKILL.md b/gws/skills/recipe-create-expense-tracker/SKILL.md deleted file mode 100644 index 85ada2d..0000000 --- a/gws/skills/recipe-create-expense-tracker/SKILL.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -name: recipe-create-expense-tracker -version: 1.0.0 -description: "Set up a Google Sheets spreadsheet for tracking expenses with headers and initial entries." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-sheets", "gws-drive"] ---- - -# Create a Google Sheets Expense Tracker - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-sheets`, `gws-drive` - -Set up a Google Sheets spreadsheet for tracking expenses with headers and initial entries. - -## Steps - -1. Create spreadsheet: `gws drive files create --json '{"name": "Expense Tracker 2025", "mimeType": "application/vnd.google-apps.spreadsheet"}'` -2. Add headers: `gws sheets +append --spreadsheet SHEET_ID --range 'Sheet1' --values '["Date", "Category", "Description", "Amount"]'` -3. Add first entry: `gws sheets +append --spreadsheet SHEET_ID --range 'Sheet1' --values '["2025-01-15", "Travel", "Flight to NYC", "450.00"]'` -4. Share with manager: `gws drive permissions create --params '{"fileId": "SHEET_ID"}' --json '{"role": "reader", "type": "user", "emailAddress": "manager@company.com"}'` - diff --git a/gws/skills/recipe-create-gmail-filter/SKILL.md b/gws/skills/recipe-create-gmail-filter/SKILL.md deleted file mode 100644 index cadbe00..0000000 --- a/gws/skills/recipe-create-gmail-filter/SKILL.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -name: recipe-create-gmail-filter -version: 1.0.0 -description: "Create a Gmail filter to automatically label, star, or categorize incoming messages." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-gmail"] ---- - -# Create a Gmail Filter - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-gmail` - -Create a Gmail filter to automatically label, star, or categorize incoming messages. - -## Steps - -1. List existing labels: `gws gmail users labels list --params '{"userId": "me"}' --format table` -2. Create a new label: `gws gmail users labels create --params '{"userId": "me"}' --json '{"name": "Receipts"}'` -3. Create a filter: `gws gmail users settings filters create --params '{"userId": "me"}' --json '{"criteria": {"from": "receipts@example.com"}, "action": {"addLabelIds": ["LABEL_ID"], "removeLabelIds": ["INBOX"]}}'` -4. Verify filter: `gws gmail users settings filters list --params '{"userId": "me"}' --format table` - diff --git a/gws/skills/recipe-create-meet-space/SKILL.md b/gws/skills/recipe-create-meet-space/SKILL.md deleted file mode 100644 index beb2a90..0000000 --- a/gws/skills/recipe-create-meet-space/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: recipe-create-meet-space -version: 1.0.0 -description: "Create a Google Meet meeting space and share the join link." -metadata: - openclaw: - category: "recipe" - domain: "scheduling" - requires: - bins: ["gws"] - skills: ["gws-meet", "gws-gmail"] ---- - -# Create a Google Meet Conference - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-meet`, `gws-gmail` - -Create a Google Meet meeting space and share the join link. - -## Steps - -1. Create meeting space: `gws meet spaces create --json '{"config": {"accessType": "OPEN"}}'` -2. Copy the meeting URI from the response -3. Email the link: `gws gmail +send --to team@company.com --subject 'Join the meeting' --body 'Join here: MEETING_URI'` - diff --git a/gws/skills/recipe-create-presentation/SKILL.md b/gws/skills/recipe-create-presentation/SKILL.md deleted file mode 100644 index e0ed136..0000000 --- a/gws/skills/recipe-create-presentation/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: recipe-create-presentation -version: 1.0.0 -description: "Create a new Google Slides presentation and add initial slides." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-slides"] ---- - -# Create a Google Slides Presentation - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-slides` - -Create a new Google Slides presentation and add initial slides. - -## Steps - -1. Create presentation: `gws slides presentations create --json '{"title": "Quarterly Review Q2"}'` -2. Get the presentation ID from the response -3. Share with team: `gws drive permissions create --params '{"fileId": "PRESENTATION_ID"}' --json '{"role": "writer", "type": "user", "emailAddress": "team@company.com"}'` - diff --git a/gws/skills/recipe-create-shared-drive/SKILL.md b/gws/skills/recipe-create-shared-drive/SKILL.md deleted file mode 100644 index 1e89c4c..0000000 --- a/gws/skills/recipe-create-shared-drive/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: recipe-create-shared-drive -version: 1.0.0 -description: "Create a Google Shared Drive and add members with appropriate roles." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-drive"] ---- - -# Create and Configure a Shared Drive - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive` - -Create a Google Shared Drive and add members with appropriate roles. - -## Steps - -1. Create shared drive: `gws drive drives create --params '{"requestId": "unique-id-123"}' --json '{"name": "Project X"}'` -2. Add a member: `gws drive permissions create --params '{"fileId": "DRIVE_ID", "supportsAllDrives": true}' --json '{"role": "writer", "type": "user", "emailAddress": "member@company.com"}'` -3. List members: `gws drive permissions list --params '{"fileId": "DRIVE_ID", "supportsAllDrives": true}'` - diff --git a/gws/skills/recipe-create-vacation-responder/SKILL.md b/gws/skills/recipe-create-vacation-responder/SKILL.md deleted file mode 100644 index 9f279b4..0000000 --- a/gws/skills/recipe-create-vacation-responder/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: recipe-create-vacation-responder -version: 1.0.0 -description: "Enable a Gmail out-of-office auto-reply with a custom message and date range." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-gmail"] ---- - -# Set Up a Gmail Vacation Responder - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-gmail` - -Enable a Gmail out-of-office auto-reply with a custom message and date range. - -## Steps - -1. Enable vacation responder: `gws gmail users settings updateVacation --params '{"userId": "me"}' --json '{"enableAutoReply": true, "responseSubject": "Out of Office", "responseBodyPlainText": "I am out of the office until Jan 20. For urgent matters, contact backup@company.com.", "restrictToContacts": false, "restrictToDomain": false}'` -2. Verify settings: `gws gmail users settings getVacation --params '{"userId": "me"}'` -3. Disable when back: `gws gmail users settings updateVacation --params '{"userId": "me"}' --json '{"enableAutoReply": false}'` - diff --git a/gws/skills/recipe-draft-email-from-doc/SKILL.md b/gws/skills/recipe-draft-email-from-doc/SKILL.md deleted file mode 100644 index 7b5cad5..0000000 --- a/gws/skills/recipe-draft-email-from-doc/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: recipe-draft-email-from-doc -version: 1.0.0 -description: "Read content from a Google Doc and use it as the body of a Gmail message." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-docs", "gws-gmail"] ---- - -# Draft a Gmail Message from a Google Doc - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-docs`, `gws-gmail` - -Read content from a Google Doc and use it as the body of a Gmail message. - -## Steps - -1. Get the document content: `gws docs documents get --params '{"documentId": "DOC_ID"}'` -2. Copy the text from the body content -3. Send the email: `gws gmail +send --to recipient@example.com --subject 'Newsletter Update' --body 'CONTENT_FROM_DOC'` - diff --git a/gws/skills/recipe-email-drive-link/SKILL.md b/gws/skills/recipe-email-drive-link/SKILL.md deleted file mode 100644 index d672a44..0000000 --- a/gws/skills/recipe-email-drive-link/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: recipe-email-drive-link -version: 1.0.0 -description: "Share a Google Drive file and email the link with a message to recipients." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-drive", "gws-gmail"] ---- - -# Email a Google Drive File Link - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive`, `gws-gmail` - -Share a Google Drive file and email the link with a message to recipients. - -## Steps - -1. Find the file: `gws drive files list --params '{"q": "name = '\''Quarterly Report'\''"}'` -2. Share the file: `gws drive permissions create --params '{"fileId": "FILE_ID"}' --json '{"role": "reader", "type": "user", "emailAddress": "client@example.com"}'` -3. Email the link: `gws gmail +send --to client@example.com --subject 'Quarterly Report' --body 'Hi, please find the report here: https://docs.google.com/document/d/FILE_ID'` - diff --git a/gws/skills/recipe-find-free-time/SKILL.md b/gws/skills/recipe-find-free-time/SKILL.md deleted file mode 100644 index eb9bcaf..0000000 --- a/gws/skills/recipe-find-free-time/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: recipe-find-free-time -version: 1.0.0 -description: "Query Google Calendar free/busy status for multiple users to find a meeting slot." -metadata: - openclaw: - category: "recipe" - domain: "scheduling" - requires: - bins: ["gws"] - skills: ["gws-calendar"] ---- - -# Find Free Time Across Calendars - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar` - -Query Google Calendar free/busy status for multiple users to find a meeting slot. - -## Steps - -1. Query free/busy: `gws calendar freebusy query --json '{"timeMin": "2024-03-18T08:00:00Z", "timeMax": "2024-03-18T18:00:00Z", "items": [{"id": "user1@company.com"}, {"id": "user2@company.com"}]}'` -2. Review the output to find overlapping free slots -3. Create event in the free slot: `gws calendar +insert --summary 'Meeting' --attendee user1@company.com --attendee user2@company.com --start '2024-03-18T14:00:00' --end '2024-03-18T14:30:00'` - diff --git a/gws/skills/recipe-find-large-files/SKILL.md b/gws/skills/recipe-find-large-files/SKILL.md deleted file mode 100644 index 433d9e7..0000000 --- a/gws/skills/recipe-find-large-files/SKILL.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: recipe-find-large-files -version: 1.0.0 -description: "Identify large Google Drive files consuming storage quota." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-drive"] ---- - -# Find Largest Files in Drive - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive` - -Identify large Google Drive files consuming storage quota. - -## Steps - -1. List files sorted by size: `gws drive files list --params '{"orderBy": "quotaBytesUsed desc", "pageSize": 20, "fields": "files(id,name,size,mimeType,owners)"}' --format table` -2. Review the output and identify files to archive or move - diff --git a/gws/skills/recipe-forward-labeled-emails/SKILL.md b/gws/skills/recipe-forward-labeled-emails/SKILL.md deleted file mode 100644 index 5f0cb98..0000000 --- a/gws/skills/recipe-forward-labeled-emails/SKILL.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -name: recipe-forward-labeled-emails -version: 1.0.0 -description: "Find Gmail messages with a specific label and forward them to another address." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-gmail"] ---- - -# Forward Labeled Gmail Messages - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-gmail` - -Find Gmail messages with a specific label and forward them to another address. - -## Steps - -1. Find labeled messages: `gws gmail users messages list --params '{"userId": "me", "q": "label:needs-review"}' --format table` -2. Get message content: `gws gmail users messages get --params '{"userId": "me", "id": "MSG_ID"}'` -3. Forward via new email: `gws gmail +send --to manager@company.com --subject 'FW: [Original Subject]' --body 'Forwarding for your review: - -[Original Message Body]'` - diff --git a/gws/skills/recipe-generate-report-from-sheet/SKILL.md b/gws/skills/recipe-generate-report-from-sheet/SKILL.md deleted file mode 100644 index 12eb165..0000000 --- a/gws/skills/recipe-generate-report-from-sheet/SKILL.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -name: recipe-generate-report-from-sheet -version: 1.0.0 -description: "Read data from a Google Sheet and create a formatted Google Docs report." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-sheets", "gws-docs", "gws-drive"] ---- - -# Generate a Google Docs Report from Sheet Data - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-sheets`, `gws-docs`, `gws-drive` - -Read data from a Google Sheet and create a formatted Google Docs report. - -## Steps - -1. Read the data: `gws sheets +read --spreadsheet SHEET_ID --range "Sales!A1:D"` -2. Create the report doc: `gws docs documents create --json '{"title": "Sales Report - January 2025"}'` -3. Write the report: `gws docs +write --document-id DOC_ID --text '## Sales Report - January 2025 - -### Summary -Total deals: 45 -Revenue: $125,000 - -### Top Deals -1. Acme Corp - $25,000 -2. Widget Inc - $18,000'` -4. Share with stakeholders: `gws drive permissions create --params '{"fileId": "DOC_ID"}' --json '{"role": "reader", "type": "user", "emailAddress": "cfo@company.com"}'` - diff --git a/gws/skills/recipe-label-and-archive-emails/SKILL.md b/gws/skills/recipe-label-and-archive-emails/SKILL.md deleted file mode 100644 index e2071ac..0000000 --- a/gws/skills/recipe-label-and-archive-emails/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: recipe-label-and-archive-emails -version: 1.0.0 -description: "Apply Gmail labels to matching messages and archive them to keep your inbox clean." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-gmail"] ---- - -# Label and Archive Gmail Threads - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-gmail` - -Apply Gmail labels to matching messages and archive them to keep your inbox clean. - -## Steps - -1. Search for matching emails: `gws gmail users messages list --params '{"userId": "me", "q": "from:notifications@service.com"}' --format table` -2. Apply a label: `gws gmail users messages modify --params '{"userId": "me", "id": "MESSAGE_ID"}' --json '{"addLabelIds": ["LABEL_ID"]}'` -3. Archive (remove from inbox): `gws gmail users messages modify --params '{"userId": "me", "id": "MESSAGE_ID"}' --json '{"removeLabelIds": ["INBOX"]}'` - diff --git a/gws/skills/recipe-log-deal-update/SKILL.md b/gws/skills/recipe-log-deal-update/SKILL.md deleted file mode 100644 index e3c8e8b..0000000 --- a/gws/skills/recipe-log-deal-update/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: recipe-log-deal-update -version: 1.0.0 -description: "Append a deal status update to a Google Sheets sales tracking spreadsheet." -metadata: - openclaw: - category: "recipe" - domain: "sales" - requires: - bins: ["gws"] - skills: ["gws-sheets", "gws-drive"] ---- - -# Log Deal Update to Sheet - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-sheets`, `gws-drive` - -Append a deal status update to a Google Sheets sales tracking spreadsheet. - -## Steps - -1. Find the tracking sheet: `gws drive files list --params '{"q": "name = '\''Sales Pipeline'\'' and mimeType = '\''application/vnd.google-apps.spreadsheet'\''"}'` -2. Read current data: `gws sheets +read --spreadsheet SHEET_ID --range "Pipeline!A1:F"` -3. Append new row: `gws sheets +append --spreadsheet SHEET_ID --range 'Pipeline' --values '["2024-03-15", "Acme Corp", "Proposal Sent", "$50,000", "Q2", "jdoe"]'` - diff --git a/gws/skills/recipe-organize-drive-folder/SKILL.md b/gws/skills/recipe-organize-drive-folder/SKILL.md deleted file mode 100644 index 33195f6..0000000 --- a/gws/skills/recipe-organize-drive-folder/SKILL.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -name: recipe-organize-drive-folder -version: 1.0.0 -description: "Create a Google Drive folder structure and move files into the right locations." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-drive"] ---- - -# Organize Files into Google Drive Folders - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive` - -Create a Google Drive folder structure and move files into the right locations. - -## Steps - -1. Create a project folder: `gws drive files create --json '{"name": "Q2 Project", "mimeType": "application/vnd.google-apps.folder"}'` -2. Create sub-folders: `gws drive files create --json '{"name": "Documents", "mimeType": "application/vnd.google-apps.folder", "parents": ["PARENT_FOLDER_ID"]}'` -3. Move existing files into folder: `gws drive files update --params '{"fileId": "FILE_ID", "addParents": "FOLDER_ID", "removeParents": "OLD_PARENT_ID"}'` -4. Verify structure: `gws drive files list --params '{"q": "FOLDER_ID in parents"}' --format table` - diff --git a/gws/skills/recipe-plan-weekly-schedule/SKILL.md b/gws/skills/recipe-plan-weekly-schedule/SKILL.md deleted file mode 100644 index 0b05888..0000000 --- a/gws/skills/recipe-plan-weekly-schedule/SKILL.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -name: recipe-plan-weekly-schedule -version: 1.0.0 -description: "Review your Google Calendar week, identify gaps, and add events to fill them." -metadata: - openclaw: - category: "recipe" - domain: "scheduling" - requires: - bins: ["gws"] - skills: ["gws-calendar"] ---- - -# Plan Your Weekly Google Calendar Schedule - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar` - -Review your Google Calendar week, identify gaps, and add events to fill them. - -## Steps - -1. Check this week's agenda: `gws calendar +agenda` -2. Check free/busy for the week: `gws calendar freebusy query --json '{"timeMin": "2025-01-20T00:00:00Z", "timeMax": "2025-01-25T00:00:00Z", "items": [{"id": "primary"}]}'` -3. Add a new event: `gws calendar +insert --summary 'Deep Work Block' --start '2026-01-21T14:00:00' --end '2026-01-21T16:00:00'` -4. Review updated schedule: `gws calendar +agenda` - diff --git a/gws/skills/recipe-post-mortem-setup/SKILL.md b/gws/skills/recipe-post-mortem-setup/SKILL.md deleted file mode 100644 index 7c5990f..0000000 --- a/gws/skills/recipe-post-mortem-setup/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: recipe-post-mortem-setup -version: 1.0.0 -description: "Create a Google Docs post-mortem, schedule a Google Calendar review, and notify via Chat." -metadata: - openclaw: - category: "recipe" - domain: "engineering" - requires: - bins: ["gws"] - skills: ["gws-docs", "gws-calendar", "gws-chat"] ---- - -# Set Up Post-Mortem - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-docs`, `gws-calendar`, `gws-chat` - -Create a Google Docs post-mortem, schedule a Google Calendar review, and notify via Chat. - -## Steps - -1. Create post-mortem doc: `gws docs +write --title 'Post-Mortem: [Incident]' --body '## Summary\n\n## Timeline\n\n## Root Cause\n\n## Action Items'` -2. Schedule review meeting: `gws calendar +insert --summary 'Post-Mortem Review: [Incident]' --attendee team@company.com --start '2026-03-16T14:00:00' --end '2026-03-16T15:00:00'` -3. Notify in Chat: `gws chat +send --space spaces/ENG_SPACE --text '🔍 Post-mortem scheduled for [Incident].'` - diff --git a/gws/skills/recipe-reschedule-meeting/SKILL.md b/gws/skills/recipe-reschedule-meeting/SKILL.md deleted file mode 100644 index 2b6f775..0000000 --- a/gws/skills/recipe-reschedule-meeting/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: recipe-reschedule-meeting -version: 1.0.0 -description: "Move a Google Calendar event to a new time and automatically notify all attendees." -metadata: - openclaw: - category: "recipe" - domain: "scheduling" - requires: - bins: ["gws"] - skills: ["gws-calendar"] ---- - -# Reschedule a Google Calendar Meeting - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar` - -Move a Google Calendar event to a new time and automatically notify all attendees. - -## Steps - -1. Find the event: `gws calendar +agenda` -2. Get event details: `gws calendar events get --params '{"calendarId": "primary", "eventId": "EVENT_ID"}'` -3. Update the time: `gws calendar events patch --params '{"calendarId": "primary", "eventId": "EVENT_ID", "sendUpdates": "all"}' --json '{"start": {"dateTime": "2025-01-22T14:00:00", "timeZone": "America/New_York"}, "end": {"dateTime": "2025-01-22T15:00:00", "timeZone": "America/New_York"}}'` - diff --git a/gws/skills/recipe-review-meet-participants/SKILL.md b/gws/skills/recipe-review-meet-participants/SKILL.md deleted file mode 100644 index 3d84ce3..0000000 --- a/gws/skills/recipe-review-meet-participants/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: recipe-review-meet-participants -version: 1.0.0 -description: "Review who attended a Google Meet conference and for how long." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-meet"] ---- - -# Review Google Meet Attendance - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-meet` - -Review who attended a Google Meet conference and for how long. - -## Steps - -1. List recent conferences: `gws meet conferenceRecords list --format table` -2. List participants: `gws meet conferenceRecords participants list --params '{"parent": "conferenceRecords/CONFERENCE_ID"}' --format table` -3. Get session details: `gws meet conferenceRecords participants participantSessions list --params '{"parent": "conferenceRecords/CONFERENCE_ID/participants/PARTICIPANT_ID"}' --format table` - diff --git a/gws/skills/recipe-review-overdue-tasks/SKILL.md b/gws/skills/recipe-review-overdue-tasks/SKILL.md deleted file mode 100644 index 396ca92..0000000 --- a/gws/skills/recipe-review-overdue-tasks/SKILL.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -name: recipe-review-overdue-tasks -description: "Find Google Tasks that are past due and need attention." -metadata: - version: 0.22.5 - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: - - gws - skills: - - gws-tasks ---- - -# Review Overdue Tasks - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-tasks` - -Find Google Tasks that are past due and need attention. - -## Steps - -1. List task lists: `gws tasks tasklists list --format table` -2. List tasks with status: `gws tasks tasks list --params '{"tasklist": "TASKLIST_ID", "showCompleted": false}' --format table` -3. Review due dates and prioritize overdue items - diff --git a/gws/skills/recipe-save-email-attachments/SKILL.md b/gws/skills/recipe-save-email-attachments/SKILL.md deleted file mode 100644 index 5bd56f2..0000000 --- a/gws/skills/recipe-save-email-attachments/SKILL.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -name: recipe-save-email-attachments -version: 1.0.0 -description: "Find Gmail messages with attachments and save them to a Google Drive folder." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-gmail", "gws-drive"] ---- - -# Save Gmail Attachments to Google Drive - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-gmail`, `gws-drive` - -Find Gmail messages with attachments and save them to a Google Drive folder. - -## Steps - -1. Search for emails with attachments: `gws gmail users messages list --params '{"userId": "me", "q": "has:attachment from:client@example.com"}' --format table` -2. Get message details: `gws gmail users messages get --params '{"userId": "me", "id": "MESSAGE_ID"}'` -3. Download attachment: `gws gmail users messages attachments get --params '{"userId": "me", "messageId": "MESSAGE_ID", "id": "ATTACHMENT_ID"}'` -4. Upload to Drive folder: `gws drive +upload --file ./attachment.pdf --parent FOLDER_ID` - diff --git a/gws/skills/recipe-save-email-to-doc/SKILL.md b/gws/skills/recipe-save-email-to-doc/SKILL.md deleted file mode 100644 index 2ffa866..0000000 --- a/gws/skills/recipe-save-email-to-doc/SKILL.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -name: recipe-save-email-to-doc -version: 1.0.0 -description: "Save a Gmail message body into a Google Doc for archival or reference." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-gmail", "gws-docs"] ---- - -# Save a Gmail Message to Google Docs - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-gmail`, `gws-docs` - -Save a Gmail message body into a Google Doc for archival or reference. - -## Steps - -1. Find the message: `gws gmail users messages list --params '{"userId": "me", "q": "subject:important from:boss@company.com"}' --format table` -2. Get message content: `gws gmail users messages get --params '{"userId": "me", "id": "MSG_ID"}'` -3. Create a doc with the content: `gws docs documents create --json '{"title": "Saved Email - Important Update"}'` -4. Write the email body: `gws docs +write --document-id DOC_ID --text 'From: boss@company.com -Subject: Important Update - -[EMAIL BODY]'` - diff --git a/gws/skills/recipe-schedule-recurring-event/SKILL.md b/gws/skills/recipe-schedule-recurring-event/SKILL.md deleted file mode 100644 index 3a9d02b..0000000 --- a/gws/skills/recipe-schedule-recurring-event/SKILL.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: recipe-schedule-recurring-event -version: 1.0.0 -description: "Create a recurring Google Calendar event with attendees." -metadata: - openclaw: - category: "recipe" - domain: "scheduling" - requires: - bins: ["gws"] - skills: ["gws-calendar"] ---- - -# Schedule a Recurring Meeting - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar` - -Create a recurring Google Calendar event with attendees. - -## Steps - -1. Create recurring event: `gws calendar events insert --params '{"calendarId": "primary"}' --json '{"summary": "Weekly Standup", "start": {"dateTime": "2024-03-18T09:00:00", "timeZone": "America/New_York"}, "end": {"dateTime": "2024-03-18T09:30:00", "timeZone": "America/New_York"}, "recurrence": ["RRULE:FREQ=WEEKLY;BYDAY=MO"], "attendees": [{"email": "team@company.com"}]}'` -2. Verify it was created: `gws calendar +agenda --days 14 --format table` - diff --git a/gws/skills/recipe-share-doc-and-notify/SKILL.md b/gws/skills/recipe-share-doc-and-notify/SKILL.md deleted file mode 100644 index cfe9c94..0000000 --- a/gws/skills/recipe-share-doc-and-notify/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: recipe-share-doc-and-notify -version: 1.0.0 -description: "Share a Google Docs document with edit access and email collaborators the link." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-drive", "gws-docs", "gws-gmail"] ---- - -# Share a Google Doc and Notify Collaborators - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive`, `gws-docs`, `gws-gmail` - -Share a Google Docs document with edit access and email collaborators the link. - -## Steps - -1. Find the doc: `gws drive files list --params '{"q": "name contains '\''Project Brief'\'' and mimeType = '\''application/vnd.google-apps.document'\''"}'` -2. Share with editor access: `gws drive permissions create --params '{"fileId": "DOC_ID"}' --json '{"role": "writer", "type": "user", "emailAddress": "reviewer@company.com"}'` -3. Email the link: `gws gmail +send --to reviewer@company.com --subject 'Please review: Project Brief' --body 'I have shared the project brief with you: https://docs.google.com/document/d/DOC_ID'` - diff --git a/gws/skills/recipe-share-event-materials/SKILL.md b/gws/skills/recipe-share-event-materials/SKILL.md deleted file mode 100644 index 88aec82..0000000 --- a/gws/skills/recipe-share-event-materials/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: recipe-share-event-materials -version: 1.0.0 -description: "Share Google Drive files with all attendees of a Google Calendar event." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-calendar", "gws-drive"] ---- - -# Share Files with Meeting Attendees - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar`, `gws-drive` - -Share Google Drive files with all attendees of a Google Calendar event. - -## Steps - -1. Get event attendees: `gws calendar events get --params '{"calendarId": "primary", "eventId": "EVENT_ID"}'` -2. Share file with each attendee: `gws drive permissions create --params '{"fileId": "FILE_ID"}' --json '{"role": "reader", "type": "user", "emailAddress": "attendee@company.com"}'` -3. Verify sharing: `gws drive permissions list --params '{"fileId": "FILE_ID"}' --format table` - diff --git a/gws/skills/recipe-share-folder-with-team/SKILL.md b/gws/skills/recipe-share-folder-with-team/SKILL.md deleted file mode 100644 index da979a2..0000000 --- a/gws/skills/recipe-share-folder-with-team/SKILL.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -name: recipe-share-folder-with-team -version: 1.0.0 -description: "Share a Google Drive folder and all its contents with a list of collaborators." -metadata: - openclaw: - category: "recipe" - domain: "productivity" - requires: - bins: ["gws"] - skills: ["gws-drive"] ---- - -# Share a Google Drive Folder with a Team - -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive` - -Share a Google Drive folder and all its contents with a list of collaborators. - -## Steps - -1. Find the folder: `gws drive files list --params '{"q": "name = '\''Project X'\'' and mimeType = '\''application/vnd.google-apps.folder'\''"}'` -2. Share as editor: `gws drive permissions create --params '{"fileId": "FOLDER_ID"}' --json '{"role": "writer", "type": "user", "emailAddress": "colleague@company.com"}'` -3. Share as viewer: `gws drive permissions create --params '{"fileId": "FOLDER_ID"}' --json '{"role": "reader", "type": "user", "emailAddress": "stakeholder@company.com"}'` -4. Verify permissions: `gws drive permissions list --params '{"fileId": "FOLDER_ID"}' --format table` -