create-claude-code-visualizer 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +393 -0
- package/package.json +31 -0
- package/templates/CLAUDE.md +108 -0
- package/templates/app/.env.local.example +14 -0
- package/templates/app/ecosystem.config.js +29 -0
- package/templates/app/next-env.d.ts +6 -0
- package/templates/app/next.config.ts +16 -0
- package/templates/app/package-lock.json +4581 -0
- package/templates/app/package.json +38 -0
- package/templates/app/postcss.config.js +5 -0
- package/templates/app/src/app/agents/[slug]/chat/loading.tsx +26 -0
- package/templates/app/src/app/agents/[slug]/chat/page.tsx +579 -0
- package/templates/app/src/app/agents/[slug]/loading.tsx +19 -0
- package/templates/app/src/app/agents/page.tsx +8 -0
- package/templates/app/src/app/api/agents/[slug]/capabilities/route.ts +11 -0
- package/templates/app/src/app/api/agents/[slug]/route.ts +57 -0
- package/templates/app/src/app/api/agents/route.ts +28 -0
- package/templates/app/src/app/api/ai/generate-agent/route.ts +87 -0
- package/templates/app/src/app/api/ai/improve-claude-md/route.ts +78 -0
- package/templates/app/src/app/api/ai/suggestions/route.ts +64 -0
- package/templates/app/src/app/api/ai/title/route.ts +88 -0
- package/templates/app/src/app/api/auth/role/route.ts +17 -0
- package/templates/app/src/app/api/commands/[slug]/route.ts +61 -0
- package/templates/app/src/app/api/commands/route.ts +6 -0
- package/templates/app/src/app/api/governance/costs/route.ts +117 -0
- package/templates/app/src/app/api/governance/sessions/route.ts +335 -0
- package/templates/app/src/app/api/notifications/route.ts +62 -0
- package/templates/app/src/app/api/preferences/route.ts +44 -0
- package/templates/app/src/app/api/runs/[id]/approve/route.ts +38 -0
- package/templates/app/src/app/api/runs/[id]/events/route.ts +28 -0
- package/templates/app/src/app/api/runs/[id]/metadata/route.ts +30 -0
- package/templates/app/src/app/api/runs/[id]/route.ts +21 -0
- package/templates/app/src/app/api/runs/[id]/start/route.ts +61 -0
- package/templates/app/src/app/api/runs/[id]/stop/route.ts +16 -0
- package/templates/app/src/app/api/runs/[id]/stream/route.ts +201 -0
- package/templates/app/src/app/api/runs/route.ts +95 -0
- package/templates/app/src/app/api/schedules/[id]/route.ts +81 -0
- package/templates/app/src/app/api/schedules/route.ts +75 -0
- package/templates/app/src/app/api/settings/access-logs/route.ts +33 -0
- package/templates/app/src/app/api/settings/claude-md/route.ts +44 -0
- package/templates/app/src/app/api/settings/env-keys/route.ts +271 -0
- package/templates/app/src/app/api/settings/users/route.ts +108 -0
- package/templates/app/src/app/api/skills/[slug]/route.ts +43 -0
- package/templates/app/src/app/api/skills/route.ts +6 -0
- package/templates/app/src/app/api/tools/route.ts +65 -0
- package/templates/app/src/app/api/uploads/cleanup/route.ts +29 -0
- package/templates/app/src/app/api/uploads/route.ts +77 -0
- package/templates/app/src/app/auth/callback/route.ts +19 -0
- package/templates/app/src/app/globals.css +115 -0
- package/templates/app/src/app/layout.tsx +24 -0
- package/templates/app/src/app/loading.tsx +16 -0
- package/templates/app/src/app/login/page.tsx +64 -0
- package/templates/app/src/app/not-authorized/page.tsx +33 -0
- package/templates/app/src/app/runs/page.tsx +55 -0
- package/templates/app/src/app/schedules/page.tsx +110 -0
- package/templates/app/src/app/settings/page.tsx +1294 -0
- package/templates/app/src/app/skills/page.tsx +7 -0
- package/templates/app/src/components/agent-card.tsx +58 -0
- package/templates/app/src/components/agent-grid.tsx +90 -0
- package/templates/app/src/components/auth/auth-context.tsx +79 -0
- package/templates/app/src/components/chat-thread.tsx +50 -0
- package/templates/app/src/components/chat-view.tsx +670 -0
- package/templates/app/src/components/commands-browser.tsx +349 -0
- package/templates/app/src/components/create-agent-modal.tsx +388 -0
- package/templates/app/src/components/governance-dashboard.tsx +397 -0
- package/templates/app/src/components/icons.tsx +401 -0
- package/templates/app/src/components/layout/agent-sidebar.tsx +504 -0
- package/templates/app/src/components/layout/app-shell.tsx +29 -0
- package/templates/app/src/components/layout/nav.tsx +87 -0
- package/templates/app/src/components/layout/overview-inner.tsx +14 -0
- package/templates/app/src/components/layout/profile-menu.tsx +95 -0
- package/templates/app/src/components/layout/sidebar.tsx +30 -0
- package/templates/app/src/components/markdown.tsx +57 -0
- package/templates/app/src/components/message-bar.tsx +161 -0
- package/templates/app/src/components/notifications/notification-bell.tsx +104 -0
- package/templates/app/src/components/notifications/notification-panel.tsx +116 -0
- package/templates/app/src/components/overview/overview-content.tsx +287 -0
- package/templates/app/src/components/overview/overview-context.tsx +88 -0
- package/templates/app/src/components/preferences-modal.tsx +112 -0
- package/templates/app/src/components/run-form.tsx +73 -0
- package/templates/app/src/components/run-history-table.tsx +226 -0
- package/templates/app/src/components/run-output.tsx +187 -0
- package/templates/app/src/components/schedule-form.tsx +148 -0
- package/templates/app/src/components/skills-browser.tsx +338 -0
- package/templates/app/src/components/tool-tooltip.tsx +82 -0
- package/templates/app/src/hooks/use-sse.ts +115 -0
- package/templates/app/src/instrumentation.ts +9 -0
- package/templates/app/src/lib/agent-cache.ts +19 -0
- package/templates/app/src/lib/agent-runner.ts +411 -0
- package/templates/app/src/lib/agents.ts +168 -0
- package/templates/app/src/lib/ai.ts +40 -0
- package/templates/app/src/lib/approval-store.ts +70 -0
- package/templates/app/src/lib/auth-guard.ts +116 -0
- package/templates/app/src/lib/capabilities.ts +191 -0
- package/templates/app/src/lib/line-diff.ts +96 -0
- package/templates/app/src/lib/queue.ts +22 -0
- package/templates/app/src/lib/redis.ts +12 -0
- package/templates/app/src/lib/role-permissions.ts +166 -0
- package/templates/app/src/lib/run-agent.ts +442 -0
- package/templates/app/src/lib/supabase-browser.ts +8 -0
- package/templates/app/src/lib/supabase-middleware.ts +63 -0
- package/templates/app/src/lib/supabase-server.ts +28 -0
- package/templates/app/src/lib/supabase.ts +6 -0
- package/templates/app/src/lib/tool-descriptions.ts +29 -0
- package/templates/app/src/lib/types.ts +73 -0
- package/templates/app/src/lib/typewriter-animation.ts +159 -0
- package/templates/app/src/middleware.ts +13 -0
- package/templates/app/tsconfig.json +21 -0
- package/templates/app/uploads/.gitkeep +0 -0
- package/templates/app/worker/index.ts +342 -0
- package/templates/claude/agents/ai-trends-scout.md +66 -0
- package/templates/claude/commands/add-to-todos.md +56 -0
- package/templates/claude/commands/check-todos.md +56 -0
- package/templates/claude/hooks/auto-approve-safe.sh +34 -0
- package/templates/claude/hooks/auto-format.sh +25 -0
- package/templates/claude/hooks/block-destructive.sh +32 -0
- package/templates/claude/hooks/compaction-preserver.sh +16 -0
- package/templates/claude/hooks/notify.sh +26 -0
- package/templates/claude/settings.local.json +66 -0
- package/templates/claude/skills/frontend-design/SKILL.md +127 -0
- package/templates/claude/skills/frontend-design/reference/color-and-contrast.md +132 -0
- package/templates/claude/skills/frontend-design/reference/interaction-design.md +123 -0
- package/templates/claude/skills/frontend-design/reference/motion-design.md +99 -0
- package/templates/claude/skills/frontend-design/reference/responsive-design.md +114 -0
- package/templates/claude/skills/frontend-design/reference/spatial-design.md +100 -0
- package/templates/claude/skills/frontend-design/reference/typography.md +131 -0
- package/templates/claude/skills/frontend-design/reference/ux-writing.md +107 -0
- package/templates/claude/skills/gws-admin-reports/SKILL.md +57 -0
- package/templates/claude/skills/gws-calendar/SKILL.md +108 -0
- package/templates/claude/skills/gws-calendar-agenda/SKILL.md +52 -0
- package/templates/claude/skills/gws-calendar-insert/SKILL.md +55 -0
- package/templates/claude/skills/gws-chat/SKILL.md +73 -0
- package/templates/claude/skills/gws-chat-send/SKILL.md +49 -0
- package/templates/claude/skills/gws-classroom/SKILL.md +75 -0
- package/templates/claude/skills/gws-docs/SKILL.md +48 -0
- package/templates/claude/skills/gws-docs-write/SKILL.md +49 -0
- package/templates/claude/skills/gws-drive/SKILL.md +137 -0
- package/templates/claude/skills/gws-drive-upload/SKILL.md +52 -0
- package/templates/claude/skills/gws-events/SKILL.md +67 -0
- package/templates/claude/skills/gws-events-renew/SKILL.md +48 -0
- package/templates/claude/skills/gws-events-subscribe/SKILL.md +59 -0
- package/templates/claude/skills/gws-forms/SKILL.md +45 -0
- package/templates/claude/skills/gws-gmail/SKILL.md +59 -0
- package/templates/claude/skills/gws-gmail-forward/SKILL.md +53 -0
- package/templates/claude/skills/gws-gmail-reply/SKILL.md +56 -0
- package/templates/claude/skills/gws-gmail-reply-all/SKILL.md +60 -0
- package/templates/claude/skills/gws-gmail-send/SKILL.md +55 -0
- package/templates/claude/skills/gws-gmail-triage/SKILL.md +50 -0
- package/templates/claude/skills/gws-gmail-watch/SKILL.md +58 -0
- package/templates/claude/skills/gws-keep/SKILL.md +48 -0
- package/templates/claude/skills/gws-meet/SKILL.md +51 -0
- package/templates/claude/skills/gws-modelarmor/SKILL.md +42 -0
- package/templates/claude/skills/gws-modelarmor-create-template/SKILL.md +53 -0
- package/templates/claude/skills/gws-modelarmor-sanitize-prompt/SKILL.md +48 -0
- package/templates/claude/skills/gws-modelarmor-sanitize-response/SKILL.md +48 -0
- package/templates/claude/skills/gws-people/SKILL.md +67 -0
- package/templates/claude/skills/gws-shared/SKILL.md +66 -0
- package/templates/claude/skills/gws-sheets/SKILL.md +53 -0
- package/templates/claude/skills/gws-sheets-append/SKILL.md +51 -0
- package/templates/claude/skills/gws-sheets-read/SKILL.md +47 -0
- package/templates/claude/skills/gws-slides/SKILL.md +43 -0
- package/templates/claude/skills/gws-tasks/SKILL.md +56 -0
- package/templates/claude/skills/gws-workflow/SKILL.md +44 -0
- package/templates/claude/skills/gws-workflow-email-to-task/SKILL.md +47 -0
- package/templates/claude/skills/gws-workflow-file-announce/SKILL.md +50 -0
- package/templates/claude/skills/gws-workflow-meeting-prep/SKILL.md +47 -0
- package/templates/claude/skills/gws-workflow-standup-report/SKILL.md +46 -0
- package/templates/claude/skills/gws-workflow-weekly-digest/SKILL.md +46 -0
- package/templates/claude/skills/persona-content-creator/SKILL.md +33 -0
- package/templates/claude/skills/persona-customer-support/SKILL.md +34 -0
- package/templates/claude/skills/persona-event-coordinator/SKILL.md +35 -0
- package/templates/claude/skills/persona-exec-assistant/SKILL.md +35 -0
- package/templates/claude/skills/persona-hr-coordinator/SKILL.md +33 -0
- package/templates/claude/skills/persona-it-admin/SKILL.md +30 -0
- package/templates/claude/skills/persona-project-manager/SKILL.md +35 -0
- package/templates/claude/skills/persona-researcher/SKILL.md +33 -0
- package/templates/claude/skills/persona-sales-ops/SKILL.md +35 -0
- package/templates/claude/skills/persona-team-lead/SKILL.md +36 -0
- package/templates/claude/skills/recipe-backup-sheet-as-csv/SKILL.md +25 -0
- package/templates/claude/skills/recipe-batch-invite-to-event/SKILL.md +25 -0
- package/templates/claude/skills/recipe-block-focus-time/SKILL.md +24 -0
- package/templates/claude/skills/recipe-bulk-download-folder/SKILL.md +25 -0
- package/templates/claude/skills/recipe-collect-form-responses/SKILL.md +25 -0
- package/templates/claude/skills/recipe-compare-sheet-tabs/SKILL.md +25 -0
- package/templates/claude/skills/recipe-copy-sheet-for-new-month/SKILL.md +25 -0
- package/templates/claude/skills/recipe-create-classroom-course/SKILL.md +25 -0
- package/templates/claude/skills/recipe-create-doc-from-template/SKILL.md +29 -0
- package/templates/claude/skills/recipe-create-events-from-sheet/SKILL.md +24 -0
- package/templates/claude/skills/recipe-create-expense-tracker/SKILL.md +26 -0
- package/templates/claude/skills/recipe-create-feedback-form/SKILL.md +25 -0
- package/templates/claude/skills/recipe-create-gmail-filter/SKILL.md +26 -0
- package/templates/claude/skills/recipe-create-meet-space/SKILL.md +25 -0
- package/templates/claude/skills/recipe-create-presentation/SKILL.md +25 -0
- package/templates/claude/skills/recipe-create-shared-drive/SKILL.md +25 -0
- package/templates/claude/skills/recipe-create-task-list/SKILL.md +26 -0
- package/templates/claude/skills/recipe-create-vacation-responder/SKILL.md +25 -0
- package/templates/claude/skills/recipe-draft-email-from-doc/SKILL.md +25 -0
- package/templates/claude/skills/recipe-email-drive-link/SKILL.md +25 -0
- package/templates/claude/skills/recipe-find-free-time/SKILL.md +25 -0
- package/templates/claude/skills/recipe-find-large-files/SKILL.md +24 -0
- package/templates/claude/skills/recipe-forward-labeled-emails/SKILL.md +27 -0
- package/templates/claude/skills/recipe-generate-report-from-sheet/SKILL.md +34 -0
- package/templates/claude/skills/recipe-label-and-archive-emails/SKILL.md +25 -0
- package/templates/claude/skills/recipe-log-deal-update/SKILL.md +25 -0
- package/templates/claude/skills/recipe-organize-drive-folder/SKILL.md +26 -0
- package/templates/claude/skills/recipe-plan-weekly-schedule/SKILL.md +26 -0
- package/templates/claude/skills/recipe-post-mortem-setup/SKILL.md +25 -0
- package/templates/claude/skills/recipe-reschedule-meeting/SKILL.md +25 -0
- package/templates/claude/skills/recipe-review-meet-participants/SKILL.md +25 -0
- package/templates/claude/skills/recipe-review-overdue-tasks/SKILL.md +25 -0
- package/templates/claude/skills/recipe-save-email-attachments/SKILL.md +26 -0
- package/templates/claude/skills/recipe-save-email-to-doc/SKILL.md +29 -0
- package/templates/claude/skills/recipe-schedule-recurring-event/SKILL.md +24 -0
- package/templates/claude/skills/recipe-send-team-announcement/SKILL.md +24 -0
- package/templates/claude/skills/recipe-share-doc-and-notify/SKILL.md +25 -0
- package/templates/claude/skills/recipe-share-event-materials/SKILL.md +25 -0
- package/templates/claude/skills/recipe-share-folder-with-team/SKILL.md +26 -0
- package/templates/claude/skills/recipe-sync-contacts-to-sheet/SKILL.md +25 -0
- package/templates/claude/skills/recipe-watch-drive-changes/SKILL.md +25 -0
- package/templates/mcp.json +12 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-draft-email-from-doc
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Read content from a Google Doc and use it as the body of a Gmail message."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "productivity"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-docs", "gws-gmail"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Draft a Gmail Message from a Google Doc
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-docs`, `gws-gmail`
|
|
17
|
+
|
|
18
|
+
Read content from a Google Doc and use it as the body of a Gmail message.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. Get the document content: `gws docs documents get --params '{"documentId": "DOC_ID"}'`
|
|
23
|
+
2. Copy the text from the body content
|
|
24
|
+
3. Send the email: `gws gmail +send --to recipient@example.com --subject 'Newsletter Update' --body 'CONTENT_FROM_DOC'`
|
|
25
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-email-drive-link
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Share a Google Drive file and email the link with a message to recipients."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "productivity"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-drive", "gws-gmail"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Email a Google Drive File Link
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive`, `gws-gmail`
|
|
17
|
+
|
|
18
|
+
Share a Google Drive file and email the link with a message to recipients.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. Find the file: `gws drive files list --params '{"q": "name = '\''Quarterly Report'\''"}'`
|
|
23
|
+
2. Share the file: `gws drive permissions create --params '{"fileId": "FILE_ID"}' --json '{"role": "reader", "type": "user", "emailAddress": "client@example.com"}'`
|
|
24
|
+
3. Email the link: `gws gmail +send --to client@example.com --subject 'Quarterly Report' --body 'Hi, please find the report here: https://docs.google.com/document/d/FILE_ID'`
|
|
25
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-find-free-time
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Query Google Calendar free/busy status for multiple users to find a meeting slot."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "scheduling"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-calendar"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Find Free Time Across Calendars
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar`
|
|
17
|
+
|
|
18
|
+
Query Google Calendar free/busy status for multiple users to find a meeting slot.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. Query free/busy: `gws calendar freebusy query --json '{"timeMin": "2024-03-18T08:00:00Z", "timeMax": "2024-03-18T18:00:00Z", "items": [{"id": "user1@company.com"}, {"id": "user2@company.com"}]}'`
|
|
23
|
+
2. Review the output to find overlapping free slots
|
|
24
|
+
3. Create event in the free slot: `gws calendar +insert --summary 'Meeting' --attendees user1@company.com,user2@company.com --start '2024-03-18T14:00:00' --duration 30`
|
|
25
|
+
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-find-large-files
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Identify large Google Drive files consuming storage quota."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "productivity"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-drive"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Find Largest Files in Drive
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive`
|
|
17
|
+
|
|
18
|
+
Identify large Google Drive files consuming storage quota.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. List files sorted by size: `gws drive files list --params '{"orderBy": "quotaBytesUsed desc", "pageSize": 20, "fields": "files(id,name,size,mimeType,owners)"}' --format table`
|
|
23
|
+
2. Review the output and identify files to archive or move
|
|
24
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-forward-labeled-emails
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Find Gmail messages with a specific label and forward them to another address."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "productivity"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-gmail"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Forward Labeled Gmail Messages
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-gmail`
|
|
17
|
+
|
|
18
|
+
Find Gmail messages with a specific label and forward them to another address.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. Find labeled messages: `gws gmail users messages list --params '{"userId": "me", "q": "label:needs-review"}' --format table`
|
|
23
|
+
2. Get message content: `gws gmail users messages get --params '{"userId": "me", "id": "MSG_ID"}'`
|
|
24
|
+
3. Forward via new email: `gws gmail +send --to manager@company.com --subject 'FW: [Original Subject]' --body 'Forwarding for your review:
|
|
25
|
+
|
|
26
|
+
[Original Message Body]'`
|
|
27
|
+
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-generate-report-from-sheet
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Read data from a Google Sheet and create a formatted Google Docs report."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "productivity"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-sheets", "gws-docs", "gws-drive"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Generate a Google Docs Report from Sheet Data
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-sheets`, `gws-docs`, `gws-drive`
|
|
17
|
+
|
|
18
|
+
Read data from a Google Sheet and create a formatted Google Docs report.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. Read the data: `gws sheets +read --spreadsheet-id SHEET_ID --range 'Sales!A1:D'`
|
|
23
|
+
2. Create the report doc: `gws docs documents create --json '{"title": "Sales Report - January 2025"}'`
|
|
24
|
+
3. Write the report: `gws docs +write --document-id DOC_ID --text '## Sales Report - January 2025
|
|
25
|
+
|
|
26
|
+
### Summary
|
|
27
|
+
Total deals: 45
|
|
28
|
+
Revenue: $125,000
|
|
29
|
+
|
|
30
|
+
### Top Deals
|
|
31
|
+
1. Acme Corp - $25,000
|
|
32
|
+
2. Widget Inc - $18,000'`
|
|
33
|
+
4. Share with stakeholders: `gws drive permissions create --params '{"fileId": "DOC_ID"}' --json '{"role": "reader", "type": "user", "emailAddress": "cfo@company.com"}'`
|
|
34
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-label-and-archive-emails
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Apply Gmail labels to matching messages and archive them to keep your inbox clean."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "productivity"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-gmail"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Label and Archive Gmail Threads
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-gmail`
|
|
17
|
+
|
|
18
|
+
Apply Gmail labels to matching messages and archive them to keep your inbox clean.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. Search for matching emails: `gws gmail users messages list --params '{"userId": "me", "q": "from:notifications@service.com"}' --format table`
|
|
23
|
+
2. Apply a label: `gws gmail users messages modify --params '{"userId": "me", "id": "MESSAGE_ID"}' --json '{"addLabelIds": ["LABEL_ID"]}'`
|
|
24
|
+
3. Archive (remove from inbox): `gws gmail users messages modify --params '{"userId": "me", "id": "MESSAGE_ID"}' --json '{"removeLabelIds": ["INBOX"]}'`
|
|
25
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-log-deal-update
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Append a deal status update to a Google Sheets sales tracking spreadsheet."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "sales"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-sheets", "gws-drive"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Log Deal Update to Sheet
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-sheets`, `gws-drive`
|
|
17
|
+
|
|
18
|
+
Append a deal status update to a Google Sheets sales tracking spreadsheet.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. Find the tracking sheet: `gws drive files list --params '{"q": "name = '\''Sales Pipeline'\'' and mimeType = '\''application/vnd.google-apps.spreadsheet'\''"}'`
|
|
23
|
+
2. Read current data: `gws sheets +read --spreadsheet-id SHEET_ID --range 'Pipeline!A1:F'`
|
|
24
|
+
3. Append new row: `gws sheets +append --spreadsheet-id SHEET_ID --range 'Pipeline' --values '["2024-03-15", "Acme Corp", "Proposal Sent", "$50,000", "Q2", "jdoe"]'`
|
|
25
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-organize-drive-folder
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Create a Google Drive folder structure and move files into the right locations."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "productivity"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-drive"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Organize Files into Google Drive Folders
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive`
|
|
17
|
+
|
|
18
|
+
Create a Google Drive folder structure and move files into the right locations.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. Create a project folder: `gws drive files create --json '{"name": "Q2 Project", "mimeType": "application/vnd.google-apps.folder"}'`
|
|
23
|
+
2. Create sub-folders: `gws drive files create --json '{"name": "Documents", "mimeType": "application/vnd.google-apps.folder", "parents": ["PARENT_FOLDER_ID"]}'`
|
|
24
|
+
3. Move existing files into folder: `gws drive files update --params '{"fileId": "FILE_ID", "addParents": "FOLDER_ID", "removeParents": "OLD_PARENT_ID"}'`
|
|
25
|
+
4. Verify structure: `gws drive files list --params '{"q": "FOLDER_ID in parents"}' --format table`
|
|
26
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-plan-weekly-schedule
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Review your Google Calendar week, identify gaps, and add events to fill them."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "scheduling"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-calendar"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Plan Your Weekly Google Calendar Schedule
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar`
|
|
17
|
+
|
|
18
|
+
Review your Google Calendar week, identify gaps, and add events to fill them.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. Check this week's agenda: `gws calendar +agenda`
|
|
23
|
+
2. Check free/busy for the week: `gws calendar freebusy query --json '{"timeMin": "2025-01-20T00:00:00Z", "timeMax": "2025-01-25T00:00:00Z", "items": [{"id": "primary"}]}'`
|
|
24
|
+
3. Add a new event: `gws calendar +insert --summary 'Deep Work Block' --start '2025-01-21T14:00' --duration 120`
|
|
25
|
+
4. Review updated schedule: `gws calendar +agenda`
|
|
26
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-post-mortem-setup
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Create a Google Docs post-mortem, schedule a Google Calendar review, and notify via Chat."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "engineering"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-docs", "gws-calendar", "gws-chat"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Set Up Post-Mortem
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-docs`, `gws-calendar`, `gws-chat`
|
|
17
|
+
|
|
18
|
+
Create a Google Docs post-mortem, schedule a Google Calendar review, and notify via Chat.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. Create post-mortem doc: `gws docs +write --title 'Post-Mortem: [Incident]' --body '## Summary\n\n## Timeline\n\n## Root Cause\n\n## Action Items'`
|
|
23
|
+
2. Schedule review meeting: `gws calendar +insert --summary 'Post-Mortem Review: [Incident]' --attendees team@company.com --start 'next monday 14:00' --duration 60`
|
|
24
|
+
3. Notify in Chat: `gws chat +send --space spaces/ENG_SPACE --text '🔍 Post-mortem scheduled for [Incident].'`
|
|
25
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-reschedule-meeting
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Move a Google Calendar event to a new time and automatically notify all attendees."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "scheduling"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-calendar"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Reschedule a Google Calendar Meeting
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar`
|
|
17
|
+
|
|
18
|
+
Move a Google Calendar event to a new time and automatically notify all attendees.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. Find the event: `gws calendar +agenda`
|
|
23
|
+
2. Get event details: `gws calendar events get --params '{"calendarId": "primary", "eventId": "EVENT_ID"}'`
|
|
24
|
+
3. Update the time: `gws calendar events patch --params '{"calendarId": "primary", "eventId": "EVENT_ID", "sendUpdates": "all"}' --json '{"start": {"dateTime": "2025-01-22T14:00:00", "timeZone": "America/New_York"}, "end": {"dateTime": "2025-01-22T15:00:00", "timeZone": "America/New_York"}}'`
|
|
25
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-review-meet-participants
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Review who attended a Google Meet conference and for how long."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "productivity"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-meet"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Review Google Meet Attendance
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-meet`
|
|
17
|
+
|
|
18
|
+
Review who attended a Google Meet conference and for how long.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. List recent conferences: `gws meet conferenceRecords list --format table`
|
|
23
|
+
2. List participants: `gws meet conferenceRecords participants list --params '{"parent": "conferenceRecords/CONFERENCE_ID"}' --format table`
|
|
24
|
+
3. Get session details: `gws meet conferenceRecords participants participantSessions list --params '{"parent": "conferenceRecords/CONFERENCE_ID/participants/PARTICIPANT_ID"}' --format table`
|
|
25
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-review-overdue-tasks
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Find Google Tasks that are past due and need attention."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "productivity"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-tasks"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Review Overdue Tasks
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-tasks`
|
|
17
|
+
|
|
18
|
+
Find Google Tasks that are past due and need attention.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. List task lists: `gws tasks tasklists list --format table`
|
|
23
|
+
2. List tasks with status: `gws tasks tasks list --params '{"tasklist": "TASKLIST_ID", "showCompleted": false}' --format table`
|
|
24
|
+
3. Review due dates and prioritize overdue items
|
|
25
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-save-email-attachments
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Find Gmail messages with attachments and save them to a Google Drive folder."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "productivity"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-gmail", "gws-drive"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Save Gmail Attachments to Google Drive
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-gmail`, `gws-drive`
|
|
17
|
+
|
|
18
|
+
Find Gmail messages with attachments and save them to a Google Drive folder.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. Search for emails with attachments: `gws gmail users messages list --params '{"userId": "me", "q": "has:attachment from:client@example.com"}' --format table`
|
|
23
|
+
2. Get message details: `gws gmail users messages get --params '{"userId": "me", "id": "MESSAGE_ID"}'`
|
|
24
|
+
3. Download attachment: `gws gmail users messages attachments get --params '{"userId": "me", "messageId": "MESSAGE_ID", "id": "ATTACHMENT_ID"}'`
|
|
25
|
+
4. Upload to Drive folder: `gws drive +upload --file ./attachment.pdf --parent FOLDER_ID`
|
|
26
|
+
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-save-email-to-doc
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Save a Gmail message body into a Google Doc for archival or reference."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "productivity"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-gmail", "gws-docs"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Save a Gmail Message to Google Docs
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-gmail`, `gws-docs`
|
|
17
|
+
|
|
18
|
+
Save a Gmail message body into a Google Doc for archival or reference.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. Find the message: `gws gmail users messages list --params '{"userId": "me", "q": "subject:important from:boss@company.com"}' --format table`
|
|
23
|
+
2. Get message content: `gws gmail users messages get --params '{"userId": "me", "id": "MSG_ID"}'`
|
|
24
|
+
3. Create a doc with the content: `gws docs documents create --json '{"title": "Saved Email - Important Update"}'`
|
|
25
|
+
4. Write the email body: `gws docs +write --document-id DOC_ID --text 'From: boss@company.com
|
|
26
|
+
Subject: Important Update
|
|
27
|
+
|
|
28
|
+
[EMAIL BODY]'`
|
|
29
|
+
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-schedule-recurring-event
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Create a recurring Google Calendar event with attendees."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "scheduling"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-calendar"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Schedule a Recurring Meeting
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar`
|
|
17
|
+
|
|
18
|
+
Create a recurring Google Calendar event with attendees.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. Create recurring event: `gws calendar events insert --params '{"calendarId": "primary"}' --json '{"summary": "Weekly Standup", "start": {"dateTime": "2024-03-18T09:00:00", "timeZone": "America/New_York"}, "end": {"dateTime": "2024-03-18T09:30:00", "timeZone": "America/New_York"}, "recurrence": ["RRULE:FREQ=WEEKLY;BYDAY=MO"], "attendees": [{"email": "team@company.com"}]}'`
|
|
23
|
+
2. Verify it was created: `gws calendar +agenda --days 14 --format table`
|
|
24
|
+
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-send-team-announcement
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Send a team announcement via both Gmail and a Google Chat space."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "communication"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-gmail", "gws-chat"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Announce via Gmail and Google Chat
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-gmail`, `gws-chat`
|
|
17
|
+
|
|
18
|
+
Send a team announcement via both Gmail and a Google Chat space.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. Send email: `gws gmail +send --to team@company.com --subject 'Important Update' --body 'Please review the attached policy changes.'`
|
|
23
|
+
2. Post in Chat: `gws chat +send --space spaces/TEAM_SPACE --text '📢 Important Update: Please check your email for policy changes.'`
|
|
24
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-share-doc-and-notify
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Share a Google Docs document with edit access and email collaborators the link."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "productivity"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-drive", "gws-docs", "gws-gmail"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Share a Google Doc and Notify Collaborators
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive`, `gws-docs`, `gws-gmail`
|
|
17
|
+
|
|
18
|
+
Share a Google Docs document with edit access and email collaborators the link.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. Find the doc: `gws drive files list --params '{"q": "name contains '\''Project Brief'\'' and mimeType = '\''application/vnd.google-apps.document'\''"}'`
|
|
23
|
+
2. Share with editor access: `gws drive permissions create --params '{"fileId": "DOC_ID"}' --json '{"role": "writer", "type": "user", "emailAddress": "reviewer@company.com"}'`
|
|
24
|
+
3. Email the link: `gws gmail +send --to reviewer@company.com --subject 'Please review: Project Brief' --body 'I have shared the project brief with you: https://docs.google.com/document/d/DOC_ID'`
|
|
25
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-share-event-materials
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Share Google Drive files with all attendees of a Google Calendar event."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "productivity"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-calendar", "gws-drive"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Share Files with Meeting Attendees
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-calendar`, `gws-drive`
|
|
17
|
+
|
|
18
|
+
Share Google Drive files with all attendees of a Google Calendar event.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. Get event attendees: `gws calendar events get --params '{"calendarId": "primary", "eventId": "EVENT_ID"}'`
|
|
23
|
+
2. Share file with each attendee: `gws drive permissions create --params '{"fileId": "FILE_ID"}' --json '{"role": "reader", "type": "user", "emailAddress": "attendee@company.com"}'`
|
|
24
|
+
3. Verify sharing: `gws drive permissions list --params '{"fileId": "FILE_ID"}' --format table`
|
|
25
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-share-folder-with-team
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Share a Google Drive folder and all its contents with a list of collaborators."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "productivity"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-drive"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Share a Google Drive Folder with a Team
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-drive`
|
|
17
|
+
|
|
18
|
+
Share a Google Drive folder and all its contents with a list of collaborators.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. Find the folder: `gws drive files list --params '{"q": "name = '\''Project X'\'' and mimeType = '\''application/vnd.google-apps.folder'\''"}'`
|
|
23
|
+
2. Share as editor: `gws drive permissions create --params '{"fileId": "FOLDER_ID"}' --json '{"role": "writer", "type": "user", "emailAddress": "colleague@company.com"}'`
|
|
24
|
+
3. Share as viewer: `gws drive permissions create --params '{"fileId": "FOLDER_ID"}' --json '{"role": "reader", "type": "user", "emailAddress": "stakeholder@company.com"}'`
|
|
25
|
+
4. Verify permissions: `gws drive permissions list --params '{"fileId": "FOLDER_ID"}' --format table`
|
|
26
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-sync-contacts-to-sheet
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Export Google Contacts directory to a Google Sheets spreadsheet."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "productivity"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-people", "gws-sheets"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Export Google Contacts to Sheets
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-people`, `gws-sheets`
|
|
17
|
+
|
|
18
|
+
Export Google Contacts directory to a Google Sheets spreadsheet.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. List contacts: `gws people people listDirectoryPeople --params '{"readMask": "names,emailAddresses,phoneNumbers", "sources": ["DIRECTORY_SOURCE_TYPE_DOMAIN_PROFILE"], "pageSize": 100}' --format json`
|
|
23
|
+
2. Create a sheet: `gws sheets +append --spreadsheet-id SHEET_ID --range 'Contacts' --values '["Name", "Email", "Phone"]'`
|
|
24
|
+
3. Append each contact row: `gws sheets +append --spreadsheet-id SHEET_ID --range 'Contacts' --values '["Jane Doe", "jane@company.com", "+1-555-0100"]'`
|
|
25
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recipe-watch-drive-changes
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Subscribe to change notifications on a Google Drive file or folder."
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
category: "recipe"
|
|
8
|
+
domain: "engineering"
|
|
9
|
+
requires:
|
|
10
|
+
bins: ["gws"]
|
|
11
|
+
skills: ["gws-events"]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Watch for Drive Changes
|
|
15
|
+
|
|
16
|
+
> **PREREQUISITE:** Load the following skills to execute this recipe: `gws-events`
|
|
17
|
+
|
|
18
|
+
Subscribe to change notifications on a Google Drive file or folder.
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
1. Create subscription: `gws events subscriptions create --json '{"targetResource": "//drive.googleapis.com/drives/DRIVE_ID", "eventTypes": ["google.workspace.drive.file.v1.updated"], "notificationEndpoint": {"pubsubTopic": "projects/PROJECT/topics/TOPIC"}, "payloadOptions": {"includeResource": true}}'`
|
|
23
|
+
2. List active subscriptions: `gws events subscriptions list`
|
|
24
|
+
3. Renew before expiry: `gws events +renew --subscription SUBSCRIPTION_ID`
|
|
25
|
+
|