
Turn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.
This repository turns an Obsidian vault into a reusable work system for AI agents. It packages slash commands, shared rules, and vault conventions for meeting capture, people tracking, recaps, and cleanup.
Builders who want Cursor, Claude Code, or another compatible agent to work inside an Obsidian vault with shared commands and rules.
You can process meetings, maintain people notes, and keep the vault tidy without re-explaining the same steps.
Runs `/meeting wrap` steps for transcripts, inbox triage, note status, participant linking, follow-up todos, and commit.
Includes `/vault-health`, `/people-stubs`, and `/migrate-tags` for links, orphan notes, and tag cleanup.
Adds `/onboard-person` and `/last-1on1` for person files and 1:1 tracking.
Supports `/recap` and `/mail-transcripts` for weekly summaries and Gmail transcript import.
Provides `.agents/skills/`, `.agents/rules/`, and agent-specific symlinks for Cursor, Claude Code, OpenCode, and OpenClaw.
Ships `Meetings/`, `Teams/`, `Templates/`, `Meetings.base`, `People.base`, and `memory/` as the working layout.
git clone https://github.com/benoror/obsidianos_work.git cd obsidianos_work npm install
brew install googleworkspace-cli
npm install -g @googleworkspace/cli
gws auth login
npx qmd collection add . --name my_vault npx qmd embed
An Obsidian vault wired with AI agent skills — an Agentic Operating System for Thinkers.
Slash commands that run inside your vault, powered by any AI agent:
/meeting wrap pending → Gmail → triage → cache → participants → todos
/mail-transcripts → Drain Gemini transcript emails into Notes:
/organize-meetings → Triage Meetings/_inbox/ into the right folder
/cache-notes → Embed AI meeting transcripts
/fill-participants → Resolve names to [[@Person]] wikilinks
/followup-todos → Extract action items as plain markdown bullets
/note-status → Verify notes are fully processed
/recap → Weekly summary from email, Slack, Jira & vault
/vault-health → Audit unresolved links and orphans
/commit → Stage & commit with inferred intent
/sync-upstream-obsidianos → Pull updates from upstream ObsidianOS
Agent-agnostic — works with Cursor, Claude Code, OpenCode, or any MCP-compatible client. Clone it, fill in USER.md, and go.
| Agent | Support level | Notes |
|---|---|---|
| Cursor IDE | Full | Loads .cursor/rules/ and .cursor/mcp.json automatically |
Cursor CLI (cursor) | Full | Same engine in background/headless mode |
| Claude Code | Full | Reads AGENTS.md + CLAUDE.md natively; see CLAUDE.md for QMD MCP setup |
| OpenCode / Crush | Full | Reads OpenCode.md; see OpenCode.md for QMD MCP setup |
| OpenClaw | Full | Workspace skills in skills/ (symlink to .agents/skills/); config in ~/.openclaw/openclaw.json |
| Other MCP-compatible clients | Partial | Can use the QMD MCP server; agent instructions won't auto-load |
| Skill | What it does |
|---|---|
/meeting | Create or wrap up meeting notes (from Google Calendar or manual) |
/cache-notes | Fetch & embed AI meeting transcripts as Obsidian callouts |
/fill-participants | Resolve names in notes to [[@Person]] wikilinks |
/followup-todos | Extract action items as plain markdown bullets (no Tasks checkboxes) |
/recap | Weekly recap from emails, Slack, Jira, and vault notes |
/note-status | Verify meeting notes are fully processed (Notes, Cache, Participants, Todos) |
/commit | Stage and commit — accepts file/folder scope, free-text intent, or amend |
/sync-upstream-obsidianos | Pull structural updates from upstream ObsidianOS |
defuddle | Clean markdown from URLs via Defuddle CLI |
json-canvas | JSON Canvas (.canvas) authoring |
obsidian-bases | Obsidian Bases (.base) views, filters, formulas |
obsidian-cli | Vault operations via the obsidian CLI (Obsidian must be running) |
obsidian-markdown | Obsidian Flavored Markdown conventions |
/mail-transcripts | Drain Gmail AI-transcript notifications into meeting Notes: |
/organize-meetings | Triage Meetings/_inbox/ into the right subfolder (qmd + memory) |
otter-fetch | Otter.ai transcript sub-skill (used by cache-notes / fill-participants) |
/people-stubs | Batch-create @Name.md stubs from unresolved [[@*]] links |
/onboard-person | Create/enrich a @Name.md from external sources (ATS / profile) |
/last-1on1 | Flag overdue 1:1s by recency |
/vault-health | Audit unresolved links, orphans, dead-ends, and sync conflicts |
/migrate-tags | Migrate body #hashtags to frontmatter tags: lists |
/workspace-mode | Switch between named Obsidian Workspace layouts |
/sprint-retro | Synthesize a Sprint Retro draft from vault sources |
Each skill supports multiple sub-commands and arguments — see AGENTS.md for the full reference. Skill proxies: .cursor/skills, .claude/skills, .opencode/skills, and repo-root skills/ are symlinks to .agents/skills/ so Cursor, Claude Code, OpenCode, and OpenClaw share one canonical tree.
| Tier | Skills | When you need them |
|---|---|---|
| Core — meeting wrap | /meeting, /mail-transcripts, /organize-meetings, /cache-notes, /fill-participants, /followup-todos, /note-status, /commit | Processing Gemini (or Otter) meeting transcripts end-to-end |
| Vault maintenance | /people-stubs, /vault-health, /migrate-tags | Growing vault hygiene |
| People & teams | /onboard-person, /last-1on1 | HR-style people files and 1:1 tracking |
| Integrations | /recap, otter-fetch | Weekly recaps; Otter.ai (manual JSON workflow) |
| Workflow modules | /sprint-retro, /workspace-mode | Scrum teams; saved Obsidian Workspace layouts |
| Authoring / tools | defuddle, json-canvas, obsidian-bases, obsidian-cli, obsidian-markdown | Building notes, canvases, and bases |
| Upstream sync | /sync-upstream-obsidianos | Pulling template updates into a fork |
The main workflow chains skills in sequence. /meeting wrap pending runs the full batch; /meeting wrap <path> runs a single note.
/mail-transcripts → link Gemini Docs from Gmail into Notes:
/organize-meetings → move _inbox/ stubs to the right Meetings/ subfolder
/note-status pending → discover notes missing a wrap step (Meetings.base Pending view)
/cache-notes → fetch Docs/Otter → embed ## 🤖 AI Notes callouts
/fill-participants → resolve Participants: frontmatter
/followup-todos → propose plain-bullet follow-ups (user confirms)
/commit → one commit for the batch
| Capability | Required for | Setup |
|---|---|---|
| Obsidian running | Bases queries, obsidian property:*, batch pending discovery | Open the vault; enable Bases (core) |
| Obsidian CLI | note-status, cache-notes, organize-meetings, last-1on1 | Install from Obsidian download; verify obsidian is on PATH |
Meetings.base / People.base | Pending, CachePending, Inbox, OneOnOnes views | Shipped in repo — open in Obsidian to index |
Google Workspace CLI (gws) | Calendar, Docs, Gmail transcript drain | § 3 below — Gmail modify scope for /mail-transcripts |
| Python 3 | .scripts/gmail_ai_transcripts_to_meetings.py | System python3 (no extra packages) |
| QMD | /recap, /organize-meetings similarity, date scans | § 4 below — optional if you only use Bases + single-file wrap |
[!NOTE] Google Workspace skills use
gwsin the terminal, not MCP. Calendar/Docs workflows are read-only;/mail-transcriptsalso writes meeting notes and marks Gmail messages read (modify scope).
/mail-transcripts batch scriptgws) — optional for Calendar/Docs-only workflows; required for /mail-transcripts/recap and /organize-meetings similarity searchgit clone https://github.com/benoror/obsidianos_work.git
cd obsidianos_work
npm install
Edit USER.md with your name, email, timezone, and aliases. This is the single source of truth that all skills reference — no other file needs your personal info.
Required for /meeting (list today’s Calendar events), /cache-notes / /fill-participants (read Gemini Google Docs), /recap (Gmail + Calendar), and /mail-transcripts (Gmail → vault sync).
gws — pick one:
brew install googleworkspace-clinpm install -g @googleworkspace/cligws auth login
Use readonly scopes for Calendar/Docs/Drive if you only read transcripts manually. For /mail-transcripts, include Gmail modify so the script can mark processed messages read (users.messages.modify).
/mail-transcripts)Optional but recommended if Gemini emails you Google Doc links after meetings:
🤖-ai-transcripts (includes the robot emoji).label:🤖-ai-transcripts in:inbox)..scripts/gmail_ai_transcripts_to_meetings.py — edit resolve_path() to match your Meetings/ folder layout (defaults target Meetings/Engineering/…)./mail-transcripts or let /meeting wrap call it as step 1.Full setup details: .agents/skills/mail-transcripts/SETUP.md.
[!NOTE] Google Workspace is not exposed via MCP in this vault — agents run
gwsin the terminal. Cursor loads QMD from.cursor/mcp.jsononly.
Required for /recap and vault-wide search. QMD indexes your markdown files for keyword and semantic search.
npx qmd collection add . --name my_vault
npx qmd embed
The npx qmd mcp server (configured in .cursor/mcp.json) will serve searches from this index. Re-run npx qmd embed after adding significant new content.
The vault ships with these directories already in place:
Meetings/ Meeting notes (subfolders per team/project)
Meetings/_inbox/ Untriaged stubs from /mail-transcripts
Meetings/Engineering/Scrum/ Daily standups, sprint ceremonies (example layout)
Meetings/One-on-ones/ 1:1 notes
Meetings/Interviews/ Interview notes
Teams/People/ Person files: @Name.md (example: @Me, @Jane Doe)
Teams/ Team files: +TeamName.md
Templates/ Obsidian templates
Meetings.base / People.base Bases views (Pending, Inbox, OneOnOnes, …)
memory/ Optional agent memory (see feedback_meeting-routing.md.example)
Example people files @Me.md, @Jane Doe.md, and @Alex Kim.md ship with the template. Replace or extend them as you onboard real colleagues. Add subfolders under Meetings/ to match your org (the defaults use Meetings/Engineering/).
Open the vault folder in both Obsidian (for viewing/editing notes) and Cursor (for running agent skills). Cursor will auto-load MCP servers from .cursor/mcp.json (this repo ships QMD only) and the rules from .cursor/rules/. Install and log in to gws separately for Google Workspace features.
In Obsidian, hide non-vault folders from the file explorer: go to Settings → Files & Links → Excluded files and add node_modules.
The vault works with vanilla Obsidian, but these community plugins power specific features. Install whichever you need from Settings → Community plugins → Browse.
| Plugin | ID | Used by |
|---|---|---|
| Tasks | obsidian-tasks-plugin | ToDo's.md queries, task checkboxes & priorities elsewhere in the vault |
| Update modified date | frontmatter-modified-date | Auto-updates modified: in YAML frontmatter when you edit a note |
| Plugin | ID | What it adds |
|---|---|---|
| Natural Language Dates | nldates-obsidian | Type @today or @next Monday to insert date links — handy for task due dates |
| Calendar | calendar | Sidebar calendar widget for navigating daily/meeting notes by date |
| Dataview | dataview | Query engine for vault data — tables, lists, and tasks from frontmatter and inline fields |
| Open Tab Settings | open-tab-settings | Tab deduplication and placement control — prevents the same note from opening twice |
These are not required by any skill but improve the day-to-day experience:
| Plugin | ID | What it adds |
|---|---|---|
| Obsidian Git | obsidian-git | Auto-backup vault to git on a schedule (alternative to /commit) |
| Auto Card Link | auto-card-link | Paste a URL and get a rich preview card |
| File Explorer Note Count | file-explorer-note-count | Shows note count badges on folders |
| Icon Folder | obsidian-icon-folder | Custom icons on folders and files in the explorer |
| Custom File Explorer Sorting | custom-sort | Manual sorting rules for files and folders in the explorer |
| Cycle Through Panes | cycle-through-panes | Ctrl/Cmd+Tab to cycle through open tabs like a browser |
Required for the meeting wrap pipeline — not optional if you use /meeting wrap, /note-status pending, or /cache-notes all:
| Feature | ID / setup | Agent skill |
|---|---|---|
| Obsidian CLI | Install/update from the Obsidian download page; enable CLI support per help | obsidian-cli |
| Bases | Core — open Meetings.base once to index | obsidian-bases |
| Canvas | Core | json-canvas |
| Obsidian Flavored Markdown | Core | obsidian-markdown |
The defuddle skill uses the Defuddle CLI (npm install -g defuddle), not an Obsidian plugin.
If you forked or cloned this repo into a private vault, you can pull structural updates (skills, rules, shared conventions) without overwriting your personal data.
# First time — add the upstream remote
git remote add upstream <url-to-this-repo>
# Pull updates (auto-configures merge driver on first run)
./.scripts/sync-upstream.sh
# Preview what's new without merging
./.scripts/sync-upstream.sh --preview
You can also run /sync-upstream-obsidianos from any supported agent — it wraps the same script with an interactive preview and merge flow.
Personal paths are protected during merges via .gitattributes — your USER.md, Tracker.md, .env, .cursor/mcp.json, Meetings/, Teams/, Templates/, and Recaps/ are always kept as-is. Edit .gitattributes to add or remove protected paths.
.agents/skills/ Skill definitions (SKILL.md + supporting scripts)
.agents/rules/ Shared rules (single source of truth for all agents)
.claude/skills/ Symlink → .agents/skills (Claude Code discovery)
.cursor/rules/ Cursor rules (auto-injected by glob; point to .agents/rules/)
.cursor/mcp.json MCP configuration (QMD vault search)
.cursor/skills/ Symlink → .agents/skills (Cursor)
.opencode/skills/ Symlink → .agents/skills (OpenCode)
skills/ Symlink → .agents/skills (OpenClaw workspace skills)
AGENTS.md Agent reference: skills, conventions, vault layout
CONTRIBUTING.md How to add skills, run tests, and avoid personal data
CLAUDE.md Claude Code instructions + MCP setup
OpenCode.md OpenCode / Crush instructions + MCP setup
USER.md Vault owner identity (fill in after cloning)
Templates/ Obsidian note templates
MIT
Sign in to join the discussion.
No comments yet. Be the first to say what this is good for.

Turn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.
Topic in, narrated explainer video out. A Claude Code / Codex skill that turns any topic into a black-canvas motion-graphics explainer video with TTS voiceover, subtitles and a chapter progress bar. Chinese or English; every frame drawn in code with Remotion.
Public repository for Agent Skills
Open-source AI job search: scan job portals, evaluate listings into a structured A-H report with a global 1-5 score, tailor your CV, track applications — runs locally in your AI coding CLI (Claude Code, Codex, OpenCode, Antigravity…)
Agent skill for beautiful, verifiable architecture, workflow, sequence, data-flow, and lifecycle diagrams—self-contained HTML with motion and crisp export.
A skill to stop your coding agent from burying the answer. ADHD-friendly output.