This is an Obsidian vault with AI agent skills. See USER.md for the vault owner's identity. Agents working in this repo should be aware of the following structure and conventions.
Custom skills live in .agents/skills/. Each has a SKILL.md with usage, workflow, and conventions.
| Skill | What it does | Arguments |
|---|---|---|
| meeting | Create a meeting note | |
├ /meeting |
Pick from today's Google Calendar events | |
├ /meeting {title} |
Manual creation with today's date | folder={subfolder} |
├ /meeting wrap <path> |
Wrap up: cache → participants → todos → commit | |
└ /meeting wrap pending [dates] |
Find & wrap all pending meetings | today, yesterday, last week, 2026-01-01..2026-02-03 |
| cache-notes | Fetch & embed AI transcripts as Obsidian callouts | |
├ /cache-notes <path> |
Cache a specific meeting file (prompts for URLs if empty) | |
├ /cache-notes all |
Batch-cache all uncached meetings | |
└ /cache-notes refresh <path> |
Re-fetch and overwrite existing cache | |
| fill-participants | Resolve and fill Participants: frontmatter |
|
├ /fill-participants <path> |
Fill for a specific meeting note | |
└ /fill-participants all |
Scan and fill all meetings missing participants | |
| followup-todos | Extract action items as plain markdown bullets | |
├ /followup-todos <path> |
Extract from a specific meeting note | |
└ /followup-todos |
/note-status pending --step=todos |
|
| recap | Produce a recap from emails, Slack, Jira, and vault notes | |
├ /recap |
Recap current week (Monday through today) | |
└ /recap [dates] |
Recap a specific date range | today, yesterday, last week, 2026-01-01..2026-02-03 |
| sync-upstream-obsidianos | Pull structural updates from upstream ObsidianOS | |
├ /sync-upstream-obsidianos |
Preview and merge upstream updates | |
└ /sync-upstream-obsidianos preview |
Show what's new without merging | |
| note-status | Verify meeting notes are fully processed | |
├ /note-status <path> |
Check a specific note | |
├ /note-status [dates] |
Check notes in a date range | today, yesterday, last week, 2026-01-01..2026-02-03 |
├ /note-status all |
Check every meeting note | |
└ /note-status pending [dates] |
Filter to pending, prompt selection | --step=notes|cache|participants|todos |
| commit | Stage and commit with flexible intent parsing | |
├ /commit |
Staged files, or infer related changes | |
├ /commit <file or folder> |
Scope commit to a specific path | |
├ /commit <description> |
Infer scope from free-text intent | |
├ /commit amend [scope/description] |
Amend last commit (with optional scope or new message) | |
| └ (sequence mode) | Deferred — sub-skills skip, caller commits once at the end | |
| defuddle | Extract clean markdown from web pages with Defuddle CLI (prefer over raw fetch for articles & docs) | |
| json-canvas | Create and edit Obsidian JSON Canvas (.canvas) files |
|
| obsidian-bases | Create and edit Obsidian Bases (.base) — views, filters, formulas |
|
| obsidian-cli | Drive a running Obsidian app via the obsidian CLI (read/write/search, dev helpers) |
|
| obsidian-markdown | Obsidian Flavored Markdown — wikilinks, embeds, callouts, properties |
The canonical skill tree is .agents/skills/. These paths are symlinks to the same directory so each agent discovers the same skills:
| Path | Used by |
|---|---|
.cursor/skills |
Cursor |
.claude/skills |
Claude Code |
.opencode/skills |
OpenCode |
skills/ |
OpenClaw (workspace skills) |
OpenCode also discovers .agents/skills/ directly; the .opencode/skills link matches the Cursor / Claude layout.
Shared rules live in .agents/rules/ and are the single source of truth. Agent-specific wrappers point to them.
| Rule | Purpose |
|---|---|
| qmd-search | Prefer QMD over grep for vault search (always apply) |
| skill-conventions | Skill structure, shared conventions, project context |
| skill-registry | Keep skill tables in sync when skills change |
| Agent | Instruction files | How rules are loaded |
|---|---|---|
| Cursor | .cursor/rules/*.mdc |
Auto-injected by glob; each .mdc points to .agents/rules/ |
| Claude Code | CLAUDE.md, .agents/skills/CLAUDE.md |
Read on startup; point to .agents/rules/ |
| OpenCode / Crush | OpenCode.md |
Read on startup; points to .agents/rules/ |
| OpenClaw | AGENTS.md (and your gateway config) |
Rules live in .agents/rules/; skills via repo skills/ → .agents/skills/ |
Meetings/ Meeting notes by subfolder (PAM/, TBs/, Eng/, etc.)
Templates/ Obsidian templates
Teams/People/ Person files: @Name.md
Teams/ Team files: +TeamName.md
ToDo's.md Aggregated Tasks plugin view
Tracker.md Project tracker
- User: See USER.md for identity, timezone, aliases, and agent behavior rules.
- Frontmatter: YAML between
---fences.modified:is managed by Obsidian — never set manually. - Participants:
[[@Name]]wikilinks (people) or[[+Team]](teams). - AI Transcripts: Cached under
## 🤖 AI Noteswith provider subheadings and collapsible callouts ([!gemini_notes]-,[!gemini_todos]-,[!gemini_transcript]-). - Tasks priorities: 🔺 highest, ⏫ high, 🔼 medium, 🔽 low.
- QMD — Configured in .cursor/mcp.json for vault search (MCP server
npx qmd mcp). - Google Workspace — Use the
gwsCLI (Google Workspace CLI) for Docs, Drive, Calendar, and Gmail in read-only workflows. See README.md § Google Workspace CLI and .agents/skills/_shared/google-workspace-cli.md.
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.
./.scripts/sync-upstream.sh # fetch + merge
./.scripts/sync-upstream.sh --preview # see what's new without mergingFirst-time setup:
git remote add upstream <url-to-this-repo>
./.scripts/sync-upstream.sh # auto-configures merge driver on first runProtected paths (always keep local version during merge): USER.md, Tracker.md, .env, .cursor/mcp.json, Meetings/, Teams/, Templates/, Recaps/. Edit .gitattributes to add or remove paths.