diff --git a/.changeset/skill-optimization.md b/.changeset/skill-optimization.md new file mode 100644 index 00000000..7668e9ec --- /dev/null +++ b/.changeset/skill-optimization.md @@ -0,0 +1,10 @@ +--- +"gws": patch +--- + +feat(skills): implement hierarchical skill discovery and search command + +- Restructure skills/ into hierarchical references/ subdirectory to avoid agent context pollution. +- Add `gws skills search ` command for semantic/keyword discovery of 40+ API services. +- Restore essential safety tips (zsh ! expansion, JSON quoting) in the gws-shared skill. +- Refactor generate-skills logic to automate artifact generation and link validation. diff --git a/.gitignore b/.gitignore index 668f55fc..ea98c734 100644 --- a/.gitignore +++ b/.gitignore @@ -47,4 +47,4 @@ docs/plans/ # Generated demo.mp4 -download.html \ No newline at end of file +download.htmlskills/ diff --git a/check_links.py b/check_links.py new file mode 100644 index 00000000..8ac6df89 --- /dev/null +++ b/check_links.py @@ -0,0 +1,55 @@ +import os +import re +from pathlib import Path + +def check_links(): + basedir = Path("skills").resolve() + docsdir = Path("docs").resolve() + + # regex to find markdown links: [text](path) + link_regex = re.compile(r'\[.*?\]\(([^http].*?)\)') + + broken_links = 0 + total_links = 0 + + files_to_check = list(basedir.rglob("*.md")) + list(docsdir.rglob("*.md")) + + for filepath in files_to_check: + with open(filepath, 'r') as f: + content = f.read() + + for match in link_regex.finditer(content): + link_path = match.group(1).strip() + + # Skip empty links, mailto:, etc + if not link_path or link_path.startswith(('mailto:', 'tel:')): + continue + + # Skip absolute web paths like /chat/api/guides/... + if link_path.startswith('/'): + continue + + # Skip anchor-only links + if link_path.startswith('#'): + continue + + # Remove anchor from filename + file_part = link_path.split('#')[0] + if not file_part: + continue + + total_links += 1 + target_path = (filepath.parent / file_part).resolve() + if not target_path.exists(): + print(f"Broken link in {filepath}: {link_path} (resolved to {target_path})") + broken_links += 1 + + print(f"Checked {total_links} local links.") + if broken_links > 0: + print(f"Found {broken_links} broken links!") + exit(1) + else: + print("All local links are valid!") + +if __name__ == "__main__": + check_links() diff --git a/docs/skills.md b/docs/skills.md index bb718cbb..f1e24145 100644 --- a/docs/skills.md +++ b/docs/skills.md @@ -2,60 +2,67 @@ > Auto-generated by `gws generate-skills`. Do not edit manually. -## Services +## Shared Patterns -Core Google Workspace API skills. +Global flags, authentication, and security rules. | 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-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-classroom](../skills/gws-classroom/SKILL.md) | Google Classroom: Manage classes, rosters, and coursework. | -| [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. + +## Services (Reference) + +Core Google Workspace API technical references. + +| Skill | Description | +|-------|-------------| +| [gws-drive](../skills/references/gws-drive/SKILL.md) | Google Drive: Manage files, folders, and shared drives. | +| [gws-sheets](../skills/references/gws-sheets/SKILL.md) | Google Sheets: Read and write spreadsheets. | +| [gws-gmail](../skills/references/gws-gmail/SKILL.md) | Gmail: Send, read, and manage email. | +| [gws-calendar](../skills/references/gws-calendar/SKILL.md) | Google Calendar: Manage calendars and events. | +| [gws-admin-reports](../skills/references/gws-admin-reports/SKILL.md) | Google Workspace Admin SDK: Audit logs and usage reports. | +| [gws-docs](../skills/references/gws-docs/SKILL.md) | Read and write Google Docs. | +| [gws-slides](../skills/references/gws-slides/SKILL.md) | Google Slides: Read and write presentations. | +| [gws-tasks](../skills/references/gws-tasks/SKILL.md) | Google Tasks: Manage task lists and tasks. | +| [gws-people](../skills/references/gws-people/SKILL.md) | Google People: Manage contacts and profiles. | +| [gws-chat](../skills/references/gws-chat/SKILL.md) | Google Chat: Manage Chat spaces and messages. | +| [gws-classroom](../skills/references/gws-classroom/SKILL.md) | Google Classroom: Manage classes, rosters, and coursework. | +| [gws-forms](../skills/references/gws-forms/SKILL.md) | Read and write Google Forms. | +| [gws-keep](../skills/references/gws-keep/SKILL.md) | Manage Google Keep notes. | +| [gws-meet](../skills/references/gws-meet/SKILL.md) | Manage Google Meet conferences. | +| [gws-events](../skills/references/gws-events/SKILL.md) | Subscribe to Google Workspace events. | +| [gws-modelarmor](../skills/references/gws-modelarmor/SKILL.md) | Google Model Armor: Filter user-generated content for safety. | +| [gws-workflow](../skills/references/gws-workflow/SKILL.md) | Google Workflow: Cross-service productivity workflows. | + +## Helpers (Reference) + +Technical references for shortcut commands. | 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-reply](../skills/gws-gmail-reply/SKILL.md) | Gmail: Reply to a message (handles threading automatically). | -| [gws-gmail-reply-all](../skills/gws-gmail-reply-all/SKILL.md) | Gmail: Reply-all to a message (handles threading automatically). | -| [gws-gmail-forward](../skills/gws-gmail-forward/SKILL.md) | Gmail: Forward a message to new recipients. | -| [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-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. | +| [gws-drive-upload](../skills/references/gws-drive-upload/SKILL.md) | Google Drive: Upload a file with automatic metadata. | +| [gws-sheets-append](../skills/references/gws-sheets-append/SKILL.md) | Google Sheets: Append a row to a spreadsheet. | +| [gws-sheets-read](../skills/references/gws-sheets-read/SKILL.md) | Google Sheets: Read values from a spreadsheet. | +| [gws-gmail-send](../skills/references/gws-gmail-send/SKILL.md) | Gmail: Send an email. | +| [gws-gmail-triage](../skills/references/gws-gmail-triage/SKILL.md) | Gmail: Show unread inbox summary (sender, subject, date). | +| [gws-gmail-reply](../skills/references/gws-gmail-reply/SKILL.md) | Gmail: Reply to a message (handles threading automatically). | +| [gws-gmail-reply-all](../skills/references/gws-gmail-reply-all/SKILL.md) | Gmail: Reply-all to a message (handles threading automatically). | +| [gws-gmail-forward](../skills/references/gws-gmail-forward/SKILL.md) | Gmail: Forward a message to new recipients. | +| [gws-gmail-watch](../skills/references/gws-gmail-watch/SKILL.md) | Gmail: Watch for new emails and stream them as NDJSON. | +| [gws-calendar-insert](../skills/references/gws-calendar-insert/SKILL.md) | Google Calendar: Create a new event. | +| [gws-calendar-agenda](../skills/references/gws-calendar-agenda/SKILL.md) | Google Calendar: Show upcoming events across all calendars. | +| [gws-docs-write](../skills/references/gws-docs-write/SKILL.md) | Google Docs: Append text to a document. | +| [gws-chat-send](../skills/references/gws-chat-send/SKILL.md) | Google Chat: Send a message to a space. | +| [gws-events-subscribe](../skills/references/gws-events-subscribe/SKILL.md) | Google Workspace Events: Subscribe to Workspace events and stream them as NDJSON. | +| [gws-events-renew](../skills/references/gws-events-renew/SKILL.md) | Google Workspace Events: Renew/reactivate Workspace Events subscriptions. | +| [gws-modelarmor-sanitize-prompt](../skills/references/gws-modelarmor-sanitize-prompt/SKILL.md) | Google Model Armor: Sanitize a user prompt through a Model Armor template. | +| [gws-modelarmor-sanitize-response](../skills/references/gws-modelarmor-sanitize-response/SKILL.md) | Google Model Armor: Sanitize a model response through a Model Armor template. | +| [gws-modelarmor-create-template](../skills/references/gws-modelarmor-create-template/SKILL.md) | Google Model Armor: Create a new Model Armor template. | +| [gws-workflow-standup-report](../skills/references/gws-workflow-standup-report/SKILL.md) | Google Workflow: Today's meetings + open tasks as a standup summary. | +| [gws-workflow-meeting-prep](../skills/references/gws-workflow-meeting-prep/SKILL.md) | Google Workflow: Prepare for your next meeting: agenda, attendees, and linked docs. | +| [gws-workflow-email-to-task](../skills/references/gws-workflow-email-to-task/SKILL.md) | Google Workflow: Convert a Gmail message into a Google Tasks entry. | +| [gws-workflow-weekly-digest](../skills/references/gws-workflow-weekly-digest/SKILL.md) | Google Workflow: Weekly summary: this week's meetings + unread email count. | +| [gws-workflow-file-announce](../skills/references/gws-workflow-file-announce/SKILL.md) | Google Workflow: Announce a Drive file in a Chat space. | ## Personas diff --git a/skills/gws-shared/SKILL.md b/skills/gws-shared/SKILL.md index 543ab62c..c0f64f31 100644 --- a/skills/gws-shared/SKILL.md +++ b/skills/gws-shared/SKILL.md @@ -11,6 +11,15 @@ metadata: # gws — Shared Reference +## Discovery & Search + +With 40+ API services and hundreds of methods, use the search command to find the right tool for a task: + +```bash +gws skills search "send email" +gws skills search "upload file" +``` + ## Installation The `gws` binary must be on `$PATH`. See the project README for install options. diff --git a/skills/persona-content-creator/SKILL.md b/skills/persona-content-creator/SKILL.md index da33a81e..d7f59359 100644 --- a/skills/persona-content-creator/SKILL.md +++ b/skills/persona-content-creator/SKILL.md @@ -7,12 +7,12 @@ metadata: category: "persona" requires: bins: ["gws"] - skills: ["gws-docs", "gws-drive", "gws-gmail", "gws-chat", "gws-slides"] + skills: ["references/gws-docs", "references/gws-drive", "references/gws-gmail", "references/gws-chat", "references/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` +> **PREREQUISITE:** Load the following utility skills to operate as this persona: `references/gws-docs`, `references/gws-drive`, `references/gws-gmail`, `references/gws-chat`, `references/gws-slides` Create, organize, and distribute content across Workspace. diff --git a/skills/persona-customer-support/SKILL.md b/skills/persona-customer-support/SKILL.md index c78725cb..bca5f45f 100644 --- a/skills/persona-customer-support/SKILL.md +++ b/skills/persona-customer-support/SKILL.md @@ -7,12 +7,12 @@ metadata: category: "persona" requires: bins: ["gws"] - skills: ["gws-gmail", "gws-sheets", "gws-chat", "gws-calendar"] + skills: ["references/gws-gmail", "references/gws-sheets", "references/gws-chat", "references/gws-calendar"] --- # Customer Support Agent -> **PREREQUISITE:** Load the following utility skills to operate as this persona: `gws-gmail`, `gws-sheets`, `gws-chat`, `gws-calendar` +> **PREREQUISITE:** Load the following utility skills to operate as this persona: `references/gws-gmail`, `references/gws-sheets`, `references/gws-chat`, `references/gws-calendar` Manage customer support — track tickets, respond, escalate issues. diff --git a/skills/persona-event-coordinator/SKILL.md b/skills/persona-event-coordinator/SKILL.md index 3efb75a2..b1723346 100644 --- a/skills/persona-event-coordinator/SKILL.md +++ b/skills/persona-event-coordinator/SKILL.md @@ -7,12 +7,12 @@ metadata: category: "persona" requires: bins: ["gws"] - skills: ["gws-calendar", "gws-gmail", "gws-drive", "gws-chat", "gws-sheets"] + skills: ["references/gws-calendar", "references/gws-gmail", "references/gws-drive", "references/gws-chat", "references/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` +> **PREREQUISITE:** Load the following utility skills to operate as this persona: `references/gws-calendar`, `references/gws-gmail`, `references/gws-drive`, `references/gws-chat`, `references/gws-sheets` Plan and manage events — scheduling, invitations, and logistics. diff --git a/skills/persona-exec-assistant/SKILL.md b/skills/persona-exec-assistant/SKILL.md index f0aed66e..4de01f7d 100644 --- a/skills/persona-exec-assistant/SKILL.md +++ b/skills/persona-exec-assistant/SKILL.md @@ -7,12 +7,12 @@ metadata: category: "persona" requires: bins: ["gws"] - skills: ["gws-gmail", "gws-calendar", "gws-drive", "gws-chat"] + skills: ["references/gws-gmail", "references/gws-calendar", "references/gws-drive", "references/gws-chat"] --- # Executive Assistant -> **PREREQUISITE:** Load the following utility skills to operate as this persona: `gws-gmail`, `gws-calendar`, `gws-drive`, `gws-chat` +> **PREREQUISITE:** Load the following utility skills to operate as this persona: `references/gws-gmail`, `references/gws-calendar`, `references/gws-drive`, `references/gws-chat` Manage an executive's schedule, inbox, and communications. diff --git a/skills/persona-hr-coordinator/SKILL.md b/skills/persona-hr-coordinator/SKILL.md index b4b719b8..33fc44e9 100644 --- a/skills/persona-hr-coordinator/SKILL.md +++ b/skills/persona-hr-coordinator/SKILL.md @@ -7,12 +7,12 @@ metadata: category: "persona" requires: bins: ["gws"] - skills: ["gws-gmail", "gws-calendar", "gws-drive", "gws-chat"] + skills: ["references/gws-gmail", "references/gws-calendar", "references/gws-drive", "references/gws-chat"] --- # HR Coordinator -> **PREREQUISITE:** Load the following utility skills to operate as this persona: `gws-gmail`, `gws-calendar`, `gws-drive`, `gws-chat` +> **PREREQUISITE:** Load the following utility skills to operate as this persona: `references/gws-gmail`, `references/gws-calendar`, `references/gws-drive`, `references/gws-chat` Handle HR workflows — onboarding, announcements, and employee comms. diff --git a/skills/persona-it-admin/SKILL.md b/skills/persona-it-admin/SKILL.md index 8ff36917..9b5727ba 100644 --- a/skills/persona-it-admin/SKILL.md +++ b/skills/persona-it-admin/SKILL.md @@ -7,12 +7,12 @@ metadata: category: "persona" requires: bins: ["gws"] - skills: ["gws-gmail", "gws-drive", "gws-calendar"] + skills: ["references/gws-gmail", "references/gws-drive", "references/gws-calendar"] --- # IT Administrator -> **PREREQUISITE:** Load the following utility skills to operate as this persona: `gws-gmail`, `gws-drive`, `gws-calendar` +> **PREREQUISITE:** Load the following utility skills to operate as this persona: `references/gws-gmail`, `references/gws-drive`, `references/gws-calendar` Administer IT — monitor security and configure Workspace. diff --git a/skills/persona-project-manager/SKILL.md b/skills/persona-project-manager/SKILL.md index f76e2e3c..c6eef458 100644 --- a/skills/persona-project-manager/SKILL.md +++ b/skills/persona-project-manager/SKILL.md @@ -7,12 +7,12 @@ metadata: category: "persona" requires: bins: ["gws"] - skills: ["gws-drive", "gws-sheets", "gws-calendar", "gws-gmail", "gws-chat"] + skills: ["references/gws-drive", "references/gws-sheets", "references/gws-calendar", "references/gws-gmail", "references/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` +> **PREREQUISITE:** Load the following utility skills to operate as this persona: `references/gws-drive`, `references/gws-sheets`, `references/gws-calendar`, `references/gws-gmail`, `references/gws-chat` Coordinate projects — track tasks, schedule meetings, and share docs. diff --git a/skills/persona-researcher/SKILL.md b/skills/persona-researcher/SKILL.md index e97bbac2..630c4776 100644 --- a/skills/persona-researcher/SKILL.md +++ b/skills/persona-researcher/SKILL.md @@ -7,12 +7,12 @@ metadata: category: "persona" requires: bins: ["gws"] - skills: ["gws-drive", "gws-docs", "gws-sheets", "gws-gmail"] + skills: ["references/gws-drive", "references/gws-docs", "references/gws-sheets", "references/gws-gmail"] --- # Researcher -> **PREREQUISITE:** Load the following utility skills to operate as this persona: `gws-drive`, `gws-docs`, `gws-sheets`, `gws-gmail` +> **PREREQUISITE:** Load the following utility skills to operate as this persona: `references/gws-drive`, `references/gws-docs`, `references/gws-sheets`, `references/gws-gmail` Organize research — manage references, notes, and collaboration. diff --git a/skills/persona-sales-ops/SKILL.md b/skills/persona-sales-ops/SKILL.md index d541cefb..ee860ccd 100644 --- a/skills/persona-sales-ops/SKILL.md +++ b/skills/persona-sales-ops/SKILL.md @@ -7,12 +7,12 @@ metadata: category: "persona" requires: bins: ["gws"] - skills: ["gws-gmail", "gws-calendar", "gws-sheets", "gws-drive"] + skills: ["references/gws-gmail", "references/gws-calendar", "references/gws-sheets", "references/gws-drive"] --- # Sales Operations -> **PREREQUISITE:** Load the following utility skills to operate as this persona: `gws-gmail`, `gws-calendar`, `gws-sheets`, `gws-drive` +> **PREREQUISITE:** Load the following utility skills to operate as this persona: `references/gws-gmail`, `references/gws-calendar`, `references/gws-sheets`, `references/gws-drive` Manage sales workflows — track deals, schedule calls, client comms. diff --git a/skills/persona-team-lead/SKILL.md b/skills/persona-team-lead/SKILL.md index e4758ff6..6bad1568 100644 --- a/skills/persona-team-lead/SKILL.md +++ b/skills/persona-team-lead/SKILL.md @@ -7,12 +7,12 @@ metadata: category: "persona" requires: bins: ["gws"] - skills: ["gws-calendar", "gws-gmail", "gws-chat", "gws-drive", "gws-sheets"] + skills: ["references/gws-calendar", "references/gws-gmail", "references/gws-chat", "references/gws-drive", "references/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` +> **PREREQUISITE:** Load the following utility skills to operate as this persona: `references/gws-calendar`, `references/gws-gmail`, `references/gws-chat`, `references/gws-drive`, `references/gws-sheets` Lead a team — run standups, coordinate tasks, and communicate. diff --git a/skills/recipe-backup-sheet-as-csv/SKILL.md b/skills/recipe-backup-sheet-as-csv/SKILL.md index 1656e642..da2a92a0 100644 --- a/skills/recipe-backup-sheet-as-csv/SKILL.md +++ b/skills/recipe-backup-sheet-as-csv/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-sheets", "gws-drive"] + skills: ["references/gws-sheets", "references/gws-drive"] --- # Export a Google Sheet as CSV -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-sheets`, `gws-drive` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-sheets`, `references/gws-drive` Export a Google Sheets spreadsheet as a CSV file for local backup or processing. diff --git a/skills/recipe-batch-invite-to-event/SKILL.md b/skills/recipe-batch-invite-to-event/SKILL.md index 73333f50..2e7c6fc5 100644 --- a/skills/recipe-batch-invite-to-event/SKILL.md +++ b/skills/recipe-batch-invite-to-event/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "scheduling" requires: bins: ["gws"] - skills: ["gws-calendar"] + skills: ["references/gws-calendar"] --- # Add Multiple Attendees to a Calendar Event -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-calendar` Add a list of attendees to an existing Google Calendar event and send notifications. diff --git a/skills/recipe-block-focus-time/SKILL.md b/skills/recipe-block-focus-time/SKILL.md index c2798dc1..fe0b7b1c 100644 --- a/skills/recipe-block-focus-time/SKILL.md +++ b/skills/recipe-block-focus-time/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "scheduling" requires: bins: ["gws"] - skills: ["gws-calendar"] + skills: ["references/gws-calendar"] --- # Block Focus Time on Google Calendar -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-calendar` Create recurring focus time blocks on Google Calendar to protect deep work hours. diff --git a/skills/recipe-bulk-download-folder/SKILL.md b/skills/recipe-bulk-download-folder/SKILL.md index d45d0a0a..10cd7f19 100644 --- a/skills/recipe-bulk-download-folder/SKILL.md +++ b/skills/recipe-bulk-download-folder/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-drive"] + skills: ["references/gws-drive"] --- # Bulk Download Drive Folder -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-drive` List and download all files from a Google Drive folder. diff --git a/skills/recipe-collect-form-responses/SKILL.md b/skills/recipe-collect-form-responses/SKILL.md index 35aeb6a7..4a463e18 100644 --- a/skills/recipe-collect-form-responses/SKILL.md +++ b/skills/recipe-collect-form-responses/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-forms"] + skills: ["references/gws-forms"] --- # Check Form Responses -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-forms` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-forms` Retrieve and review responses from a Google Form. diff --git a/skills/recipe-compare-sheet-tabs/SKILL.md b/skills/recipe-compare-sheet-tabs/SKILL.md index c176702e..c2c2f104 100644 --- a/skills/recipe-compare-sheet-tabs/SKILL.md +++ b/skills/recipe-compare-sheet-tabs/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-sheets"] + skills: ["references/gws-sheets"] --- # Compare Two Google Sheets Tabs -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-sheets` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-sheets` Read data from two tabs in a Google Sheet to compare and identify differences. diff --git a/skills/recipe-copy-sheet-for-new-month/SKILL.md b/skills/recipe-copy-sheet-for-new-month/SKILL.md index cb93b68c..b75b8127 100644 --- a/skills/recipe-copy-sheet-for-new-month/SKILL.md +++ b/skills/recipe-copy-sheet-for-new-month/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-sheets"] + skills: ["references/gws-sheets"] --- # Copy a Google Sheet for a New Month -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-sheets` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-sheets` Duplicate a Google Sheets template tab for a new month of tracking. diff --git a/skills/recipe-create-classroom-course/SKILL.md b/skills/recipe-create-classroom-course/SKILL.md index 05b7e7c6..39398226 100644 --- a/skills/recipe-create-classroom-course/SKILL.md +++ b/skills/recipe-create-classroom-course/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "education" requires: bins: ["gws"] - skills: ["gws-classroom"] + skills: ["references/gws-classroom"] --- # Create a Google Classroom Course -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-classroom` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-classroom` Create a Google Classroom course and invite students. diff --git a/skills/recipe-create-doc-from-template/SKILL.md b/skills/recipe-create-doc-from-template/SKILL.md index dd92337f..969e3cce 100644 --- a/skills/recipe-create-doc-from-template/SKILL.md +++ b/skills/recipe-create-doc-from-template/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-drive", "gws-docs"] + skills: ["references/gws-drive", "references/gws-docs"] --- # Create a Google Doc from a Template -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive`, `gws-docs` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-drive`, `references/gws-docs` Copy a Google Docs template, fill in content, and share with collaborators. diff --git a/skills/recipe-create-events-from-sheet/SKILL.md b/skills/recipe-create-events-from-sheet/SKILL.md index 3a651819..d6326c88 100644 --- a/skills/recipe-create-events-from-sheet/SKILL.md +++ b/skills/recipe-create-events-from-sheet/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-sheets", "gws-calendar"] + skills: ["references/gws-sheets", "references/gws-calendar"] --- # Create Google Calendar Events from a Sheet -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-sheets`, `gws-calendar` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-sheets`, `references/gws-calendar` Read event data from a Google Sheets spreadsheet and create Google Calendar entries for each row. diff --git a/skills/recipe-create-expense-tracker/SKILL.md b/skills/recipe-create-expense-tracker/SKILL.md index 85ada2d5..e0346b32 100644 --- a/skills/recipe-create-expense-tracker/SKILL.md +++ b/skills/recipe-create-expense-tracker/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-sheets", "gws-drive"] + skills: ["references/gws-sheets", "references/gws-drive"] --- # Create a Google Sheets Expense Tracker -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-sheets`, `gws-drive` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-sheets`, `references/gws-drive` Set up a Google Sheets spreadsheet for tracking expenses with headers and initial entries. diff --git a/skills/recipe-create-feedback-form/SKILL.md b/skills/recipe-create-feedback-form/SKILL.md index 27b04d4b..47e14a2e 100644 --- a/skills/recipe-create-feedback-form/SKILL.md +++ b/skills/recipe-create-feedback-form/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-forms", "gws-gmail"] + skills: ["references/gws-forms", "references/gws-gmail"] --- # Create and Share a Google Form -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-forms`, `gws-gmail` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-forms`, `references/gws-gmail` Create a Google Form for feedback and share it via Gmail. diff --git a/skills/recipe-create-gmail-filter/SKILL.md b/skills/recipe-create-gmail-filter/SKILL.md index cadbe00a..2635f6a4 100644 --- a/skills/recipe-create-gmail-filter/SKILL.md +++ b/skills/recipe-create-gmail-filter/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-gmail"] + skills: ["references/gws-gmail"] --- # Create a Gmail Filter -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-gmail` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-gmail` Create a Gmail filter to automatically label, star, or categorize incoming messages. diff --git a/skills/recipe-create-meet-space/SKILL.md b/skills/recipe-create-meet-space/SKILL.md index beb2a909..48ee8e11 100644 --- a/skills/recipe-create-meet-space/SKILL.md +++ b/skills/recipe-create-meet-space/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "scheduling" requires: bins: ["gws"] - skills: ["gws-meet", "gws-gmail"] + skills: ["references/gws-meet", "references/gws-gmail"] --- # Create a Google Meet Conference -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-meet`, `gws-gmail` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-meet`, `references/gws-gmail` Create a Google Meet meeting space and share the join link. diff --git a/skills/recipe-create-presentation/SKILL.md b/skills/recipe-create-presentation/SKILL.md index e0ed1368..64527352 100644 --- a/skills/recipe-create-presentation/SKILL.md +++ b/skills/recipe-create-presentation/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-slides"] + skills: ["references/gws-slides"] --- # Create a Google Slides Presentation -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-slides` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-slides` Create a new Google Slides presentation and add initial slides. diff --git a/skills/recipe-create-shared-drive/SKILL.md b/skills/recipe-create-shared-drive/SKILL.md index 1e89c4cc..dcf257df 100644 --- a/skills/recipe-create-shared-drive/SKILL.md +++ b/skills/recipe-create-shared-drive/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-drive"] + skills: ["references/gws-drive"] --- # Create and Configure a Shared Drive -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-drive` Create a Google Shared Drive and add members with appropriate roles. diff --git a/skills/recipe-create-task-list/SKILL.md b/skills/recipe-create-task-list/SKILL.md index 0bdb560a..fd7412fc 100644 --- a/skills/recipe-create-task-list/SKILL.md +++ b/skills/recipe-create-task-list/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-tasks"] + skills: ["references/gws-tasks"] --- # Create a Task List and Add Tasks -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-tasks` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-tasks` Set up a new Google Tasks list with initial tasks. diff --git a/skills/recipe-create-vacation-responder/SKILL.md b/skills/recipe-create-vacation-responder/SKILL.md index 9f279b4a..62cf6b1c 100644 --- a/skills/recipe-create-vacation-responder/SKILL.md +++ b/skills/recipe-create-vacation-responder/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-gmail"] + skills: ["references/gws-gmail"] --- # Set Up a Gmail Vacation Responder -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-gmail` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-gmail` Enable a Gmail out-of-office auto-reply with a custom message and date range. diff --git a/skills/recipe-draft-email-from-doc/SKILL.md b/skills/recipe-draft-email-from-doc/SKILL.md index 7b5cad54..cb5b1fd6 100644 --- a/skills/recipe-draft-email-from-doc/SKILL.md +++ b/skills/recipe-draft-email-from-doc/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-docs", "gws-gmail"] + skills: ["references/gws-docs", "references/gws-gmail"] --- # Draft a Gmail Message from a Google Doc -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-docs`, `gws-gmail` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-docs`, `references/gws-gmail` Read content from a Google Doc and use it as the body of a Gmail message. diff --git a/skills/recipe-email-drive-link/SKILL.md b/skills/recipe-email-drive-link/SKILL.md index d672a440..8df8d6ad 100644 --- a/skills/recipe-email-drive-link/SKILL.md +++ b/skills/recipe-email-drive-link/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-drive", "gws-gmail"] + skills: ["references/gws-drive", "references/gws-gmail"] --- # Email a Google Drive File Link -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive`, `gws-gmail` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-drive`, `references/gws-gmail` Share a Google Drive file and email the link with a message to recipients. diff --git a/skills/recipe-find-free-time/SKILL.md b/skills/recipe-find-free-time/SKILL.md index eb9bcaf7..8a21f829 100644 --- a/skills/recipe-find-free-time/SKILL.md +++ b/skills/recipe-find-free-time/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "scheduling" requires: bins: ["gws"] - skills: ["gws-calendar"] + skills: ["references/gws-calendar"] --- # Find Free Time Across Calendars -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-calendar` Query Google Calendar free/busy status for multiple users to find a meeting slot. diff --git a/skills/recipe-find-large-files/SKILL.md b/skills/recipe-find-large-files/SKILL.md index 433d9e78..881cb5da 100644 --- a/skills/recipe-find-large-files/SKILL.md +++ b/skills/recipe-find-large-files/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-drive"] + skills: ["references/gws-drive"] --- # Find Largest Files in Drive -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-drive` Identify large Google Drive files consuming storage quota. diff --git a/skills/recipe-forward-labeled-emails/SKILL.md b/skills/recipe-forward-labeled-emails/SKILL.md index 5f0cb984..b6133ee3 100644 --- a/skills/recipe-forward-labeled-emails/SKILL.md +++ b/skills/recipe-forward-labeled-emails/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-gmail"] + skills: ["references/gws-gmail"] --- # Forward Labeled Gmail Messages -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-gmail` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-gmail` Find Gmail messages with a specific label and forward them to another address. diff --git a/skills/recipe-generate-report-from-sheet/SKILL.md b/skills/recipe-generate-report-from-sheet/SKILL.md index 12eb1653..bd3ff3ff 100644 --- a/skills/recipe-generate-report-from-sheet/SKILL.md +++ b/skills/recipe-generate-report-from-sheet/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-sheets", "gws-docs", "gws-drive"] + skills: ["references/gws-sheets", "references/gws-docs", "references/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` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-sheets`, `references/gws-docs`, `references/gws-drive` Read data from a Google Sheet and create a formatted Google Docs report. diff --git a/skills/recipe-label-and-archive-emails/SKILL.md b/skills/recipe-label-and-archive-emails/SKILL.md index e2071ac5..3d397f41 100644 --- a/skills/recipe-label-and-archive-emails/SKILL.md +++ b/skills/recipe-label-and-archive-emails/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-gmail"] + skills: ["references/gws-gmail"] --- # Label and Archive Gmail Threads -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-gmail` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-gmail` Apply Gmail labels to matching messages and archive them to keep your inbox clean. diff --git a/skills/recipe-log-deal-update/SKILL.md b/skills/recipe-log-deal-update/SKILL.md index e3c8e8b9..9f0f8237 100644 --- a/skills/recipe-log-deal-update/SKILL.md +++ b/skills/recipe-log-deal-update/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "sales" requires: bins: ["gws"] - skills: ["gws-sheets", "gws-drive"] + skills: ["references/gws-sheets", "references/gws-drive"] --- # Log Deal Update to Sheet -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-sheets`, `gws-drive` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-sheets`, `references/gws-drive` Append a deal status update to a Google Sheets sales tracking spreadsheet. diff --git a/skills/recipe-organize-drive-folder/SKILL.md b/skills/recipe-organize-drive-folder/SKILL.md index 33195f60..3329a355 100644 --- a/skills/recipe-organize-drive-folder/SKILL.md +++ b/skills/recipe-organize-drive-folder/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-drive"] + skills: ["references/gws-drive"] --- # Organize Files into Google Drive Folders -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-drive` Create a Google Drive folder structure and move files into the right locations. diff --git a/skills/recipe-plan-weekly-schedule/SKILL.md b/skills/recipe-plan-weekly-schedule/SKILL.md index 0b05888f..fbba7145 100644 --- a/skills/recipe-plan-weekly-schedule/SKILL.md +++ b/skills/recipe-plan-weekly-schedule/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "scheduling" requires: bins: ["gws"] - skills: ["gws-calendar"] + skills: ["references/gws-calendar"] --- # Plan Your Weekly Google Calendar Schedule -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-calendar` Review your Google Calendar week, identify gaps, and add events to fill them. diff --git a/skills/recipe-post-mortem-setup/SKILL.md b/skills/recipe-post-mortem-setup/SKILL.md index 7c5990f5..85ecf7ae 100644 --- a/skills/recipe-post-mortem-setup/SKILL.md +++ b/skills/recipe-post-mortem-setup/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "engineering" requires: bins: ["gws"] - skills: ["gws-docs", "gws-calendar", "gws-chat"] + skills: ["references/gws-docs", "references/gws-calendar", "references/gws-chat"] --- # Set Up Post-Mortem -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-docs`, `gws-calendar`, `gws-chat` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-docs`, `references/gws-calendar`, `references/gws-chat` Create a Google Docs post-mortem, schedule a Google Calendar review, and notify via Chat. diff --git a/skills/recipe-reschedule-meeting/SKILL.md b/skills/recipe-reschedule-meeting/SKILL.md index 2b6f7751..46ff53b2 100644 --- a/skills/recipe-reschedule-meeting/SKILL.md +++ b/skills/recipe-reschedule-meeting/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "scheduling" requires: bins: ["gws"] - skills: ["gws-calendar"] + skills: ["references/gws-calendar"] --- # Reschedule a Google Calendar Meeting -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-calendar` Move a Google Calendar event to a new time and automatically notify all attendees. diff --git a/skills/recipe-review-meet-participants/SKILL.md b/skills/recipe-review-meet-participants/SKILL.md index 3d84ce3e..c9c8361c 100644 --- a/skills/recipe-review-meet-participants/SKILL.md +++ b/skills/recipe-review-meet-participants/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-meet"] + skills: ["references/gws-meet"] --- # Review Google Meet Attendance -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-meet` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-meet` Review who attended a Google Meet conference and for how long. diff --git a/skills/recipe-review-overdue-tasks/SKILL.md b/skills/recipe-review-overdue-tasks/SKILL.md index e337e73a..3968781c 100644 --- a/skills/recipe-review-overdue-tasks/SKILL.md +++ b/skills/recipe-review-overdue-tasks/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-tasks"] + skills: ["references/gws-tasks"] --- # Review Overdue Tasks -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-tasks` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-tasks` Find Google Tasks that are past due and need attention. diff --git a/skills/recipe-save-email-attachments/SKILL.md b/skills/recipe-save-email-attachments/SKILL.md index 5bd56f25..3c00f679 100644 --- a/skills/recipe-save-email-attachments/SKILL.md +++ b/skills/recipe-save-email-attachments/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-gmail", "gws-drive"] + skills: ["references/gws-gmail", "references/gws-drive"] --- # Save Gmail Attachments to Google Drive -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-gmail`, `gws-drive` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-gmail`, `references/gws-drive` Find Gmail messages with attachments and save them to a Google Drive folder. diff --git a/skills/recipe-save-email-to-doc/SKILL.md b/skills/recipe-save-email-to-doc/SKILL.md index 2ffa866f..c1a86cd5 100644 --- a/skills/recipe-save-email-to-doc/SKILL.md +++ b/skills/recipe-save-email-to-doc/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-gmail", "gws-docs"] + skills: ["references/gws-gmail", "references/gws-docs"] --- # Save a Gmail Message to Google Docs -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-gmail`, `gws-docs` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-gmail`, `references/gws-docs` Save a Gmail message body into a Google Doc for archival or reference. diff --git a/skills/recipe-schedule-recurring-event/SKILL.md b/skills/recipe-schedule-recurring-event/SKILL.md index 3a9d02bb..4d70ce31 100644 --- a/skills/recipe-schedule-recurring-event/SKILL.md +++ b/skills/recipe-schedule-recurring-event/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "scheduling" requires: bins: ["gws"] - skills: ["gws-calendar"] + skills: ["references/gws-calendar"] --- # Schedule a Recurring Meeting -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-calendar` Create a recurring Google Calendar event with attendees. diff --git a/skills/recipe-send-team-announcement/SKILL.md b/skills/recipe-send-team-announcement/SKILL.md index d93b8421..974e8a2b 100644 --- a/skills/recipe-send-team-announcement/SKILL.md +++ b/skills/recipe-send-team-announcement/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "communication" requires: bins: ["gws"] - skills: ["gws-gmail", "gws-chat"] + skills: ["references/gws-gmail", "references/gws-chat"] --- # Announce via Gmail and Google Chat -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-gmail`, `gws-chat` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-gmail`, `references/gws-chat` Send a team announcement via both Gmail and a Google Chat space. diff --git a/skills/recipe-share-doc-and-notify/SKILL.md b/skills/recipe-share-doc-and-notify/SKILL.md index cfe9c946..49500ce0 100644 --- a/skills/recipe-share-doc-and-notify/SKILL.md +++ b/skills/recipe-share-doc-and-notify/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-drive", "gws-docs", "gws-gmail"] + skills: ["references/gws-drive", "references/gws-docs", "references/gws-gmail"] --- # Share a Google Doc and Notify Collaborators -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive`, `gws-docs`, `gws-gmail` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-drive`, `references/gws-docs`, `references/gws-gmail` Share a Google Docs document with edit access and email collaborators the link. diff --git a/skills/recipe-share-event-materials/SKILL.md b/skills/recipe-share-event-materials/SKILL.md index 88aec827..973c224e 100644 --- a/skills/recipe-share-event-materials/SKILL.md +++ b/skills/recipe-share-event-materials/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-calendar", "gws-drive"] + skills: ["references/gws-calendar", "references/gws-drive"] --- # Share Files with Meeting Attendees -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar`, `gws-drive` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-calendar`, `references/gws-drive` Share Google Drive files with all attendees of a Google Calendar event. diff --git a/skills/recipe-share-folder-with-team/SKILL.md b/skills/recipe-share-folder-with-team/SKILL.md index da979a27..e2a8b89c 100644 --- a/skills/recipe-share-folder-with-team/SKILL.md +++ b/skills/recipe-share-folder-with-team/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-drive"] + skills: ["references/gws-drive"] --- # Share a Google Drive Folder with a Team -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-drive` Share a Google Drive folder and all its contents with a list of collaborators. diff --git a/skills/recipe-sync-contacts-to-sheet/SKILL.md b/skills/recipe-sync-contacts-to-sheet/SKILL.md index 0b2c298d..d7318a83 100644 --- a/skills/recipe-sync-contacts-to-sheet/SKILL.md +++ b/skills/recipe-sync-contacts-to-sheet/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "productivity" requires: bins: ["gws"] - skills: ["gws-people", "gws-sheets"] + skills: ["references/gws-people", "references/gws-sheets"] --- # Export Google Contacts to Sheets -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-people`, `gws-sheets` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-people`, `references/gws-sheets` Export Google Contacts directory to a Google Sheets spreadsheet. diff --git a/skills/recipe-watch-drive-changes/SKILL.md b/skills/recipe-watch-drive-changes/SKILL.md index dd77c457..c6f6c60a 100644 --- a/skills/recipe-watch-drive-changes/SKILL.md +++ b/skills/recipe-watch-drive-changes/SKILL.md @@ -8,12 +8,12 @@ metadata: domain: "engineering" requires: bins: ["gws"] - skills: ["gws-events"] + skills: ["references/gws-events"] --- # Watch for Drive Changes -> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-events` +> **PREREQUISITE:** Load the following skills to execute this recipe: `references/gws-events` Subscribe to change notifications on a Google Drive file or folder. diff --git a/skills/gws-admin-reports/SKILL.md b/skills/references/gws-admin-reports/SKILL.md similarity index 90% rename from skills/gws-admin-reports/SKILL.md rename to skills/references/gws-admin-reports/SKILL.md index 7fb7e96b..aa3a02a8 100644 --- a/skills/gws-admin-reports/SKILL.md +++ b/skills/references/gws-admin-reports/SKILL.md @@ -12,7 +12,7 @@ metadata: # admin-reports (reports_v1) -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. ```bash gws admin-reports [flags] @@ -55,3 +55,6 @@ gws schema admin-reports.. Use `gws schema` output to build your `--params` and `--json` flags. +## See Also + +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth diff --git a/skills/gws-calendar-agenda/SKILL.md b/skills/references/gws-calendar-agenda/SKILL.md similarity index 79% rename from skills/gws-calendar-agenda/SKILL.md rename to skills/references/gws-calendar-agenda/SKILL.md index 5e777fef..17444593 100644 --- a/skills/gws-calendar-agenda/SKILL.md +++ b/skills/references/gws-calendar-agenda/SKILL.md @@ -12,7 +12,7 @@ metadata: # calendar +agenda -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. Show upcoming events across all calendars @@ -51,5 +51,5 @@ gws calendar +agenda --today --timezone America/New_York ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-calendar](../gws-calendar/SKILL.md) — All manage calendars and events commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-calendar](../../references/gws-calendar/SKILL.md) — All manage calendars and events commands diff --git a/skills/gws-calendar-insert/SKILL.md b/skills/references/gws-calendar-insert/SKILL.md similarity index 80% rename from skills/gws-calendar-insert/SKILL.md rename to skills/references/gws-calendar-insert/SKILL.md index bd0aeb2e..eecc42fb 100644 --- a/skills/gws-calendar-insert/SKILL.md +++ b/skills/references/gws-calendar-insert/SKILL.md @@ -12,7 +12,7 @@ metadata: # calendar +insert -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. create a new event @@ -51,5 +51,5 @@ gws calendar +insert --summary 'Review' --start ... --end ... --attendee alice@e ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-calendar](../gws-calendar/SKILL.md) — All manage calendars and events commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-calendar](../../references/gws-calendar/SKILL.md) — All manage calendars and events commands diff --git a/skills/gws-calendar/SKILL.md b/skills/references/gws-calendar/SKILL.md similarity index 94% rename from skills/gws-calendar/SKILL.md rename to skills/references/gws-calendar/SKILL.md index c92b12ed..7bbc93aa 100644 --- a/skills/gws-calendar/SKILL.md +++ b/skills/references/gws-calendar/SKILL.md @@ -12,7 +12,7 @@ metadata: # calendar (v3) -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. ```bash gws calendar [flags] @@ -106,3 +106,6 @@ gws schema calendar.. Use `gws schema` output to build your `--params` and `--json` flags. +## See Also + +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth diff --git a/skills/gws-chat-send/SKILL.md b/skills/references/gws-chat-send/SKILL.md similarity index 72% rename from skills/gws-chat-send/SKILL.md rename to skills/references/gws-chat-send/SKILL.md index 80dd5ee0..0370af97 100644 --- a/skills/gws-chat-send/SKILL.md +++ b/skills/references/gws-chat-send/SKILL.md @@ -12,7 +12,7 @@ metadata: # chat +send -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. Send a message to a space @@ -45,5 +45,5 @@ gws chat +send --space spaces/AAAAxxxx --text 'Hello team!' ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-chat](../gws-chat/SKILL.md) — All manage chat spaces and messages commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-chat](../../references/gws-chat/SKILL.md) — All manage chat spaces and messages commands diff --git a/skills/gws-chat/SKILL.md b/skills/references/gws-chat/SKILL.md similarity index 96% rename from skills/gws-chat/SKILL.md rename to skills/references/gws-chat/SKILL.md index c79f6fca..7e403d75 100644 --- a/skills/gws-chat/SKILL.md +++ b/skills/references/gws-chat/SKILL.md @@ -12,7 +12,7 @@ metadata: # chat (v1) -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. ```bash gws chat [flags] @@ -71,3 +71,6 @@ gws schema chat.. Use `gws schema` output to build your `--params` and `--json` flags. +## See Also + +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth diff --git a/skills/gws-classroom/SKILL.md b/skills/references/gws-classroom/SKILL.md similarity index 96% rename from skills/gws-classroom/SKILL.md rename to skills/references/gws-classroom/SKILL.md index 04c21abf..644fb644 100644 --- a/skills/gws-classroom/SKILL.md +++ b/skills/references/gws-classroom/SKILL.md @@ -12,7 +12,7 @@ metadata: # classroom (v1) -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. ```bash gws classroom [flags] @@ -73,3 +73,6 @@ gws schema classroom.. Use `gws schema` output to build your `--params` and `--json` flags. +## See Also + +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth diff --git a/skills/gws-docs-write/SKILL.md b/skills/references/gws-docs-write/SKILL.md similarity index 72% rename from skills/gws-docs-write/SKILL.md rename to skills/references/gws-docs-write/SKILL.md index 15e950b8..60d2e8ac 100644 --- a/skills/gws-docs-write/SKILL.md +++ b/skills/references/gws-docs-write/SKILL.md @@ -12,7 +12,7 @@ metadata: # docs +write -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. Append text to a document @@ -45,5 +45,5 @@ gws docs +write --document DOC_ID --text 'Hello, world!' ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-docs](../gws-docs/SKILL.md) — All read and write google docs commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-docs](../../references/gws-docs/SKILL.md) — All read and write google docs commands diff --git a/skills/gws-docs/SKILL.md b/skills/references/gws-docs/SKILL.md similarity index 85% rename from skills/gws-docs/SKILL.md rename to skills/references/gws-docs/SKILL.md index 2a910aff..e49ab268 100644 --- a/skills/gws-docs/SKILL.md +++ b/skills/references/gws-docs/SKILL.md @@ -12,7 +12,7 @@ metadata: # docs (v1) -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. ```bash gws docs [flags] @@ -46,3 +46,6 @@ gws schema docs.. Use `gws schema` output to build your `--params` and `--json` flags. +## See Also + +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth diff --git a/skills/gws-drive-upload/SKILL.md b/skills/references/gws-drive-upload/SKILL.md similarity index 75% rename from skills/gws-drive-upload/SKILL.md rename to skills/references/gws-drive-upload/SKILL.md index 68f42c7c..951cde1e 100644 --- a/skills/gws-drive-upload/SKILL.md +++ b/skills/references/gws-drive-upload/SKILL.md @@ -12,7 +12,7 @@ metadata: # drive +upload -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. Upload a file with automatic metadata @@ -48,5 +48,5 @@ gws drive +upload ./data.csv --name 'Sales Data.csv' ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-drive](../gws-drive/SKILL.md) — All manage files, folders, and shared drives commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-drive](../../references/gws-drive/SKILL.md) — All manage files, folders, and shared drives commands diff --git a/skills/gws-drive/SKILL.md b/skills/references/gws-drive/SKILL.md similarity index 98% rename from skills/gws-drive/SKILL.md rename to skills/references/gws-drive/SKILL.md index d22766b2..8244cde8 100644 --- a/skills/gws-drive/SKILL.md +++ b/skills/references/gws-drive/SKILL.md @@ -12,7 +12,7 @@ metadata: # drive (v3) -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. ```bash gws drive [flags] @@ -135,3 +135,6 @@ gws schema drive.. Use `gws schema` output to build your `--params` and `--json` flags. +## See Also + +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth diff --git a/skills/gws-events-renew/SKILL.md b/skills/references/gws-events-renew/SKILL.md similarity index 74% rename from skills/gws-events-renew/SKILL.md rename to skills/references/gws-events-renew/SKILL.md index 1e59e183..1e8cc1ca 100644 --- a/skills/gws-events-renew/SKILL.md +++ b/skills/references/gws-events-renew/SKILL.md @@ -12,7 +12,7 @@ metadata: # events +renew -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. Renew/reactivate Workspace Events subscriptions @@ -44,5 +44,5 @@ gws events +renew --all --within 2d ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-events](../gws-events/SKILL.md) — All subscribe to google workspace events commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-events](../../references/gws-events/SKILL.md) — All subscribe to google workspace events commands diff --git a/skills/gws-events-subscribe/SKILL.md b/skills/references/gws-events-subscribe/SKILL.md similarity index 84% rename from skills/gws-events-subscribe/SKILL.md rename to skills/references/gws-events-subscribe/SKILL.md index fe96291c..6b8d02b7 100644 --- a/skills/gws-events-subscribe/SKILL.md +++ b/skills/references/gws-events-subscribe/SKILL.md @@ -12,7 +12,7 @@ metadata: # events +subscribe -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. Subscribe to Workspace events and stream them as NDJSON @@ -55,5 +55,5 @@ gws events +subscribe ... --cleanup --output-dir ./events ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-events](../gws-events/SKILL.md) — All subscribe to google workspace events commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-events](../../references/gws-events/SKILL.md) — All subscribe to google workspace events commands diff --git a/skills/gws-events/SKILL.md b/skills/references/gws-events/SKILL.md similarity index 93% rename from skills/gws-events/SKILL.md rename to skills/references/gws-events/SKILL.md index 61a7635e..618d2f90 100644 --- a/skills/gws-events/SKILL.md +++ b/skills/references/gws-events/SKILL.md @@ -12,7 +12,7 @@ metadata: # events (v1) -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. ```bash gws events [flags] @@ -65,3 +65,6 @@ gws schema events.. Use `gws schema` output to build your `--params` and `--json` flags. +## See Also + +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth diff --git a/skills/gws-forms/SKILL.md b/skills/references/gws-forms/SKILL.md similarity index 86% rename from skills/gws-forms/SKILL.md rename to skills/references/gws-forms/SKILL.md index 30691b46..8505f51f 100644 --- a/skills/gws-forms/SKILL.md +++ b/skills/references/gws-forms/SKILL.md @@ -12,7 +12,7 @@ metadata: # forms (v1) -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. ```bash gws forms [flags] @@ -43,3 +43,6 @@ gws schema forms.. Use `gws schema` output to build your `--params` and `--json` flags. +## See Also + +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth diff --git a/skills/gws-gmail-forward/SKILL.md b/skills/references/gws-gmail-forward/SKILL.md similarity index 84% rename from skills/gws-gmail-forward/SKILL.md rename to skills/references/gws-gmail-forward/SKILL.md index a370994c..0f8798ba 100644 --- a/skills/gws-gmail-forward/SKILL.md +++ b/skills/references/gws-gmail-forward/SKILL.md @@ -12,7 +12,7 @@ metadata: # gmail +forward -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. Forward a message to new recipients @@ -51,5 +51,5 @@ gws gmail +forward --message-id 18f1a2b3c4d --to dave@example.com --body '

