Managing Google Workspace
taylorwilsdon/google_workspace_mcp
Manages Google Workspace operations across 12 services (Gmail, Drive, Calendar, Docs, Sheets, Slides, Forms, Tasks, Contacts, Chat, Apps Script, Custom Search).
Fetch & embed AI transcripts as Obsidian callouts. An agent skill from benoror/obsidianos_work.
$ npx skills add benoror/obsidianos_work --skill cache-notes -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install benoror/obsidianos_work cache-notes --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/benoror/obsidianos_work.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/cache-notes .claude/skills/cache-notes && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "cache-notes" agent skill from https://github.com/benoror/obsidianos_work/tree/main/.agents/skills/cache-notes into .claude/skills/cache-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cache-notes", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/benoror/obsidianos_work/tree/main/.agents/skills/cache-notesType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add benoror/obsidianos_work --skill cache-notes -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install benoror/obsidianos_work cache-notes --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/benoror/obsidianos_work.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/cache-notes .agents/skills/cache-notes && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "cache-notes" agent skill from https://github.com/benoror/obsidianos_work/tree/main/.agents/skills/cache-notes into .agents/skills/cache-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cache-notes", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add benoror/obsidianos_work --skill cache-notes -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install benoror/obsidianos_work cache-notes --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/benoror/obsidianos_work.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/cache-notes .cursor/skills/cache-notes && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "cache-notes" agent skill from https://github.com/benoror/obsidianos_work/tree/main/.agents/skills/cache-notes into .cursor/skills/cache-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cache-notes", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/benoror/obsidianos_work.git --path .agents/skills/cache-notes--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add benoror/obsidianos_work --skill cache-notes -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install benoror/obsidianos_work cache-notes --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/benoror/obsidianos_work.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/cache-notes .gemini/skills/cache-notes && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "cache-notes" agent skill from https://github.com/benoror/obsidianos_work/tree/main/.agents/skills/cache-notes into .gemini/skills/cache-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cache-notes", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install benoror/obsidianos_work cache-notesInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add benoror/obsidianos_work --skill cache-notes -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/benoror/obsidianos_work.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/cache-notes .github/skills/cache-notes && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "cache-notes" agent skill from https://github.com/benoror/obsidianos_work/tree/main/.agents/skills/cache-notes into .github/skills/cache-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cache-notes", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add benoror/obsidianos_work --skill cache-notes -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install benoror/obsidianos_work cache-notes --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/benoror/obsidianos_work.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/cache-notes .opencode/skills/cache-notes && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "cache-notes" agent skill from https://github.com/benoror/obsidianos_work/tree/main/.agents/skills/cache-notes into .opencode/skills/cache-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cache-notes", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
cache-notesFetch & embed AI transcripts as Obsidian callouts. An agent skill from benoror/obsidianos_work.
Cache Notes is an agent skill from benoror/obsidianos_work. Fetch & embed AI transcripts as Obsidian callouts. Args: <path, all, refresh <path. Prompts for URLs if empty.
Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: Requires Obsidian CLI (property:read/set, outline, base:query) with Obsidian running, gws CLI for Google Docs/Drive (read-only), and Meetings.base…
It sits in Documents & Office, covering Cloud office suites. It works with Obsidian, Google Docs and Google Workspace. The repository describes itself as: ObsidianOS - Work Vault. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 3c7923e. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are yaml and markdown).
From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
docs.google.comotter.aiFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Requires Obsidian CLI (property:read/set, outline, base:query) with Obsidian running, gws CLI for Google Docs/Drive (read-only), and Meetings.base (CachePending view). QMD optional fallback. See [google-workspace-cli](../_shared/google-workspace-cli.md).
From compatibility in the SKILL.md frontmatter.
Cache Notes loads about 2.7k tokens when it runs. Until then it costs about 31 tokens; SKILL.md has 1,217 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from benoror/obsidianos_work at commit 3c7923e, republished under its MIT licence (© benoror). 1,217 words, ~2,696 tokens.
.claude/skills/cache-notes/SKILL.md (or your agent's skills folder)./cache-notes all — Scan all meetings with Notes: links that haven't been cached yet, fetch and embed them./cache-notes <path> — Cache notes for a specific meeting file./cache-notes refresh <path> — Re-fetch and overwrite existing cached content for a file.If the target file has an empty Notes: property (no URLs yet), run /mail-transcripts first when doing a full wrap (see meeting Mode C) — it may populate Notes: from the Gemini inbox mail. If still empty, prompt the user to paste the external resource URLs (Google Docs, Otter.ai, etc.). Add them to the Notes: frontmatter, then proceed with fetching and caching as normal.
Supported external transcript providers are Google Docs (Gemini notes) and Otter.ai. When a URL from either provider appears in frontmatter Notes:, the agent fetches the transcript using that provider's instructions and embeds it as collapsible Obsidian callouts in the meeting note. A NotesCached: frontmatter timestamp marks the file as cached.
Before caching:
Notes:
- https://docs.google.com/document/d/{id}/edit?tab=t.{tab}
- https://otter.ai/u/{id}After caching:
Notes:
- https://docs.google.com/document/d/{id}/edit?tab=t.{tab}
- https://otter.ai/u/{id}
NotesCached: 2026-02-25T15:00:00+00:00Notes:.gws in the terminal to fetch the document (read-only). See google-workspace-cli for exact commands.gws docs documents get with includeTabsContent: true and parse the JSON into text (optionally inserting --- TAB: … --- separators from tab titles), or gws drive files export with mimeType: text/plain for a simpler single stream. Parsed content should mirror the old tab layout where needed: --- TAB: Notes ---, --- TAB: Transcript ---.Gemini notes have a consistent structure. Parse into three sections:
| Section | Starts after | Ends before | Callout |
|---|---|---|---|
| Summary + Details | Summary heading | Suggested next steps heading | [!gemini_notes] |
| Suggested next steps | Suggested next steps heading | Gemini disclaimer footer | [!gemini_todos] |
| Transcript | --- TAB: Transcript --- | End of content | [!gemini_transcript] |
Strip the Gemini disclaimer footer — lines starting with "You should review Gemini's" or "Please provide feedback" are noise. Do not include them.
All cached content goes under a top-level ## 🤖 AI Notes section appended after frontmatter. Each provider gets its own ### {Provider} subsection. Callouts are nested under the provider heading.
## 🤖 AI Notes
### Gemini
> [!gemini_notes]- Summary & Details
> ### Summary
> {summary text}
>
> ### Details
> {details as bullet points}
> [!gemini_todos]- Suggested Next Steps
> - {next step 1}
> - {next step 2}
> [!gemini_transcript]- Transcript
> {transcript content, if available}
### Otter
> [!otter_notes]- Summary & Details
> ...Formatting rules for callout content:
> .- after the callout type (e.g. [!gemini_notes]-) — this makes it collapsed by default in Obsidian.> prefix) to separate them.[!gemini_transcript] callout entirely.## 🤖 AI Notes heading is created once. Provider subsections are added beneath it.--- and ## 🤖 AI Notes, preserve it. Always append ## 🤖 AI Notes at the end of the file.Otter.ai is a supported external transcript provider (same as Google Docs). Whenever an Otter.ai URL is present in Notes:, follow this provider's instructions to fetch the transcript and embed it. The cached output uses the same structure as other providers: a subsection under ## 🤖 AI Notes with collapsible callouts. Expected callout types:
[!otter_notes]- — Summary and details[!otter_todos]- — Suggested next steps / key topics[!otter_transcript]- — Full transcript (if available)Implementation: Use the otter-fetch skill — ask the user to paste the JSON from GET .../speech?otid=..., then run parse_otter.js (or parse inline) to produce the callouts above and append them.
/cache-notes <path>)Notes: and NotesCached: via obsidian property:read (see frontmatter-mutations). To check whether the body already has an ## 🤖 AI Notes section without reading the whole file, run obsidian outline path="<file>" format=json and look for that heading — much cheaper than a full Read on large transcript files.Notes: is empty or absent, prompt the user to paste the external resource URL(s). Set them via obsidian property:set name=Notes value='["<url1>","<url2>"]' type=list path="<file>", then continue.NotesCached: exists and this is not a refresh, inform the user and stop.Notes:, fetch and parse by provider:gws (see google-workspace-cli), parse into sections per Provider: Gemini.GET .../speech?otid=...; run otter-fetch/parse_otter.js or parse inline), then append the resulting callout block.## 🤖 AI Notes after frontmatter --- (see Output Format).NotesCached: timestamp: obsidian property:set name=NotesCached value="$(date +%FT%T%z)" type=datetime path="<file>". See frontmatter-mutations./cache-notes all)obsidian base:query path=Meetings.base view=CachePending format=paths. Returns only files with Notes populated but no NotesCached: — exactly the work queue. (The /note-status pending --step=cache delegation in Detecting Uncached Files is the fallback when Meetings.base is unavailable.)Before caching, verify that each external resource actually corresponds to the meeting note. This prevents accidentally caching the wrong document when a user pastes an incorrect URL.
created: frontmatter timestampgws drive files get (name field), e.g. "Daily Standup - 2026/02/24 09:43 EST - Notes by Gemini" — same string you would have seen in older MCP File: lines.YYYY-MM-DD and check equality.⚠️ Date mismatch for Meetings/Engineering/Scrum/2026-02-24.md:
Note date: 2026-02-24
Doc title: "Daily Standup - 2026/02/26 09:41 EST - Notes by Gemini"
Doc date: 2026-02-26
Wrong document? [Continue anyway / Skip this URL / Replace URL]/cache-notes all or /meeting wrap pending), collect all mismatches and present them together before proceeding, rather than interrupting one by one.See date-filter § "Date Parsing" for the full list of recognized formats and ambiguity rules.
Verification is skipped for:
refresh mode (the URL was already verified on first cache)Delegate to /note-status pending --step=cache. That skill handles discovery, frontmatter checks, and the dependency chain (only notes with Notes: containing a supported provider URL are considered actionable for caching). See /note-status § Dependency Chain for the full rules.
/cache-notes refresh <path>:
## 🤖 AI Notes section and everything below it.NotesCached: timestamp.See /commit. Skip when called as part of a sequence (e.g. /meeting wrap).
obsidian property:set for frontmatter writes (Notes:, NotesCached:) — see frontmatter-mutations; never hand-roll StrReplace against frontmatter anchors. Body content (the callout blocks) is still appended/replaced with Edit/Write.Notes: URLs should NOT be modified — they remain as the canonical source links.NotesCached: is the single indicator that caching was done. No other markers.all mode, process in batches and report progress to the user./fill-participants handles name resolution separately.© benoror, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/cache-notes of benoror/obsidianos_work.
Open the folder on GitHubat commit 3c7923e
Cache Notes next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Cache Notes this skillbenoror/obsidianos_work | 165 | — | ~2.7k | Automated safety check: Pass | MIT | |
| Managing Google Workspacetaylorwilsdon/google_workspace_mcp | 3.3k | — | ~2.9k | Automated safety check: Pass | MIT | |
| Gdoc To Markdowniurykrieger/claude-bedrock | 105 | 1 repos | ~3.8k | Automated safety check: Notes | MIT | |
| Auth Preflightai-analyst-lab/ai-analyst | 304 | — | ~3.1k | Automated safety check: Pass | MIT | |
| Chart To Driveai-analyst-lab/ai-analyst | 304 | — | ~1.4k | Automated safety check: Pass | MIT | |
| Google Workspaceespennilsen/pi | 122 | — | ~3.4k | Automated safety check: Pass | MIT |
taylorwilsdon/google_workspace_mcp
Manages Google Workspace operations across 12 services (Gmail, Drive, Calendar, Docs, Sheets, Slides, Forms, Tasks, Contacts, Chat, Apps Script, Custom Search).
iurykrieger/claude-bedrock
Internal fetcher module for Google Docs and Sheets. An agent skill from iurykrieger/claude-bedrock.
ai-analyst-lab/ai-analyst
Verify Google Workspace MCP authentication at the start of any session that needs Google APIs (Docs, Slides, Drive).
ai-analyst-lab/ai-analyst
Standardized workflow for uploading local chart PNGs to Google Drive and making them available for insertion into Google Docs and Slides.
espennilsen/pi
Manage Google Workspace via the gws CLI — Drive, Gmail, Sheets, Docs, Slides, People, Chat, Meet, Forms, and cross-service workflows.
googleworkspace/cli
Google Docs: Append text to a document.
benoror/obsidianos_work
Search vault notes by keyword or meaning. An agent skill from benoror/obsidianos_work.
benoror/obsidianos_work
Resolve and fill Participants frontmatter + link unlinked names in body.
benoror/obsidianos_work
Extract action items as plain markdown bullets (with confirmation).
benoror/obsidianos_work
Show when you last had a 1:1 with each direct report / peer, sorted by recency.
benoror/obsidianos_work
Gmail AI transcript notifications → meeting Notes: URLs + mark read.
benoror/obsidianos_work
Create or wrap meeting notes. An agent skill from benoror/obsidianos_work.
Works with
Categories
Fetch & embed AI transcripts as Obsidian callouts. An agent skill from benoror/obsidianos_work. Cache Notes is an agent skill from benoror/obsidianos_work. Fetch & embed AI transcripts as Obsidian callouts.
Cache Notes fits situations like: tasks that involve Cloud office suites.
Run `npx skills add benoror/obsidianos_work --skill cache-notes -a claude-code`. Or copy the skill folder (.agents/skills/cache-notes in benoror/obsidianos_work) into .claude/skills/cache-notes in your project. Claude Code loads it when a task matches its description.
Run `npx skills add benoror/obsidianos_work --skill cache-notes -a codex`. Or copy the skill folder (.agents/skills/cache-notes in benoror/obsidianos_work) into .agents/skills/cache-notes in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add benoror/obsidianos_work --skill cache-notes -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/cache-notes, .gemini/skills/cache-notes, .github/skills/cache-notes and .opencode/skills/cache-notes in your project.
SKILL.md names no scripts, command-line tools or credentials: Cache Notes is instructions for the agent only. Compatibility (from SKILL.md): Requires Obsidian CLI (property:read/set, outline, base:query) with Obsidian running, gws CLI for Google Docs/Drive (read-only), and Meetings.base (CachePending view). QMD optional fallback. See [google-workspace-cli](../_shared/google-workspace-cli.md)..
SKILL.md names 2 domains. In commands or code: docs.google.com and otter.ai; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Cache Notes is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Cache Notes: Managing Google Workspace (taylorwilsdon/google_workspace_mcp, 3.3k stars), Gdoc To Markdown (iurykrieger/claude-bedrock, 105 stars), Auth Preflight (ai-analyst-lab/ai-analyst, 304 stars) and Chart To Drive (ai-analyst-lab/ai-analyst, 304 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
benoror (a GitHub user) maintains it in benoror/obsidianos_work, which has 165 GitHub stars. The repository holds 18 skills in this directory. The repository was last updated on June 11, 2026.
Source: benoror/obsidianos_work on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.