원클릭으로
google-account
Apply when interacting with Google services (Gmail, Calendar, Drive, Tasks) via gogcli CLI
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Apply when interacting with Google services (Gmail, Calendar, Drive, Tasks) via gogcli CLI
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Provides coding style rules for Python and PowerShell. Apply when writing, editing, reviewing, or debugging code.
Apply when conducting deep research on technologies, APIs, frameworks, or other software development topics requiring systematic investigation
Apply when doing planning for long-running tasks in sessions on top level
Apply when committing code, writing commit messages, or configuring .gitignore
Apply when working with GitHub repositories, issues, PRs, or authentication
Automates browser interactions via Microsoft Playwright MCP server (@playwright/mcp). Use when navigating websites, filling forms, taking screenshots, scraping web data, testing web UI, or automating any browser-based task. Covers persistent sessions, extension mode for existing browser tabs, and 40+ browser automation tools.
| name | google-account |
| description | Apply when interacting with Google services (Gmail, Calendar, Drive, Tasks) via gogcli CLI |
Interact with Google services using the gogcli CLI tool.
Before using this skill, verify gog is installed:
wsl bash -c "export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/linuxbrew/.linuxbrew/bin'; gog --version"
If command fails or gog not found: Stop and follow SETUP.md workflow completely. Do NOT improvise installation steps.
If gog found but auth fails: Follow Token Expiry Re-Auth Flow below.
gog (from gogcli package), NOT gopgog not installed: Follow SETUP.md, do NOT improvise installation--json flag for all commands to enable parsingGOG_ACCOUNT environment variable for non-interactive useGOG_KEYRING_PASSWORD with file backend for automation--out-dir, default is current directorywsl bash -c "export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/linuxbrew/.linuxbrew/bin'; export GOG_KEYRING_PASSWORD='<PASSWORD>'; export GOG_ACCOUNT='<EMAIL>'; gog <command>"
Get config from [WORKSPACE_FOLDER]/!NOTES.md - Look for "gogcli" section with account and keyring password.
User wants to...
gog gmail search 'is:unread' --max 20gog gmail thread get <threadId>gog gmail thread get <threadId> --download --out-dir ./attachmentsgog gmail send --to <email> --subject "..." --body "..."gog gmail drafts create --to <email> --subject "..." --body "..."gog calendar events primary --todaygog calendar create primary --summary "..." --from <datetime> --to <datetime>--attendees "email1,email2" --send-updates allgog calendar freebusy --calendars "primary" --from <start> --to <end>gog tasks lists then gog tasks list <tasklistId>gog tasks add <tasklistId> --title "..." --due <date>gog tasks done <tasklistId> <taskId>gog drive download <fileId> --out ./file.bingog drive search "query" --max 20Repository: https://github.com/steipete/gogcli Website: https://gogcli.sh/
Unified CLI for Google services:
gog [--json] [--account <email>] <service> <command> [options]
Global flags:
--json - Output in JSON format (recommended for parsing)--account <email> - Use specific account (or set GOG_ACCOUNT env var)# Search recent
gog --json gmail search 'newer_than:7d' --max 10
# Search unread
gog --json gmail search 'is:unread' --max 20
# Search by sender
gog --json gmail search 'from:someone@example.com' --max 10
# Get thread details
gog --json gmail thread get <threadId>
# Download all attachments from thread
gog gmail thread get <threadId> --download --out-dir [TOOLS_FOLDER]/_downloaded_attachments
# Single attachment
gog gmail attachment <messageId> <attachmentId> --out ./file.bin
# Plain text
gog gmail send --to recipient@example.com --subject "Subject" --body "Body text"
# HTML body
gog gmail send --to recipient@example.com --subject "Subject" --body-html "<p>HTML content</p>"
# Reply with quote
gog gmail send --reply-to-message-id <messageId> --quote --to recipient@example.com --subject "Re: ..." --body "Reply"
# Create
gog gmail drafts create --to recipient@example.com --subject "Draft" --body "Content"
# List
gog gmail drafts list
# Send draft
gog gmail drafts send <draftId>
# List
gog gmail labels list
# Modify thread
gog gmail thread modify <threadId> --add STARRED --remove INBOX
# Today
gog --json calendar events primary --today
# This week
gog --json calendar events primary --week
# Next N days
gog --json calendar events primary --days 7
# Date range
gog --json calendar events primary --from 2025-01-15T00:00:00Z --to 2025-01-22T00:00:00Z
# Basic event
gog calendar create primary \
--summary "Meeting" \
--from 2025-01-15T10:00:00Z \
--to 2025-01-15T11:00:00Z
# With attendees
gog calendar create primary \
--summary "Team Sync" \
--from 2025-01-15T14:00:00Z \
--to 2025-01-15T15:00:00Z \
--attendees "alice@example.com,bob@example.com" \
--send-updates all
# Recurring
gog calendar create primary \
--summary "Weekly Standup" \
--from 2025-01-15T09:00:00Z \
--to 2025-01-15T09:30:00Z \
--rrule "RRULE:FREQ=WEEKLY;BYDAY=MO"
# With reminder
gog calendar create primary \
--summary "Payment" \
--from 2025-02-11T09:00:00Z \
--to 2025-02-11T09:15:00Z \
--reminder "email:1d" \
--reminder "popup:30m"
# Update
gog calendar update primary <eventId> --summary "Updated Title"
# Delete
gog calendar delete primary <eventId>
gog --json calendar freebusy --calendars "primary" \
--from 2025-01-15T00:00:00Z \
--to 2025-01-16T00:00:00Z
# List tasklists
gog --json tasks lists
# List tasks
gog --json tasks list <tasklistId>
# Add task
gog tasks add <tasklistId> --title "Task title" --due 2025-02-01
# Add recurring
gog tasks add <tasklistId> --title "Daily review" --due 2025-02-01 --repeat daily
# Mark complete
gog tasks done <tasklistId> <taskId>
# Undo
gog tasks undo <tasklistId> <taskId>
# List files
gog --json drive ls --max 20
# Search
gog --json drive search "invoice" --max 20
# Download
gog drive download <fileId> --out ./downloaded-file.bin
# Upload
gog drive upload ./path/to/file --parent <folderId>
export GOG_ACCOUNT='you@gmail.com'
export GOG_KEYRING_BACKEND='file'
export GOG_KEYRING_PASSWORD='secure-password'
# Optional: Restrict commands (sandboxing)
export GOG_ENABLE_COMMANDS='gmail,calendar,tasks,drive'
~/.config/gogcli/config.json%AppData%\gogcli\config.json~/Library/Application Support/gogcli/config.json# CORRECT - with full PATH (get EMAIL and PASSWORD from [WORKSPACE_FOLDER]/!NOTES.md)
wsl bash -c "export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/linuxbrew/.linuxbrew/bin'; export GOG_ACCOUNT='<EMAIL>'; export GOG_KEYRING_PASSWORD='<PASSWORD>'; gog --json gmail search 'is:unread' --max 5"
# WRONG - PATH not set, will fail with 'gog: command not found'
wsl bash -c 'export GOG_ACCOUNT="you@gmail.com" && gog gmail search "is:unread" --max 5'
--manual flag for servers without browserWhen you see "invalid_grant" "Token has been expired or revoked", follow this flow:
wsl bash -c "export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/linuxbrew/.linuxbrew/bin'; export GOG_KEYRING_PASSWORD='<PASSWORD>'; gog auth add <EMAIL> --manual --force" 2>&1 | Select-String -Pattern 'state=' | ForEach-Object { $_.Line }
This outputs an OAuth URL. Note the state= parameter value.
// Navigate to the OAuth URL from Step 1
await page.goto('<OAUTH_URL_FROM_STEP_1>');
// Get redirect URL from network requests
await mcp1_browser_network_requests({ includeStatic: false })
// Look for: http://127.0.0.1:<PORT>/oauth2/callback?state=...&code=...
# Pipe the redirect URL to gogcli (must match state from Step 1)
wsl bash -c "export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/linuxbrew/.linuxbrew/bin'; export GOG_KEYRING_PASSWORD='<PASSWORD>'; echo '<REDIRECT_URL>' | gog auth add <EMAIL> --manual --force"
wsl bash -c "export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/linuxbrew/.linuxbrew/bin'; export GOG_KEYRING_PASSWORD='<PASSWORD>'; export GOG_ACCOUNT='<EMAIL>'; gog --json gmail search 'is:unread' --max 3"
Symptom: gog: command not found
Fix: Always use full PATH export in command:
export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/linuxbrew/.linuxbrew/bin'
Symptom: state mismatch error when pasting redirect URL
Cause: Using redirect URL from a different auth session
Fix: The state= parameter in redirect URL must match the auth session. Start fresh auth and use that session's redirect URL.
Symptom: Error 401: invalid_client / "The OAuth client was not found"
Cause: Using wrong client_id in OAuth URL
Fix: Get correct client_id from your client secret file:
Get-Content "<CLIENT_SECRET_PATH>" | ConvertFrom-Json | Select-Object -ExpandProperty installed | Select-Object client_id
# Client secret path is in [WORKSPACE_FOLDER]/!NOTES.md under "gogcli" section
Symptom: Cannot copy full OAuth URL from terminal Fix: Use Playwright MCP to navigate directly - read client_id from JSON, construct URL with correct scopes.
Symptom: Auth fails silently
Cause: gogcli uses random port each session (e.g., 8085, 45111)
Fix: Always capture redirect URL from same auth session via mcp1_browser_network_requests.