openclaw/skills/gws-shared/SKILL.md
gws CLI: Shared patterns for authentication, global flags, and output formatting.
npx skillsauth add Dbochman/dotfiles gws-sharedInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
The gws binary must be on $PATH. See the project README for install options.
Credentials are AES-256-GCM encrypted at ~/.config/gws/. Auth requires a browser (OAuth) — auth locally, then scp credentials + .encryption_key + accounts.json to headless machines.
DANGER: gws auth logout without --account <email> NUKES ALL accounts. Always use gws auth logout --account <email> for per-account removal.
| Account | Owner | Flag |
|---------|-------|------|
| [email protected] | Dylan | Default (no flag needed) |
| [email protected] | Julia | --account [email protected] |
| [email protected] | Dylan (spam) | --account [email protected] |
| [email protected] | OpenClaw | --account [email protected] |
When Dylan asks about "my email/calendar/drive", use default. When he says "Julia's", use her account.
| Flag | Description |
|------|-------------|
| --format <FORMAT> | Output format: json (default), table, yaml, csv |
| --dry-run | Validate locally without calling the API |
| --sanitize <TEMPLATE> | Screen responses through Model Armor |
gws <service> <resource> [sub-resource] <method> [flags]
| Flag | Description |
|------|-------------|
| --params '{"key": "val"}' | URL/query parameters |
| --json '{"key": "val"}' | Request body |
| -o, --output <PATH> | Save binary responses to file |
| --upload <PATH> | Upload file content (multipart) |
| --page-all | Auto-paginate (NDJSON output) |
| --page-limit <N> | Max pages when using --page-all (default: 10) |
| --page-delay <MS> | Delay between pages in ms (default: 100) |
--account vs GOOGLE_WORKSPACE_CLI_ACCOUNTThe CLI has two ways to pick an account, and they don't behave identically:
--account <email> — works on the helper subcommands (+agenda, +insert, +inbox, etc.) and on gws auth ....GOOGLE_WORKSPACE_CLI_ACCOUNT=<email> — works on EVERYTHING, including the raw API resource calls (calendar events list, gmail users messages get, calendar calendarList list, etc.).Calling raw API endpoints with --account may return 401 "No credentials provided" even though the account is fully authenticated — the flag isn't plumbed through to those code paths in v0.4.4. Set the env var instead:
[email protected] gws calendar events list \
--params '{"calendarId":"primary","maxResults":3}'
For scripts that hit raw endpoints, export the var once at the top instead of passing --account per call.
The gws CLI occasionally returns this error mid-token-refresh:
{"error":{"code":401,"message":"<service> auth failed: Failed to get token","reason":"authError"}}
This is a race, not a real auth failure: the local token cache is being rewritten while the API call reads it. Distinguishable from real auth failures because real ones say Access denied. No credentials provided. Run gws auth login instead.
When you see "Failed to get token", retry once after sleeping 3-5 seconds before reporting auth failure. A second call almost always succeeds.
out=$(gws calendar +agenda --days 7 2>&1)
if echo "$out" | grep -q '"Failed to get token"'; then
sleep 5
out=$(gws calendar +agenda --days 7 2>&1)
fi
echo "$out"
Hit on 2026-05-02 — Dylan's morning briefing fired at 08:00 ET, which was the exact moment the token cache file was being rewritten. The agent saw the 401, didn't retry, and reported "Calendar auth is failing" in the briefing. Manual retry 30 minutes later worked first try.
--dry-run for destructive operations--sanitize for PII/content safety screeninghttps://github.com/googleworkspace/clihttps://github.com/googleworkspace/cli/issuestools
Use exact configured Reolink cameras through the local Home Hub for availability and power status, fresh stills, visual commentary, protected Dylan/Julia/household sharing, and reversible spotlight control. Supports trusted owner tasks and explicitly scoped proactive automations; not for Nest or Ring cameras, arbitrary recipients, recordings, account changes, or raw camera APIs.
data-ai
Privately manage Dylan and Julia's household plant inventory and care history by physical location, bed, and exact Flower Cam view. Use for confirmed plant onboarding from camera conversations, camera- or bed-filtered inventory, record corrections, individual or whole-bed care, and private filtered exports. Pair with reolink-camera when an owner asks about plants visible in Flower Cam images.
testing
Inspect and control the physically secured Reachy Mini at Crosstown through ClawBody. Use for requests to check Reachy, look around, express an emotion, play any official emotion or dance preset, speak proactively, mute or unmute its microphone, stop movement, or describe what its camera sees.
tools
Handle Reachy/iMessage handoffs, selective durable memory, forgetting, and diagnostics; automatic context comes from the gateway plugin.