anachb
Austrian public transport (VOR AnachB) for all of Austria. Query real-time departures, search…
Access Google Workspace APIs (Drive, Docs, Calendar, Gmail, Sheets, Slides, Chat, People) via local helper scripts without MCP. Handles OAuth login and direct API calls.
$ npx -y skills add mitsuhiko/agent-stuff --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.
Access Google Workspace APIs (Drive, Docs, Calendar, Gmail, Sheets, Slides, Chat, People) via local helper scripts without MCP. Handles OAuth login and direct API calls.
name: google-workspace description: "Access Google Workspace APIs (Drive, Docs, Calendar, Gmail, Sheets, Slides, Chat, People) via local helper scripts without MCP. Handles OAuth login and direct API calls."
Use this skill for Google Workspace tasks (Gmail, Drive, Calendar, Docs, Sheets, etc.).
This skill is **profile-based by email address**.
Before running API calls, discover available signed-in accounts:
node scripts/auth.js accounts
Always use `exec` and always provide `--email`.
node scripts/workspace.js exec --email user@example.com <<'JS'
const me = await workspace.whoAmI();
const files = await workspace.call('drive', 'files.list', {
pageSize: 5,
fields: 'files(id,name,mimeType)',
});
return { me, files: files.files };
JSAvailable inside exec scripts:
Optional flags:
1. Prefer one `exec` script per user request. 2. Keep payloads small (`fields`, `maxResults`, minimal props). 3. Use `Promise.all` for independent requests. 4. Never print token contents. 5. If the user did not specify an account, run `node scripts/auth.js accounts` and choose/confirm an explicit email. 6. If auth fails, first run `node scripts/auth.js accounts` to see known profiles. 7. If account mismatch is possible, run `workspace.whoAmI()` in the selected profile. 8. On 401/403/unauthorized errors, switch account (`--email ...`) or re-login that specific profile.
If a request fails with unauthorized/forbidden/insufficient permissions:
1. Enumerate profiles:
node scripts/auth.js accounts
2. Retry with the intended account:
node scripts/workspace.js exec --email correct-user@example.com <<'JS' return await workspace.whoAmI(); JS
3. If token is stale or missing scopes, re-login that account:
node scripts/auth.js login --email correct-user@example.com
4. Retry the original request with the same `--email`.
node scripts/workspace.js exec --email user@example.com <<'JS'
const gmail = google.gmail({ version: 'v1', auth });
let trash = 0;
let pageToken;
do {
const res = await gmail.users.messages.list({
userId: 'me',
q: 'in:trash',
maxResults: 500,
pageToken,
fields: 'messages/id,nextPageToken',
});
trash += (res.data.messages || []).length;
pageToken = res.data.nextPageToken;
} while (pageToken);
return { currentlyInTrash: trash };
JSnode scripts/auth.js login --email user@example.com
Notes:
node scripts/auth.js accounts node scripts/auth.js status --email user@example.com node scripts/auth.js clear --email user@example.com
Armin's personal Pi Coding Agent package: reusable skills, extensions, prompt commands, themes, and a few supporting utilities that I use across projects. The package is published to npm as mitsupi.
Repo: mitsuhiko/agent-stuff
Austrian public transport (VOR AnachB) for all of Austria. Query real-time departures, search…
Search, read, and extract attachments from Apple Mail's local storage. Query emails by…
Transcribe local audio/video and Apple Voice Memos quickly with cached MLX Whisper models,…
Reverse engineer binaries using Ghidra's headless analyzer. Decompile executables, extract…
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for…