feat: skills expansion (#18)
* wip * feat: replace admin recipes with 50 consumer-focused recipes - Remove all admin/security/IT recipes (offboard-user, audit-user-login, etc.) - Remove enterprise-only recipes (initiate-litigation-hold) - Replace dangerous recipes (setup-email-forwarding -> create-gmail-filter) - Remove recipes overlapping with gws-workflow-* helpers - Remove thin 2-step recipes better served as helpers - Add 50 curated consumer recipes for Gmail, Drive, Docs, Calendar, Sheets - Update README: link to docs/skills.md, update skill count to 100+ - Fix clippy needless_borrow warnings in generate_skills.rs - Fix lefthook.yml: run fmt/clippy sequentially (parallel causes races) --------- Co-authored-by: jpoehnelt-bot <jpoehnelt-bot@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
---
|
||||
"@googleworkspace/cli": minor
|
||||
---
|
||||
|
||||
Add workflow helpers, personas, and 50 consumer-focused recipes
|
||||
|
||||
- Add `gws workflow` subcommand with 5 built-in helpers: `+standup-report`, `+meeting-prep`, `+email-to-task`, `+weekly-digest`, `+file-announce`
|
||||
- Add 10 agent personas (exec-assistant, project-manager, sales-ops, etc.) with curated skill sets
|
||||
- Add `docs/skills.md` skills index and `registry/recipes.yaml` with 50 multi-step recipes for Gmail, Drive, Docs, Calendar, and Sheets
|
||||
- Update README with skills index link and accurate skill count
|
||||
- Fix lefthook pre-commit to run fmt and clippy sequentially
|
||||
Generated
+20
@@ -865,6 +865,7 @@ dependencies = [
|
||||
"reqwest",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"serde_yaml",
|
||||
"serial_test",
|
||||
"sha2",
|
||||
"tempfile",
|
||||
@@ -2257,6 +2258,19 @@ dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_yaml"
|
||||
version = "0.9.34+deprecated"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
|
||||
dependencies = [
|
||||
"indexmap",
|
||||
"itoa",
|
||||
"ryu",
|
||||
"serde",
|
||||
"unsafe-libyaml",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serial_test"
|
||||
version = "3.4.0"
|
||||
@@ -2797,6 +2811,12 @@ dependencies = [
|
||||
"subtle",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unsafe-libyaml"
|
||||
version = "0.2.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861"
|
||||
|
||||
[[package]]
|
||||
name = "untrusted"
|
||||
version = "0.9.0"
|
||||
|
||||
@@ -29,6 +29,8 @@ categories = ["command-line-utilities", "web-programming"]
|
||||
name = "gws"
|
||||
path = "src/main.rs"
|
||||
|
||||
|
||||
|
||||
[dependencies]
|
||||
aes-gcm = "0.10"
|
||||
anyhow = "1"
|
||||
@@ -52,6 +54,7 @@ crossterm = "0.29.0"
|
||||
chrono = "0.4.44"
|
||||
keyring = "3.6.3"
|
||||
async-trait = "0.1.89"
|
||||
serde_yaml = "0.9.34"
|
||||
|
||||
|
||||
# The profile that 'cargo dist' will build with
|
||||
|
||||
@@ -148,7 +148,7 @@ Environment variables can also live in a `.env` file.
|
||||
|
||||
## AI Agent Skills
|
||||
|
||||
The repo ships 40+ [Agent Skills](https://github.com/vercel-labs/agent-skills) (`SKILL.md` files) — one for every supported API, plus higher-level helpers for common workflows like sending email, triaging a Gmail inbox, or subscribing to calendar events.
|
||||
The repo ships 100+ Agent Skills (`SKILL.md` files) — one for every supported API, plus higher-level helpers for common workflows and 50 curated recipes for Gmail, Drive, Docs, Calendar, and Sheets. See the full [Skills Index](docs/skills.md) for the complete list.
|
||||
|
||||
```bash
|
||||
# Install all skills at once
|
||||
|
||||
+139
@@ -0,0 +1,139 @@
|
||||
# Skills Index
|
||||
|
||||
> Auto-generated by `gws generate-skills`. Do not edit manually.
|
||||
|
||||
## Services
|
||||
|
||||
Core Google Workspace API skills.
|
||||
|
||||
| Skill | Description |
|
||||
|-------|-------------|
|
||||
| [gws-shared](../skills/gws-shared/SKILL.md) | gws CLI: Shared patterns for authentication, global flags, and output formatting. |
|
||||
| [gws-drive](../skills/gws-drive/SKILL.md) | Google Drive: Manage files, folders, and shared drives. |
|
||||
| [gws-sheets](../skills/gws-sheets/SKILL.md) | Google Sheets: Read and write spreadsheets. |
|
||||
| [gws-gmail](../skills/gws-gmail/SKILL.md) | Gmail: Send, read, and manage email. |
|
||||
| [gws-calendar](../skills/gws-calendar/SKILL.md) | Google Calendar: Manage calendars and events. |
|
||||
| [gws-admin](../skills/gws-admin/SKILL.md) | Google Workspace Admin SDK: Manage users, groups, and devices. |
|
||||
| [gws-admin-reports](../skills/gws-admin-reports/SKILL.md) | Google Workspace Admin SDK: Audit logs and usage reports. |
|
||||
| [gws-docs](../skills/gws-docs/SKILL.md) | Read and write Google Docs. |
|
||||
| [gws-slides](../skills/gws-slides/SKILL.md) | Google Slides: Read and write presentations. |
|
||||
| [gws-tasks](../skills/gws-tasks/SKILL.md) | Google Tasks: Manage task lists and tasks. |
|
||||
| [gws-people](../skills/gws-people/SKILL.md) | Google People: Manage contacts and profiles. |
|
||||
| [gws-chat](../skills/gws-chat/SKILL.md) | Google Chat: Manage Chat spaces and messages. |
|
||||
| [gws-vault](../skills/gws-vault/SKILL.md) | Google Vault: Manage eDiscovery holds and exports. |
|
||||
| [gws-groupssettings](../skills/gws-groupssettings/SKILL.md) | Manage Google Groups settings. |
|
||||
| [gws-reseller](../skills/gws-reseller/SKILL.md) | Google Workspace Reseller: Manage Workspace subscriptions. |
|
||||
| [gws-licensing](../skills/gws-licensing/SKILL.md) | Google Workspace Enterprise License Manager: Manage product licenses. |
|
||||
| [gws-apps-script](../skills/gws-apps-script/SKILL.md) | Google Apps Script: Manage and execute Apps Script projects. |
|
||||
| [gws-classroom](../skills/gws-classroom/SKILL.md) | Google Classroom: Manage classes, rosters, and coursework. |
|
||||
| [gws-cloudidentity](../skills/gws-cloudidentity/SKILL.md) | Google Cloud Identity: Manage identity groups and memberships. |
|
||||
| [gws-alertcenter](../skills/gws-alertcenter/SKILL.md) | Google Workspace Alert Center: Manage Workspace security alerts. |
|
||||
| [gws-forms](../skills/gws-forms/SKILL.md) | Read and write Google Forms. |
|
||||
| [gws-keep](../skills/gws-keep/SKILL.md) | Manage Google Keep notes. |
|
||||
| [gws-meet](../skills/gws-meet/SKILL.md) | Manage Google Meet conferences. |
|
||||
| [gws-events](../skills/gws-events/SKILL.md) | Subscribe to Google Workspace events. |
|
||||
| [gws-modelarmor](../skills/gws-modelarmor/SKILL.md) | Google Model Armor: Filter user-generated content for safety. |
|
||||
| [gws-workflow](../skills/gws-workflow/SKILL.md) | Google Workflow: Cross-service productivity workflows. |
|
||||
|
||||
## Helpers
|
||||
|
||||
Shortcut commands for common operations.
|
||||
|
||||
| Skill | Description |
|
||||
|-------|-------------|
|
||||
| [gws-drive-upload](../skills/gws-drive-upload/SKILL.md) | Google Drive: Upload a file with automatic metadata. |
|
||||
| [gws-sheets-append](../skills/gws-sheets-append/SKILL.md) | Google Sheets: Append a row to a spreadsheet. |
|
||||
| [gws-sheets-read](../skills/gws-sheets-read/SKILL.md) | Google Sheets: Read values from a spreadsheet. |
|
||||
| [gws-gmail-send](../skills/gws-gmail-send/SKILL.md) | Gmail: Send an email. |
|
||||
| [gws-gmail-triage](../skills/gws-gmail-triage/SKILL.md) | Gmail: Show unread inbox summary (sender, subject, date). |
|
||||
| [gws-gmail-watch](../skills/gws-gmail-watch/SKILL.md) | Gmail: Watch for new emails and stream them as NDJSON. |
|
||||
| [gws-calendar-insert](../skills/gws-calendar-insert/SKILL.md) | Google Calendar: Create a new event. |
|
||||
| [gws-calendar-agenda](../skills/gws-calendar-agenda/SKILL.md) | Google Calendar: Show upcoming events across all calendars. |
|
||||
| [gws-docs-write](../skills/gws-docs-write/SKILL.md) | Google Docs: Append text to a document. |
|
||||
| [gws-chat-send](../skills/gws-chat-send/SKILL.md) | Google Chat: Send a message to a space. |
|
||||
| [gws-apps-script-push](../skills/gws-apps-script-push/SKILL.md) | Google Apps Script: Upload local files to an Apps Script project. |
|
||||
| [gws-events-subscribe](../skills/gws-events-subscribe/SKILL.md) | Google Workspace Events: Subscribe to Workspace events and stream them as NDJSON. |
|
||||
| [gws-events-renew](../skills/gws-events-renew/SKILL.md) | Google Workspace Events: Renew/reactivate Workspace Events subscriptions. |
|
||||
| [gws-modelarmor-sanitize-prompt](../skills/gws-modelarmor-sanitize-prompt/SKILL.md) | Google Model Armor: Sanitize a user prompt through a Model Armor template. |
|
||||
| [gws-modelarmor-sanitize-response](../skills/gws-modelarmor-sanitize-response/SKILL.md) | Google Model Armor: Sanitize a model response through a Model Armor template. |
|
||||
| [gws-modelarmor-create-template](../skills/gws-modelarmor-create-template/SKILL.md) | Google Model Armor: Create a new Model Armor template. |
|
||||
| [gws-workflow-standup-report](../skills/gws-workflow-standup-report/SKILL.md) | Google Workflow: Today's meetings + open tasks as a standup summary. |
|
||||
| [gws-workflow-meeting-prep](../skills/gws-workflow-meeting-prep/SKILL.md) | Google Workflow: Prepare for your next meeting: agenda, attendees, and linked docs. |
|
||||
| [gws-workflow-email-to-task](../skills/gws-workflow-email-to-task/SKILL.md) | Google Workflow: Convert a Gmail message into a Google Tasks entry. |
|
||||
| [gws-workflow-weekly-digest](../skills/gws-workflow-weekly-digest/SKILL.md) | Google Workflow: Weekly summary: this week's meetings + unread email count. |
|
||||
| [gws-workflow-file-announce](../skills/gws-workflow-file-announce/SKILL.md) | Google Workflow: Announce a Drive file in a Chat space. |
|
||||
|
||||
## Personas
|
||||
|
||||
Role-based skill bundles.
|
||||
|
||||
| Skill | Description |
|
||||
|-------|-------------|
|
||||
| [persona-exec-assistant](../skills/persona-exec-assistant/SKILL.md) | Manage an executive's schedule, inbox, and communications. |
|
||||
| [persona-project-manager](../skills/persona-project-manager/SKILL.md) | Coordinate projects — track tasks, schedule meetings, and share docs. |
|
||||
| [persona-hr-coordinator](../skills/persona-hr-coordinator/SKILL.md) | Handle HR workflows — onboarding, announcements, and employee comms. |
|
||||
| [persona-sales-ops](../skills/persona-sales-ops/SKILL.md) | Manage sales workflows — track deals, schedule calls, client comms. |
|
||||
| [persona-it-admin](../skills/persona-it-admin/SKILL.md) | Administer IT — manage users, monitor security, configure Workspace. |
|
||||
| [persona-content-creator](../skills/persona-content-creator/SKILL.md) | Create, organize, and distribute content across Workspace. |
|
||||
| [persona-customer-support](../skills/persona-customer-support/SKILL.md) | Manage customer support — track tickets, respond, escalate issues. |
|
||||
| [persona-event-coordinator](../skills/persona-event-coordinator/SKILL.md) | Plan and manage events — scheduling, invitations, and logistics. |
|
||||
| [persona-team-lead](../skills/persona-team-lead/SKILL.md) | Lead a team — run standups, coordinate tasks, and communicate. |
|
||||
| [persona-researcher](../skills/persona-researcher/SKILL.md) | Organize research — manage references, notes, and collaboration. |
|
||||
|
||||
## Recipes
|
||||
|
||||
Multi-step task sequences with real commands.
|
||||
|
||||
| Skill | Description |
|
||||
|-------|-------------|
|
||||
| [recipe-audit-external-sharing](../skills/recipe-audit-external-sharing/SKILL.md) | Find and review Google Drive files shared outside the organization. |
|
||||
| [recipe-label-and-archive-emails](../skills/recipe-label-and-archive-emails/SKILL.md) | Apply Gmail labels to matching messages and archive them to keep your inbox clean. |
|
||||
| [recipe-send-personalized-emails](../skills/recipe-send-personalized-emails/SKILL.md) | Read recipient data from Google Sheets and send personalized Gmail messages to each row. |
|
||||
| [recipe-draft-email-from-doc](../skills/recipe-draft-email-from-doc/SKILL.md) | Read content from a Google Doc and use it as the body of a Gmail message. |
|
||||
| [recipe-organize-drive-folder](../skills/recipe-organize-drive-folder/SKILL.md) | Create a Google Drive folder structure and move files into the right locations. |
|
||||
| [recipe-share-folder-with-team](../skills/recipe-share-folder-with-team/SKILL.md) | Share a Google Drive folder and all its contents with a list of collaborators. |
|
||||
| [recipe-email-drive-link](../skills/recipe-email-drive-link/SKILL.md) | Share a Google Drive file and email the link with a message to recipients. |
|
||||
| [recipe-create-doc-from-template](../skills/recipe-create-doc-from-template/SKILL.md) | Copy a Google Docs template, fill in content, and share with collaborators. |
|
||||
| [recipe-create-expense-tracker](../skills/recipe-create-expense-tracker/SKILL.md) | Set up a Google Sheets spreadsheet for tracking expenses with headers and initial entries. |
|
||||
| [recipe-copy-sheet-for-new-month](../skills/recipe-copy-sheet-for-new-month/SKILL.md) | Duplicate a Google Sheets template tab for a new month of tracking. |
|
||||
| [recipe-block-focus-time](../skills/recipe-block-focus-time/SKILL.md) | Create recurring focus time blocks on Google Calendar to protect deep work hours. |
|
||||
| [recipe-reschedule-meeting](../skills/recipe-reschedule-meeting/SKILL.md) | Move a Google Calendar event to a new time and automatically notify all attendees. |
|
||||
| [recipe-search-and-export-emails](../skills/recipe-search-and-export-emails/SKILL.md) | Find Gmail messages matching a query and export them for review. |
|
||||
| [recipe-create-gmail-filter](../skills/recipe-create-gmail-filter/SKILL.md) | Create a Gmail filter to automatically label, star, or categorize incoming messages. |
|
||||
| [recipe-cancel-and-notify](../skills/recipe-cancel-and-notify/SKILL.md) | Delete a Google Calendar event and send a cancellation email via Gmail. |
|
||||
| [recipe-schedule-recurring-event](../skills/recipe-schedule-recurring-event/SKILL.md) | Create a recurring Google Calendar event with attendees. |
|
||||
| [recipe-find-free-time](../skills/recipe-find-free-time/SKILL.md) | Query Google Calendar free/busy status for multiple users to find a meeting slot. |
|
||||
| [recipe-bulk-download-folder](../skills/recipe-bulk-download-folder/SKILL.md) | List and download all files from a Google Drive folder. |
|
||||
| [recipe-find-large-files](../skills/recipe-find-large-files/SKILL.md) | Identify large Google Drive files consuming storage quota. |
|
||||
| [recipe-create-shared-drive](../skills/recipe-create-shared-drive/SKILL.md) | Create a Google Shared Drive and add members with appropriate roles. |
|
||||
| [recipe-transfer-file-ownership](../skills/recipe-transfer-file-ownership/SKILL.md) | Transfer ownership of Google Drive files from one user to another. |
|
||||
| [recipe-log-deal-update](../skills/recipe-log-deal-update/SKILL.md) | Append a deal status update to a Google Sheets sales tracking spreadsheet. |
|
||||
| [recipe-collect-form-responses](../skills/recipe-collect-form-responses/SKILL.md) | Retrieve and review responses from a Google Form. |
|
||||
| [recipe-post-mortem-setup](../skills/recipe-post-mortem-setup/SKILL.md) | Create a Google Docs post-mortem, schedule a Google Calendar review, and notify via Chat. |
|
||||
| [recipe-create-task-list](../skills/recipe-create-task-list/SKILL.md) | Set up a new Google Tasks list with initial tasks. |
|
||||
| [recipe-review-overdue-tasks](../skills/recipe-review-overdue-tasks/SKILL.md) | Find Google Tasks that are past due and need attention. |
|
||||
| [recipe-deploy-apps-script](../skills/recipe-deploy-apps-script/SKILL.md) | Push local files to a Google Apps Script project. |
|
||||
| [recipe-watch-drive-changes](../skills/recipe-watch-drive-changes/SKILL.md) | Subscribe to change notifications on a Google Drive file or folder. |
|
||||
| [recipe-create-classroom-course](../skills/recipe-create-classroom-course/SKILL.md) | Create a Google Classroom course and invite students. |
|
||||
| [recipe-create-meet-space](../skills/recipe-create-meet-space/SKILL.md) | Create a Google Meet meeting space and share the join link. |
|
||||
| [recipe-review-meet-participants](../skills/recipe-review-meet-participants/SKILL.md) | Review who attended a Google Meet conference and for how long. |
|
||||
| [recipe-create-presentation](../skills/recipe-create-presentation/SKILL.md) | Create a new Google Slides presentation and add initial slides. |
|
||||
| [recipe-triage-security-alerts](../skills/recipe-triage-security-alerts/SKILL.md) | List and review Google Workspace security alerts from Alert Center. |
|
||||
| [recipe-save-email-attachments](../skills/recipe-save-email-attachments/SKILL.md) | Find Gmail messages with attachments and save them to a Google Drive folder. |
|
||||
| [recipe-send-team-announcement](../skills/recipe-send-team-announcement/SKILL.md) | Send a team announcement via both Gmail and a Google Chat space. |
|
||||
| [recipe-create-feedback-form](../skills/recipe-create-feedback-form/SKILL.md) | Create a Google Form for feedback and share it via Gmail. |
|
||||
| [recipe-sync-contacts-to-sheet](../skills/recipe-sync-contacts-to-sheet/SKILL.md) | Export Google Contacts directory to a Google Sheets spreadsheet. |
|
||||
| [recipe-share-event-materials](../skills/recipe-share-event-materials/SKILL.md) | Share Google Drive files with all attendees of a Google Calendar event. |
|
||||
| [recipe-create-vacation-responder](../skills/recipe-create-vacation-responder/SKILL.md) | Enable a Gmail out-of-office auto-reply with a custom message and date range. |
|
||||
| [recipe-create-events-from-sheet](../skills/recipe-create-events-from-sheet/SKILL.md) | Read event data from a Google Sheets spreadsheet and create Google Calendar entries for each row. |
|
||||
| [recipe-plan-weekly-schedule](../skills/recipe-plan-weekly-schedule/SKILL.md) | Review your Google Calendar week, identify gaps, and add events to fill them. |
|
||||
| [recipe-share-doc-and-notify](../skills/recipe-share-doc-and-notify/SKILL.md) | Share a Google Docs document with edit access and email collaborators the link. |
|
||||
| [recipe-backup-sheet-as-csv](../skills/recipe-backup-sheet-as-csv/SKILL.md) | Export a Google Sheets spreadsheet as a CSV file for local backup or processing. |
|
||||
| [recipe-save-email-to-doc](../skills/recipe-save-email-to-doc/SKILL.md) | Save a Gmail message body into a Google Doc for archival or reference. |
|
||||
| [recipe-batch-reply-to-emails](../skills/recipe-batch-reply-to-emails/SKILL.md) | Find Gmail messages matching a query and send a standard reply to each one. |
|
||||
| [recipe-batch-rename-files](../skills/recipe-batch-rename-files/SKILL.md) | Rename multiple Google Drive files matching a pattern to follow a consistent naming convention. |
|
||||
| [recipe-compare-sheet-tabs](../skills/recipe-compare-sheet-tabs/SKILL.md) | Read data from two tabs in a Google Sheet to compare and identify differences. |
|
||||
| [recipe-batch-invite-to-event](../skills/recipe-batch-invite-to-event/SKILL.md) | Add a list of attendees to an existing Google Calendar event and send notifications. |
|
||||
| [recipe-forward-labeled-emails](../skills/recipe-forward-labeled-emails/SKILL.md) | Find Gmail messages with a specific label and forward them to another address. |
|
||||
| [recipe-generate-report-from-sheet](../skills/recipe-generate-report-from-sheet/SKILL.md) | Read data from a Google Sheet and create a formatted Google Docs report. |
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
pre-commit:
|
||||
parallel: true
|
||||
parallel: false
|
||||
commands:
|
||||
fmt:
|
||||
glob: "*.rs"
|
||||
|
||||
@@ -0,0 +1,171 @@
|
||||
# Persona Packs — Role-based skill bundles for AI agents
|
||||
#
|
||||
# Each persona defines a role-based context with:
|
||||
# - name: unique id (used as directory name: persona-{name})
|
||||
# - title: human-readable name
|
||||
# - description: when to use this persona
|
||||
# - services: which gws services this persona commonly uses
|
||||
# - workflows: which workflow commands are relevant
|
||||
# - instructions: step-by-step guidance for agents adopting this role
|
||||
# - tips: useful reminders
|
||||
|
||||
personas:
|
||||
- name: exec-assistant
|
||||
title: Executive Assistant
|
||||
description: "Manage an executive's schedule, inbox, and communications."
|
||||
services: [gmail, calendar, drive, chat]
|
||||
workflows: ["+standup-report", "+meeting-prep", "+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."
|
||||
|
||||
- name: project-manager
|
||||
title: Project Manager
|
||||
description: "Coordinate projects — track tasks, schedule meetings, and share docs."
|
||||
services: [drive, sheets, calendar, gmail, chat]
|
||||
workflows: ["+standup-report", "+weekly-digest", "+file-announce"]
|
||||
instructions:
|
||||
- "Start the week with `gws workflow +weekly-digest` for a snapshot of upcoming meetings and unread items."
|
||||
- "Track project status in Sheets using `gws sheets +append` to log updates."
|
||||
- "Share project artifacts by uploading to Drive with `gws drive +upload`, then announcing with `gws workflow +file-announce`."
|
||||
- "Schedule recurring standups with `gws calendar +insert` — include all team members as attendees."
|
||||
- "Send status update emails to stakeholders with `gws gmail +send`."
|
||||
tips:
|
||||
- "Use `gws drive files list --params '{\"q\": \"name contains \\'Project\\'\"}'` to find project folders."
|
||||
- "Pipe triage output through `jq` for filtering by sender or subject."
|
||||
- "Use `--dry-run` before any write operations to preview what will happen."
|
||||
|
||||
- name: hr-coordinator
|
||||
title: HR Coordinator
|
||||
description: "Handle HR workflows — onboarding, announcements, and employee comms."
|
||||
services: [gmail, calendar, drive, chat, admin]
|
||||
workflows: ["+email-to-task", "+file-announce"]
|
||||
instructions:
|
||||
- "For new hire onboarding, create calendar events for orientation sessions with `gws calendar +insert`."
|
||||
- "Upload onboarding docs to a shared Drive folder with `gws drive +upload`."
|
||||
- "Announce new hires in Chat spaces with `gws workflow +file-announce` to share their profile doc."
|
||||
- "Convert email requests into tracked tasks with `gws workflow +email-to-task`."
|
||||
- "Send bulk announcements with `gws gmail +send` — use clear subject lines."
|
||||
tips:
|
||||
- "Always use `--sanitize` for PII-sensitive operations."
|
||||
- "Create a dedicated 'HR Onboarding' calendar for tracking orientation schedules."
|
||||
- "Use `gws admin` for user account management (creating accounts, resetting passwords)."
|
||||
|
||||
- name: sales-ops
|
||||
title: Sales Operations
|
||||
description: "Manage sales workflows — track deals, schedule calls, client comms."
|
||||
services: [gmail, calendar, sheets, drive]
|
||||
workflows: ["+meeting-prep", "+email-to-task", "+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."
|
||||
|
||||
- name: it-admin
|
||||
title: IT Administrator
|
||||
description: "Administer IT — manage users, monitor security, configure Workspace."
|
||||
services: [admin, gmail, drive, calendar]
|
||||
workflows: ["+standup-report"]
|
||||
instructions:
|
||||
- "Start the day with `gws workflow +standup-report` to review any pending IT requests."
|
||||
- "Manage user accounts with `gws admin` — create, suspend, or update users."
|
||||
- "Monitor suspicious login activity and review audit logs."
|
||||
- "Configure Drive sharing policies to enforce organizational security."
|
||||
- "Set up group email aliases and distribution lists."
|
||||
tips:
|
||||
- "Use `gws admin` extensively — it covers user management, groups, and org units."
|
||||
- "Always use `--dry-run` before bulk user operations."
|
||||
- "Review `gws auth status` regularly to verify service account permissions."
|
||||
|
||||
- name: content-creator
|
||||
title: Content Creator
|
||||
description: "Create, organize, and distribute content across Workspace."
|
||||
services: [docs, drive, gmail, chat, slides]
|
||||
workflows: ["+file-announce"]
|
||||
instructions:
|
||||
- "Draft content in Google Docs with `gws docs +write`."
|
||||
- "Organize content assets in Drive folders — use `gws drive files list` to browse."
|
||||
- "Share finished content by announcing in Chat with `gws workflow +file-announce`."
|
||||
- "Send content review requests via email with `gws gmail +send`."
|
||||
- "Upload media assets to Drive with `gws drive +upload`."
|
||||
tips:
|
||||
- "Use `gws docs +write` for quick content updates — it handles the Docs API formatting."
|
||||
- "Keep a 'Content Calendar' in a shared Sheet for tracking publication schedules."
|
||||
- "Use `--format yaml` for human-readable output when debugging API responses."
|
||||
|
||||
- name: customer-support
|
||||
title: Customer Support Agent
|
||||
description: "Manage customer support — track tickets, respond, escalate issues."
|
||||
services: [gmail, sheets, chat, calendar]
|
||||
workflows: ["+email-to-task", "+standup-report"]
|
||||
instructions:
|
||||
- "Triage the support inbox with `gws gmail +triage --query 'label:support'`."
|
||||
- "Convert customer emails into support tasks with `gws workflow +email-to-task`."
|
||||
- "Log ticket status updates in a tracking sheet with `gws sheets +append`."
|
||||
- "Escalate urgent issues to the team Chat space."
|
||||
- "Schedule follow-up calls with customers using `gws calendar +insert`."
|
||||
tips:
|
||||
- "Use `gws gmail +triage --labels` to see email categories at a glance."
|
||||
- "Set up Gmail filters for auto-labeling support requests."
|
||||
- "Use `--format table` for quick status dashboard views."
|
||||
|
||||
- name: event-coordinator
|
||||
title: Event Coordinator
|
||||
description: "Plan and manage events — scheduling, invitations, and logistics."
|
||||
services: [calendar, gmail, drive, chat, sheets]
|
||||
workflows: ["+meeting-prep", "+file-announce", "+weekly-digest"]
|
||||
instructions:
|
||||
- "Create event calendar entries with `gws calendar +insert` — include location and attendee lists."
|
||||
- "Prepare event materials and upload to Drive with `gws drive +upload`."
|
||||
- "Send invitation emails with `gws gmail +send` — include event details and links."
|
||||
- "Announce updates in Chat spaces with `gws workflow +file-announce`."
|
||||
- "Track RSVPs and logistics in Sheets with `gws sheets +append`."
|
||||
tips:
|
||||
- "Use `gws calendar +agenda --days 30` for long-range event planning."
|
||||
- "Create a dedicated calendar for each major event series."
|
||||
- "Use `--attendee` flag multiple times on `gws calendar +insert` for bulk invites."
|
||||
|
||||
- name: team-lead
|
||||
title: Team Lead
|
||||
description: "Lead a team — run standups, coordinate tasks, and communicate."
|
||||
services: [calendar, gmail, chat, drive, sheets]
|
||||
workflows: ["+standup-report", "+meeting-prep", "+weekly-digest", "+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."
|
||||
|
||||
- name: researcher
|
||||
title: Researcher
|
||||
description: "Organize research — manage references, notes, and collaboration."
|
||||
services: [drive, docs, sheets, gmail]
|
||||
workflows: ["+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."
|
||||
@@ -0,0 +1,646 @@
|
||||
# Curated Recipe Registry — Real-world Google Workspace workflows
|
||||
#
|
||||
# Each recipe defines a reusable multi-step task with:
|
||||
# - name: unique id (directory: recipe-{name})
|
||||
# - title: human-readable name
|
||||
# - description: compact intent (under 130 chars)
|
||||
# - category: domain
|
||||
# - services: which gws services this recipe uses
|
||||
# - steps: concrete gws commands
|
||||
# - caution: optional warning for destructive operations
|
||||
|
||||
recipes:
|
||||
# ============================================================
|
||||
# IT / SECURITY / COMPLIANCE
|
||||
# ============================================================
|
||||
- name: audit-external-sharing
|
||||
title: Audit External Drive Sharing
|
||||
description: "Find and review Google Drive files shared outside the organization."
|
||||
category: security
|
||||
services: [drive]
|
||||
steps:
|
||||
- "List externally shared files: `gws drive files list --params '{\"q\": \"visibility = '\\''anyoneWithLink'\\''\"}'`"
|
||||
- "Check permissions on a file: `gws drive permissions list --params '{\"fileId\": \"FILE_ID\"}'`"
|
||||
- "Revoke if needed: `gws drive permissions delete --params '{\"fileId\": \"FILE_ID\", \"permissionId\": \"PERM_ID\"}'`"
|
||||
caution: "Revoking permissions immediately removes access. Confirm with the file owner first."
|
||||
|
||||
# ============================================================
|
||||
# GMAIL WORKFLOWS
|
||||
# ============================================================
|
||||
- name: label-and-archive-emails
|
||||
title: Label and Archive Gmail Threads
|
||||
description: "Apply Gmail labels to matching messages and archive them to keep your inbox clean."
|
||||
category: productivity
|
||||
services: [gmail]
|
||||
steps:
|
||||
- "Search for matching emails: `gws gmail users messages list --params '{\"userId\": \"me\", \"q\": \"from:notifications@service.com\"}' --format table`"
|
||||
- "Apply a label: `gws gmail users messages modify --params '{\"userId\": \"me\", \"id\": \"MESSAGE_ID\"}' --json '{\"addLabelIds\": [\"LABEL_ID\"]}'`"
|
||||
- "Archive (remove from inbox): `gws gmail users messages modify --params '{\"userId\": \"me\", \"id\": \"MESSAGE_ID\"}' --json '{\"removeLabelIds\": [\"INBOX\"]}'`"
|
||||
|
||||
- name: send-personalized-emails
|
||||
title: Send Personalized Emails from a Sheet
|
||||
description: "Read recipient data from Google Sheets and send personalized Gmail messages to each row."
|
||||
category: productivity
|
||||
services: [sheets, gmail]
|
||||
steps:
|
||||
- "Read recipient list: `gws sheets +read --spreadsheet-id SHEET_ID --range 'Contacts!A2:C'`"
|
||||
- "For each row, send a personalized email: `gws gmail +send --to recipient@example.com --subject 'Hello, Name' --body 'Hi Name, your report is ready.'`"
|
||||
|
||||
- name: draft-email-from-doc
|
||||
title: Draft a Gmail Message from a Google Doc
|
||||
description: "Read content from a Google Doc and use it as the body of a Gmail message."
|
||||
category: productivity
|
||||
services: [docs, gmail]
|
||||
steps:
|
||||
- "Get the document content: `gws docs documents get --params '{\"documentId\": \"DOC_ID\"}'`"
|
||||
- "Copy the text from the body content"
|
||||
- "Send the email: `gws gmail +send --to recipient@example.com --subject 'Newsletter Update' --body 'CONTENT_FROM_DOC'`"
|
||||
|
||||
# ============================================================
|
||||
# GOOGLE DRIVE WORKFLOWS
|
||||
# ============================================================
|
||||
- name: organize-drive-folder
|
||||
title: Organize Files into Google Drive Folders
|
||||
description: "Create a Google Drive folder structure and move files into the right locations."
|
||||
category: productivity
|
||||
services: [drive]
|
||||
steps:
|
||||
- "Create a project folder: `gws drive files create --json '{\"name\": \"Q2 Project\", \"mimeType\": \"application/vnd.google-apps.folder\"}'`"
|
||||
- "Create sub-folders: `gws drive files create --json '{\"name\": \"Documents\", \"mimeType\": \"application/vnd.google-apps.folder\", \"parents\": [\"PARENT_FOLDER_ID\"]}'`"
|
||||
- "Move existing files into folder: `gws drive files update --params '{\"fileId\": \"FILE_ID\", \"addParents\": \"FOLDER_ID\", \"removeParents\": \"OLD_PARENT_ID\"}'`"
|
||||
- "Verify structure: `gws drive files list --params '{\"q\": \"FOLDER_ID in parents\"}' --format table`"
|
||||
|
||||
- name: share-folder-with-team
|
||||
title: Share a Google Drive Folder with a Team
|
||||
description: "Share a Google Drive folder and all its contents with a list of collaborators."
|
||||
category: productivity
|
||||
services: [drive]
|
||||
steps:
|
||||
- "Find the folder: `gws drive files list --params '{\"q\": \"name = '\\''Project X'\\'' and mimeType = '\\''application/vnd.google-apps.folder'\\''\"}'`"
|
||||
- "Share as editor: `gws drive permissions create --params '{\"fileId\": \"FOLDER_ID\"}' --json '{\"role\": \"writer\", \"type\": \"user\", \"emailAddress\": \"colleague@company.com\"}'`"
|
||||
- "Share as viewer: `gws drive permissions create --params '{\"fileId\": \"FOLDER_ID\"}' --json '{\"role\": \"reader\", \"type\": \"user\", \"emailAddress\": \"stakeholder@company.com\"}'`"
|
||||
- "Verify permissions: `gws drive permissions list --params '{\"fileId\": \"FOLDER_ID\"}' --format table`"
|
||||
|
||||
- name: email-drive-link
|
||||
title: Email a Google Drive File Link
|
||||
description: "Share a Google Drive file and email the link with a message to recipients."
|
||||
category: productivity
|
||||
services: [drive, gmail]
|
||||
steps:
|
||||
- "Find the file: `gws drive files list --params '{\"q\": \"name = '\\''Quarterly Report'\\''\"}'`"
|
||||
- "Share the file: `gws drive permissions create --params '{\"fileId\": \"FILE_ID\"}' --json '{\"role\": \"reader\", \"type\": \"user\", \"emailAddress\": \"client@example.com\"}'`"
|
||||
- "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'`"
|
||||
|
||||
# ============================================================
|
||||
# GOOGLE DOCS WORKFLOWS
|
||||
# ============================================================
|
||||
- name: create-doc-from-template
|
||||
title: Create a Google Doc from a Template
|
||||
description: "Copy a Google Docs template, fill in content, and share with collaborators."
|
||||
category: productivity
|
||||
services: [drive, docs]
|
||||
steps:
|
||||
- "Copy the template: `gws drive files copy --params '{\"fileId\": \"TEMPLATE_DOC_ID\"}' --json '{\"name\": \"Project Brief - Q2 Launch\"}'`"
|
||||
- "Get the new doc ID from the response"
|
||||
- "Add content: `gws docs +write --document-id NEW_DOC_ID --text '## Project: Q2 Launch\n\n### Objective\nLaunch the new feature by end of Q2.'`"
|
||||
- "Share with team: `gws drive permissions create --params '{\"fileId\": \"NEW_DOC_ID\"}' --json '{\"role\": \"writer\", \"type\": \"user\", \"emailAddress\": \"team@company.com\"}'`"
|
||||
|
||||
# ============================================================
|
||||
# GOOGLE SHEETS WORKFLOWS
|
||||
# ============================================================
|
||||
- name: create-expense-tracker
|
||||
title: Create a Google Sheets Expense Tracker
|
||||
description: "Set up a Google Sheets spreadsheet for tracking expenses with headers and initial entries."
|
||||
category: productivity
|
||||
services: [sheets, drive]
|
||||
steps:
|
||||
- "Create spreadsheet: `gws drive files create --json '{\"name\": \"Expense Tracker 2025\", \"mimeType\": \"application/vnd.google-apps.spreadsheet\"}'`"
|
||||
- "Add headers: `gws sheets +append --spreadsheet-id SHEET_ID --range 'Sheet1' --values '[\"Date\", \"Category\", \"Description\", \"Amount\"]'`"
|
||||
- "Add first entry: `gws sheets +append --spreadsheet-id SHEET_ID --range 'Sheet1' --values '[\"2025-01-15\", \"Travel\", \"Flight to NYC\", \"450.00\"]'`"
|
||||
- "Share with manager: `gws drive permissions create --params '{\"fileId\": \"SHEET_ID\"}' --json '{\"role\": \"reader\", \"type\": \"user\", \"emailAddress\": \"manager@company.com\"}'`"
|
||||
|
||||
- name: copy-sheet-for-new-month
|
||||
title: Copy a Google Sheet for a New Month
|
||||
description: "Duplicate a Google Sheets template tab for a new month of tracking."
|
||||
category: productivity
|
||||
services: [sheets]
|
||||
steps:
|
||||
- "Get spreadsheet details: `gws sheets spreadsheets get --params '{\"spreadsheetId\": \"SHEET_ID\"}'`"
|
||||
- "Copy the template sheet: `gws sheets spreadsheets sheets copyTo --params '{\"spreadsheetId\": \"SHEET_ID\", \"sheetId\": 0}' --json '{\"destinationSpreadsheetId\": \"SHEET_ID\"}'`"
|
||||
- "Rename the new tab: `gws sheets spreadsheets batchUpdate --params '{\"spreadsheetId\": \"SHEET_ID\"}' --json '{\"requests\": [{\"updateSheetProperties\": {\"properties\": {\"sheetId\": 123, \"title\": \"February 2025\"}, \"fields\": \"title\"}}]}'`"
|
||||
|
||||
# ============================================================
|
||||
# GOOGLE CALENDAR WORKFLOWS
|
||||
# ============================================================
|
||||
- name: block-focus-time
|
||||
title: Block Focus Time on Google Calendar
|
||||
description: "Create recurring focus time blocks on Google Calendar to protect deep work hours."
|
||||
category: scheduling
|
||||
services: [calendar]
|
||||
steps:
|
||||
- "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\"}'`"
|
||||
- "Verify it shows as busy: `gws calendar +agenda`"
|
||||
|
||||
- name: reschedule-meeting
|
||||
title: Reschedule a Google Calendar Meeting
|
||||
description: "Move a Google Calendar event to a new time and automatically notify all attendees."
|
||||
category: scheduling
|
||||
services: [calendar]
|
||||
steps:
|
||||
- "Find the event: `gws calendar +agenda`"
|
||||
- "Get event details: `gws calendar events get --params '{\"calendarId\": \"primary\", \"eventId\": \"EVENT_ID\"}'`"
|
||||
- "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\"}}'`"
|
||||
|
||||
# ============================================================
|
||||
# EMAIL / GMAIL
|
||||
# ============================================================
|
||||
- name: search-and-export-emails
|
||||
title: Search and Export Emails
|
||||
description: "Find Gmail messages matching a query and export them for review."
|
||||
category: productivity
|
||||
services: [gmail]
|
||||
steps:
|
||||
- "Search for emails: `gws gmail users messages list --params '{\"userId\": \"me\", \"q\": \"from:client@example.com after:2024/01/01\"}'`"
|
||||
- "Get full message: `gws gmail users messages get --params '{\"userId\": \"me\", \"id\": \"MSG_ID\"}'`"
|
||||
- "Export results: `gws gmail users messages list --params '{\"userId\": \"me\", \"q\": \"label:project-x\"}' --format json > project-emails.json`"
|
||||
|
||||
- name: create-gmail-filter
|
||||
title: Create a Gmail Filter
|
||||
description: "Create a Gmail filter to automatically label, star, or categorize incoming messages."
|
||||
category: productivity
|
||||
services: [gmail]
|
||||
steps:
|
||||
- "List existing labels: `gws gmail users labels list --params '{\"userId\": \"me\"}' --format table`"
|
||||
- "Create a new label: `gws gmail users labels create --params '{\"userId\": \"me\"}' --json '{\"name\": \"Receipts\"}'`"
|
||||
- "Create a filter: `gws gmail users settings filters create --params '{\"userId\": \"me\"}' --json '{\"criteria\": {\"from\": \"receipts@example.com\"}, \"action\": {\"addLabelIds\": [\"LABEL_ID\"], \"removeLabelIds\": [\"INBOX\"]}}'`"
|
||||
- "Verify filter: `gws gmail users settings filters list --params '{\"userId\": \"me\"}' --format table`"
|
||||
|
||||
# ============================================================
|
||||
# CALENDAR / SCHEDULING
|
||||
# ============================================================
|
||||
- name: cancel-and-notify
|
||||
title: Cancel Meeting and Notify Attendees
|
||||
description: "Delete a Google Calendar event and send a cancellation email via Gmail."
|
||||
category: scheduling
|
||||
services: [calendar, gmail]
|
||||
steps:
|
||||
- "Find the meeting: `gws calendar +agenda --format json` and locate the event ID"
|
||||
- "Delete the event: `gws calendar events delete --params '{\"calendarId\": \"primary\", \"eventId\": \"EVENT_ID\", \"sendUpdates\": \"all\"}'`"
|
||||
- "Send follow-up: `gws gmail +send --to attendees --subject 'Meeting Cancelled: [Title]' --body 'Apologies, this meeting has been cancelled.'`"
|
||||
caution: "Deleting with sendUpdates sends cancellation emails to all attendees."
|
||||
|
||||
- name: schedule-recurring-event
|
||||
title: Schedule a Recurring Meeting
|
||||
description: "Create a recurring Google Calendar event with attendees."
|
||||
category: scheduling
|
||||
services: [calendar]
|
||||
steps:
|
||||
- "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\"}]}'`"
|
||||
- "Verify it was created: `gws calendar +agenda --days 14 --format table`"
|
||||
|
||||
- name: find-free-time
|
||||
title: Find Free Time Across Calendars
|
||||
description: "Query Google Calendar free/busy status for multiple users to find a meeting slot."
|
||||
category: scheduling
|
||||
services: [calendar]
|
||||
steps:
|
||||
- "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\"}]}'`"
|
||||
- "Review the output to find overlapping free slots"
|
||||
- "Create event in the free slot: `gws calendar +insert --summary 'Meeting' --attendees user1@company.com,user2@company.com --start '2024-03-18T14:00:00' --duration 30`"
|
||||
|
||||
# ============================================================
|
||||
# DRIVE / FILE MANAGEMENT
|
||||
# ============================================================
|
||||
- name: bulk-download-folder
|
||||
title: Bulk Download Drive Folder
|
||||
description: "List and download all files from a Google Drive folder."
|
||||
category: productivity
|
||||
services: [drive]
|
||||
steps:
|
||||
- "List files in folder: `gws drive files list --params '{\"q\": \"'\\''FOLDER_ID'\\'' in parents\"}' --format json`"
|
||||
- "Download each file: `gws drive files get --params '{\"fileId\": \"FILE_ID\", \"alt\": \"media\"}' -o filename.ext`"
|
||||
- "Export Google Docs as PDF: `gws drive files export --params '{\"fileId\": \"FILE_ID\", \"mimeType\": \"application/pdf\"}' -o document.pdf`"
|
||||
|
||||
- name: find-large-files
|
||||
title: Find Largest Files in Drive
|
||||
description: "Identify large Google Drive files consuming storage quota."
|
||||
category: productivity
|
||||
services: [drive]
|
||||
steps:
|
||||
- "List files sorted by size: `gws drive files list --params '{\"orderBy\": \"quotaBytesUsed desc\", \"pageSize\": 20, \"fields\": \"files(id,name,size,mimeType,owners)\"}' --format table`"
|
||||
- "Review the output and identify files to delete or move"
|
||||
- "Delete if needed: `gws drive files delete --params '{\"fileId\": \"FILE_ID\"}'`"
|
||||
caution: "Deleting files is permanent if the trash is emptied. Confirm before deleting."
|
||||
|
||||
- name: create-shared-drive
|
||||
title: Create and Configure a Shared Drive
|
||||
description: "Create a Google Shared Drive and add members with appropriate roles."
|
||||
category: productivity
|
||||
services: [drive]
|
||||
steps:
|
||||
- "Create shared drive: `gws drive drives create --params '{\"requestId\": \"unique-id-123\"}' --json '{\"name\": \"Project X\"}'`"
|
||||
- "Add a member: `gws drive permissions create --params '{\"fileId\": \"DRIVE_ID\", \"supportsAllDrives\": true}' --json '{\"role\": \"writer\", \"type\": \"user\", \"emailAddress\": \"member@company.com\"}'`"
|
||||
- "List members: `gws drive permissions list --params '{\"fileId\": \"DRIVE_ID\", \"supportsAllDrives\": true}'`"
|
||||
|
||||
- name: transfer-file-ownership
|
||||
title: Transfer File Ownership
|
||||
description: "Transfer ownership of Google Drive files from one user to another."
|
||||
category: it
|
||||
services: [drive]
|
||||
steps:
|
||||
- "List files owned by the user: `gws drive files list --params '{\"q\": \"'\\''user@company.com'\\'' in owners\"}'`"
|
||||
- "Transfer ownership: `gws drive permissions create --params '{\"fileId\": \"FILE_ID\", \"transferOwnership\": true}' --json '{\"role\": \"owner\", \"type\": \"user\", \"emailAddress\": \"newowner@company.com\"}'`"
|
||||
caution: "Transferring ownership is irreversible without the new owner's cooperation."
|
||||
|
||||
# ============================================================
|
||||
# SHEETS / DATA
|
||||
# ============================================================
|
||||
- name: log-deal-update
|
||||
title: Log Deal Update to Sheet
|
||||
description: "Append a deal status update to a Google Sheets sales tracking spreadsheet."
|
||||
category: sales
|
||||
services: [sheets, drive]
|
||||
steps:
|
||||
- "Find the tracking sheet: `gws drive files list --params '{\"q\": \"name = '\\''Sales Pipeline'\\'' and mimeType = '\\''application/vnd.google-apps.spreadsheet'\\''\"}'`"
|
||||
- "Read current data: `gws sheets +read --spreadsheet-id SHEET_ID --range 'Pipeline!A1:F'`"
|
||||
- "Append new row: `gws sheets +append --spreadsheet-id SHEET_ID --range 'Pipeline' --values '[\"2024-03-15\", \"Acme Corp\", \"Proposal Sent\", \"$50,000\", \"Q2\", \"jdoe\"]'`"
|
||||
|
||||
- name: collect-form-responses
|
||||
title: Check Form Responses
|
||||
description: "Retrieve and review responses from a Google Form."
|
||||
category: productivity
|
||||
services: [forms]
|
||||
steps:
|
||||
- "List forms: `gws forms forms list` (if you don't have the form ID)"
|
||||
- "Get form details: `gws forms forms get --params '{\"formId\": \"FORM_ID\"}'`"
|
||||
- "Get responses: `gws forms forms responses list --params '{\"formId\": \"FORM_ID\"}' --format table`"
|
||||
|
||||
# ============================================================
|
||||
# CHAT / TEAM COMMUNICATION
|
||||
# ============================================================
|
||||
# ============================================================
|
||||
# ENGINEERING
|
||||
# ============================================================
|
||||
- name: post-mortem-setup
|
||||
title: Set Up Post-Mortem
|
||||
description: "Create a Google Docs post-mortem, schedule a Google Calendar review, and notify via Chat."
|
||||
category: engineering
|
||||
services: [docs, calendar, chat]
|
||||
steps:
|
||||
- "Create post-mortem doc: `gws docs +write --title 'Post-Mortem: [Incident]' --body '## Summary\\n\\n## Timeline\\n\\n## Root Cause\\n\\n## Action Items'`"
|
||||
- "Schedule review meeting: `gws calendar +insert --summary 'Post-Mortem Review: [Incident]' --attendees team@company.com --start 'next monday 14:00' --duration 60`"
|
||||
- "Notify in Chat: `gws chat +send --space spaces/ENG_SPACE --text '🔍 Post-mortem scheduled for [Incident].'`"
|
||||
|
||||
# ============================================================
|
||||
# TASKS
|
||||
# ============================================================
|
||||
- name: create-task-list
|
||||
title: Create a Task List and Add Tasks
|
||||
description: "Set up a new Google Tasks list with initial tasks."
|
||||
category: productivity
|
||||
services: [tasks]
|
||||
steps:
|
||||
- "Create task list: `gws tasks tasklists insert --json '{\"title\": \"Q2 Goals\"}'`"
|
||||
- "Add a task: `gws tasks tasks insert --params '{\"tasklist\": \"TASKLIST_ID\"}' --json '{\"title\": \"Review Q1 metrics\", \"notes\": \"Pull data from analytics dashboard\", \"due\": \"2024-04-01T00:00:00Z\"}'`"
|
||||
- "Add another task: `gws tasks tasks insert --params '{\"tasklist\": \"TASKLIST_ID\"}' --json '{\"title\": \"Draft Q2 OKRs\"}'`"
|
||||
- "List tasks: `gws tasks tasks list --params '{\"tasklist\": \"TASKLIST_ID\"}' --format table`"
|
||||
|
||||
- name: review-overdue-tasks
|
||||
title: Review Overdue Tasks
|
||||
description: "Find Google Tasks that are past due and need attention."
|
||||
category: productivity
|
||||
services: [tasks]
|
||||
steps:
|
||||
- "List task lists: `gws tasks tasklists list --format table`"
|
||||
- "List tasks with status: `gws tasks tasks list --params '{\"tasklist\": \"TASKLIST_ID\", \"showCompleted\": false}' --format table`"
|
||||
- "Review due dates and prioritize overdue items"
|
||||
|
||||
# ============================================================
|
||||
# CONTACTS / PEOPLE
|
||||
# ============================================================
|
||||
# ============================================================
|
||||
# APPS SCRIPT
|
||||
# ============================================================
|
||||
- name: deploy-apps-script
|
||||
title: Deploy an Apps Script Project
|
||||
description: "Push local files to a Google Apps Script project."
|
||||
category: engineering
|
||||
services: [apps-script]
|
||||
steps:
|
||||
- "List existing projects: `gws apps-script projects list --format table`"
|
||||
- "Get project content: `gws apps-script projects getContent --params '{\"scriptId\": \"SCRIPT_ID\"}'`"
|
||||
- "Update content: `gws apps-script projects updateContent --params '{\"scriptId\": \"SCRIPT_ID\"}' --json '{\"files\": [{\"name\": \"Code\", \"type\": \"SERVER_JS\", \"source\": \"function main() { ... }\"}]}'`"
|
||||
- "Create a new version: `gws apps-script projects versions create --params '{\"scriptId\": \"SCRIPT_ID\"}' --json '{\"description\": \"v2 release\"}'`"
|
||||
|
||||
# ============================================================
|
||||
# EVENT SUBSCRIPTIONS
|
||||
# ============================================================
|
||||
- name: watch-drive-changes
|
||||
title: Watch for Drive Changes
|
||||
description: "Subscribe to change notifications on a Google Drive file or folder."
|
||||
category: engineering
|
||||
services: [events]
|
||||
steps:
|
||||
- "Create subscription: `gws events subscriptions create --json '{\"targetResource\": \"//drive.googleapis.com/drives/DRIVE_ID\", \"eventTypes\": [\"google.workspace.drive.file.v1.updated\"], \"notificationEndpoint\": {\"pubsubTopic\": \"projects/PROJECT/topics/TOPIC\"}, \"payloadOptions\": {\"includeResource\": true}}'`"
|
||||
- "List active subscriptions: `gws events subscriptions list`"
|
||||
- "Renew before expiry: `gws events +renew --subscription SUBSCRIPTION_ID`"
|
||||
|
||||
# ============================================================
|
||||
# CLASSROOM
|
||||
# ============================================================
|
||||
- name: create-classroom-course
|
||||
title: Create a Google Classroom Course
|
||||
description: "Create a Google Classroom course and invite students."
|
||||
category: education
|
||||
services: [classroom]
|
||||
steps:
|
||||
- "Create the course: `gws classroom courses create --json '{\"name\": \"Introduction to CS\", \"section\": \"Period 1\", \"room\": \"Room 101\", \"ownerId\": \"me\"}'`"
|
||||
- "Invite a student: `gws classroom invitations create --json '{\"courseId\": \"COURSE_ID\", \"userId\": \"student@school.edu\", \"role\": \"STUDENT\"}'`"
|
||||
- "List enrolled students: `gws classroom courses students list --params '{\"courseId\": \"COURSE_ID\"}' --format table`"
|
||||
|
||||
# ============================================================
|
||||
# MEET
|
||||
# ============================================================
|
||||
- name: create-meet-space
|
||||
title: Create a Google Meet Conference
|
||||
description: "Create a Google Meet meeting space and share the join link."
|
||||
category: scheduling
|
||||
services: [meet, gmail]
|
||||
steps:
|
||||
- "Create meeting space: `gws meet spaces create --json '{\"config\": {\"accessType\": \"OPEN\"}}'`"
|
||||
- "Copy the meeting URI from the response"
|
||||
- "Email the link: `gws gmail +send --to team@company.com --subject 'Join the meeting' --body 'Join here: MEETING_URI'`"
|
||||
|
||||
- name: review-meet-participants
|
||||
title: Review Google Meet Attendance
|
||||
description: "Review who attended a Google Meet conference and for how long."
|
||||
category: productivity
|
||||
services: [meet]
|
||||
steps:
|
||||
- "List recent conferences: `gws meet conferenceRecords list --format table`"
|
||||
- "List participants: `gws meet conferenceRecords participants list --params '{\"parent\": \"conferenceRecords/CONFERENCE_ID\"}' --format table`"
|
||||
- "Get session details: `gws meet conferenceRecords participants participantSessions list --params '{\"parent\": \"conferenceRecords/CONFERENCE_ID/participants/PARTICIPANT_ID\"}' --format table`"
|
||||
|
||||
# ============================================================
|
||||
# KEEP
|
||||
# ============================================================
|
||||
# ============================================================
|
||||
# SLIDES
|
||||
# ============================================================
|
||||
- name: create-presentation
|
||||
title: Create a Google Slides Presentation
|
||||
description: "Create a new Google Slides presentation and add initial slides."
|
||||
category: productivity
|
||||
services: [slides]
|
||||
steps:
|
||||
- "Create presentation: `gws slides presentations create --json '{\"title\": \"Quarterly Review Q2\"}'`"
|
||||
- "Get the presentation ID from the response"
|
||||
- "Share with team: `gws drive permissions create --params '{\"fileId\": \"PRESENTATION_ID\"}' --json '{\"role\": \"writer\", \"type\": \"user\", \"emailAddress\": \"team@company.com\"}'`"
|
||||
|
||||
# ============================================================
|
||||
# ALERT CENTER
|
||||
# ============================================================
|
||||
- name: triage-security-alerts
|
||||
title: Triage Google Workspace Security Alerts
|
||||
description: "List and review Google Workspace security alerts from Alert Center."
|
||||
category: security
|
||||
services: [alertcenter]
|
||||
steps:
|
||||
- "List active alerts: `gws alertcenter alerts list --format table`"
|
||||
- "Get alert details: `gws alertcenter alerts get --params '{\"alertId\": \"ALERT_ID\"}'`"
|
||||
- "Acknowledge an alert: `gws alertcenter alerts undelete --params '{\"alertId\": \"ALERT_ID\"}'`"
|
||||
|
||||
# ============================================================
|
||||
# CONSUMER PRODUCTIVITY
|
||||
# ============================================================
|
||||
- name: save-email-attachments
|
||||
title: Save Gmail Attachments to Google Drive
|
||||
description: "Find Gmail messages with attachments and save them to a Google Drive folder."
|
||||
category: productivity
|
||||
services: [gmail, drive]
|
||||
steps:
|
||||
- "Search for emails with attachments: `gws gmail users messages list --params '{\"userId\": \"me\", \"q\": \"has:attachment from:client@example.com\"}' --format table`"
|
||||
- "Get message details: `gws gmail users messages get --params '{\"userId\": \"me\", \"id\": \"MESSAGE_ID\"}'`"
|
||||
- "Download attachment: `gws gmail users messages attachments get --params '{\"userId\": \"me\", \"messageId\": \"MESSAGE_ID\", \"id\": \"ATTACHMENT_ID\"}'`"
|
||||
- "Upload to Drive folder: `gws drive +upload --file ./attachment.pdf --parent FOLDER_ID`"
|
||||
|
||||
# ============================================================
|
||||
# CROSS-SERVICE WORKFLOWS
|
||||
# ============================================================
|
||||
- name: send-team-announcement
|
||||
title: Announce via Gmail and Google Chat
|
||||
description: "Send a team announcement via both Gmail and a Google Chat space."
|
||||
category: communication
|
||||
services: [gmail, chat]
|
||||
steps:
|
||||
- "Send email: `gws gmail +send --to team@company.com --subject 'Important Update' --body 'Please review the attached policy changes.'`"
|
||||
- "Post in Chat: `gws chat +send --space spaces/TEAM_SPACE --text '📢 Important Update: Please check your email for policy changes.'`"
|
||||
|
||||
- name: create-feedback-form
|
||||
title: Create and Share a Google Form
|
||||
description: "Create a Google Form for feedback and share it via Gmail."
|
||||
category: productivity
|
||||
services: [forms, gmail]
|
||||
steps:
|
||||
- "Create form: `gws forms forms create --json '{\"info\": {\"title\": \"Event Feedback\", \"documentTitle\": \"Event Feedback Form\"}}'`"
|
||||
- "Get the form URL from the response (responderUri field)"
|
||||
- "Email the form: `gws gmail +send --to attendees@company.com --subject 'Please share your feedback' --body 'Fill out the form: FORM_URL'`"
|
||||
|
||||
- name: sync-contacts-to-sheet
|
||||
title: Export Google Contacts to Sheets
|
||||
description: "Export Google Contacts directory to a Google Sheets spreadsheet."
|
||||
category: productivity
|
||||
services: [people, sheets]
|
||||
steps:
|
||||
- "List contacts: `gws people people listDirectoryPeople --params '{\"readMask\": \"names,emailAddresses,phoneNumbers\", \"sources\": [\"DIRECTORY_SOURCE_TYPE_DOMAIN_PROFILE\"], \"pageSize\": 100}' --format json`"
|
||||
- "Create a sheet: `gws sheets +append --spreadsheet-id SHEET_ID --range 'Contacts' --values '[\"Name\", \"Email\", \"Phone\"]'`"
|
||||
- "Append each contact row: `gws sheets +append --spreadsheet-id SHEET_ID --range 'Contacts' --values '[\"Jane Doe\", \"jane@company.com\", \"+1-555-0100\"]'`"
|
||||
|
||||
# ============================================================
|
||||
# CONSUMER — COLLABORATION
|
||||
# ============================================================
|
||||
- name: share-event-materials
|
||||
title: Share Files with Meeting Attendees
|
||||
description: "Share Google Drive files with all attendees of a Google Calendar event."
|
||||
category: productivity
|
||||
services: [calendar, drive]
|
||||
steps:
|
||||
- "Get event attendees: `gws calendar events get --params '{\"calendarId\": \"primary\", \"eventId\": \"EVENT_ID\"}'`"
|
||||
- "Share file with each attendee: `gws drive permissions create --params '{\"fileId\": \"FILE_ID\"}' --json '{\"role\": \"reader\", \"type\": \"user\", \"emailAddress\": \"attendee@company.com\"}'`"
|
||||
- "Verify sharing: `gws drive permissions list --params '{\"fileId\": \"FILE_ID\"}' --format table`"
|
||||
# ============================================================
|
||||
# GMAIL — ORGANIZATION
|
||||
# ============================================================
|
||||
- name: create-vacation-responder
|
||||
title: Set Up a Gmail Vacation Responder
|
||||
description: "Enable a Gmail out-of-office auto-reply with a custom message and date range."
|
||||
category: productivity
|
||||
services: [gmail]
|
||||
steps:
|
||||
- "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}'`"
|
||||
- "Verify settings: `gws gmail users settings getVacation --params '{\"userId\": \"me\"}'`"
|
||||
- "Disable when back: `gws gmail users settings updateVacation --params '{\"userId\": \"me\"}' --json '{\"enableAutoReply\": false}'`"
|
||||
|
||||
# ============================================================
|
||||
# DRIVE — FILE OPERATIONS
|
||||
# ============================================================
|
||||
# ============================================================
|
||||
# SHEETS — DATA WORKFLOWS
|
||||
# ============================================================
|
||||
- name: create-events-from-sheet
|
||||
title: Create Google Calendar Events from a Sheet
|
||||
description: "Read event data from a Google Sheets spreadsheet and create Google Calendar entries for each row."
|
||||
category: productivity
|
||||
services: [sheets, calendar]
|
||||
steps:
|
||||
- "Read event data: `gws sheets +read --spreadsheet-id SHEET_ID --range 'Events!A2:D'`"
|
||||
- "For each row, create a calendar event: `gws calendar +insert --summary 'Team Standup' --start '2025-01-20T09:00' --duration 30 --attendees alice@company.com,bob@company.com`"
|
||||
|
||||
# ============================================================
|
||||
# CALENDAR — PLANNING
|
||||
# ============================================================
|
||||
- name: plan-weekly-schedule
|
||||
title: Plan Your Weekly Google Calendar Schedule
|
||||
description: "Review your Google Calendar week, identify gaps, and add events to fill them."
|
||||
category: scheduling
|
||||
services: [calendar]
|
||||
steps:
|
||||
- "Check this week's agenda: `gws calendar +agenda`"
|
||||
- "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\"}]}'`"
|
||||
- "Add a new event: `gws calendar +insert --summary 'Deep Work Block' --start '2025-01-21T14:00' --duration 120`"
|
||||
- "Review updated schedule: `gws calendar +agenda`"
|
||||
# ============================================================
|
||||
# MULTI-SERVICE PROJECT SETUP
|
||||
# ============================================================
|
||||
# ============================================================
|
||||
# DOCS — COLLABORATION
|
||||
# ============================================================
|
||||
- name: share-doc-and-notify
|
||||
title: Share a Google Doc and Notify Collaborators
|
||||
description: "Share a Google Docs document with edit access and email collaborators the link."
|
||||
category: productivity
|
||||
services: [drive, docs, gmail]
|
||||
steps:
|
||||
- "Find the doc: `gws drive files list --params '{\"q\": \"name contains '\\''Project Brief'\\'' and mimeType = '\\''application/vnd.google-apps.document'\\''\"}'`"
|
||||
- "Share with editor access: `gws drive permissions create --params '{\"fileId\": \"DOC_ID\"}' --json '{\"role\": \"writer\", \"type\": \"user\", \"emailAddress\": \"reviewer@company.com\"}'`"
|
||||
- "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'`"
|
||||
|
||||
# ============================================================
|
||||
# SHEETS — BACKUP
|
||||
# ============================================================
|
||||
- name: backup-sheet-as-csv
|
||||
title: Export a Google Sheet as CSV
|
||||
description: "Export a Google Sheets spreadsheet as a CSV file for local backup or processing."
|
||||
category: productivity
|
||||
services: [sheets, drive]
|
||||
steps:
|
||||
- "Get spreadsheet details: `gws sheets spreadsheets get --params '{\"spreadsheetId\": \"SHEET_ID\"}'`"
|
||||
- "Export as CSV: `gws drive files export --params '{\"fileId\": \"SHEET_ID\", \"mimeType\": \"text/csv\"}'`"
|
||||
- "Or read values directly: `gws sheets +read --spreadsheet-id SHEET_ID --range 'Sheet1' --format csv`"
|
||||
|
||||
# ============================================================
|
||||
# CALENDAR — TEAM
|
||||
# ============================================================
|
||||
# ============================================================
|
||||
# DRIVE — CLEANUP
|
||||
# ============================================================
|
||||
# ============================================================
|
||||
# GMAIL — ARCHIVING
|
||||
# ============================================================
|
||||
- name: save-email-to-doc
|
||||
title: Save a Gmail Message to Google Docs
|
||||
description: "Save a Gmail message body into a Google Doc for archival or reference."
|
||||
category: productivity
|
||||
services: [gmail, docs]
|
||||
steps:
|
||||
- "Find the message: `gws gmail users messages list --params '{\"userId\": \"me\", \"q\": \"subject:important from:boss@company.com\"}' --format table`"
|
||||
- "Get message content: `gws gmail users messages get --params '{\"userId\": \"me\", \"id\": \"MSG_ID\"}'`"
|
||||
- "Create a doc with the content: `gws docs documents create --json '{\"title\": \"Saved Email - Important Update\"}'`"
|
||||
- "Write the email body: `gws docs +write --document-id DOC_ID --text 'From: boss@company.com\nSubject: Important Update\n\n[EMAIL BODY]'`"
|
||||
|
||||
# ============================================================
|
||||
# SHEETS — FORMULAS
|
||||
# ============================================================
|
||||
# ============================================================
|
||||
# REPETITIVE WORKFLOWS
|
||||
# ============================================================
|
||||
# ============================================================
|
||||
# GMAIL — AUTOMATED REPLIES
|
||||
# ============================================================
|
||||
- name: batch-reply-to-emails
|
||||
title: Batch Reply to Similar Gmail Messages
|
||||
description: "Find Gmail messages matching a query and send a standard reply to each one."
|
||||
category: productivity
|
||||
services: [gmail]
|
||||
steps:
|
||||
- "Find messages needing replies: `gws gmail users messages list --params '{\"userId\": \"me\", \"q\": \"is:unread from:customers label:support\"}' --format table`"
|
||||
- "Read a message: `gws gmail users messages get --params '{\"userId\": \"me\", \"id\": \"MSG_ID\"}'`"
|
||||
- "Send a reply: `gws gmail +send --to sender@example.com --subject 'Re: Your Request' --body 'Thank you for reaching out. We have received your request and will respond within 24 hours.'`"
|
||||
- "Mark as read: `gws gmail users messages modify --params '{\"userId\": \"me\", \"id\": \"MSG_ID\"}' --json '{\"removeLabelIds\": [\"UNREAD\"]}'`"
|
||||
|
||||
# ============================================================
|
||||
# DRIVE — BATCH OPERATIONS
|
||||
# ============================================================
|
||||
- name: batch-rename-files
|
||||
title: Batch Rename Google Drive Files
|
||||
description: "Rename multiple Google Drive files matching a pattern to follow a consistent naming convention."
|
||||
category: productivity
|
||||
services: [drive]
|
||||
steps:
|
||||
- "Find files to rename: `gws drive files list --params '{\"q\": \"name contains '\\''Report'\\''\"}' --format table`"
|
||||
- "Rename a file: `gws drive files update --params '{\"fileId\": \"FILE_ID\"}' --json '{\"name\": \"2025-Q1 Report - Final\"}'`"
|
||||
- "Verify the rename: `gws drive files get --params '{\"fileId\": \"FILE_ID\", \"fields\": \"name\"}'`"
|
||||
|
||||
# ============================================================
|
||||
# SHEETS — DATA SYNC
|
||||
# ============================================================
|
||||
- name: compare-sheet-tabs
|
||||
title: Compare Two Google Sheets Tabs
|
||||
description: "Read data from two tabs in a Google Sheet to compare and identify differences."
|
||||
category: productivity
|
||||
services: [sheets]
|
||||
steps:
|
||||
- "Read the first tab: `gws sheets +read --spreadsheet-id SHEET_ID --range 'January!A1:D'`"
|
||||
- "Read the second tab: `gws sheets +read --spreadsheet-id SHEET_ID --range 'February!A1:D'`"
|
||||
- "Compare the data and identify changes"
|
||||
|
||||
# ============================================================
|
||||
# CALENDAR — COORDINATION
|
||||
# ============================================================
|
||||
- name: batch-invite-to-event
|
||||
title: Add Multiple Attendees to a Calendar Event
|
||||
description: "Add a list of attendees to an existing Google Calendar event and send notifications."
|
||||
category: scheduling
|
||||
services: [calendar]
|
||||
steps:
|
||||
- "Get the event: `gws calendar events get --params '{\"calendarId\": \"primary\", \"eventId\": \"EVENT_ID\"}'`"
|
||||
- "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\"}]}'`"
|
||||
- "Verify attendees: `gws calendar events get --params '{\"calendarId\": \"primary\", \"eventId\": \"EVENT_ID\"}'`"
|
||||
|
||||
# ============================================================
|
||||
# GMAIL — NOTIFICATION ROUTING
|
||||
# ============================================================
|
||||
- name: forward-labeled-emails
|
||||
title: Forward Labeled Gmail Messages
|
||||
description: "Find Gmail messages with a specific label and forward them to another address."
|
||||
category: productivity
|
||||
services: [gmail]
|
||||
steps:
|
||||
- "Find labeled messages: `gws gmail users messages list --params '{\"userId\": \"me\", \"q\": \"label:needs-review\"}' --format table`"
|
||||
- "Get message content: `gws gmail users messages get --params '{\"userId\": \"me\", \"id\": \"MSG_ID\"}'`"
|
||||
- "Forward via new email: `gws gmail +send --to manager@company.com --subject 'FW: [Original Subject]' --body 'Forwarding for your review:\n\n[Original Message Body]'`"
|
||||
|
||||
# ============================================================
|
||||
# DOCS + SHEETS — CROSS-SERVICE
|
||||
# ============================================================
|
||||
- name: generate-report-from-sheet
|
||||
title: Generate a Google Docs Report from Sheet Data
|
||||
description: "Read data from a Google Sheet and create a formatted Google Docs report."
|
||||
category: productivity
|
||||
services: [sheets, docs, drive]
|
||||
steps:
|
||||
- "Read the data: `gws sheets +read --spreadsheet-id SHEET_ID --range 'Sales!A1:D'`"
|
||||
- "Create the report doc: `gws docs documents create --json '{\"title\": \"Sales Report - January 2025\"}'`"
|
||||
- "Write the report: `gws docs +write --document-id DOC_ID --text '## Sales Report - January 2025\n\n### Summary\nTotal deals: 45\nRevenue: $125,000\n\n### Top Deals\n1. Acme Corp - $25,000\n2. Widget Inc - $18,000'`"
|
||||
- "Share with stakeholders: `gws drive permissions create --params '{\"fileId\": \"DOC_ID\"}' --json '{\"role\": \"reader\", \"type\": \"user\", \"emailAddress\": \"cfo@company.com\"}'`"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-admin-reports
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to audit logs and usage reports via the `gws` CLI."
|
||||
description: "Google Workspace Admin SDK: Audit logs and usage reports."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-admin
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to manage users, groups, and devices via the `gws` CLI."
|
||||
description: "Google Workspace Admin SDK: Manage users, groups, and devices."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-alertcenter
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to manage workspace security alerts via the `gws` CLI."
|
||||
description: "Google Workspace Alert Center: Manage Workspace security alerts."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-apps-script-push
|
||||
version: 1.0.0
|
||||
description: "Upload local files to an Apps Script project"
|
||||
description: "Google Apps Script: Upload local files to an Apps Script project."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-apps-script
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to manage and execute apps script projects via the `gws` CLI."
|
||||
description: "Google Apps Script: Manage and execute Apps Script projects."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-calendar-agenda
|
||||
version: 1.0.0
|
||||
description: "Show upcoming events across all calendars"
|
||||
description: "Google Calendar: Show upcoming events across all calendars."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-calendar-insert
|
||||
version: 1.0.0
|
||||
description: "create a new event"
|
||||
description: "Google Calendar: Create a new event."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-calendar
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to manage calendars and events via the `gws` CLI."
|
||||
description: "Google Calendar: Manage calendars and events."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-chat-send
|
||||
version: 1.0.0
|
||||
description: "Send a message to a space"
|
||||
description: "Google Chat: Send a message to a space."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-chat
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to manage chat spaces and messages via the `gws` CLI."
|
||||
description: "Google Chat: Manage Chat spaces and messages."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-classroom
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to manage classes, rosters, and coursework via the `gws` CLI."
|
||||
description: "Google Classroom: Manage classes, rosters, and coursework."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-cloudidentity
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to manage identity groups and memberships via the `gws` CLI."
|
||||
description: "Google Cloud Identity: Manage identity groups and memberships."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-docs-write
|
||||
version: 1.0.0
|
||||
description: "Append text to a document"
|
||||
description: "Google Docs: Append text to a document."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-docs
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to read and write google docs via the `gws` CLI."
|
||||
description: "Read and write Google Docs."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-drive-upload
|
||||
version: 1.0.0
|
||||
description: "Upload a file with automatic metadata"
|
||||
description: "Google Drive: Upload a file with automatic metadata."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-drive
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to manage files, folders, and shared drives via the `gws` CLI."
|
||||
description: "Google Drive: Manage files, folders, and shared drives."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-events-renew
|
||||
version: 1.0.0
|
||||
description: "Renew/reactivate Workspace Events subscriptions"
|
||||
description: "Google Workspace Events: Renew/reactivate Workspace Events subscriptions."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-events-subscribe
|
||||
version: 1.0.0
|
||||
description: "Subscribe to Workspace events and stream them as NDJSON"
|
||||
description: "Google Workspace Events: Subscribe to Workspace events and stream them as NDJSON."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-events
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to subscribe to google workspace events via the `gws` CLI."
|
||||
description: "Subscribe to Google Workspace events."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-forms
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to read and write google forms via the `gws` CLI."
|
||||
description: "Read and write Google Forms."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-gmail-send
|
||||
version: 1.0.0
|
||||
description: "Send an email"
|
||||
description: "Gmail: Send an email."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-gmail-triage
|
||||
version: 1.0.0
|
||||
description: "Show unread inbox summary (sender, subject, date)"
|
||||
description: "Gmail: Show unread inbox summary (sender, subject, date)."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-gmail-watch
|
||||
version: 1.0.0
|
||||
description: "Watch for new emails and stream them as NDJSON"
|
||||
description: "Gmail: Watch for new emails and stream them as NDJSON."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-gmail
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to send, read, and manage email via the `gws` CLI."
|
||||
description: "Gmail: Send, read, and manage email."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-groupssettings
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to manage google groups settings via the `gws` CLI."
|
||||
description: "Manage Google Groups settings."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-keep
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to manage google keep notes via the `gws` CLI."
|
||||
description: "Manage Google Keep notes."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-licensing
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to manage product licenses via the `gws` CLI."
|
||||
description: "Google Workspace Enterprise License Manager: Manage product licenses."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-meet
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to manage google meet conferences via the `gws` CLI."
|
||||
description: "Manage Google Meet conferences."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-modelarmor-create-template
|
||||
version: 1.0.0
|
||||
description: "Create a new Model Armor template"
|
||||
description: "Google Model Armor: Create a new Model Armor template."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "security"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-modelarmor-sanitize-prompt
|
||||
version: 1.0.0
|
||||
description: "Sanitize a user prompt through a Model Armor template"
|
||||
description: "Google Model Armor: Sanitize a user prompt through a Model Armor template."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "security"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-modelarmor-sanitize-response
|
||||
version: 1.0.0
|
||||
description: "Sanitize a model response through a Model Armor template"
|
||||
description: "Google Model Armor: Sanitize a model response through a Model Armor template."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "security"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-modelarmor
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to filter user-generated content for safety via the `gws` CLI."
|
||||
description: "Google Model Armor: Filter user-generated content for safety."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-people
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to manage contacts and profiles via the `gws` CLI."
|
||||
description: "Google People: Manage contacts and profiles."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-reseller
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to manage workspace subscriptions via the `gws` CLI."
|
||||
description: "Google Workspace Reseller: Manage Workspace subscriptions."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-shared
|
||||
version: 1.0.0
|
||||
description: "Shared patterns, authentication, and global flags for all gws commands."
|
||||
description: "gws CLI: Shared patterns for authentication, global flags, and output formatting."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-sheets-append
|
||||
version: 1.0.0
|
||||
description: "Append a row to a spreadsheet"
|
||||
description: "Google Sheets: Append a row to a spreadsheet."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-sheets-read
|
||||
version: 1.0.0
|
||||
description: "Read values from a spreadsheet"
|
||||
description: "Google Sheets: Read values from a spreadsheet."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-sheets
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to read and write spreadsheets via the `gws` CLI."
|
||||
description: "Google Sheets: Read and write spreadsheets."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-slides
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to read and write presentations via the `gws` CLI."
|
||||
description: "Google Slides: Read and write presentations."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-tasks
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to manage task lists and tasks via the `gws` CLI."
|
||||
description: "Google Tasks: Manage task lists and tasks."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: gws-vault
|
||||
version: 1.0.0
|
||||
description: "USE WHEN the user wants to manage ediscovery holds and exports via the `gws` CLI."
|
||||
description: "Google Vault: Manage eDiscovery holds and exports."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
name: gws-workflow-email-to-task
|
||||
version: 1.0.0
|
||||
description: "Google Workflow: Convert a Gmail message into a Google Tasks entry."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
cliHelp: "gws workflow +email-to-task --help"
|
||||
---
|
||||
|
||||
# workflow +email-to-task
|
||||
|
||||
> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it.
|
||||
|
||||
Convert a Gmail message into a Google Tasks entry
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
gws workflow +email-to-task --message-id <ID>
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Required | Default | Description |
|
||||
|------|----------|---------|-------------|
|
||||
| `--message-id` | ✓ | — | Gmail message ID to convert |
|
||||
| `--tasklist` | — | @default | Task list ID (default: @default) |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
gws workflow +email-to-task --message-id MSG_ID
|
||||
gws workflow +email-to-task --message-id MSG_ID --tasklist LIST_ID
|
||||
```
|
||||
|
||||
## Tips
|
||||
|
||||
- Reads the email subject as the task title and snippet as notes.
|
||||
- Creates a new task — confirm with the user before executing.
|
||||
|
||||
## See Also
|
||||
|
||||
- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth
|
||||
- [gws-workflow](../gws-workflow/SKILL.md) — All cross-service productivity workflows commands
|
||||
@@ -0,0 +1,50 @@
|
||||
---
|
||||
name: gws-workflow-file-announce
|
||||
version: 1.0.0
|
||||
description: "Google Workflow: Announce a Drive file in a Chat space."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
cliHelp: "gws workflow +file-announce --help"
|
||||
---
|
||||
|
||||
# workflow +file-announce
|
||||
|
||||
> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it.
|
||||
|
||||
Announce a Drive file in a Chat space
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
gws workflow +file-announce --file-id <ID> --space <SPACE>
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Required | Default | Description |
|
||||
|------|----------|---------|-------------|
|
||||
| `--file-id` | ✓ | — | Drive file ID to announce |
|
||||
| `--space` | ✓ | — | Chat space name (e.g. spaces/SPACE_ID) |
|
||||
| `--message` | — | — | Custom announcement message |
|
||||
| `--format` | — | — | Output format: json (default), table, yaml, csv |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
gws workflow +file-announce --file-id FILE_ID --space spaces/ABC123
|
||||
gws workflow +file-announce --file-id FILE_ID --space spaces/ABC123 --message 'Check this out!'
|
||||
```
|
||||
|
||||
## Tips
|
||||
|
||||
- This is a write command — sends a Chat message.
|
||||
- Use `gws drive +upload` first to upload the file, then announce it here.
|
||||
- Fetches the file name from Drive to build the announcement.
|
||||
|
||||
## See Also
|
||||
|
||||
- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth
|
||||
- [gws-workflow](../gws-workflow/SKILL.md) — All cross-service productivity workflows commands
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
name: gws-workflow-meeting-prep
|
||||
version: 1.0.0
|
||||
description: "Google Workflow: Prepare for your next meeting: agenda, attendees, and linked docs."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
cliHelp: "gws workflow +meeting-prep --help"
|
||||
---
|
||||
|
||||
# workflow +meeting-prep
|
||||
|
||||
> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it.
|
||||
|
||||
Prepare for your next meeting: agenda, attendees, and linked docs
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
gws workflow +meeting-prep
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Required | Default | Description |
|
||||
|------|----------|---------|-------------|
|
||||
| `--calendar` | — | primary | Calendar ID (default: primary) |
|
||||
| `--format` | — | — | Output format: json (default), table, yaml, csv |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
gws workflow +meeting-prep
|
||||
gws workflow +meeting-prep --calendar Work
|
||||
```
|
||||
|
||||
## Tips
|
||||
|
||||
- Read-only — never modifies data.
|
||||
- Shows the next upcoming event with attendees and description.
|
||||
|
||||
## See Also
|
||||
|
||||
- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth
|
||||
- [gws-workflow](../gws-workflow/SKILL.md) — All cross-service productivity workflows commands
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
name: gws-workflow-standup-report
|
||||
version: 1.0.0
|
||||
description: "Google Workflow: Today's meetings + open tasks as a standup summary."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
cliHelp: "gws workflow +standup-report --help"
|
||||
---
|
||||
|
||||
# workflow +standup-report
|
||||
|
||||
> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it.
|
||||
|
||||
Today's meetings + open tasks as a standup summary
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
gws workflow +standup-report
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Required | Default | Description |
|
||||
|------|----------|---------|-------------|
|
||||
| `--format` | — | — | Output format: json (default), table, yaml, csv |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
gws workflow +standup-report
|
||||
gws workflow +standup-report --format table
|
||||
```
|
||||
|
||||
## Tips
|
||||
|
||||
- Read-only — never modifies data.
|
||||
- Combines calendar agenda (today) with tasks list.
|
||||
|
||||
## See Also
|
||||
|
||||
- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth
|
||||
- [gws-workflow](../gws-workflow/SKILL.md) — All cross-service productivity workflows commands
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
name: gws-workflow-weekly-digest
|
||||
version: 1.0.0
|
||||
description: "Google Workflow: Weekly summary: this week's meetings + unread email count."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
cliHelp: "gws workflow +weekly-digest --help"
|
||||
---
|
||||
|
||||
# workflow +weekly-digest
|
||||
|
||||
> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it.
|
||||
|
||||
Weekly summary: this week's meetings + unread email count
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
gws workflow +weekly-digest
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Required | Default | Description |
|
||||
|------|----------|---------|-------------|
|
||||
| `--format` | — | — | Output format: json (default), table, yaml, csv |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
gws workflow +weekly-digest
|
||||
gws workflow +weekly-digest --format table
|
||||
```
|
||||
|
||||
## Tips
|
||||
|
||||
- Read-only — never modifies data.
|
||||
- Combines calendar agenda (week) with gmail triage summary.
|
||||
|
||||
## See Also
|
||||
|
||||
- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth
|
||||
- [gws-workflow](../gws-workflow/SKILL.md) — All cross-service productivity workflows commands
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
name: gws-workflow
|
||||
version: 1.0.0
|
||||
description: "Google Workflow: Cross-service productivity workflows."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "productivity"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
cliHelp: "gws workflow --help"
|
||||
---
|
||||
|
||||
# workflow (v1)
|
||||
|
||||
> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it.
|
||||
|
||||
```bash
|
||||
gws workflow <resource> <method> [flags]
|
||||
```
|
||||
|
||||
## Helper Commands
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
| [`+standup-report`](../gws-workflow-standup-report/SKILL.md) | Today's meetings + open tasks as a standup summary |
|
||||
| [`+meeting-prep`](../gws-workflow-meeting-prep/SKILL.md) | Prepare for your next meeting: agenda, attendees, and linked docs |
|
||||
| [`+email-to-task`](../gws-workflow-email-to-task/SKILL.md) | Convert a Gmail message into a Google Tasks entry |
|
||||
| [`+weekly-digest`](../gws-workflow-weekly-digest/SKILL.md) | Weekly summary: this week's meetings + unread email count |
|
||||
| [`+file-announce`](../gws-workflow-file-announce/SKILL.md) | Announce a Drive file in a Chat space |
|
||||
|
||||
## Discovering Commands
|
||||
|
||||
Before calling any API method, inspect it:
|
||||
|
||||
```bash
|
||||
# Browse resources and methods
|
||||
gws workflow --help
|
||||
|
||||
# Inspect a method's required params, types, and defaults
|
||||
gws schema workflow.<resource>.<method>
|
||||
```
|
||||
|
||||
Use `gws schema` output to build your `--params` and `--json` flags.
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
name: persona-content-creator
|
||||
version: 1.0.0
|
||||
description: "Create, organize, and distribute content across Workspace."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "persona"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
skills: ["gws-docs", "gws-drive", "gws-gmail", "gws-chat", "gws-slides"]
|
||||
---
|
||||
|
||||
# Content Creator
|
||||
|
||||
> **PREREQUISITE:** Load the following utility skills to operate as this persona: `gws-docs`, `gws-drive`, `gws-gmail`, `gws-chat`, `gws-slides`
|
||||
|
||||
Create, organize, and distribute content across Workspace.
|
||||
|
||||
## Relevant Workflows
|
||||
- `gws workflow +file-announce`
|
||||
|
||||
## Instructions
|
||||
- Draft content in Google Docs with `gws docs +write`.
|
||||
- Organize content assets in Drive folders — use `gws drive files list` to browse.
|
||||
- Share finished content by announcing in Chat with `gws workflow +file-announce`.
|
||||
- Send content review requests via email with `gws gmail +send`.
|
||||
- Upload media assets to Drive with `gws drive +upload`.
|
||||
|
||||
## Tips
|
||||
- Use `gws docs +write` for quick content updates — it handles the Docs API formatting.
|
||||
- Keep a 'Content Calendar' in a shared Sheet for tracking publication schedules.
|
||||
- Use `--format yaml` for human-readable output when debugging API responses.
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
name: persona-customer-support
|
||||
version: 1.0.0
|
||||
description: "Manage customer support — track tickets, respond, escalate issues."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "persona"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
skills: ["gws-gmail", "gws-sheets", "gws-chat", "gws-calendar"]
|
||||
---
|
||||
|
||||
# Customer Support Agent
|
||||
|
||||
> **PREREQUISITE:** Load the following utility skills to operate as this persona: `gws-gmail`, `gws-sheets`, `gws-chat`, `gws-calendar`
|
||||
|
||||
Manage customer support — track tickets, respond, escalate issues.
|
||||
|
||||
## Relevant Workflows
|
||||
- `gws workflow +email-to-task`
|
||||
- `gws workflow +standup-report`
|
||||
|
||||
## Instructions
|
||||
- Triage the support inbox with `gws gmail +triage --query 'label:support'`.
|
||||
- Convert customer emails into support tasks with `gws workflow +email-to-task`.
|
||||
- Log ticket status updates in a tracking sheet with `gws sheets +append`.
|
||||
- Escalate urgent issues to the team Chat space.
|
||||
- Schedule follow-up calls with customers using `gws calendar +insert`.
|
||||
|
||||
## Tips
|
||||
- Use `gws gmail +triage --labels` to see email categories at a glance.
|
||||
- Set up Gmail filters for auto-labeling support requests.
|
||||
- Use `--format table` for quick status dashboard views.
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
---
|
||||
name: persona-event-coordinator
|
||||
version: 1.0.0
|
||||
description: "Plan and manage events — scheduling, invitations, and logistics."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "persona"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
skills: ["gws-calendar", "gws-gmail", "gws-drive", "gws-chat", "gws-sheets"]
|
||||
---
|
||||
|
||||
# Event Coordinator
|
||||
|
||||
> **PREREQUISITE:** Load the following utility skills to operate as this persona: `gws-calendar`, `gws-gmail`, `gws-drive`, `gws-chat`, `gws-sheets`
|
||||
|
||||
Plan and manage events — scheduling, invitations, and logistics.
|
||||
|
||||
## Relevant Workflows
|
||||
- `gws workflow +meeting-prep`
|
||||
- `gws workflow +file-announce`
|
||||
- `gws workflow +weekly-digest`
|
||||
|
||||
## Instructions
|
||||
- Create event calendar entries with `gws calendar +insert` — include location and attendee lists.
|
||||
- Prepare event materials and upload to Drive with `gws drive +upload`.
|
||||
- Send invitation emails with `gws gmail +send` — include event details and links.
|
||||
- Announce updates in Chat spaces with `gws workflow +file-announce`.
|
||||
- Track RSVPs and logistics in Sheets with `gws sheets +append`.
|
||||
|
||||
## Tips
|
||||
- Use `gws calendar +agenda --days 30` for long-range event planning.
|
||||
- Create a dedicated calendar for each major event series.
|
||||
- Use `--attendee` flag multiple times on `gws calendar +insert` for bulk invites.
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
---
|
||||
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.
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
name: persona-hr-coordinator
|
||||
version: 1.0.0
|
||||
description: "Handle HR workflows — onboarding, announcements, and employee comms."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "persona"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
skills: ["gws-gmail", "gws-calendar", "gws-drive", "gws-chat", "gws-admin"]
|
||||
---
|
||||
|
||||
# HR Coordinator
|
||||
|
||||
> **PREREQUISITE:** Load the following utility skills to operate as this persona: `gws-gmail`, `gws-calendar`, `gws-drive`, `gws-chat`, `gws-admin`
|
||||
|
||||
Handle HR workflows — onboarding, announcements, and employee comms.
|
||||
|
||||
## Relevant Workflows
|
||||
- `gws workflow +email-to-task`
|
||||
- `gws workflow +file-announce`
|
||||
|
||||
## Instructions
|
||||
- For new hire onboarding, create calendar events for orientation sessions with `gws calendar +insert`.
|
||||
- Upload onboarding docs to a shared Drive folder with `gws drive +upload`.
|
||||
- Announce new hires in Chat spaces with `gws workflow +file-announce` to share their profile doc.
|
||||
- Convert email requests into tracked tasks with `gws workflow +email-to-task`.
|
||||
- Send bulk announcements with `gws gmail +send` — use clear subject lines.
|
||||
|
||||
## Tips
|
||||
- Always use `--sanitize` for PII-sensitive operations.
|
||||
- Create a dedicated 'HR Onboarding' calendar for tracking orientation schedules.
|
||||
- Use `gws admin` for user account management (creating accounts, resetting passwords).
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
name: persona-it-admin
|
||||
version: 1.0.0
|
||||
description: "Administer IT — manage users, monitor security, configure Workspace."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "persona"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
skills: ["gws-admin", "gws-gmail", "gws-drive", "gws-calendar"]
|
||||
---
|
||||
|
||||
# IT Administrator
|
||||
|
||||
> **PREREQUISITE:** Load the following utility skills to operate as this persona: `gws-admin`, `gws-gmail`, `gws-drive`, `gws-calendar`
|
||||
|
||||
Administer IT — manage users, monitor security, configure Workspace.
|
||||
|
||||
## Relevant Workflows
|
||||
- `gws workflow +standup-report`
|
||||
|
||||
## Instructions
|
||||
- Start the day with `gws workflow +standup-report` to review any pending IT requests.
|
||||
- Manage user accounts with `gws admin` — create, suspend, or update users.
|
||||
- Monitor suspicious login activity and review audit logs.
|
||||
- Configure Drive sharing policies to enforce organizational security.
|
||||
- Set up group email aliases and distribution lists.
|
||||
|
||||
## Tips
|
||||
- Use `gws admin` extensively — it covers user management, groups, and org units.
|
||||
- Always use `--dry-run` before bulk user operations.
|
||||
- Review `gws auth status` regularly to verify service account permissions.
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
---
|
||||
name: persona-project-manager
|
||||
version: 1.0.0
|
||||
description: "Coordinate projects — track tasks, schedule meetings, and share docs."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "persona"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
skills: ["gws-drive", "gws-sheets", "gws-calendar", "gws-gmail", "gws-chat"]
|
||||
---
|
||||
|
||||
# Project Manager
|
||||
|
||||
> **PREREQUISITE:** Load the following utility skills to operate as this persona: `gws-drive`, `gws-sheets`, `gws-calendar`, `gws-gmail`, `gws-chat`
|
||||
|
||||
Coordinate projects — track tasks, schedule meetings, and share docs.
|
||||
|
||||
## Relevant Workflows
|
||||
- `gws workflow +standup-report`
|
||||
- `gws workflow +weekly-digest`
|
||||
- `gws workflow +file-announce`
|
||||
|
||||
## Instructions
|
||||
- Start the week with `gws workflow +weekly-digest` for a snapshot of upcoming meetings and unread items.
|
||||
- Track project status in Sheets using `gws sheets +append` to log updates.
|
||||
- Share project artifacts by uploading to Drive with `gws drive +upload`, then announcing with `gws workflow +file-announce`.
|
||||
- Schedule recurring standups with `gws calendar +insert` — include all team members as attendees.
|
||||
- Send status update emails to stakeholders with `gws gmail +send`.
|
||||
|
||||
## Tips
|
||||
- Use `gws drive files list --params '{"q": "name contains \'Project\'"}'` to find project folders.
|
||||
- Pipe triage output through `jq` for filtering by sender or subject.
|
||||
- Use `--dry-run` before any write operations to preview what will happen.
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
name: persona-researcher
|
||||
version: 1.0.0
|
||||
description: "Organize research — manage references, notes, and collaboration."
|
||||
metadata:
|
||||
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.
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
---
|
||||
name: persona-sales-ops
|
||||
version: 1.0.0
|
||||
description: "Manage sales workflows — track deals, schedule calls, client comms."
|
||||
metadata:
|
||||
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.
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
---
|
||||
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.
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
---
|
||||
name: recipe-audit-external-sharing
|
||||
version: 1.0.0
|
||||
description: "Find and review Google Drive files shared outside the organization."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "recipe"
|
||||
domain: "security"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
skills: ["gws-drive"]
|
||||
---
|
||||
|
||||
# Audit External Drive Sharing
|
||||
|
||||
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive`
|
||||
|
||||
Find and review Google Drive files shared outside the organization.
|
||||
|
||||
> [!CAUTION]
|
||||
> Revoking permissions immediately removes access. Confirm with the file owner first.
|
||||
|
||||
## Steps
|
||||
|
||||
1. List externally shared files: `gws drive files list --params '{"q": "visibility = '\''anyoneWithLink'\''"}'`
|
||||
2. Check permissions on a file: `gws drive permissions list --params '{"fileId": "FILE_ID"}'`
|
||||
3. Revoke if needed: `gws drive permissions delete --params '{"fileId": "FILE_ID", "permissionId": "PERM_ID"}'`
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
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-id SHEET_ID --range 'Sheet1' --format csv`
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
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"}'`
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
name: recipe-batch-rename-files
|
||||
version: 1.0.0
|
||||
description: "Rename multiple Google Drive files matching a pattern to follow a consistent naming convention."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "recipe"
|
||||
domain: "productivity"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
skills: ["gws-drive"]
|
||||
---
|
||||
|
||||
# Batch Rename Google Drive Files
|
||||
|
||||
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive`
|
||||
|
||||
Rename multiple Google Drive files matching a pattern to follow a consistent naming convention.
|
||||
|
||||
## Steps
|
||||
|
||||
1. Find files to rename: `gws drive files list --params '{"q": "name contains '\''Report'\''"}' --format table`
|
||||
2. Rename a file: `gws drive files update --params '{"fileId": "FILE_ID"}' --json '{"name": "2025-Q1 Report - Final"}'`
|
||||
3. Verify the rename: `gws drive files get --params '{"fileId": "FILE_ID", "fields": "name"}'`
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
name: recipe-batch-reply-to-emails
|
||||
version: 1.0.0
|
||||
description: "Find Gmail messages matching a query and send a standard reply to each one."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "recipe"
|
||||
domain: "productivity"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
skills: ["gws-gmail"]
|
||||
---
|
||||
|
||||
# Batch Reply to Similar Gmail Messages
|
||||
|
||||
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-gmail`
|
||||
|
||||
Find Gmail messages matching a query and send a standard reply to each one.
|
||||
|
||||
## Steps
|
||||
|
||||
1. Find messages needing replies: `gws gmail users messages list --params '{"userId": "me", "q": "is:unread from:customers label:support"}' --format table`
|
||||
2. Read a message: `gws gmail users messages get --params '{"userId": "me", "id": "MSG_ID"}'`
|
||||
3. Send a reply: `gws gmail +send --to sender@example.com --subject 'Re: Your Request' --body 'Thank you for reaching out. We have received your request and will respond within 24 hours.'`
|
||||
4. Mark as read: `gws gmail users messages modify --params '{"userId": "me", "id": "MSG_ID"}' --json '{"removeLabelIds": ["UNREAD"]}'`
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
---
|
||||
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`
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
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`
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
---
|
||||
name: recipe-cancel-and-notify
|
||||
version: 1.0.0
|
||||
description: "Delete a Google Calendar event and send a cancellation email via Gmail."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "recipe"
|
||||
domain: "scheduling"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
skills: ["gws-calendar", "gws-gmail"]
|
||||
---
|
||||
|
||||
# Cancel Meeting and Notify Attendees
|
||||
|
||||
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar`, `gws-gmail`
|
||||
|
||||
Delete a Google Calendar event and send a cancellation email via Gmail.
|
||||
|
||||
> [!CAUTION]
|
||||
> Deleting with sendUpdates sends cancellation emails to all attendees.
|
||||
|
||||
## Steps
|
||||
|
||||
1. Find the meeting: `gws calendar +agenda --format json` and locate the event ID
|
||||
2. Delete the event: `gws calendar events delete --params '{"calendarId": "primary", "eventId": "EVENT_ID", "sendUpdates": "all"}'`
|
||||
3. Send follow-up: `gws gmail +send --to attendees --subject 'Meeting Cancelled: [Title]' --body 'Apologies, this meeting has been cancelled.'`
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
name: recipe-collect-form-responses
|
||||
version: 1.0.0
|
||||
description: "Retrieve and review responses from a Google Form."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "recipe"
|
||||
domain: "productivity"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
skills: ["gws-forms"]
|
||||
---
|
||||
|
||||
# Check Form Responses
|
||||
|
||||
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-forms`
|
||||
|
||||
Retrieve and review responses from a Google Form.
|
||||
|
||||
## Steps
|
||||
|
||||
1. List forms: `gws forms forms list` (if you don't have the form ID)
|
||||
2. Get form details: `gws forms forms get --params '{"formId": "FORM_ID"}'`
|
||||
3. Get responses: `gws forms forms responses list --params '{"formId": "FORM_ID"}' --format table`
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
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-id SHEET_ID --range 'January!A1:D'`
|
||||
2. Read the second tab: `gws sheets +read --spreadsheet-id SHEET_ID --range 'February!A1:D'`
|
||||
3. Compare the data and identify changes
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
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"}}]}'`
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
name: recipe-create-classroom-course
|
||||
version: 1.0.0
|
||||
description: "Create a Google Classroom course and invite students."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "recipe"
|
||||
domain: "education"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
skills: ["gws-classroom"]
|
||||
---
|
||||
|
||||
# Create a Google Classroom Course
|
||||
|
||||
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-classroom`
|
||||
|
||||
Create a Google Classroom course and invite students.
|
||||
|
||||
## Steps
|
||||
|
||||
1. Create the course: `gws classroom courses create --json '{"name": "Introduction to CS", "section": "Period 1", "room": "Room 101", "ownerId": "me"}'`
|
||||
2. Invite a student: `gws classroom invitations create --json '{"courseId": "COURSE_ID", "userId": "student@school.edu", "role": "STUDENT"}'`
|
||||
3. List enrolled students: `gws classroom courses students list --params '{"courseId": "COURSE_ID"}' --format table`
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
---
|
||||
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"}'`
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
---
|
||||
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-id SHEET_ID --range 'Events!A2:D'`
|
||||
2. For each row, create a calendar event: `gws calendar +insert --summary 'Team Standup' --start '2025-01-20T09:00' --duration 30 --attendees alice@company.com,bob@company.com`
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
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-id SHEET_ID --range 'Sheet1' --values '["Date", "Category", "Description", "Amount"]'`
|
||||
3. Add first entry: `gws sheets +append --spreadsheet-id 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"}'`
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
name: recipe-create-feedback-form
|
||||
version: 1.0.0
|
||||
description: "Create a Google Form for feedback and share it via Gmail."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "recipe"
|
||||
domain: "productivity"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
skills: ["gws-forms", "gws-gmail"]
|
||||
---
|
||||
|
||||
# Create and Share a Google Form
|
||||
|
||||
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-forms`, `gws-gmail`
|
||||
|
||||
Create a Google Form for feedback and share it via Gmail.
|
||||
|
||||
## Steps
|
||||
|
||||
1. Create form: `gws forms forms create --json '{"info": {"title": "Event Feedback", "documentTitle": "Event Feedback Form"}}'`
|
||||
2. Get the form URL from the response (responderUri field)
|
||||
3. Email the form: `gws gmail +send --to attendees@company.com --subject 'Please share your feedback' --body 'Fill out the form: FORM_URL'`
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
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`
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
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'`
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
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"}'`
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
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}'`
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
name: recipe-create-task-list
|
||||
version: 1.0.0
|
||||
description: "Set up a new Google Tasks list with initial tasks."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "recipe"
|
||||
domain: "productivity"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
skills: ["gws-tasks"]
|
||||
---
|
||||
|
||||
# Create a Task List and Add Tasks
|
||||
|
||||
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-tasks`
|
||||
|
||||
Set up a new Google Tasks list with initial tasks.
|
||||
|
||||
## Steps
|
||||
|
||||
1. Create task list: `gws tasks tasklists insert --json '{"title": "Q2 Goals"}'`
|
||||
2. Add a task: `gws tasks tasks insert --params '{"tasklist": "TASKLIST_ID"}' --json '{"title": "Review Q1 metrics", "notes": "Pull data from analytics dashboard", "due": "2024-04-01T00:00:00Z"}'`
|
||||
3. Add another task: `gws tasks tasks insert --params '{"tasklist": "TASKLIST_ID"}' --json '{"title": "Draft Q2 OKRs"}'`
|
||||
4. List tasks: `gws tasks tasks list --params '{"tasklist": "TASKLIST_ID"}' --format table`
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
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}'`
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
name: recipe-deploy-apps-script
|
||||
version: 1.0.0
|
||||
description: "Push local files to a Google Apps Script project."
|
||||
metadata:
|
||||
openclaw:
|
||||
category: "recipe"
|
||||
domain: "engineering"
|
||||
requires:
|
||||
bins: ["gws"]
|
||||
skills: ["gws-apps-script"]
|
||||
---
|
||||
|
||||
# Deploy an Apps Script Project
|
||||
|
||||
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-apps-script`
|
||||
|
||||
Push local files to a Google Apps Script project.
|
||||
|
||||
## Steps
|
||||
|
||||
1. List existing projects: `gws apps-script projects list --format table`
|
||||
2. Get project content: `gws apps-script projects getContent --params '{"scriptId": "SCRIPT_ID"}'`
|
||||
3. Update content: `gws apps-script projects updateContent --params '{"scriptId": "SCRIPT_ID"}' --json '{"files": [{"name": "Code", "type": "SERVER_JS", "source": "function main() { ... }"}]}'`
|
||||
4. Create a new version: `gws apps-script projects versions create --params '{"scriptId": "SCRIPT_ID"}' --json '{"description": "v2 release"}'`
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
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'`
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
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'`
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
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' --attendees user1@company.com,user2@company.com --start '2024-03-18T14:00:00' --duration 30`
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
---
|
||||
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.
|
||||
|
||||
> [!CAUTION]
|
||||
> Deleting files is permanent if the trash is emptied. Confirm before deleting.
|
||||
|
||||
## 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 delete or move
|
||||
3. Delete if needed: `gws drive files delete --params '{"fileId": "FILE_ID"}'`
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
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]'`
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
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-id 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"}'`
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
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"]}'`
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
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-id SHEET_ID --range 'Pipeline!A1:F'`
|
||||
3. Append new row: `gws sheets +append --spreadsheet-id SHEET_ID --range 'Pipeline' --values '["2024-03-15", "Acme Corp", "Proposal Sent", "$50,000", "Q2", "jdoe"]'`
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
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`
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
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 '2025-01-21T14:00' --duration 120`
|
||||
4. Review updated schedule: `gws calendar +agenda`
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
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]' --attendees team@company.com --start 'next monday 14:00' --duration 60`
|
||||
3. Notify in Chat: `gws chat +send --space spaces/ENG_SPACE --text '🔍 Post-mortem scheduled for [Incident].'`
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
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"}}'`
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user