cloudflare-api
Hit the Cloudflare REST API directly for operations that wrangler and MCP can't handle well. Bulk DNS, custom hostnames, email routing, cache purge, WAF rules,…
Set up the Google Workspace CLI (gws) from scratch. Guides through GCP project creation, OAuth credentials, authentication, and installing 90+ agent skills for Claude Code. Use whenever the user wants to set up gws for the first time, configure Google Workspace API access,
$ npx -y skills add jezweb/claude-skills --skill gws-setup --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/gws-setupContext preview
The summary Claude sees to decide when to auto-load this skill.
Set up the Google Workspace CLI (gws) from scratch. Guides through GCP project creation, OAuth credentials, authentication, and installing 90+ agent skills for Claude Code. Use whenever the user wants to set up gws for the first time, configure Google Workspace API access,
name: gws-setup description: "Set up the Google Workspace CLI (gws) from scratch. Guides through GCP project creation, OAuth credentials, authentication, and installing 90+ agent skills for Claude Code. Use whenever the user wants to set up gws for the first time, configure Google Workspace API access, install the Google Workspace CLI, or troubleshoot gws auth issues." compatibility: claude-code-only
Set up the `gws` CLI (@googleworkspace/cli) with OAuth credentials and 90+ agent skills for Claude Code. Produces a fully authenticated CLI with skills for Gmail, Drive, Calendar, Sheets, Docs, Chat, Tasks, and more.
Check what's already done and skip completed steps:
# Check if gws is installed which gws && gws --version # Check if client_secret.json exists ls ~/.config/gws/client_secret.json # Check if already authenticated gws auth status
If `gws auth status` shows `"status": "success"` with scopes, skip to Step 6 (Install Skills).
npm install -g @googleworkspace/cli gws --version
The user needs to create OAuth Desktop App credentials in Google Cloud Console. Walk them through each step.
**3a. Create or select a GCP project:**
Direct the user to: `https://console.cloud.google.com/projectcreate`
Or use an existing project. Ask the user which they prefer.
**3b. Enable Google Workspace APIs:**
Direct the user to the API Library for their project: `https://console.cloud.google.com/apis/library?project=PROJECT_ID`
Enable these APIs (search for each):
**3c. Configure Google Chat App (required for Chat API):**
Enabling the Chat API alone isn't enough — Google requires a Chat App configuration even for user-context OAuth access. Without this, all Chat API calls return errors.
Direct the user to: `https://console.cloud.google.com/apis/api/chat.googleapis.com/hangouts-chat?project=PROJECT_ID`
1. Click the **Configuration** tab 2. Fill in app details (name, avatar, description — values don't matter for CLI use) 3. Under "Functionality", check **Spaces and group conversations** 4. Under "Connection settings", select **Apps Script** or **HTTP endpoint** (pick any — we just need the config to exist) 5. Save
This creates the app identity that the Chat API requires. Messages sent via `gws` still appear as coming from the authenticated user (OAuth user context), not from a bot.
**3e. Configure OAuth consent screen:**
Direct the user to: `https://console.cloud.google.com/apis/credentials/consent?project=PROJECT_ID`
Settings:
**3f. Create OAuth client ID:**
Direct the user to: `https://console.cloud.google.com/apis/credentials?project=PROJECT_ID`
1. Click **Create Credentials** → **OAuth client ID** 2. Application type: **Desktop app** 3. Name: `gws CLI` 4. Click **Create** 5. Copy the JSON or download the `client_secret_*.json` file
**3g. Save the credentials:**
Ask the user to provide the client_secret.json content (paste the JSON or provide the downloaded file path).
mkdir -p ~/.config/gws
Write the JSON to `~/.config/gws/client_secret.json`. The expected format:
{
"installed": {
"client_id": "...",
"project_id": "...",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"client_secret": "...",
"redirect_uris": ["http://localhost"]
}
}Ask the user what level of access they want:
| Option | Command | What it grants | |--------|---------|----------------| | **Full access** (recommended) | `gws auth login --full` | All Workspace scopes including admin, pubsub, cloud-platform | | **Core services** | `gws auth login -s gmail,drive,calendar,sheets,docs,chat,tasks` | Most-used services only | | **Minimal** | `gws auth login -s gmail,calendar` | Just email and calendar |
Recommend **full access** for power users. The OAuth consent screen shows all requested scopes so the user can review before granting.
> **Note**: If the GCP app is in "Testing" status, scope selection is limited to ~25 scopes. Use `-s service1,service2` to request targeted scopes, or publish the app (Publish → In Production) for broader scope access.
**IMPORTANT**: This step prints a very long OAuth URL (30+ scopes) that the user must open in their browser. The URL is too long to copy from terminal output — it wraps across lines and breaks. Always extract it to a file and open it programmatically.
1. Run the login command and capture the output:
gws auth login --full 2>&1 | tee /tmp/gws-auth-output.txt # Or with specific services: # gws auth login -s gmail,drive,calendar,sheets,docs,chat,tasks 2>&1 | tee /tmp/gws-auth-output.txt
Running as a background task is fine — it will complete once the user approves in browser.
2. Extract and open the URL (run separately after output appears):
grep -o 'https://accounts.google.com[^ ]*' /tmp/gws-auth-output.txt > /tmp/gws-auth-url.txt cat /tmp/gws-auth-url.txt | xargs open
If `open` doesn't work, tell the user: "The auth URL is saved at `/tm
Production workflow skills for Claude Code. Each skill guides Claude through a recipe to produce tangible output — scaffolded projects, generated assets, professional documents, deployed services. Ten plugins of practical, production-oriented skills.
Repo: jezweb/claude-skills
Hit the Cloudflare REST API directly for operations that wrangler and MCP can't handle well. Bulk DNS, custom hostnames, email routing, cache purge, WAF rules,…
Scaffold and deploy Cloudflare Workers with Hono routing, Vite plugin, and Static Assets. Describe project, scaffold structure, configure bindings, deploy. Use…
Generate Drizzle ORM schemas for Cloudflare D1 databases with correct D1-specific patterns. Produces schema files, migration commands, type exports, and…
Cloudflare D1 migration workflow: generate with Drizzle, inspect SQL for gotchas, apply to local and remote, fix stuck migrations, handle partial failures. Use…
Generate database seed scripts with realistic sample data. Reads Drizzle schemas or SQL migrations, respects foreign key ordering, produces idempotent…
Scaffold Hono API routes for Cloudflare Workers. Produces route files, middleware, typed bindings, Zod validation, error handling, and API_ENDPOINTS.md…