ワンクリックで
google-workspace-recipes
Cookbook of multi-step Google Workspace workflows (Gmail + Drive + Calendar + Docs + Sheets + Tasks).
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Cookbook of multi-step Google Workspace workflows (Gmail + Drive + Calendar + Docs + Sheets + Tasks).
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Intelligent routing between Bravo and Codex — decides when to delegate tasks to Codex vs handle internally
Secrets and authentication management. Ensures API keys, tokens, and credentials are NEVER exposed in plain text. Use when handling any credential, API key, or sensitive configuration.
Use when CC asks to create a new agent, scaffold a new agent repo, or clone Bravo's architecture for a new domain (client agent, sibling agent, specialized agent). Generates a new AI-agent repo from templates, wires it into C_SUITE_ARCHITECTURE.md and brain/APP_REGISTRY.md, preserves the V5.6 outbound chokepoint, and gives the new agent a doctor command on day one.
Claims-based access control for multi-agent coordination. Defines what each agent can read, write, execute, and spawn. Enforces least-privilege: agents only access what they need. Use when: spawning agents, multi-agent tasks, security-sensitive operations. Skip when: single-agent inline work, trivial tasks.
Build and maintain product-grade agent infrastructure: onboarding diagnostics, runtime home, packaging, skill lifecycle, tool manifests, and agent scaffolds.
Spawn and coordinate Claude Code Agent Teams (experimental) — parallel subagents for complex multi-domain tasks
| name | google-workspace-recipes |
| version | 1.0.0 |
| description | Cookbook of multi-step Google Workspace workflows (Gmail + Drive + Calendar + Docs + Sheets + Tasks). |
| tags | ["skills","google-workspace","recipes","cookbook"] |
| metadata | {"openclaw":{"category":"recipe","domain":"productivity","requires":{"bins":["gws"]}}} |
| triggers | ["google workspace recipes","use google workspace recipes","run google workspace recipes"] |
| tier | specialized |
Multi-step recipes combining
gwsCLI commands. Each recipe solves a concrete productivity workflow. Single source of truth — replaces 41 individualrecipe-*skill files. [[skills/INDEX.md]] | [[brain/CAPABILITIES]]
gws binary must be on $PATH. See skills/gws-shared/SKILL.md for auth and global flags.gws-gmail, gws-drive, etc.).Create a Gmail filter to automatically label, star, or categorize incoming messages.
Requires: gws-gmail
gws gmail users labels list --params '{"userId": "me"}' --format tablegws gmail users labels create --params '{"userId": "me"}' --json '{"name": "Receipts"}'gws gmail users settings filters create --params '{"userId": "me"}' --json '{"criteria": {"from": "receipts@example.com"}, "action": {"addLabelIds": ["LABEL_ID"], "removeLabelIds": ["INBOX"]}}'gws gmail users settings filters list --params '{"userId": "me"}' --format tableEnable a Gmail out-of-office auto-reply with a custom message and date range.
Requires: gws-gmail
gws gmail users settings updateVacation --params '{"userId": "me"}' --json '{"enableAutoReply": true, "responseSubject": "Out of Office", "responseBodyPlainText": "I am out of the office until Jan 20. For urgent matters, contact backup@company.com.", "restrictToContacts": false, "restrictToDomain": false}'gws gmail users settings getVacation --params '{"userId": "me"}'gws gmail users settings updateVacation --params '{"userId": "me"}' --json '{"enableAutoReply": false}'Read content from a Google Doc and use it as the body of a Gmail message.
Requires: gws-docs, gws-gmail
gws docs documents get --params '{"documentId": "DOC_ID"}'gws gmail +send --to recipient@example.com --subject 'Newsletter Update' --body 'CONTENT_FROM_DOC'Share a Google Drive file and email the link with a message to recipients.
Requires: gws-drive, gws-gmail
gws drive files list --params '{"q": "name = '\''Quarterly Report'\''"}'gws drive permissions create --params '{"fileId": "FILE_ID"}' --json '{"role": "reader", "type": "user", "emailAddress": "client@example.com"}'gws gmail +send --to client@example.com --subject 'Quarterly Report' --body 'Hi, please find the report here: https://docs.google.com/document/d/FILE_ID'Find Gmail messages with a specific label and forward them to another address.
Requires: gws-gmail
gws gmail users messages list --params '{"userId": "me", "q": "label:needs-review"}' --format tablegws gmail users messages get --params '{"userId": "me", "id": "MSG_ID"}'[Original Message Body]'`
Apply Gmail labels to matching messages and archive them to keep your inbox clean.
Requires: gws-gmail
gws gmail users messages list --params '{"userId": "me", "q": "from:notifications@service.com"}' --format tablegws gmail users messages modify --params '{"userId": "me", "id": "MESSAGE_ID"}' --json '{"addLabelIds": ["LABEL_ID"]}'gws gmail users messages modify --params '{"userId": "me", "id": "MESSAGE_ID"}' --json '{"removeLabelIds": ["INBOX"]}'Find Gmail messages with attachments and save them to a Google Drive folder.
Requires: gws-gmail, gws-drive
gws gmail users messages list --params '{"userId": "me", "q": "has:attachment from:client@example.com"}' --format tablegws gmail users messages get --params '{"userId": "me", "id": "MESSAGE_ID"}'gws gmail users messages attachments get --params '{"userId": "me", "messageId": "MESSAGE_ID", "id": "ATTACHMENT_ID"}'gws drive +upload --file ./attachment.pdf --parent FOLDER_IDSave a Gmail message body into a Google Doc for archival or reference.
Requires: gws-gmail, gws-docs
gws gmail users messages list --params '{"userId": "me", "q": "subject:important from:boss@company.com"}' --format tablegws gmail users messages get --params '{"userId": "me", "id": "MSG_ID"}'gws docs documents create --json '{"title": "Saved Email - Important Update"}'[EMAIL BODY]'`
Export a Google Sheets spreadsheet as a CSV file for local backup or processing.
Requires: gws-sheets, gws-drive
gws sheets spreadsheets get --params '{"spreadsheetId": "SHEET_ID"}'gws drive files export --params '{"fileId": "SHEET_ID", "mimeType": "text/csv"}'gws sheets +read --spreadsheet SHEET_ID --range 'Sheet1' --format csvList and download all files from a Google Drive folder.
Requires: gws-drive
gws drive files list --params '{"q": "'\''FOLDER_ID'\'' in parents"}' --format jsongws drive files get --params '{"fileId": "FILE_ID", "alt": "media"}' -o filename.extgws drive files export --params '{"fileId": "FILE_ID", "mimeType": "application/pdf"}' -o document.pdfCreate a Google Shared Drive and add members with appropriate roles.
Requires: gws-drive
gws drive drives create --params '{"requestId": "unique-id-123"}' --json '{"name": "Project X"}'gws drive permissions create --params '{"fileId": "DRIVE_ID", "supportsAllDrives": true}' --json '{"role": "writer", "type": "user", "emailAddress": "member@company.com"}'gws drive permissions list --params '{"fileId": "DRIVE_ID", "supportsAllDrives": true}'Identify large Google Drive files consuming storage quota.
Requires: gws-drive
gws drive files list --params '{"orderBy": "quotaBytesUsed desc", "pageSize": 20, "fields": "files(id,name,size,mimeType,owners)"}' --format tableCreate a Google Drive folder structure and move files into the right locations.
Requires: gws-drive
gws drive files create --json '{"name": "Q2 Project", "mimeType": "application/vnd.google-apps.folder"}'gws drive files create --json '{"name": "Documents", "mimeType": "application/vnd.google-apps.folder", "parents": ["PARENT_FOLDER_ID"]}'gws drive files update --params '{"fileId": "FILE_ID", "addParents": "FOLDER_ID", "removeParents": "OLD_PARENT_ID"}'gws drive files list --params '{"q": "FOLDER_ID in parents"}' --format tableShare a Google Drive folder and all its contents with a list of collaborators.
Requires: gws-drive
gws drive files list --params '{"q": "name = '\''Project X'\'' and mimeType = '\''application/vnd.google-apps.folder'\''"}'gws drive permissions create --params '{"fileId": "FOLDER_ID"}' --json '{"role": "writer", "type": "user", "emailAddress": "colleague@company.com"}'gws drive permissions create --params '{"fileId": "FOLDER_ID"}' --json '{"role": "reader", "type": "user", "emailAddress": "stakeholder@company.com"}'gws drive permissions list --params '{"fileId": "FOLDER_ID"}' --format tableSubscribe to change notifications on a Google Drive file or folder.
Requires: gws-events
gws events subscriptions create --json '{"targetResource": "//drive.googleapis.com/drives/DRIVE_ID", "eventTypes": ["google.workspace.drive.file.v1.updated"], "notificationEndpoint": {"pubsubTopic": "projects/PROJECT/topics/TOPIC"}, "payloadOptions": {"includeResource": true}}'gws events subscriptions listgws events +renew --subscription SUBSCRIPTION_IDAdd a list of attendees to an existing Google Calendar event and send notifications.
Requires: gws-calendar
gws calendar events get --params '{"calendarId": "primary", "eventId": "EVENT_ID"}'gws calendar events patch --params '{"calendarId": "primary", "eventId": "EVENT_ID", "sendUpdates": "all"}' --json '{"attendees": [{"email": "alice@company.com"}, {"email": "bob@company.com"}, {"email": "carol@company.com"}]}'gws calendar events get --params '{"calendarId": "primary", "eventId": "EVENT_ID"}'Create recurring focus time blocks on Google Calendar to protect deep work hours.
Requires: gws-calendar
gws calendar events insert --params '{"calendarId": "primary"}' --json '{"summary": "Focus Time", "description": "Protected deep work block", "start": {"dateTime": "2025-01-20T09:00:00", "timeZone": "America/New_York"}, "end": {"dateTime": "2025-01-20T11:00:00", "timeZone": "America/New_York"}, "recurrence": ["RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR"], "transparency": "opaque"}'gws calendar +agendaRead event data from a Google Sheets spreadsheet and create Google Calendar entries for each row.
Requires: gws-sheets, gws-calendar
gws sheets +read --spreadsheet SHEET_ID --range "Events!A2:D"gws calendar +insert --summary 'Team Standup' --start '2026-01-20T09:00:00' --end '2026-01-20T09:30:00' --attendee alice@company.com --attendee bob@company.comQuery Google Calendar free/busy status for multiple users to find a meeting slot.
Requires: gws-calendar
gws calendar freebusy query --json '{"timeMin": "2024-03-18T08:00:00Z", "timeMax": "2024-03-18T18:00:00Z", "items": [{"id": "user1@company.com"}, {"id": "user2@company.com"}]}'gws calendar +insert --summary 'Meeting' --attendee user1@company.com --attendee user2@company.com --start '2024-03-18T14:00:00' --end '2024-03-18T14:30:00'Review your Google Calendar week, identify gaps, and add events to fill them.
Requires: gws-calendar
gws calendar +agendagws calendar freebusy query --json '{"timeMin": "2025-01-20T00:00:00Z", "timeMax": "2025-01-25T00:00:00Z", "items": [{"id": "primary"}]}'gws calendar +insert --summary 'Deep Work Block' --start '2026-01-21T14:00:00' --end '2026-01-21T16:00:00'gws calendar +agendaMove a Google Calendar event to a new time and automatically notify all attendees.
Requires: gws-calendar
gws calendar +agendagws calendar events get --params '{"calendarId": "primary", "eventId": "EVENT_ID"}'gws calendar events patch --params '{"calendarId": "primary", "eventId": "EVENT_ID", "sendUpdates": "all"}' --json '{"start": {"dateTime": "2025-01-22T14:00:00", "timeZone": "America/New_York"}, "end": {"dateTime": "2025-01-22T15:00:00", "timeZone": "America/New_York"}}'Create a recurring Google Calendar event with attendees.
Requires: gws-calendar
gws calendar events insert --params '{"calendarId": "primary"}' --json '{"summary": "Weekly Standup", "start": {"dateTime": "2024-03-18T09:00:00", "timeZone": "America/New_York"}, "end": {"dateTime": "2024-03-18T09:30:00", "timeZone": "America/New_York"}, "recurrence": ["RRULE:FREQ=WEEKLY;BYDAY=MO"], "attendees": [{"email": "team@company.com"}]}'gws calendar +agenda --days 14 --format tableShare Google Drive files with all attendees of a Google Calendar event.
Requires: gws-calendar, gws-drive
gws calendar events get --params '{"calendarId": "primary", "eventId": "EVENT_ID"}'gws drive permissions create --params '{"fileId": "FILE_ID"}' --json '{"role": "reader", "type": "user", "emailAddress": "attendee@company.com"}'gws drive permissions list --params '{"fileId": "FILE_ID"}' --format tableRetrieve and review responses from a Google Form.
Requires: gws-forms
gws forms forms list (if you don't have the form ID)gws forms forms get --params '{"formId": "FORM_ID"}'gws forms forms responses list --params '{"formId": "FORM_ID"}' --format tableRead data from two tabs in a Google Sheet to compare and identify differences.
Requires: gws-sheets
gws sheets +read --spreadsheet SHEET_ID --range "January!A1:D"gws sheets +read --spreadsheet SHEET_ID --range "February!A1:D"Duplicate a Google Sheets template tab for a new month of tracking.
Requires: gws-sheets
gws sheets spreadsheets get --params '{"spreadsheetId": "SHEET_ID"}'gws sheets spreadsheets sheets copyTo --params '{"spreadsheetId": "SHEET_ID", "sheetId": 0}' --json '{"destinationSpreadsheetId": "SHEET_ID"}'gws sheets spreadsheets batchUpdate --params '{"spreadsheetId": "SHEET_ID"}' --json '{"requests": [{"updateSheetProperties": {"properties": {"sheetId": 123, "title": "February 2025"}, "fields": "title"}}]}'Copy a Google Docs template, fill in content, and share with collaborators.
Requires: gws-drive, gws-docs
gws drive files copy --params '{"fileId": "TEMPLATE_DOC_ID"}' --json '{"name": "Project Brief - Q2 Launch"}'Launch the new feature by end of Q2.'4. Share with team:gws drive permissions create --params '{"fileId": "NEW_DOC_ID"}' --json '{"role": "writer", "type": "user", "emailAddress": "team@company.com"}'`
Create a Google Form for feedback and share it via Gmail.
Requires: gws-forms, gws-gmail
gws forms forms create --json '{"info": {"title": "Event Feedback", "documentTitle": "Event Feedback Form"}}'gws gmail +send --to attendees@company.com --subject 'Please share your feedback' --body 'Fill out the form: FORM_URL'Create a new Google Slides presentation and add initial slides.
Requires: gws-slides
gws slides presentations create --json '{"title": "Quarterly Review Q2"}'gws drive permissions create --params '{"fileId": "PRESENTATION_ID"}' --json '{"role": "writer", "type": "user", "emailAddress": "team@company.com"}'Read data from a Google Sheet and create a formatted Google Docs report.
Requires: gws-sheets, gws-docs, gws-drive
gws sheets +read --spreadsheet SHEET_ID --range "Sales!A1:D"gws docs documents create --json '{"title": "Sales Report - January 2025"}'Total deals: 45 Revenue: $125,000
gws drive permissions create --params '{"fileId": "DOC_ID"}' --json '{"role": "reader", "type": "user", "emailAddress": "cfo@company.com"}'Share a Google Docs document with edit access and email collaborators the link.
Requires: gws-drive, gws-docs, gws-gmail
gws drive files list --params '{"q": "name contains '\''Project Brief'\'' and mimeType = '\''application/vnd.google-apps.document'\''"}'gws drive permissions create --params '{"fileId": "DOC_ID"}' --json '{"role": "writer", "type": "user", "emailAddress": "reviewer@company.com"}'gws gmail +send --to reviewer@company.com --subject 'Please review: Project Brief' --body 'I have shared the project brief with you: https://docs.google.com/document/d/DOC_ID'Export Google Contacts directory to a Google Sheets spreadsheet.
Requires: gws-people, gws-sheets
gws people people listDirectoryPeople --params '{"readMask": "names,emailAddresses,phoneNumbers", "sources": ["DIRECTORY_SOURCE_TYPE_DOMAIN_PROFILE"], "pageSize": 100}' --format jsongws sheets +append --spreadsheet SHEET_ID --range 'Contacts' --values '["Name", "Email", "Phone"]'gws sheets +append --spreadsheet SHEET_ID --range 'Contacts' --values '["Jane Doe", "jane@company.com", "+1-555-0100"]'Create a Google Meet meeting space and share the join link.
Requires: gws-meet, gws-gmail
gws meet spaces create --json '{"config": {"accessType": "OPEN"}}'gws gmail +send --to team@company.com --subject 'Join the meeting' --body 'Join here: MEETING_URI'Review who attended a Google Meet conference and for how long.
Requires: gws-meet
gws meet conferenceRecords list --format tablegws meet conferenceRecords participants list --params '{"parent": "conferenceRecords/CONFERENCE_ID"}' --format tablegws meet conferenceRecords participants participantSessions list --params '{"parent": "conferenceRecords/CONFERENCE_ID/participants/PARTICIPANT_ID"}' --format tableSend a team announcement via both Gmail and a Google Chat space.
Requires: gws-gmail, gws-chat
gws gmail +send --to team@company.com --subject 'Important Update' --body 'Please review the attached policy changes.'gws chat +send --space spaces/TEAM_SPACE --text '📢 Important Update: Please check your email for policy changes.'Set up a new Google Tasks list with initial tasks.
Requires: gws-tasks
gws tasks tasklists insert --json '{"title": "Q2 Goals"}'gws tasks tasks insert --params '{"tasklist": "TASKLIST_ID"}' --json '{"title": "Review Q1 metrics", "notes": "Pull data from analytics dashboard", "due": "2024-04-01T00:00:00Z"}'gws tasks tasks insert --params '{"tasklist": "TASKLIST_ID"}' --json '{"title": "Draft Q2 OKRs"}'gws tasks tasks list --params '{"tasklist": "TASKLIST_ID"}' --format tableFind Google Tasks that are past due and need attention.
Requires: gws-tasks
gws tasks tasklists list --format tablegws tasks tasks list --params '{"tasklist": "TASKLIST_ID", "showCompleted": false}' --format tableCreate a Google Classroom course and invite students.
Requires: gws-classroom
gws classroom courses create --json '{"name": "Introduction to CS", "section": "Period 1", "room": "Room 101", "ownerId": "me"}'gws classroom invitations create --json '{"courseId": "COURSE_ID", "userId": "student@school.edu", "role": "STUDENT"}'gws classroom courses students list --params '{"courseId": "COURSE_ID"}' --format tableSet up a Google Sheets spreadsheet for tracking expenses with headers and initial entries.
Requires: gws-sheets, gws-drive
gws drive files create --json '{"name": "Expense Tracker 2025", "mimeType": "application/vnd.google-apps.spreadsheet"}'gws sheets +append --spreadsheet SHEET_ID --range 'Sheet1' --values '["Date", "Category", "Description", "Amount"]'gws sheets +append --spreadsheet SHEET_ID --range 'Sheet1' --values '["2025-01-15", "Travel", "Flight to NYC", "450.00"]'gws drive permissions create --params '{"fileId": "SHEET_ID"}' --json '{"role": "reader", "type": "user", "emailAddress": "manager@company.com"}'Append a deal status update to a Google Sheets sales tracking spreadsheet.
Requires: gws-sheets, gws-drive
gws drive files list --params '{"q": "name = '\''Sales Pipeline'\'' and mimeType = '\''application/vnd.google-apps.spreadsheet'\''"}'gws sheets +read --spreadsheet SHEET_ID --range "Pipeline!A1:F"gws sheets +append --spreadsheet SHEET_ID --range 'Pipeline' --values '["2024-03-15", "Acme Corp", "Proposal Sent", "$50,000", "Q2", "jdoe"]'Create a Google Docs post-mortem, schedule a Google Calendar review, and notify via Chat.
Requires: gws-docs, gws-calendar, gws-chat
gws docs +write --title 'Post-Mortem: [Incident]' --body '## Summary\n\n## Timeline\n\n## Root Cause\n\n## Action Items'gws calendar +insert --summary 'Post-Mortem Review: [Incident]' --attendee team@company.com --start '2026-03-16T14:00:00' --end '2026-03-16T15:00:00'gws chat +send --space spaces/ENG_SPACE --text '🔍 Post-mortem scheduled for [Incident].'All outbound communications (emails, notifications, messages) referenced in this skill MUST be routed through
scripts/integrations/send_gateway.py. Directsmtplibor raw SMTP calls are architecturally prohibited (V5.6 chokepoint rule). Use:python scripts/integrations/send_gateway.py send --channel email --to <email> --subject "..." --body "..." --lead-id <uuid>See [[skills/send-gateway/SKILL.md]] for the full contract.