FYI ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-gmail](../gws-gmail/SKILL.md) — All send, read, and manage email commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-gmail](../../references/gws-gmail/SKILL.md) — All send, read, and manage email commands diff --git a/skills/gws-gmail-reply-all/SKILL.md b/skills/references/gws-gmail-reply-all/SKILL.md similarity index 87% rename from skills/gws-gmail-reply-all/SKILL.md rename to skills/references/gws-gmail-reply-all/SKILL.md index 55e443ae..a300ada7 100644 --- a/skills/gws-gmail-reply-all/SKILL.md +++ b/skills/references/gws-gmail-reply-all/SKILL.md @@ -12,7 +12,7 @@ metadata: # gmail +reply-all -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. Reply-all to a message (handles threading automatically) @@ -58,5 +58,5 @@ gws gmail +reply-all --message-id 18f1a2b3c4d --body 'Noted' --html ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-gmail](../gws-gmail/SKILL.md) — All send, read, and manage email commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-gmail](../../references/gws-gmail/SKILL.md) — All send, read, and manage email commands diff --git a/skills/gws-gmail-reply/SKILL.md b/skills/references/gws-gmail-reply/SKILL.md similarity index 84% rename from skills/gws-gmail-reply/SKILL.md rename to skills/references/gws-gmail-reply/SKILL.md index 83569e28..51eaa065 100644 --- a/skills/gws-gmail-reply/SKILL.md +++ b/skills/references/gws-gmail-reply/SKILL.md @@ -12,7 +12,7 @@ metadata: # gmail +reply -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. Reply to a message (handles threading automatically) @@ -54,5 +54,5 @@ gws gmail +reply --message-id 18f1a2b3c4d --body 'Bold reply' --html ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-gmail](../gws-gmail/SKILL.md) — All send, read, and manage email commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-gmail](../../references/gws-gmail/SKILL.md) — All send, read, and manage email commands diff --git a/skills/gws-gmail-send/SKILL.md b/skills/references/gws-gmail-send/SKILL.md similarity index 83% rename from skills/gws-gmail-send/SKILL.md rename to skills/references/gws-gmail-send/SKILL.md index ca96c323..0aac898a 100644 --- a/skills/gws-gmail-send/SKILL.md +++ b/skills/references/gws-gmail-send/SKILL.md @@ -12,7 +12,7 @@ metadata: # gmail +send -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. Send an email @@ -53,5 +53,5 @@ gws gmail +send --to alice@example.com --subject 'Hello' --body 'Bold tex ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-gmail](../gws-gmail/SKILL.md) — All send, read, and manage email commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-gmail](../../references/gws-gmail/SKILL.md) — All send, read, and manage email commands diff --git a/skills/gws-gmail-triage/SKILL.md b/skills/references/gws-gmail-triage/SKILL.md similarity index 74% rename from skills/gws-gmail-triage/SKILL.md rename to skills/references/gws-gmail-triage/SKILL.md index f78dfb02..f8485ebd 100644 --- a/skills/gws-gmail-triage/SKILL.md +++ b/skills/references/gws-gmail-triage/SKILL.md @@ -12,7 +12,7 @@ metadata: # gmail +triage -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. Show unread inbox summary (sender, subject, date) @@ -46,5 +46,5 @@ gws gmail +triage --labels ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-gmail](../gws-gmail/SKILL.md) — All send, read, and manage email commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-gmail](../../references/gws-gmail/SKILL.md) — All send, read, and manage email commands diff --git a/skills/gws-gmail-watch/SKILL.md b/skills/references/gws-gmail-watch/SKILL.md similarity index 83% rename from skills/gws-gmail-watch/SKILL.md rename to skills/references/gws-gmail-watch/SKILL.md index c45cb251..ccbc881e 100644 --- a/skills/gws-gmail-watch/SKILL.md +++ b/skills/references/gws-gmail-watch/SKILL.md @@ -12,7 +12,7 @@ metadata: # gmail +watch -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. Watch for new emails and stream them as NDJSON @@ -54,5 +54,5 @@ gws gmail +watch --project my-project --cleanup --output-dir ./emails ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-gmail](../gws-gmail/SKILL.md) — All send, read, and manage email commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-gmail](../../references/gws-gmail/SKILL.md) — All send, read, and manage email commands diff --git a/skills/gws-gmail/SKILL.md b/skills/references/gws-gmail/SKILL.md similarity index 88% rename from skills/gws-gmail/SKILL.md rename to skills/references/gws-gmail/SKILL.md index 1c9835e7..808db715 100644 --- a/skills/gws-gmail/SKILL.md +++ b/skills/references/gws-gmail/SKILL.md @@ -12,7 +12,7 @@ metadata: # gmail (v1) -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. ```bash gws gmail [flags] @@ -57,3 +57,6 @@ gws schema gmail.. Use `gws schema` output to build your `--params` and `--json` flags. +## See Also + +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth diff --git a/skills/gws-keep/SKILL.md b/skills/references/gws-keep/SKILL.md similarity index 87% rename from skills/gws-keep/SKILL.md rename to skills/references/gws-keep/SKILL.md index 6ca36cad..7eca682c 100644 --- a/skills/gws-keep/SKILL.md +++ b/skills/references/gws-keep/SKILL.md @@ -12,7 +12,7 @@ metadata: # keep (v1) -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. ```bash gws keep [flags] @@ -46,3 +46,6 @@ gws schema keep.. Use `gws schema` output to build your `--params` and `--json` flags. +## See Also + +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth diff --git a/skills/gws-meet/SKILL.md b/skills/references/gws-meet/SKILL.md similarity index 87% rename from skills/gws-meet/SKILL.md rename to skills/references/gws-meet/SKILL.md index 99170d01..ed2a7998 100644 --- a/skills/gws-meet/SKILL.md +++ b/skills/references/gws-meet/SKILL.md @@ -12,7 +12,7 @@ metadata: # meet (v2) -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. ```bash gws meet [flags] @@ -49,3 +49,6 @@ gws schema meet.. Use `gws schema` output to build your `--params` and `--json` flags. +## See Also + +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth diff --git a/skills/gws-modelarmor-create-template/SKILL.md b/skills/references/gws-modelarmor-create-template/SKILL.md similarity index 80% rename from skills/gws-modelarmor-create-template/SKILL.md rename to skills/references/gws-modelarmor-create-template/SKILL.md index 745c639f..cb74bc6b 100644 --- a/skills/gws-modelarmor-create-template/SKILL.md +++ b/skills/references/gws-modelarmor-create-template/SKILL.md @@ -12,7 +12,7 @@ metadata: # modelarmor +create-template -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. Create a new Model Armor template @@ -49,5 +49,5 @@ gws modelarmor +create-template --project P --location us-central1 --template-id ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-modelarmor](../gws-modelarmor/SKILL.md) — All filter user-generated content for safety commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-modelarmor](../../references/gws-modelarmor/SKILL.md) — All filter user-generated content for safety commands diff --git a/skills/gws-modelarmor-sanitize-prompt/SKILL.md b/skills/references/gws-modelarmor-sanitize-prompt/SKILL.md similarity index 76% rename from skills/gws-modelarmor-sanitize-prompt/SKILL.md rename to skills/references/gws-modelarmor-sanitize-prompt/SKILL.md index f6c05fda..dc00c27a 100644 --- a/skills/gws-modelarmor-sanitize-prompt/SKILL.md +++ b/skills/references/gws-modelarmor-sanitize-prompt/SKILL.md @@ -12,7 +12,7 @@ metadata: # modelarmor +sanitize-prompt -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. Sanitize a user prompt through a Model Armor template @@ -44,5 +44,5 @@ echo 'prompt' | gws modelarmor +sanitize-prompt --template ... ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-modelarmor](../gws-modelarmor/SKILL.md) — All filter user-generated content for safety commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-modelarmor](../../references/gws-modelarmor/SKILL.md) — All filter user-generated content for safety commands diff --git a/skills/gws-modelarmor-sanitize-response/SKILL.md b/skills/references/gws-modelarmor-sanitize-response/SKILL.md similarity index 76% rename from skills/gws-modelarmor-sanitize-response/SKILL.md rename to skills/references/gws-modelarmor-sanitize-response/SKILL.md index 901ed2d0..cb1ced16 100644 --- a/skills/gws-modelarmor-sanitize-response/SKILL.md +++ b/skills/references/gws-modelarmor-sanitize-response/SKILL.md @@ -12,7 +12,7 @@ metadata: # modelarmor +sanitize-response -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. Sanitize a model response through a Model Armor template @@ -44,5 +44,5 @@ model_cmd | gws modelarmor +sanitize-response --template ... ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-modelarmor](../gws-modelarmor/SKILL.md) — All filter user-generated content for safety commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-modelarmor](../../references/gws-modelarmor/SKILL.md) — All filter user-generated content for safety commands diff --git a/skills/gws-modelarmor/SKILL.md b/skills/references/gws-modelarmor/SKILL.md similarity index 82% rename from skills/gws-modelarmor/SKILL.md rename to skills/references/gws-modelarmor/SKILL.md index 0f97c2d4..a07a7f79 100644 --- a/skills/gws-modelarmor/SKILL.md +++ b/skills/references/gws-modelarmor/SKILL.md @@ -12,7 +12,7 @@ metadata: # modelarmor (v1) -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. ```bash gws modelarmor [flags] @@ -40,3 +40,6 @@ gws schema modelarmor.. Use `gws schema` output to build your `--params` and `--json` flags. +## See Also + +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth diff --git a/skills/gws-people/SKILL.md b/skills/references/gws-people/SKILL.md similarity index 96% rename from skills/gws-people/SKILL.md rename to skills/references/gws-people/SKILL.md index 812dad1a..ef5b8f96 100644 --- a/skills/gws-people/SKILL.md +++ b/skills/references/gws-people/SKILL.md @@ -12,7 +12,7 @@ metadata: # people (v1) -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. ```bash gws people [flags] @@ -65,3 +65,6 @@ gws schema people.. Use `gws schema` output to build your `--params` and `--json` flags. +## See Also + +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth diff --git a/skills/gws-sheets-append/SKILL.md b/skills/references/gws-sheets-append/SKILL.md similarity index 76% rename from skills/gws-sheets-append/SKILL.md rename to skills/references/gws-sheets-append/SKILL.md index 1d1fbccc..bed9e781 100644 --- a/skills/gws-sheets-append/SKILL.md +++ b/skills/references/gws-sheets-append/SKILL.md @@ -12,7 +12,7 @@ metadata: # sheets +append -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. Append a row to a spreadsheet @@ -47,5 +47,5 @@ gws sheets +append --spreadsheet ID --json-values '[["a","b"],["c","d"]]' ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-sheets](../gws-sheets/SKILL.md) — All read and write spreadsheets commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-sheets](../../references/gws-sheets/SKILL.md) — All read and write spreadsheets commands diff --git a/skills/gws-sheets-read/SKILL.md b/skills/references/gws-sheets-read/SKILL.md similarity index 72% rename from skills/gws-sheets-read/SKILL.md rename to skills/references/gws-sheets-read/SKILL.md index 6faa75bf..4d8ed3ec 100644 --- a/skills/gws-sheets-read/SKILL.md +++ b/skills/references/gws-sheets-read/SKILL.md @@ -12,7 +12,7 @@ metadata: # sheets +read -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. Read values from a spreadsheet @@ -43,5 +43,5 @@ gws sheets +read --spreadsheet ID --range Sheet1 ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-sheets](../gws-sheets/SKILL.md) — All read and write spreadsheets commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-sheets](../../references/gws-sheets/SKILL.md) — All read and write spreadsheets commands diff --git a/skills/gws-sheets/SKILL.md b/skills/references/gws-sheets/SKILL.md similarity index 91% rename from skills/gws-sheets/SKILL.md rename to skills/references/gws-sheets/SKILL.md index 05c8cadb..ed63fe5c 100644 --- a/skills/gws-sheets/SKILL.md +++ b/skills/references/gws-sheets/SKILL.md @@ -12,7 +12,7 @@ metadata: # sheets (v4) -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. ```bash gws sheets [flags] @@ -51,3 +51,6 @@ gws schema sheets.. Use `gws schema` output to build your `--params` and `--json` flags. +## See Also + +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth diff --git a/skills/gws-slides/SKILL.md b/skills/references/gws-slides/SKILL.md similarity index 86% rename from skills/gws-slides/SKILL.md rename to skills/references/gws-slides/SKILL.md index f25fd32b..9597a076 100644 --- a/skills/gws-slides/SKILL.md +++ b/skills/references/gws-slides/SKILL.md @@ -12,7 +12,7 @@ metadata: # slides (v1) -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. ```bash gws slides [flags] @@ -41,3 +41,6 @@ gws schema slides.. Use `gws schema` output to build your `--params` and `--json` flags. +## See Also + +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth diff --git a/skills/gws-tasks/SKILL.md b/skills/references/gws-tasks/SKILL.md similarity index 92% rename from skills/gws-tasks/SKILL.md rename to skills/references/gws-tasks/SKILL.md index 2dbaed7c..f61e57b9 100644 --- a/skills/gws-tasks/SKILL.md +++ b/skills/references/gws-tasks/SKILL.md @@ -12,7 +12,7 @@ metadata: # tasks (v1) -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. ```bash gws tasks [flags] @@ -54,3 +54,6 @@ gws schema tasks.. Use `gws schema` output to build your `--params` and `--json` flags. +## See Also + +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth diff --git a/skills/gws-workflow-email-to-task/SKILL.md b/skills/references/gws-workflow-email-to-task/SKILL.md similarity index 74% rename from skills/gws-workflow-email-to-task/SKILL.md rename to skills/references/gws-workflow-email-to-task/SKILL.md index 8fb6ba96..db9fbb66 100644 --- a/skills/gws-workflow-email-to-task/SKILL.md +++ b/skills/references/gws-workflow-email-to-task/SKILL.md @@ -12,7 +12,7 @@ metadata: # 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. +> **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 @@ -43,5 +43,5 @@ gws workflow +email-to-task --message-id MSG_ID --tasklist LIST_ID ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-workflow](../gws-workflow/SKILL.md) — All cross-service productivity workflows commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-workflow](../../references/gws-workflow/SKILL.md) — All cross-service productivity workflows commands diff --git a/skills/gws-workflow-file-announce/SKILL.md b/skills/references/gws-workflow-file-announce/SKILL.md similarity index 78% rename from skills/gws-workflow-file-announce/SKILL.md rename to skills/references/gws-workflow-file-announce/SKILL.md index 5653d13f..d0eab6da 100644 --- a/skills/gws-workflow-file-announce/SKILL.md +++ b/skills/references/gws-workflow-file-announce/SKILL.md @@ -12,7 +12,7 @@ metadata: # 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. +> **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 @@ -46,5 +46,5 @@ gws workflow +file-announce --file-id FILE_ID --space spaces/ABC123 --message 'C ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-workflow](../gws-workflow/SKILL.md) — All cross-service productivity workflows commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-workflow](../../references/gws-workflow/SKILL.md) — All cross-service productivity workflows commands diff --git a/skills/gws-workflow-meeting-prep/SKILL.md b/skills/references/gws-workflow-meeting-prep/SKILL.md similarity index 73% rename from skills/gws-workflow-meeting-prep/SKILL.md rename to skills/references/gws-workflow-meeting-prep/SKILL.md index 4a127c0c..43e76a70 100644 --- a/skills/gws-workflow-meeting-prep/SKILL.md +++ b/skills/references/gws-workflow-meeting-prep/SKILL.md @@ -12,7 +12,7 @@ metadata: # 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. +> **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 @@ -43,5 +43,5 @@ gws workflow +meeting-prep --calendar Work ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-workflow](../gws-workflow/SKILL.md) — All cross-service productivity workflows commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-workflow](../../references/gws-workflow/SKILL.md) — All cross-service productivity workflows commands diff --git a/skills/gws-workflow-standup-report/SKILL.md b/skills/references/gws-workflow-standup-report/SKILL.md similarity index 70% rename from skills/gws-workflow-standup-report/SKILL.md rename to skills/references/gws-workflow-standup-report/SKILL.md index dce76f33..0bfe7c7f 100644 --- a/skills/gws-workflow-standup-report/SKILL.md +++ b/skills/references/gws-workflow-standup-report/SKILL.md @@ -12,7 +12,7 @@ metadata: # 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. +> **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 @@ -42,5 +42,5 @@ gws workflow +standup-report --format table ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-workflow](../gws-workflow/SKILL.md) — All cross-service productivity workflows commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-workflow](../../references/gws-workflow/SKILL.md) — All cross-service productivity workflows commands diff --git a/skills/gws-workflow-weekly-digest/SKILL.md b/skills/references/gws-workflow-weekly-digest/SKILL.md similarity index 71% rename from skills/gws-workflow-weekly-digest/SKILL.md rename to skills/references/gws-workflow-weekly-digest/SKILL.md index 0c076e12..22489c96 100644 --- a/skills/gws-workflow-weekly-digest/SKILL.md +++ b/skills/references/gws-workflow-weekly-digest/SKILL.md @@ -12,7 +12,7 @@ metadata: # 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. +> **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 @@ -42,5 +42,5 @@ gws workflow +weekly-digest --format table ## See Also -- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth -- [gws-workflow](../gws-workflow/SKILL.md) — All cross-service productivity workflows commands +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth +- [gws-workflow](../../references/gws-workflow/SKILL.md) — All cross-service productivity workflows commands diff --git a/skills/gws-workflow/SKILL.md b/skills/references/gws-workflow/SKILL.md similarity index 84% rename from skills/gws-workflow/SKILL.md rename to skills/references/gws-workflow/SKILL.md index 2325894e..d1dfa1f2 100644 --- a/skills/gws-workflow/SKILL.md +++ b/skills/references/gws-workflow/SKILL.md @@ -12,7 +12,7 @@ metadata: # workflow (v1) -> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. +> **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 [flags] @@ -42,3 +42,6 @@ gws schema workflow.. Use `gws schema` output to build your `--params` and `--json` flags. +## See Also + +- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth diff --git a/src/generate_skills.rs b/src/generate_skills.rs index ba2496b5..50d6321c 100644 --- a/src/generate_skills.rs +++ b/src/generate_skills.rs @@ -96,13 +96,44 @@ pub async fn handle_generate_skills(args: &[String]) -> Result<(), GwsError> { description: "gws CLI: Shared patterns for authentication, global flags, and output formatting." .to_string(), - category: "service".to_string(), + category: "shared".to_string(), }); } for entry in services::SERVICES { let alias = entry.aliases[0]; + // If filter is set, skip services that don't match the filter at all. + // This avoids fetching discovery docs and printing logs for skipped services. + if let Some(ref f) = filter { + if !alias.contains(f) && !f.contains("service") && !f.contains("helper") { + // If it's a specific filter for persona/recipe/shared, skip the API loop entirely + if f.contains("persona") || f.contains("recipe") || f.contains("shared") { + continue; + } + // If it's a specific service/helper filter and this isn't it, skip. + // We check if any helper might match too. + let mut matches_helper = false; + let cli = commands::build_cli(&discovery::RestDescription { + name: alias.to_string(), + ..Default::default() + }); + for sub in cli.get_subcommands() { + let name = sub.get_name(); + if name.starts_with('+') { + let short = name.trim_start_matches('+'); + if format!("{alias}-{short}").contains(f) { + matches_helper = true; + break; + } + } + } + if !matches_helper { + continue; + } + } + } + let skill_name = format!("gws-{alias}"); eprintln!( @@ -156,7 +187,7 @@ pub async fn handle_generate_skills(args: &[String]) -> Result<(), GwsError> { if emit_service { let service_md = render_service_skill(alias, entry, &helpers, &resources, &product_name, &doc); - write_skill(output_path, &skill_name, &service_md)?; + write_skill(output_path, &skill_name, &service_md, true)?; index.push(SkillIndexEntry { name: skill_name.clone(), description: service_description(&product_name, entry.description), @@ -184,7 +215,7 @@ pub async fn handle_generate_skills(args: &[String]) -> Result<(), GwsError> { let about_clean = about_raw.strip_prefix("[Helper] ").unwrap_or(&about_raw); let helper_md = render_helper_skill(alias, helper_name, helper, entry, &product_name); - write_skill(output_path, &helper_skill_name, &helper_md)?; + write_skill(output_path, &helper_skill_name, &helper_md, true)?; index.push(SkillIndexEntry { name: helper_skill_name, description: truncate_desc(&format!( @@ -216,7 +247,7 @@ pub async fn handle_generate_skills(args: &[String]) -> Result<(), GwsError> { }; if emit { let md = render_persona_skill(&persona); - write_skill(output_path, &name, &md)?; + write_skill(output_path, &name, &md, false)?; index.push(SkillIndexEntry { name: name.clone(), description: truncate_desc(&persona.description), @@ -247,7 +278,7 @@ pub async fn handle_generate_skills(args: &[String]) -> Result<(), GwsError> { }; if emit { let md = render_recipe_skill(&recipe); - write_skill(output_path, &name, &md)?; + write_skill(output_path, &name, &md, false)?; index.push(SkillIndexEntry { name: name.clone(), description: truncate_desc(&recipe.description), @@ -292,8 +323,12 @@ fn parse_filter(args: &[String]) -> Option { None } -fn write_skill(base: &Path, name: &str, content: &str) -> Result<(), GwsError> { - let dir = base.join(name); +fn write_skill(base: &Path, name: &str, content: &str, is_reference: bool) -> Result<(), GwsError> { + let dir = if is_reference { + base.join("references").join(name) + } else { + base.join(name) + }; std::fs::create_dir_all(&dir).map_err(|e| { GwsError::Validation(format!("Failed to create dir {}: {e}", dir.display())) })?; @@ -309,15 +344,20 @@ fn write_skills_index(entries: &[SkillIndexEntry]) -> Result<(), GwsError> { out.push_str("> Auto-generated by `gws generate-skills`. Do not edit manually.\n\n"); let sections = [ + ( + "shared", + "## Shared Patterns", + "Global flags, authentication, and security rules.", + ), ( "service", - "## Services", - "Core Google Workspace API skills.", + "## Services (Reference)", + "Core Google Workspace API technical references.", ), ( "helper", - "## Helpers", - "Shortcut commands for common operations.", + "## Helpers (Reference)", + "Technical references for shortcut commands.", ), ("persona", "## Personas", "Role-based skill bundles."), ( @@ -335,9 +375,14 @@ fn write_skills_index(entries: &[SkillIndexEntry]) -> Result<(), GwsError> { out.push_str(&format!("{heading}\n\n{subtitle}\n\n")); out.push_str("| Skill | Description |\n|-------|-------------|\n"); for item in &items { + let path = if cat == &"service" || cat == &"helper" { + format!("../skills/references/{}/SKILL.md", item.name) + } else { + format!("../skills/{}/SKILL.md", item.name) + }; out.push_str(&format!( - "| [{}](../skills/{}/SKILL.md) | {} |\n", - item.name, item.name, item.description + "| [{}]({}) | {} |\n", + item.name, path, item.description )); } out.push('\n'); @@ -399,7 +444,7 @@ metadata: out.push_str(&format!("# {alias} ({api_version})\n\n")); out.push_str( - "> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it.\n\n", + "> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it.\n\n", ); out.push_str(&format!( @@ -476,6 +521,11 @@ metadata: out.push_str(&format!("```bash\n# Browse resources and methods\ngws {alias} --help\n\n# Inspect a method's required params, types, and defaults\ngws schema {alias}..\n```\n\n")); out.push_str("Use `gws schema` output to build your `--params` and `--json` flags.\n\n"); + // Cross-reference + out.push_str( + "## See Also\n\n- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth\n", + ); + out } @@ -534,7 +584,7 @@ metadata: out.push_str(&format!("# {alias} {cmd_name}\n\n")); out.push_str( - "> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it.\n\n", + "> **PREREQUISITE:** Read `../../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it.\n\n", ); out.push_str(&format!("{about}\n\n")); @@ -654,7 +704,7 @@ metadata: // Cross-reference out.push_str(&format!( - "## See Also\n\n- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth\n- [gws-{alias}](../gws-{alias}/SKILL.md) — All {} commands\n", + "## See Also\n\n- [gws-shared](../../gws-shared/SKILL.md) — Global flags and auth\n- [gws-{alias}](../../references/gws-{alias}/SKILL.md) — All {} commands\n", entry.description.to_lowercase(), )); @@ -675,6 +725,15 @@ metadata: # gws — Shared Reference +## Discovery & Search + +With 40+ API services and hundreds of methods, use the search command to find the right tool for a task: + +```bash +gws skills search "send email" +gws skills search "upload file" +``` + ## Installation The `gws` binary must be on `$PATH`. See the project README for install options. @@ -745,7 +804,7 @@ gws [sub-resource] [flags] - If a matching issue already exists, add context by commenting on the existing thread instead of creating a duplicate "#; - write_skill(base, "gws-shared", content) + write_skill(base, "gws-shared", content, false) } fn render_persona_skill(persona: &PersonaEntry) -> String { @@ -755,7 +814,7 @@ fn render_persona_skill(persona: &PersonaEntry) -> String { let required_skills = persona .services .iter() - .map(|s| format!("\"gws-{s}\"")) + .map(|s| format!("\"references/gws-{s}\"")) .collect::>() .join(", "); @@ -792,7 +851,7 @@ metadata: skills_list = persona .services .iter() - .map(|s| format!("`gws-{s}`")) + .map(|s| format!("`references/gws-{s}`")) .collect::>() .join(", "), workflows = persona @@ -825,7 +884,7 @@ fn render_recipe_skill(recipe: &RecipeEntry) -> String { let required_skills = recipe .services .iter() - .map(|s| format!("\"gws-{s}\"")) + .map(|s| format!("\"references/gws-{s}\"")) .collect::>() .join(", "); @@ -860,7 +919,7 @@ metadata: skills_list = recipe .services .iter() - .map(|s| format!("`gws-{s}`")) + .map(|s| format!("`references/gws-{s}`")) .collect::>() .join(", "), )); diff --git a/src/main.rs b/src/main.rs index bd72c642..277122aa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -37,6 +37,7 @@ mod schema; mod services; mod setup; mod setup_tui; +mod skills_search; mod text; mod timezone; mod token_storage; @@ -137,6 +138,12 @@ async fn run() -> Result<(), GwsError> { return auth_commands::handle_auth_command(&auth_args).await; } + // Handle the `skills` command + if first_arg == "skills" { + let skills_args: Vec = args.iter().skip(2).cloned().collect(); + return skills_search::handle_skills_command(&skills_args).await; + } + // Parse service name and optional version override let (api_name, version) = parse_service_and_version(&args, &first_arg)?; @@ -420,6 +427,7 @@ fn print_usage() { println!("USAGE:"); println!(" gws [sub-resource] [flags]"); println!(" gws schema [--resolve-refs]"); + println!(" gws skills search "); println!(); println!("EXAMPLES:"); println!(" gws drive files list --params '{{\"pageSize\": 10}}'"); @@ -427,6 +435,7 @@ fn print_usage() { println!(" gws sheets spreadsheets get --params '{{\"spreadsheetId\": \"...\"}}'"); println!(" gws gmail users messages list --params '{{\"userId\": \"me\"}}'"); println!(" gws schema drive.files.list"); + println!(" gws skills search \"how to send an email\""); println!(); println!("FLAGS:"); println!(" --params URL/Query parameters as JSON"); diff --git a/src/skills_search.rs b/src/skills_search.rs new file mode 100644 index 00000000..b40b3053 --- /dev/null +++ b/src/skills_search.rs @@ -0,0 +1,124 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Search and discovery for agent skills. + +use crate::error::GwsError; +use crate::services; +use serde::Deserialize; + +const PERSONAS_YAML: &str = include_str!("../registry/personas.yaml"); +const RECIPES_YAML: &str = include_str!("../registry/recipes.yaml"); + +#[derive(Deserialize)] +struct PersonaRegistry { + personas: Vec, +} + +#[derive(Deserialize)] +struct PersonaEntry { + name: String, + title: String, + description: String, +} + +#[derive(Deserialize)] +struct RecipeRegistry { + recipes: Vec, +} + +#[derive(Deserialize)] +struct RecipeEntry { + name: String, + title: String, + description: String, +} + +/// Entry point for `gws skills search `. +pub async fn handle_skills_command(args: &[String]) -> Result<(), GwsError> { + if args.is_empty() || args[0] != "search" { + return Err(GwsError::Validation( + "Usage: gws skills search ".to_string(), + )); + } + + let query = args + .get(1) + .ok_or_else(|| { + GwsError::Validation( + "No search query provided. Usage: gws skills search ".to_string(), + ) + })? + .to_lowercase(); + + println!("Searching for skills matching \"{}\"...\n", query); + + let mut results = 0; + + // Search Services + for svc in services::SERVICES { + if svc.api_name.to_lowercase().contains(&query) + || svc.description.to_lowercase().contains(&query) + || svc + .aliases + .iter() + .any(|a| a.to_lowercase().contains(&query)) + { + println!("[Service] gws-{} - {}", svc.aliases[0], svc.description); + println!( + " Reference: skills/references/gws-{}/SKILL.md\n", + svc.aliases[0] + ); + results += 1; + } + } + + // Search Personas + if let Ok(registry) = serde_yaml::from_str::(PERSONAS_YAML) { + for p in registry.personas { + if p.name.to_lowercase().contains(&query) + || p.title.to_lowercase().contains(&query) + || p.description.to_lowercase().contains(&query) + { + println!("[Persona] persona-{} - {}", p.name, p.title); + println!(" Description: {}", p.description); + println!(" Skill: skills/persona-{}/SKILL.md\n", p.name); + results += 1; + } + } + } + + // Search Recipes + if let Ok(registry) = serde_yaml::from_str::(RECIPES_YAML) { + for r in registry.recipes { + if r.name.to_lowercase().contains(&query) + || r.title.to_lowercase().contains(&query) + || r.description.to_lowercase().contains(&query) + { + println!("[Recipe] recipe-{} - {}", r.name, r.title); + println!(" Description: {}", r.description); + println!(" Skill: skills/recipe-{}/SKILL.md\n", r.name); + results += 1; + } + } + } + + if results == 0 { + println!("No matching skills found."); + } else { + println!("Found {} matching skills.", results); + } + + Ok(()) +}