co-google · git:20260908.3b1ff0b · 2026-09-08 · sha256 fdb3fe6597ee61a6

co-google git:20260908.3b1ff0bA

Immutable. This exact content is served forever at /api/v1/blob/fdb3fe6597ee61a6.

---
name: co-google
description: Route Google account work to Gmail, Drive, Calendar, and YouTube CLI commands using one locally saved login.
---

## Environment selection in the 1.8.4 implementation

Global `keys.env` is the default for every setting and account. To use a project
file, put `--env-file` before the command: `co --env-file /absolute/path/.env gmail
inbox`. Auth and refresh use that selected file. No project env loads implicitly;
process overrides remain explicit and provider fields are kept as whole records.
`co env` (same selector) shows which file is in use and what it holds — run it
first when a command says "not connected in <file>". See
`docs/cli/environment.md` for migration and error recovery.


# Google tools

| Task | Command family |
|---|---|
| Mail and drafts | `co gmail --help` (see co-mail-and-drive skill) |
| Files and exports | `co gdrive --help` (see co-mail-and-drive skill) |
| Events and Meet links | `co gcalendar --help` |
| Channels and videos | `co youtube --help` |

Connect with `co auth google`. Default requests Gmail send/read/modify, Calendar,
Drive and YouTube management, plus email/profile identity. It does not grant every
Google API. Google shows the actual consent screen; declined capabilities are not
invented. Tokens and actual scopes are saved on this computer, not in a remote
credential table. Restricted example: `co auth google --scopes youtube.readonly`.

## Calendar

`co gcalendar list` prints event IDs, not reusable row numbers.

```bash
co gcalendar today
co gcalendar read EVENT_ID
co gcalendar meetings --days 7
co gcalendar free 2026-09-07 --minutes 30
co gcalendar create "Review" "2026-09-07T10:00:00+10:00" "2026-09-07T11:00:00+10:00"
co gcalendar meet "Review" "2026-09-07T10:00:00Z" "2026-09-07T11:00:00Z" --attendees a@example.com
co gcalendar update EVENT_ID --title "New title"
co gcalendar delete EVENT_ID
```

Mutations above preview locally. Review the exact arguments, then add `--yes`
only with user approval. Primary calendar only. Naive timestamps mean UTC;
free slots use 09:00–17:00 UTC and do not check attendees' calendars. Empty update
fields do not clear existing fields. A transport failure may have completed a write:
inspect the listing before retrying.

## YouTube

```bash
co youtube channel
co youtube list --last 10
co youtube video 1
co youtube put clip.mp4 --title "Demo" --channel UC_CHANNEL_ID
co youtube update VIDEO_ID --title "New title"
```

Numbers belong to the most recent nonempty YouTube listing; prefer stable IDs for
writes. `put` and `update` preview by default; `--confirm DIGEST` executes one
specific preview. Each preview prints the complete confirmation command, with
metadata quoted and its digest filled in. Use it only after the user has approved
that plan. Never fabricate a digest or retry an uncertain write. Upload
preview is local, not proof of API approval, quota, or valid media. YouTube's
API must be enabled; unaudited projects may be restricted to private uploads.
`video` reads metadata, not video bytes. Every `--json` response includes `ok` and
`next_command`; inspect them.

## Errors and recovery

| Exit | Meaning | Next command |
|---|---|---|
| 0 | Read succeeded, local preview, or confirmed write returned | Follow the printed `next_command` / `Next:` command |
| 1 | Authorization, provider or local I/O failure | `co auth google` for authorization; otherwise `co gcalendar list` or `co youtube list` before retrying |
| 2 | Invalid command arguments | `co gcalendar --help` or `co youtube --help` |

This skill documents branch behavior, not a claim that 1.8.3 is already published.