apple-notes
Manage Apple Notes via the memo CLI on macOS (create, view, search, edit).
Google OAuth2 client credentials (downloaded from Google Cloud Console)
$ npx -y skills add graniet/kheish --skill google-workspace --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/google-workspaceContext preview
The summary Claude sees to decide when to auto-load this skill.
Google OAuth2 client credentials (downloaded from Google Cloud Console)
description: Gmail, Calendar, Drive, Contacts, Sheets, and Docs integration via gws
CLI (googleworkspace/cli). Uses OAuth2 with automatic token refresh via bridge script.
Requires gws binary.
version: 2.0.0
license: MIT
required_credential_files:
- path: google_token.json
description: Google OAuth2 token (created by setup script)
- path: google_client_secret.json
description: Google OAuth2 client credentials (downloaded from Google Cloud Console)
metadata:
catalog:
tags:
- Google
- Gmail
- Calendar
- Drive
- Sheets
- Docs
- Contacts
- Email
- OAuth
- gws
homepage: https://github.com/googleworkspace/cli
related_skills:
- himalayaThis skill is repo-local and stays inactive until explicitly activated.
When the original instructions refer to legacy tool names, use these Kheish mappings:
When the instructions mention local helper files, resolve them from `${KHEISH_SKILL_DIR}`.
Gmail, Calendar, Drive, Contacts, Sheets, and Docs — powered by `gws` (Google's official Rust CLI). The skill provides a backward-compatible Python wrapper that handles OAuth token refresh and delegates to `gws`.
google_api.py → gws_bridge.py → gws CLI (argparse compat) (token refresh) (Google APIs)
Install `gws`:
cargo install google-workspace-cli # or via npm (recommended, downloads prebuilt binary): npm install -g @googleworkspace/cli # or via Homebrew: brew install googleworkspace-cli
Verify: `gws --version`
The setup is fully non-interactive — you drive it step by step so it works on CLI, Telegram, Discord, or any platform.
Define a shorthand first:
GWORKSPACE_SKILL_DIR=".agents/skills/productivity/google-workspace"
PYTHON_BIN="${PYTHON_BIN:-python3}"
GSETUP="$PYTHON_BIN $GWORKSPACE_SKILL_DIR/scripts/setup.py"$GSETUP --check
If it prints `AUTHENTICATED`, skip to Usage — setup is already done.
**Question 1: "What Google services do you need? Just email, or also Calendar/Drive/Sheets/Docs?"**
**Partial scopes**: Users can authorize only a subset of services. The setup script accepts partial scopes and warns about missing ones.
**Question 2: "Does your Google account use Advanced Protection?"**
Tell the user:
> 1. Go to https://console.cloud.google.com/apis/credentials > 2. Create a project (or use an existing one) > 3. Enable the APIs you need (Gmail, Calendar, Drive, Sheets, Docs, People) > 4. Credentials → Create Credentials → OAuth 2.0 Client ID → Desktop app > 5. Download JSON and tell me the file path
$GSETUP --client-secret /path/to/client_secret.json
$GSETUP --auth-url
Send the URL to the user. After authorizing, they paste back the redirect URL or code.
$GSETUP --auth-code "THE_URL_OR_CODE_THE_USER_PASTED"
$GSETUP --check
Should print `AUTHENTICATED`. Token refreshes automatically from now on.
All commands go through the API script:
GWORKSPACE_SKILL_DIR=".agents/skills/productivity/google-workspace"
PYTHON_BIN="${PYTHON_BIN:-python3}"
GAPI="$PYTHON_BIN $GWORKSPACE_SKILL_DIR/scripts/google_api.py"$GAPI gmail search "is:unread" --max 10 $GAPI gmail get MESSAGE_ID $GAPI gmail send --to user@example.com --subject "Hello" --body "Message text" $GAPI gmail send --to user@example.com --subject "Report" --body "<h1>Q4</h1>" --html $GAPI gmail reply MESSAGE_ID --body "Thanks, that works for me." $GAPI gmail labels $GAPI gmail modify MESSAGE_ID --add-labels LABEL_ID
$GAPI calendar list $GAPI calendar create --summary "Standup" --start 2026-03-01T10:00:00+01:00 --end 2026-03-01T10:30:00+01:00 $GAPI calendar create --summary "Review" --start ... --end ... --attendees "alice@co.com,bob@co.com" $GAPI calendar delete EVENT_ID
$GAPI drive search "quarterly report" --max 10 $GAPI drive search "mimeType='application/pdf'" --raw-query --max 5
$GAPI contacts list --max 20
$GAPI sheets get SHEET_ID "Sheet1!A1:D10" $GAPI sheets update SHEET_ID "Sheet1!A1:B2" --values '[["Name","Score"],["Alice","95"]]' $GAPI sheets append SHEET_ID "Sheet1!A:C" --values '[["new","row","data"]]'
$GAPI docs get DOC_ID
For operations not covered by the wrapper, use `gws_bridge.py` directly:
GBRIDGE="$PYTHON_BIN $GWORKSPACE_SKILL_DIR/scripts/gws_bridge.py" $GBRIDGE calendar +agenda --
Manage Apple Notes via the memo CLI on macOS (create, view, search, edit).
Manage Apple Reminders via remindctl CLI (list, add, complete, delete).
Track Apple devices and AirTags via FindMy.app on macOS using AppleScript
Send and receive iMessages/SMS via the imsg CLI on macOS.
Delegate coding tasks to Claude Code (Anthropic's CLI agent). Use for
--- description: Delegate coding tasks to OpenAI Codex CLI agent. Use for building features, refactoring, PR reviews, and batch…