chore: import upstream snapshot with attribution
Automation / Format (push) Waiting to run
Automation / File Labeler (push) Waiting to run
Automation / Gemini Reviewed (push) Waiting to run
Coverage / Coverage (push) Waiting to run
Publish OpenClaw Skills / publish (push) Has been cancelled
Audit / Security Audit (push) Has been cancelled
Automation / Gemini Review (push) Has been cancelled
CI / Detect Changes (push) Has been cancelled
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (ubuntu-latest) (push) Has been cancelled
CI / Nix (push) Has been cancelled
CI / Lint (push) Has been cancelled
CI / Cargo Deny (push) Has been cancelled
CI / Verify Skills (push) Has been cancelled
CI / Lint Skills (push) Has been cancelled
CI / Build (Linux x86_64) (push) Has been cancelled
CI / Build (macos-latest, aarch64-apple-darwin) (push) Has been cancelled
CI / Build (macos-latest, x86_64-apple-darwin) (push) Has been cancelled
CI / Build (ubuntu-latest, aarch64-unknown-linux-gnu) (push) Has been cancelled
CI / Build (windows-latest, x86_64-pc-windows-msvc) (push) Has been cancelled
CI / API Smoketest (push) Has been cancelled
Policy / Policy Check (push) Has been cancelled
Release (Changeset) / Release (push) Has been cancelled
Automation / Format (push) Waiting to run
Automation / File Labeler (push) Waiting to run
Automation / Gemini Reviewed (push) Waiting to run
Coverage / Coverage (push) Waiting to run
Publish OpenClaw Skills / publish (push) Has been cancelled
Audit / Security Audit (push) Has been cancelled
Automation / Gemini Review (push) Has been cancelled
CI / Detect Changes (push) Has been cancelled
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (ubuntu-latest) (push) Has been cancelled
CI / Nix (push) Has been cancelled
CI / Lint (push) Has been cancelled
CI / Cargo Deny (push) Has been cancelled
CI / Verify Skills (push) Has been cancelled
CI / Lint Skills (push) Has been cancelled
CI / Build (Linux x86_64) (push) Has been cancelled
CI / Build (macos-latest, aarch64-apple-darwin) (push) Has been cancelled
CI / Build (macos-latest, x86_64-apple-darwin) (push) Has been cancelled
CI / Build (ubuntu-latest, aarch64-unknown-linux-gnu) (push) Has been cancelled
CI / Build (windows-latest, x86_64-pc-windows-msvc) (push) Has been cancelled
CI / API Smoketest (push) Has been cancelled
Policy / Policy Check (push) Has been cancelled
Release (Changeset) / Release (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
# Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, gender identity and expression, level of
|
||||
experience, education, socio-economic status, nationality, personal appearance,
|
||||
race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, or to ban temporarily or permanently any
|
||||
contributor for other behaviors that they deem inappropriate, threatening,
|
||||
offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
This Code of Conduct also applies outside the project spaces when the Project
|
||||
Steward has a reasonable belief that an individual's behavior may have a
|
||||
negative impact on the project or its community.
|
||||
|
||||
## Conflict Resolution
|
||||
|
||||
We do not believe that all conflict is bad; healthy debate and disagreement
|
||||
often yield positive results. However, it is never okay to be disrespectful or
|
||||
to engage in behavior that violates the project’s code of conduct.
|
||||
|
||||
If you see someone violating the code of conduct, you are encouraged to address
|
||||
the behavior directly with those involved. Many issues can be resolved quickly
|
||||
and easily, and this gives people more control over the outcome of their
|
||||
dispute. If you are unable to resolve the matter for any reason, or if the
|
||||
behavior is threatening or harassing, report it. We are dedicated to providing
|
||||
an environment where participants feel welcome and safe.
|
||||
|
||||
Reports should be directed to the Project Maintainers (opensource@google.com). It is the Project Steward’s duty to
|
||||
receive and address reported violations of the code of conduct. They will then
|
||||
work with a committee consisting of representatives from the Open Source
|
||||
Programs Office and the Google Open Source Strategy team. If for any reason you
|
||||
are uncomfortable reaching out to the Project Steward, please email
|
||||
opensource@google.com.
|
||||
|
||||
We will investigate every complaint, but you may not receive a direct response.
|
||||
We will use our discretion in determining when and how to follow up on reported
|
||||
incidents, which may range from not taking action to permanent expulsion from
|
||||
the project and project-sponsored spaces. We will notify the accused of the
|
||||
report and provide them an opportunity to discuss it before any action is taken.
|
||||
The identity of the reporter will be omitted from the details of the report
|
||||
supplied to the accused. In potentially harmful situations, such as ongoing
|
||||
harassment or threats to anyone's safety, we may take action without notice.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the Contributor Covenant, version 1.4,
|
||||
available at
|
||||
https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||
@@ -0,0 +1,93 @@
|
||||
# How to contribute
|
||||
|
||||
We'd love to accept your patches and contributions to this project.
|
||||
|
||||
## Before you begin
|
||||
|
||||
### Sign our Contributor License Agreement
|
||||
|
||||
Contributions to this project must be accompanied by a
|
||||
[Contributor License Agreement](https://cla.developers.google.com/about) (CLA).
|
||||
You (or your employer) retain the copyright to your contribution; this simply
|
||||
gives us permission to use and redistribute your contributions as part of the
|
||||
project.
|
||||
|
||||
If you or your current employer have already signed the Google CLA (even if it
|
||||
was for a different project), you probably don't need to do it again.
|
||||
|
||||
Visit <https://cla.developers.google.com/> to see your current agreements or to
|
||||
sign a new one.
|
||||
|
||||
### Review our community guidelines
|
||||
|
||||
This project follows
|
||||
[Google's Open Source Community Guidelines](https://opensource.google/conduct/).
|
||||
|
||||
## Contribution process
|
||||
|
||||
### Code reviews
|
||||
|
||||
All submissions, including submissions by project members, require review. We
|
||||
use GitHub pull requests for this purpose. Consult
|
||||
[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
|
||||
information on using pull requests.
|
||||
|
||||
### Updating CI Smoketest Credentials
|
||||
|
||||
If the OAuth refresh token used in the GitHub Actions smoketest expires or needs additional scopes, you can generate a new one and update the repository secret using the GitHub CLI (`gh`).
|
||||
|
||||
1. **Set the credentials file path to output plaintext JSON**:
|
||||
```bash
|
||||
export GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE=smoketest-creds.json
|
||||
```
|
||||
|
||||
2. **Authenticate with the required scopes**:
|
||||
```bash
|
||||
cargo run -- auth login --scopes https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/gmail.readonly,https://www.googleapis.com/auth/calendar.readonly,https://www.googleapis.com/auth/presentations.readonly,https://www.googleapis.com/auth/tasks.readonly
|
||||
```
|
||||
|
||||
3. **Export and set the GitHub actions secret**:
|
||||
```bash
|
||||
cargo run --quiet -- auth export --unmasked | base64 | gh secret set GOOGLE_CREDENTIALS_JSON
|
||||
```
|
||||
|
||||
4. **Clean up**:
|
||||
```bash
|
||||
rm smoketest-creds.json
|
||||
unset GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE
|
||||
```
|
||||
|
||||
## Development Patterns
|
||||
|
||||
### Changesets
|
||||
|
||||
Every PR must include a changeset file at `.changeset/<descriptive-name>.md`:
|
||||
|
||||
```markdown
|
||||
---
|
||||
"@googleworkspace/cli": patch
|
||||
---
|
||||
|
||||
Brief description of the change
|
||||
```
|
||||
|
||||
Use `patch` for fixes/chores, `minor` for new features, `major` for breaking changes.
|
||||
|
||||
### Input Validation & URL Safety
|
||||
|
||||
This CLI is designed to be invoked by AI/LLM agents, so all user-supplied inputs must be treated as potentially adversarial. See [AGENTS.md](../AGENTS.md#input-validation--url-safety) for the full reference. The key rules are:
|
||||
|
||||
| What you're doing | What to use |
|
||||
|---|---|
|
||||
| Accepting a file path (`--output-dir`, `--dir`) | `validate::validate_safe_output_dir()` or `validate_safe_dir_path()` |
|
||||
| Embedding a value in a URL path segment | `helpers::encode_path_segment()` |
|
||||
| Passing query parameters | reqwest `.query()` builder (never string interpolation) |
|
||||
| Using a resource name in a URL (`--project`, `--space`) | `helpers::validate_resource_name()` |
|
||||
| Accepting an enum flag (`--msg-format`) | clap `value_parser` (see `gmail/mod.rs`) |
|
||||
|
||||
### Testing Expectations
|
||||
|
||||
- All new validation logic must include **both happy-path and error-path tests**
|
||||
- Tests that modify the process CWD must use `#[serial]` from `serial_test`
|
||||
- Tempdir paths should be canonicalized before use to handle macOS `/var` → `/private/var` symlinks
|
||||
- Run the full suite before submitting: `cargo test && cargo clippy -- -D warnings`
|
||||
+197
@@ -0,0 +1,197 @@
|
||||
# GWS CLI — README Demo
|
||||
# Run: vhs docs/demo.tape
|
||||
#
|
||||
# All cosmetic sleeps minimized. API sleeps kept for responses.
|
||||
# Single line commands for reliability.
|
||||
|
||||
Output docs/demo.mp4
|
||||
Output docs/demo.gif
|
||||
|
||||
Set Shell "bash"
|
||||
Set FontSize 18
|
||||
Set Width 800
|
||||
Set Height 500
|
||||
Set TypingSpeed 1ms
|
||||
Set Padding 30
|
||||
Set LineHeight 1.3
|
||||
|
||||
# ── Setup (hidden) ──
|
||||
Hide
|
||||
# Mock gemini CLI for deterministic demo
|
||||
Type 'function gemini() { echo "Why do Java developers wear glasses? Because they don'"'"'t C#."; }' Enter
|
||||
Type "export -f gemini" Enter
|
||||
Type "export PATH=$PWD/target/release:$PWD/target/debug:$PATH" Enter
|
||||
Type "set -e" Enter
|
||||
Sleep 1s
|
||||
Type `DEMO=$(gws drive files create --json '{"name":"gws-demo","mimeType":"application/vnd.google-apps.folder"}' | jq -r '.id')` Enter
|
||||
Sleep 3s
|
||||
Type `gws drive files create --json "{\"name\":\"meeting-notes.md\",\"mimeType\":\"text/markdown\",\"parents\":[\"$DEMO\"]}" > /dev/null` Enter
|
||||
Sleep 2s
|
||||
Type `gws drive files create --json "{\"name\":\"quarterly-report.csv\",\"mimeType\":\"text/csv\",\"parents\":[\"$DEMO\"]}" > /dev/null` Enter
|
||||
Sleep 2s
|
||||
Type `gws drive files create --json "{\"name\":\"project-roadmap.md\",\"mimeType\":\"text/markdown\",\"parents\":[\"$DEMO\"]}" > /dev/null` Enter
|
||||
Sleep 2s
|
||||
Type `Q="'$DEMO' in parents"` Enter
|
||||
Sleep 500ms
|
||||
Type "clear" Enter
|
||||
Sleep 1s
|
||||
Show
|
||||
|
||||
# ╔══════════════════════════════════════╗
|
||||
# ║ ASCII ART INTRO ║
|
||||
# ╚══════════════════════════════════════╝
|
||||
|
||||
Hide
|
||||
Type "./scripts/show-art.sh art/intro.txt" Enter
|
||||
Sleep 1s
|
||||
Show
|
||||
Sleep 1s
|
||||
|
||||
# ── Scene 1: What is gws? ──
|
||||
Hide
|
||||
Type "./scripts/show-art.sh art/scene1.txt" Enter
|
||||
Sleep 1s
|
||||
Show
|
||||
Sleep 4s
|
||||
|
||||
# ── Scene 2: Discover all services ──
|
||||
Hide
|
||||
Type "./scripts/show-art.sh art/scene2.txt" Enter
|
||||
Sleep 1s
|
||||
Show
|
||||
Sleep 1s
|
||||
|
||||
Type "gws --help 2>&1 | head -40" Enter
|
||||
Sleep 4s
|
||||
|
||||
# ── Scene 2b: Inspect Drive resources ──
|
||||
Hide
|
||||
Type "./scripts/show-art.sh art/scene2b.txt" Enter
|
||||
Sleep 1s
|
||||
Show
|
||||
Sleep 1s
|
||||
|
||||
Type "gws drive --help 2>&1 | head -40" Enter
|
||||
Sleep 4s
|
||||
|
||||
# ── Scene 3: Schema introspection ──
|
||||
Hide
|
||||
Type "./scripts/show-art.sh art/scene3.txt" Enter
|
||||
Sleep 1s
|
||||
Show
|
||||
Sleep 1s
|
||||
|
||||
Type "gws schema drive.files.list | head -15" Enter
|
||||
Sleep 3s
|
||||
|
||||
# ── Scene 3b: Inspect JSON Schemas ──
|
||||
Hide
|
||||
Type "./scripts/show-art.sh art/scene3b.txt" Enter
|
||||
Sleep 1s
|
||||
Show
|
||||
Sleep 1s
|
||||
|
||||
Type "gws schema drive.File | head -20" Enter
|
||||
Sleep 3s
|
||||
|
||||
Type "gws schema drive.File --resolve-refs | head -30" Enter
|
||||
Sleep 5s
|
||||
|
||||
# ── Scene 4: List files in a folder ──
|
||||
Hide
|
||||
Type "./scripts/show-art.sh art/scene4.txt" Enter
|
||||
Sleep 1s
|
||||
Show
|
||||
Sleep 1s
|
||||
|
||||
Type "gws drive files list"
|
||||
Type ` --params "{\"q\":\"$Q\",\"fields\":\"files(name,mimeType)\"}"` Enter
|
||||
Sleep 3s
|
||||
|
||||
# ── Scene 5: Upload a file ──
|
||||
Hide
|
||||
Type "./scripts/show-art.sh art/scene5.txt" Enter
|
||||
Sleep 1s
|
||||
Show
|
||||
Sleep 1s
|
||||
|
||||
Type "echo '# Notes' > /tmp/notes.md" Enter
|
||||
Sleep 500ms
|
||||
|
||||
Type "gws drive files create"
|
||||
Type ` --json '{"name":"notes.md","mimeType":"text/markdown"}'`
|
||||
Type " --upload /tmp/notes.md" Enter
|
||||
Sleep 3s
|
||||
|
||||
# ── Scene 6: Gmail labels ──
|
||||
Hide
|
||||
Type "./scripts/show-art.sh art/scene6.txt" Enter
|
||||
Sleep 1s
|
||||
Show
|
||||
Sleep 1s
|
||||
|
||||
Type "JOKE=$(gemini 'tell me a joke')" Enter
|
||||
Sleep 1s
|
||||
|
||||
Type `MSG=$(echo -e "To: justin@example.com\nSubject: joke of the day\n\n$JOKE" | base64 | tr -d '\n' | tr '+/' '-_' | tr -d '=')` Enter
|
||||
|
||||
Type "gws gmail users messages send"
|
||||
Type ` --params '{"userId":"me"}'`
|
||||
Type ` --json "{\"raw\":\"$MSG\"}"`
|
||||
Type " | jq ." Enter
|
||||
Sleep 3s
|
||||
|
||||
# ── Scene 7: Calendar event ──
|
||||
Hide
|
||||
Type "./scripts/show-art.sh art/scene7.txt" Enter
|
||||
Sleep 1s
|
||||
Show
|
||||
Sleep 1s
|
||||
|
||||
Type "gws calendar events insert"
|
||||
Type ` --params '{"calendarId":"primary"}'`
|
||||
Type ` --json '{"summary":"Ship v1.0 🚀","start":{"dateTime":"2024-06-17T10:00:00-07:00"},"end":{"dateTime":"2024-06-17T10:30:00-07:00"}}'`
|
||||
Type " | jq . | head -15" Enter
|
||||
Sleep 3s
|
||||
|
||||
# ── Scene 8: Sheets automation ──
|
||||
Hide
|
||||
Type "./scripts/show-art.sh art/scene8.txt" Enter
|
||||
Sleep 1s
|
||||
Show
|
||||
Sleep 1s
|
||||
|
||||
Type "gws sheets spreadsheets values append"
|
||||
Type ` --params '{"spreadsheetId":"1izmtvgBC4NuxHhABFX6descuB6-SXTm3g7c6LYBngJQ","range":"Sheet1!A1","valueInputOption":"USER_ENTERED"}'`
|
||||
Type ` --json '{"values":[["Deploy","v1.0","=NOW()"]]}'` Enter
|
||||
Sleep 3s
|
||||
|
||||
# ── Scene 9: Auto-pagination ──
|
||||
Hide
|
||||
Type "./scripts/show-art.sh art/scene9.txt" Enter
|
||||
Sleep 1s
|
||||
Show
|
||||
Sleep 1s
|
||||
|
||||
Type "gws drive files list"
|
||||
Type " --params '" Sleep 50ms
|
||||
Type@30ms '{"pageSize":2,"fields":"nextPageToken,files(id)"}' Sleep 50ms
|
||||
Type "'"
|
||||
Type " --page-all"
|
||||
Type " | jq -r '.files[]?.id'" Enter
|
||||
Sleep 6s
|
||||
|
||||
# ╔══════════════════════════════════════╗
|
||||
# ║ OUTRO ║
|
||||
# ╚══════════════════════════════════════╝
|
||||
|
||||
Hide
|
||||
Type "./scripts/show-art.sh art/outro.txt" Enter
|
||||
Sleep 1s
|
||||
Show
|
||||
Sleep 1s
|
||||
|
||||
# ── Cleanup (hidden) ──
|
||||
Hide
|
||||
Type `gws drive files delete --params "{\"fileId\":\"$DEMO\"}" > /dev/null 2>&1` Enter
|
||||
Sleep 3s
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 84 KiB |
+127
@@ -0,0 +1,127 @@
|
||||
# Skills Index
|
||||
|
||||
> Auto-generated by `gws generate-skills`. Do not edit manually.
|
||||
|
||||
## Services
|
||||
|
||||
Core Google Workspace API skills.
|
||||
|
||||
| Skill | Description |
|
||||
|-------|-------------|
|
||||
| [gws-shared](../skills/gws-shared/SKILL.md) | gws CLI: Shared patterns for authentication, global flags, and output formatting. |
|
||||
| [gws-drive](../skills/gws-drive/SKILL.md) | Google Drive: Manage files, folders, and shared drives. |
|
||||
| [gws-sheets](../skills/gws-sheets/SKILL.md) | Google Sheets: Read and write spreadsheets. |
|
||||
| [gws-gmail](../skills/gws-gmail/SKILL.md) | Gmail: Send, read, and manage email. |
|
||||
| [gws-calendar](../skills/gws-calendar/SKILL.md) | Google Calendar: Manage calendars and events. |
|
||||
| [gws-admin-reports](../skills/gws-admin-reports/SKILL.md) | Google Workspace Admin SDK: Audit logs and usage reports. |
|
||||
| [gws-docs](../skills/gws-docs/SKILL.md) | Read and write Google Docs. |
|
||||
| [gws-slides](../skills/gws-slides/SKILL.md) | Google Slides: Read and write presentations. |
|
||||
| [gws-tasks](../skills/gws-tasks/SKILL.md) | Google Tasks: Manage task lists and tasks. |
|
||||
| [gws-people](../skills/gws-people/SKILL.md) | Google People: Manage contacts and profiles. |
|
||||
| [gws-chat](../skills/gws-chat/SKILL.md) | Google Chat: Manage Chat spaces and messages. |
|
||||
| [gws-classroom](../skills/gws-classroom/SKILL.md) | Google Classroom: Manage classes, rosters, and coursework. |
|
||||
| [gws-forms](../skills/gws-forms/SKILL.md) | Read and write Google Forms. |
|
||||
| [gws-keep](../skills/gws-keep/SKILL.md) | Manage Google Keep notes. |
|
||||
| [gws-meet](../skills/gws-meet/SKILL.md) | Manage Google Meet conferences. |
|
||||
| [gws-events](../skills/gws-events/SKILL.md) | Subscribe to Google Workspace events. |
|
||||
| [gws-modelarmor](../skills/gws-modelarmor/SKILL.md) | Google Model Armor: Filter user-generated content for safety. |
|
||||
| [gws-workflow](../skills/gws-workflow/SKILL.md) | Google Workflow: Cross-service productivity workflows. |
|
||||
| [gws-script](../skills/gws-script/SKILL.md) | Manage Google Apps Script projects. |
|
||||
|
||||
## Helpers
|
||||
|
||||
Shortcut commands for common operations.
|
||||
|
||||
| Skill | Description |
|
||||
|-------|-------------|
|
||||
| [gws-drive-upload](../skills/gws-drive-upload/SKILL.md) | Google Drive: Upload a file with automatic metadata. |
|
||||
| [gws-sheets-append](../skills/gws-sheets-append/SKILL.md) | Google Sheets: Append a row to a spreadsheet. |
|
||||
| [gws-sheets-read](../skills/gws-sheets-read/SKILL.md) | Google Sheets: Read values from a spreadsheet. |
|
||||
| [gws-gmail-send](../skills/gws-gmail-send/SKILL.md) | Gmail: Send an email. |
|
||||
| [gws-gmail-triage](../skills/gws-gmail-triage/SKILL.md) | Gmail: Show unread inbox summary (sender, subject, date). |
|
||||
| [gws-gmail-reply](../skills/gws-gmail-reply/SKILL.md) | Gmail: Reply to a message (handles threading automatically). |
|
||||
| [gws-gmail-reply-all](../skills/gws-gmail-reply-all/SKILL.md) | Gmail: Reply-all to a message (handles threading automatically). |
|
||||
| [gws-gmail-forward](../skills/gws-gmail-forward/SKILL.md) | Gmail: Forward a message to new recipients. |
|
||||
| [gws-gmail-read](../skills/gws-gmail-read/SKILL.md) | Gmail: Read a message and extract its body or headers. |
|
||||
| [gws-gmail-watch](../skills/gws-gmail-watch/SKILL.md) | Gmail: Watch for new emails and stream them as NDJSON. |
|
||||
| [gws-calendar-insert](../skills/gws-calendar-insert/SKILL.md) | Google Calendar: Create a new event. |
|
||||
| [gws-calendar-agenda](../skills/gws-calendar-agenda/SKILL.md) | Google Calendar: Show upcoming events across all calendars. |
|
||||
| [gws-docs-write](../skills/gws-docs-write/SKILL.md) | Google Docs: Append text to a document. |
|
||||
| [gws-chat-send](../skills/gws-chat-send/SKILL.md) | Google Chat: Send a message to a space. |
|
||||
| [gws-events-subscribe](../skills/gws-events-subscribe/SKILL.md) | Google Workspace Events: Subscribe to Workspace events and stream them as NDJSON. |
|
||||
| [gws-events-renew](../skills/gws-events-renew/SKILL.md) | Google Workspace Events: Renew/reactivate Workspace Events subscriptions. |
|
||||
| [gws-modelarmor-sanitize-prompt](../skills/gws-modelarmor-sanitize-prompt/SKILL.md) | Google Model Armor: Sanitize a user prompt through a Model Armor template. |
|
||||
| [gws-modelarmor-sanitize-response](../skills/gws-modelarmor-sanitize-response/SKILL.md) | Google Model Armor: Sanitize a model response through a Model Armor template. |
|
||||
| [gws-modelarmor-create-template](../skills/gws-modelarmor-create-template/SKILL.md) | Google Model Armor: Create a new Model Armor template. |
|
||||
| [gws-workflow-standup-report](../skills/gws-workflow-standup-report/SKILL.md) | Google Workflow: Today's meetings + open tasks as a standup summary. |
|
||||
| [gws-workflow-meeting-prep](../skills/gws-workflow-meeting-prep/SKILL.md) | Google Workflow: Prepare for your next meeting: agenda, attendees, and linked docs. |
|
||||
| [gws-workflow-email-to-task](../skills/gws-workflow-email-to-task/SKILL.md) | Google Workflow: Convert a Gmail message into a Google Tasks entry. |
|
||||
| [gws-workflow-weekly-digest](../skills/gws-workflow-weekly-digest/SKILL.md) | Google Workflow: Weekly summary: this week's meetings + unread email count. |
|
||||
| [gws-workflow-file-announce](../skills/gws-workflow-file-announce/SKILL.md) | Google Workflow: Announce a Drive file in a Chat space. |
|
||||
| [gws-script-push](../skills/gws-script-push/SKILL.md) | Google Apps Script: Upload local files to an Apps Script project. |
|
||||
|
||||
## Personas
|
||||
|
||||
Role-based skill bundles.
|
||||
|
||||
| Skill | Description |
|
||||
|-------|-------------|
|
||||
| [persona-exec-assistant](../skills/persona-exec-assistant/SKILL.md) | Manage an executive's schedule, inbox, and communications. |
|
||||
| [persona-project-manager](../skills/persona-project-manager/SKILL.md) | Coordinate projects — track tasks, schedule meetings, and share docs. |
|
||||
| [persona-hr-coordinator](../skills/persona-hr-coordinator/SKILL.md) | Handle HR workflows — onboarding, announcements, and employee comms. |
|
||||
| [persona-sales-ops](../skills/persona-sales-ops/SKILL.md) | Manage sales workflows — track deals, schedule calls, client comms. |
|
||||
| [persona-it-admin](../skills/persona-it-admin/SKILL.md) | Administer IT — monitor security and configure Workspace. |
|
||||
| [persona-content-creator](../skills/persona-content-creator/SKILL.md) | Create, organize, and distribute content across Workspace. |
|
||||
| [persona-customer-support](../skills/persona-customer-support/SKILL.md) | Manage customer support — track tickets, respond, escalate issues. |
|
||||
| [persona-event-coordinator](../skills/persona-event-coordinator/SKILL.md) | Plan and manage events — scheduling, invitations, and logistics. |
|
||||
| [persona-team-lead](../skills/persona-team-lead/SKILL.md) | Lead a team — run standups, coordinate tasks, and communicate. |
|
||||
| [persona-researcher](../skills/persona-researcher/SKILL.md) | Organize research — manage references, notes, and collaboration. |
|
||||
|
||||
## Recipes
|
||||
|
||||
Multi-step task sequences with real commands.
|
||||
|
||||
| Skill | Description |
|
||||
|-------|-------------|
|
||||
| [recipe-label-and-archive-emails](../skills/recipe-label-and-archive-emails/SKILL.md) | Apply Gmail labels to matching messages and archive them to keep your inbox clean. |
|
||||
| [recipe-draft-email-from-doc](../skills/recipe-draft-email-from-doc/SKILL.md) | Read content from a Google Doc and use it as the body of a Gmail message. |
|
||||
| [recipe-organize-drive-folder](../skills/recipe-organize-drive-folder/SKILL.md) | Create a Google Drive folder structure and move files into the right locations. |
|
||||
| [recipe-share-folder-with-team](../skills/recipe-share-folder-with-team/SKILL.md) | Share a Google Drive folder and all its contents with a list of collaborators. |
|
||||
| [recipe-email-drive-link](../skills/recipe-email-drive-link/SKILL.md) | Share a Google Drive file and email the link with a message to recipients. |
|
||||
| [recipe-create-doc-from-template](../skills/recipe-create-doc-from-template/SKILL.md) | Copy a Google Docs template, fill in content, and share with collaborators. |
|
||||
| [recipe-create-expense-tracker](../skills/recipe-create-expense-tracker/SKILL.md) | Set up a Google Sheets spreadsheet for tracking expenses with headers and initial entries. |
|
||||
| [recipe-copy-sheet-for-new-month](../skills/recipe-copy-sheet-for-new-month/SKILL.md) | Duplicate a Google Sheets template tab for a new month of tracking. |
|
||||
| [recipe-block-focus-time](../skills/recipe-block-focus-time/SKILL.md) | Create recurring focus time blocks on Google Calendar to protect deep work hours. |
|
||||
| [recipe-reschedule-meeting](../skills/recipe-reschedule-meeting/SKILL.md) | Move a Google Calendar event to a new time and automatically notify all attendees. |
|
||||
| [recipe-create-gmail-filter](../skills/recipe-create-gmail-filter/SKILL.md) | Create a Gmail filter to automatically label, star, or categorize incoming messages. |
|
||||
| [recipe-schedule-recurring-event](../skills/recipe-schedule-recurring-event/SKILL.md) | Create a recurring Google Calendar event with attendees. |
|
||||
| [recipe-find-free-time](../skills/recipe-find-free-time/SKILL.md) | Query Google Calendar free/busy status for multiple users to find a meeting slot. |
|
||||
| [recipe-bulk-download-folder](../skills/recipe-bulk-download-folder/SKILL.md) | List and download all files from a Google Drive folder. |
|
||||
| [recipe-find-large-files](../skills/recipe-find-large-files/SKILL.md) | Identify large Google Drive files consuming storage quota. |
|
||||
| [recipe-create-shared-drive](../skills/recipe-create-shared-drive/SKILL.md) | Create a Google Shared Drive and add members with appropriate roles. |
|
||||
| [recipe-log-deal-update](../skills/recipe-log-deal-update/SKILL.md) | Append a deal status update to a Google Sheets sales tracking spreadsheet. |
|
||||
| [recipe-collect-form-responses](../skills/recipe-collect-form-responses/SKILL.md) | Retrieve and review responses from a Google Form. |
|
||||
| [recipe-post-mortem-setup](../skills/recipe-post-mortem-setup/SKILL.md) | Create a Google Docs post-mortem, schedule a Google Calendar review, and notify via Chat. |
|
||||
| [recipe-create-task-list](../skills/recipe-create-task-list/SKILL.md) | Set up a new Google Tasks list with initial tasks. |
|
||||
| [recipe-review-overdue-tasks](../skills/recipe-review-overdue-tasks/SKILL.md) | Find Google Tasks that are past due and need attention. |
|
||||
| [recipe-watch-drive-changes](../skills/recipe-watch-drive-changes/SKILL.md) | Subscribe to change notifications on a Google Drive file or folder. |
|
||||
| [recipe-create-classroom-course](../skills/recipe-create-classroom-course/SKILL.md) | Create a Google Classroom course and invite students. |
|
||||
| [recipe-create-meet-space](../skills/recipe-create-meet-space/SKILL.md) | Create a Google Meet meeting space and share the join link. |
|
||||
| [recipe-review-meet-participants](../skills/recipe-review-meet-participants/SKILL.md) | Review who attended a Google Meet conference and for how long. |
|
||||
| [recipe-create-presentation](../skills/recipe-create-presentation/SKILL.md) | Create a new Google Slides presentation and add initial slides. |
|
||||
| [recipe-save-email-attachments](../skills/recipe-save-email-attachments/SKILL.md) | Find Gmail messages with attachments and save them to a Google Drive folder. |
|
||||
| [recipe-send-team-announcement](../skills/recipe-send-team-announcement/SKILL.md) | Send a team announcement via both Gmail and a Google Chat space. |
|
||||
| [recipe-create-feedback-form](../skills/recipe-create-feedback-form/SKILL.md) | Create a Google Form for feedback and share it via Gmail. |
|
||||
| [recipe-sync-contacts-to-sheet](../skills/recipe-sync-contacts-to-sheet/SKILL.md) | Export Google Contacts directory to a Google Sheets spreadsheet. |
|
||||
| [recipe-share-event-materials](../skills/recipe-share-event-materials/SKILL.md) | Share Google Drive files with all attendees of a Google Calendar event. |
|
||||
| [recipe-create-vacation-responder](../skills/recipe-create-vacation-responder/SKILL.md) | Enable a Gmail out-of-office auto-reply with a custom message and date range. |
|
||||
| [recipe-create-events-from-sheet](../skills/recipe-create-events-from-sheet/SKILL.md) | Read event data from a Google Sheets spreadsheet and create Google Calendar entries for each row. |
|
||||
| [recipe-plan-weekly-schedule](../skills/recipe-plan-weekly-schedule/SKILL.md) | Review your Google Calendar week, identify gaps, and add events to fill them. |
|
||||
| [recipe-share-doc-and-notify](../skills/recipe-share-doc-and-notify/SKILL.md) | Share a Google Docs document with edit access and email collaborators the link. |
|
||||
| [recipe-backup-sheet-as-csv](../skills/recipe-backup-sheet-as-csv/SKILL.md) | Export a Google Sheets spreadsheet as a CSV file for local backup or processing. |
|
||||
| [recipe-save-email-to-doc](../skills/recipe-save-email-to-doc/SKILL.md) | Save a Gmail message body into a Google Doc for archival or reference. |
|
||||
| [recipe-compare-sheet-tabs](../skills/recipe-compare-sheet-tabs/SKILL.md) | Read data from two tabs in a Google Sheet to compare and identify differences. |
|
||||
| [recipe-batch-invite-to-event](../skills/recipe-batch-invite-to-event/SKILL.md) | Add a list of attendees to an existing Google Calendar event and send notifications. |
|
||||
| [recipe-forward-labeled-emails](../skills/recipe-forward-labeled-emails/SKILL.md) | Find Gmail messages with a specific label and forward them to another address. |
|
||||
| [recipe-generate-report-from-sheet](../skills/recipe-generate-report-from-sheet/SKILL.md) | Read data from a Google Sheet and create a formatted Google Docs report. |
|
||||
|
||||
Reference in New Issue
Block a user