Skip to main content
command

gws-gmail-watch — Claude Code command: stream Gmail as NDJSON

A slash command that watches for new Gmail messages and streams them as NDJSON. Useful when incoming mail has to land in files or a pipeline.

Install into Claude Code · claude-code-templates All methods and platforms ↓
npx claude-code-templates@latest --command google-workspace/gws-gmail-watch
Open on GitHub

What gws-gmail-watch does

Under the hood it calls gws gmail +watch from the Google Workspace CLI. The command sets up a Pub/Sub subscription, pulls new messages in batches, and prints one NDJSON line per message. With --output-dir each message goes to its own JSON file instead.

Flags control the label filter (--label-ids), message format (--msg-format), batch size (--max-messages, 10 by default), and the gap between pulls (--poll-interval, 5 seconds). --once takes a single batch and exits. --cleanup deletes the Pub/Sub resources on exit.

You need gws installed and authentication already configured — run gws auth status to check. A Gmail watch expires after 7 days, so the command has to be re-run to renew it. Skip --cleanup and the Pub/Sub resources stay behind, which helps reconnection but leaves cleanup to you.

What it helps with

  • stream new Gmail messages as NDJSON
  • save each message to a separate JSON file
  • filter incoming mail by INBOX and UNREAD labels
  • pull one batch of messages and exit
  • reconnect to an existing Pub/Sub subscription

Example prompts for the agent

  • Watch for new emails in the my-gcp-project project
  • Pull one batch from INBOX and exit
  • Write new messages to files in ./emails

How to install gws-gmail-watch

1claude-code-templates

npx claude-code-templates@latest --command google-workspace/gws-gmail-watch

2Manually: put the files in place

.claude/commands/gws-gmail-watch.md

Call it with /gws-gmail-watch. For all projects use ~/.claude/commands/

Questions about gws-gmail-watch

How do I install gws-gmail-watch in Claude Code?

Run npx claude-code-templates@latest --command google-workspace/gws-gmail-watch, then check that .claude/commands/gws-gmail-watch.md is in place.

What does gws-gmail-watch do?

It runs gws gmail +watch: new Gmail messages are pulled and streamed as NDJSON. Each message can also be written to its own JSON file.

What does gws-gmail-watch need to run?

The Google Workspace CLI installed and authentication configured — verify with gws auth status. A Gmail watch expires after 7 days and must be renewed by running the command again.

Source text

gws-gmail-watch.md · MIT
---
allowed-tools: Bash, Read, Write, Edit
argument-hint: "[resource] [method] [flags]"
description: "Gmail: Watch for new emails and stream them as NDJSON."
---

# Google Workspace Gmail Watch

Execute Google Workspace Gmail Watch operations: $ARGUMENTS

## Prerequisites

- Google Workspace CLI (`gws`) must be installed
- Authentication configured: Run `gws auth status` to verify
- Review `gws gmail-watch --help` for all available commands

## Available Resources and Methods

# gmail +watch

> **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it.

Watch for new emails and stream them as NDJSON

## Usage

```bash
gws gmail +watch
```

## Flags

| Flag | Required | Default | Description |
|------|----------|---------|-------------|
| `--project` | — | — | GCP project ID for Pub/Sub resources |
| `--subscription` | — | — | Existing Pub/Sub subscription name (skip setup) |
| `--topic` | — | — | Existing Pub/Sub topic with Gmail push permission already granted |
| `--label-ids` | — | — | Comma-separated Gmail label IDs to filter (e.g., INBOX,UNREAD) |
| `--max-messages` | — | 10 | Max messages per pull batch |
| `--poll-interval` | — | 5 | Seconds between pulls |
| `--msg-format` | — | full | Gmail message format: full, metadata, minimal, raw |
| `--once` | — | — | Pull once and exit |
| `--cleanup` | — | — | Delete created Pub/Sub resources on exit |
| `--output-dir` | — | — | Write each message to a separate JSON file in this directory |

## Examples

```bash
gws gmail +watch --project my-gcp-project
gws gmail +watch --project my-project --label-ids INBOX --once
gws gmail +watch --subscription projects/p/subscriptions/my-sub
gws gmail +watch --project my-project --cleanup --output-dir ./emails
```

## Tips

- Gmail watch expires after 7 days — re-run to renew.
- Without --cleanup, Pub/Sub resources persist for reconnection.
- Press Ctrl-C to stop gracefully.

## See Also

- [gws-shared](../gws-shared/SKILL.md) — Global flags and auth
- [gws-gmail](../gws-gmail/SKILL.md) — All send, read, and manage email commands

## Usage

```bash
# List available resources and methods
gws gmail-watch --help

# Inspect method schema before calling
gws schema gmail-watch.<resource>.<method>

# Execute command with arguments
gws gmail-watch $ARGUMENTS
```

## Task

Execute the requested Gmail Watch operation: $ARGUMENTS

1. **Verify Prerequisites**
   - Check `gws` is installed: `gws --version`
   - Verify authentication: `gws auth status`
   - Review available commands: `gws gmail-watch --help`

2. **Inspect Method Schema**
   - Before calling any method, inspect its parameters
   - Use `gws schema` to understand required fields
   - Review parameter types and constraints

3. **Execute Operation**
   - Build command with appropriate flags
   - Use `--params` for query/path parameters
   - Use `--json` for request body
   - Handle pagination with `--max-results` or `--page-token`

4. **Error Handling**
   - Check command output for errors
   - Review API quotas and rate limits
   - Handle authentication issues
   - Retry transient failures

---

**License**: Apache License 2.0
**Source**: [Google Workspace CLI](https://github.com/googleworkspace/cli)
**Original Skill**: `gws-gmail-watch`

© davila7 · MIT · davila7/claude-code-templates

Similar slash commands

All slash commands for Automation and no-code: n8n, Zapier, Make →

From the same set361

The whole set →

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor