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.
Files changed (220) hide show
  1. package/index.js +393 -0
  2. package/package.json +31 -0
  3. package/templates/CLAUDE.md +108 -0
  4. package/templates/app/.env.local.example +14 -0
  5. package/templates/app/ecosystem.config.js +29 -0
  6. package/templates/app/next-env.d.ts +6 -0
  7. package/templates/app/next.config.ts +16 -0
  8. package/templates/app/package-lock.json +4581 -0
  9. package/templates/app/package.json +38 -0
  10. package/templates/app/postcss.config.js +5 -0
  11. package/templates/app/src/app/agents/[slug]/chat/loading.tsx +26 -0
  12. package/templates/app/src/app/agents/[slug]/chat/page.tsx +579 -0
  13. package/templates/app/src/app/agents/[slug]/loading.tsx +19 -0
  14. package/templates/app/src/app/agents/page.tsx +8 -0
  15. package/templates/app/src/app/api/agents/[slug]/capabilities/route.ts +11 -0
  16. package/templates/app/src/app/api/agents/[slug]/route.ts +57 -0
  17. package/templates/app/src/app/api/agents/route.ts +28 -0
  18. package/templates/app/src/app/api/ai/generate-agent/route.ts +87 -0
  19. package/templates/app/src/app/api/ai/improve-claude-md/route.ts +78 -0
  20. package/templates/app/src/app/api/ai/suggestions/route.ts +64 -0
  21. package/templates/app/src/app/api/ai/title/route.ts +88 -0
  22. package/templates/app/src/app/api/auth/role/route.ts +17 -0
  23. package/templates/app/src/app/api/commands/[slug]/route.ts +61 -0
  24. package/templates/app/src/app/api/commands/route.ts +6 -0
  25. package/templates/app/src/app/api/governance/costs/route.ts +117 -0
  26. package/templates/app/src/app/api/governance/sessions/route.ts +335 -0
  27. package/templates/app/src/app/api/notifications/route.ts +62 -0
  28. package/templates/app/src/app/api/preferences/route.ts +44 -0
  29. package/templates/app/src/app/api/runs/[id]/approve/route.ts +38 -0
  30. package/templates/app/src/app/api/runs/[id]/events/route.ts +28 -0
  31. package/templates/app/src/app/api/runs/[id]/metadata/route.ts +30 -0
  32. package/templates/app/src/app/api/runs/[id]/route.ts +21 -0
  33. package/templates/app/src/app/api/runs/[id]/start/route.ts +61 -0
  34. package/templates/app/src/app/api/runs/[id]/stop/route.ts +16 -0
  35. package/templates/app/src/app/api/runs/[id]/stream/route.ts +201 -0
  36. package/templates/app/src/app/api/runs/route.ts +95 -0
  37. package/templates/app/src/app/api/schedules/[id]/route.ts +81 -0
  38. package/templates/app/src/app/api/schedules/route.ts +75 -0
  39. package/templates/app/src/app/api/settings/access-logs/route.ts +33 -0
  40. package/templates/app/src/app/api/settings/claude-md/route.ts +44 -0
  41. package/templates/app/src/app/api/settings/env-keys/route.ts +271 -0
  42. package/templates/app/src/app/api/settings/users/route.ts +108 -0
  43. package/templates/app/src/app/api/skills/[slug]/route.ts +43 -0
  44. package/templates/app/src/app/api/skills/route.ts +6 -0
  45. package/templates/app/src/app/api/tools/route.ts +65 -0
  46. package/templates/app/src/app/api/uploads/cleanup/route.ts +29 -0
  47. package/templates/app/src/app/api/uploads/route.ts +77 -0
  48. package/templates/app/src/app/auth/callback/route.ts +19 -0
  49. package/templates/app/src/app/globals.css +115 -0
  50. package/templates/app/src/app/layout.tsx +24 -0
  51. package/templates/app/src/app/loading.tsx +16 -0
  52. package/templates/app/src/app/login/page.tsx +64 -0
  53. package/templates/app/src/app/not-authorized/page.tsx +33 -0
  54. package/templates/app/src/app/runs/page.tsx +55 -0
  55. package/templates/app/src/app/schedules/page.tsx +110 -0
  56. package/templates/app/src/app/settings/page.tsx +1294 -0
  57. package/templates/app/src/app/skills/page.tsx +7 -0
  58. package/templates/app/src/components/agent-card.tsx +58 -0
  59. package/templates/app/src/components/agent-grid.tsx +90 -0
  60. package/templates/app/src/components/auth/auth-context.tsx +79 -0
  61. package/templates/app/src/components/chat-thread.tsx +50 -0
  62. package/templates/app/src/components/chat-view.tsx +670 -0
  63. package/templates/app/src/components/commands-browser.tsx +349 -0
  64. package/templates/app/src/components/create-agent-modal.tsx +388 -0
  65. package/templates/app/src/components/governance-dashboard.tsx +397 -0
  66. package/templates/app/src/components/icons.tsx +401 -0
  67. package/templates/app/src/components/layout/agent-sidebar.tsx +504 -0
  68. package/templates/app/src/components/layout/app-shell.tsx +29 -0
  69. package/templates/app/src/components/layout/nav.tsx +87 -0
  70. package/templates/app/src/components/layout/overview-inner.tsx +14 -0
  71. package/templates/app/src/components/layout/profile-menu.tsx +95 -0
  72. package/templates/app/src/components/layout/sidebar.tsx +30 -0
  73. package/templates/app/src/components/markdown.tsx +57 -0
  74. package/templates/app/src/components/message-bar.tsx +161 -0
  75. package/templates/app/src/components/notifications/notification-bell.tsx +104 -0
  76. package/templates/app/src/components/notifications/notification-panel.tsx +116 -0
  77. package/templates/app/src/components/overview/overview-content.tsx +287 -0
  78. package/templates/app/src/components/overview/overview-context.tsx +88 -0
  79. package/templates/app/src/components/preferences-modal.tsx +112 -0
  80. package/templates/app/src/components/run-form.tsx +73 -0
  81. package/templates/app/src/components/run-history-table.tsx +226 -0
  82. package/templates/app/src/components/run-output.tsx +187 -0
  83. package/templates/app/src/components/schedule-form.tsx +148 -0
  84. package/templates/app/src/components/skills-browser.tsx +338 -0
  85. package/templates/app/src/components/tool-tooltip.tsx +82 -0
  86. package/templates/app/src/hooks/use-sse.ts +115 -0
  87. package/templates/app/src/instrumentation.ts +9 -0
  88. package/templates/app/src/lib/agent-cache.ts +19 -0
  89. package/templates/app/src/lib/agent-runner.ts +411 -0
  90. package/templates/app/src/lib/agents.ts +168 -0
  91. package/templates/app/src/lib/ai.ts +40 -0
  92. package/templates/app/src/lib/approval-store.ts +70 -0
  93. package/templates/app/src/lib/auth-guard.ts +116 -0
  94. package/templates/app/src/lib/capabilities.ts +191 -0
  95. package/templates/app/src/lib/line-diff.ts +96 -0
  96. package/templates/app/src/lib/queue.ts +22 -0
  97. package/templates/app/src/lib/redis.ts +12 -0
  98. package/templates/app/src/lib/role-permissions.ts +166 -0
  99. package/templates/app/src/lib/run-agent.ts +442 -0
  100. package/templates/app/src/lib/supabase-browser.ts +8 -0
  101. package/templates/app/src/lib/supabase-middleware.ts +63 -0
  102. package/templates/app/src/lib/supabase-server.ts +28 -0
  103. package/templates/app/src/lib/supabase.ts +6 -0
  104. package/templates/app/src/lib/tool-descriptions.ts +29 -0
  105. package/templates/app/src/lib/types.ts +73 -0
  106. package/templates/app/src/lib/typewriter-animation.ts +159 -0
  107. package/templates/app/src/middleware.ts +13 -0
  108. package/templates/app/tsconfig.json +21 -0
  109. package/templates/app/uploads/.gitkeep +0 -0
  110. package/templates/app/worker/index.ts +342 -0
  111. package/templates/claude/agents/ai-trends-scout.md +66 -0
  112. package/templates/claude/commands/add-to-todos.md +56 -0
  113. package/templates/claude/commands/check-todos.md +56 -0
  114. package/templates/claude/hooks/auto-approve-safe.sh +34 -0
  115. package/templates/claude/hooks/auto-format.sh +25 -0
  116. package/templates/claude/hooks/block-destructive.sh +32 -0
  117. package/templates/claude/hooks/compaction-preserver.sh +16 -0
  118. package/templates/claude/hooks/notify.sh +26 -0
  119. package/templates/claude/settings.local.json +66 -0
  120. package/templates/claude/skills/frontend-design/SKILL.md +127 -0
  121. package/templates/claude/skills/frontend-design/reference/color-and-contrast.md +132 -0
  122. package/templates/claude/skills/frontend-design/reference/interaction-design.md +123 -0
  123. package/templates/claude/skills/frontend-design/reference/motion-design.md +99 -0
  124. package/templates/claude/skills/frontend-design/reference/responsive-design.md +114 -0
  125. package/templates/claude/skills/frontend-design/reference/spatial-design.md +100 -0
  126. package/templates/claude/skills/frontend-design/reference/typography.md +131 -0
  127. package/templates/claude/skills/frontend-design/reference/ux-writing.md +107 -0
  128. package/templates/claude/skills/gws-admin-reports/SKILL.md +57 -0
  129. package/templates/claude/skills/gws-calendar/SKILL.md +108 -0
  130. package/templates/claude/skills/gws-calendar-agenda/SKILL.md +52 -0
  131. package/templates/claude/skills/gws-calendar-insert/SKILL.md +55 -0
  132. package/templates/claude/skills/gws-chat/SKILL.md +73 -0
  133. package/templates/claude/skills/gws-chat-send/SKILL.md +49 -0
  134. package/templates/claude/skills/gws-classroom/SKILL.md +75 -0
  135. package/templates/claude/skills/gws-docs/SKILL.md +48 -0
  136. package/templates/claude/skills/gws-docs-write/SKILL.md +49 -0
  137. package/templates/claude/skills/gws-drive/SKILL.md +137 -0
  138. package/templates/claude/skills/gws-drive-upload/SKILL.md +52 -0
  139. package/templates/claude/skills/gws-events/SKILL.md +67 -0
  140. package/templates/claude/skills/gws-events-renew/SKILL.md +48 -0
  141. package/templates/claude/skills/gws-events-subscribe/SKILL.md +59 -0
  142. package/templates/claude/skills/gws-forms/SKILL.md +45 -0
  143. package/templates/claude/skills/gws-gmail/SKILL.md +59 -0
  144. package/templates/claude/skills/gws-gmail-forward/SKILL.md +53 -0
  145. package/templates/claude/skills/gws-gmail-reply/SKILL.md +56 -0
  146. package/templates/claude/skills/gws-gmail-reply-all/SKILL.md +60 -0
  147. package/templates/claude/skills/gws-gmail-send/SKILL.md +55 -0
  148. package/templates/claude/skills/gws-gmail-triage/SKILL.md +50 -0
  149. package/templates/claude/skills/gws-gmail-watch/SKILL.md +58 -0
  150. package/templates/claude/skills/gws-keep/SKILL.md +48 -0
  151. package/templates/claude/skills/gws-meet/SKILL.md +51 -0
  152. package/templates/claude/skills/gws-modelarmor/SKILL.md +42 -0
  153. package/templates/claude/skills/gws-modelarmor-create-template/SKILL.md +53 -0
  154. package/templates/claude/skills/gws-modelarmor-sanitize-prompt/SKILL.md +48 -0
  155. package/templates/claude/skills/gws-modelarmor-sanitize-response/SKILL.md +48 -0
  156. package/templates/claude/skills/gws-people/SKILL.md +67 -0
  157. package/templates/claude/skills/gws-shared/SKILL.md +66 -0
  158. package/templates/claude/skills/gws-sheets/SKILL.md +53 -0
  159. package/templates/claude/skills/gws-sheets-append/SKILL.md +51 -0
  160. package/templates/claude/skills/gws-sheets-read/SKILL.md +47 -0
  161. package/templates/claude/skills/gws-slides/SKILL.md +43 -0
  162. package/templates/claude/skills/gws-tasks/SKILL.md +56 -0
  163. package/templates/claude/skills/gws-workflow/SKILL.md +44 -0
  164. package/templates/claude/skills/gws-workflow-email-to-task/SKILL.md +47 -0
  165. package/templates/claude/skills/gws-workflow-file-announce/SKILL.md +50 -0
  166. package/templates/claude/skills/gws-workflow-meeting-prep/SKILL.md +47 -0
  167. package/templates/claude/skills/gws-workflow-standup-report/SKILL.md +46 -0
  168. package/templates/claude/skills/gws-workflow-weekly-digest/SKILL.md +46 -0
  169. package/templates/claude/skills/persona-content-creator/SKILL.md +33 -0
  170. package/templates/claude/skills/persona-customer-support/SKILL.md +34 -0
  171. package/templates/claude/skills/persona-event-coordinator/SKILL.md +35 -0
  172. package/templates/claude/skills/persona-exec-assistant/SKILL.md +35 -0
  173. package/templates/claude/skills/persona-hr-coordinator/SKILL.md +33 -0
  174. package/templates/claude/skills/persona-it-admin/SKILL.md +30 -0
  175. package/templates/claude/skills/persona-project-manager/SKILL.md +35 -0
  176. package/templates/claude/skills/persona-researcher/SKILL.md +33 -0
  177. package/templates/claude/skills/persona-sales-ops/SKILL.md +35 -0
  178. package/templates/claude/skills/persona-team-lead/SKILL.md +36 -0
  179. package/templates/claude/skills/recipe-backup-sheet-as-csv/SKILL.md +25 -0
  180. package/templates/claude/skills/recipe-batch-invite-to-event/SKILL.md +25 -0
  181. package/templates/claude/skills/recipe-block-focus-time/SKILL.md +24 -0
  182. package/templates/claude/skills/recipe-bulk-download-folder/SKILL.md +25 -0
  183. package/templates/claude/skills/recipe-collect-form-responses/SKILL.md +25 -0
  184. package/templates/claude/skills/recipe-compare-sheet-tabs/SKILL.md +25 -0
  185. package/templates/claude/skills/recipe-copy-sheet-for-new-month/SKILL.md +25 -0
  186. package/templates/claude/skills/recipe-create-classroom-course/SKILL.md +25 -0
  187. package/templates/claude/skills/recipe-create-doc-from-template/SKILL.md +29 -0
  188. package/templates/claude/skills/recipe-create-events-from-sheet/SKILL.md +24 -0
  189. package/templates/claude/skills/recipe-create-expense-tracker/SKILL.md +26 -0
  190. package/templates/claude/skills/recipe-create-feedback-form/SKILL.md +25 -0
  191. package/templates/claude/skills/recipe-create-gmail-filter/SKILL.md +26 -0
  192. package/templates/claude/skills/recipe-create-meet-space/SKILL.md +25 -0
  193. package/templates/claude/skills/recipe-create-presentation/SKILL.md +25 -0
  194. package/templates/claude/skills/recipe-create-shared-drive/SKILL.md +25 -0
  195. package/templates/claude/skills/recipe-create-task-list/SKILL.md +26 -0
  196. package/templates/claude/skills/recipe-create-vacation-responder/SKILL.md +25 -0
  197. package/templates/claude/skills/recipe-draft-email-from-doc/SKILL.md +25 -0
  198. package/templates/claude/skills/recipe-email-drive-link/SKILL.md +25 -0
  199. package/templates/claude/skills/recipe-find-free-time/SKILL.md +25 -0
  200. package/templates/claude/skills/recipe-find-large-files/SKILL.md +24 -0
  201. package/templates/claude/skills/recipe-forward-labeled-emails/SKILL.md +27 -0
  202. package/templates/claude/skills/recipe-generate-report-from-sheet/SKILL.md +34 -0
  203. package/templates/claude/skills/recipe-label-and-archive-emails/SKILL.md +25 -0
  204. package/templates/claude/skills/recipe-log-deal-update/SKILL.md +25 -0
  205. package/templates/claude/skills/recipe-organize-drive-folder/SKILL.md +26 -0
  206. package/templates/claude/skills/recipe-plan-weekly-schedule/SKILL.md +26 -0
  207. package/templates/claude/skills/recipe-post-mortem-setup/SKILL.md +25 -0
  208. package/templates/claude/skills/recipe-reschedule-meeting/SKILL.md +25 -0
  209. package/templates/claude/skills/recipe-review-meet-participants/SKILL.md +25 -0
  210. package/templates/claude/skills/recipe-review-overdue-tasks/SKILL.md +25 -0
  211. package/templates/claude/skills/recipe-save-email-attachments/SKILL.md +26 -0
  212. package/templates/claude/skills/recipe-save-email-to-doc/SKILL.md +29 -0
  213. package/templates/claude/skills/recipe-schedule-recurring-event/SKILL.md +24 -0
  214. package/templates/claude/skills/recipe-send-team-announcement/SKILL.md +24 -0
  215. package/templates/claude/skills/recipe-share-doc-and-notify/SKILL.md +25 -0
  216. package/templates/claude/skills/recipe-share-event-materials/SKILL.md +25 -0
  217. package/templates/claude/skills/recipe-share-folder-with-team/SKILL.md +26 -0
  218. package/templates/claude/skills/recipe-sync-contacts-to-sheet/SKILL.md +25 -0
  219. package/templates/claude/skills/recipe-watch-drive-changes/SKILL.md +25 -0
  220. 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
+
@@ -0,0 +1,12 @@
1
+ {
2
+ "mcpServers": {
3
+ "chrome-devtools": {
4
+ "type": "stdio",
5
+ "command": "npx",
6
+ "args": [
7
+ "chrome-devtools-mcp@latest"
8
+ ],
9
+ "env": {}
10
+ }
11
+ }
12
+ }