Skip to content
Productivity
Command

/obsidian-calendar

One calendar command with four modes - agenda (read a snapshot), reconcile (vault vs calendar gaps), meeting (event to note), schedule (task to event)

From plugin
obsidian-second-brain
3.9k46 skills46 commands3 hooks
Install
> /plugin marketplace add eugeniughelbur/obsidian-second-brain
> /plugin install obsidian-second-brain@obsidian-second-brain

How it fires

How this command gets triggered: by you, by Claude, or both.

  • Fires itselfClaude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/obsidian-calendar

Context preview

What this command does when you run it.

One calendar command with four modes - agenda (read a snapshot), reconcile (vault vs calendar gaps), meeting (event to note), schedule (task to event)

Command definition

obsidian-calendar.md
description: One calendar command with four modes - agenda (read a snapshot), reconcile (vault vs calendar gaps), meeting (event to note), schedule (task to event)
category: vault
exclude: [codex-cli, gemini-cli, opencode, hermes, pi, agent-skills]
triggers_en: ["review my agenda", "check my calendar", "what's on my schedule", "what's on the calendar", "agenda for this week", "calendar check", "reconcile calendar", "what's not on my calendar", "am I missing anything on my calendar", "create a meeting note", "log this meeting", "meeting note for", "prep this meeting", "schedule a meeting", "book a meeting", "put this on my calendar", "schedule this task", "find a time for"]
triggers_es: ["revisa mi agenda", "revisa mi calendario", "qué tengo esta semana", "concilia mi calendario con el vault", "qué me falta en el calendario", "crea una nota de reunión", "registra esta reunión", "prepárame para esta reunión", "agenda una reunión", "reserva una reunión", "pon esto en mi calendario", "agenda esta tarea", "búscame un hueco para", "encuentra un horario para"]
triggers_pt: ["revise minha agenda", "veja meu calendário", "o que está na minha agenda", "o que está no calendário", "agenda desta semana", "checagem de calendário", "reconcilie o calendário", "o que não está no meu calendário", "estou esquecendo algo no meu calendário", "crie uma nota de reunião", "registre esta reunião", "nota de reunião para", "prepare esta reunião", "agende uma reunião", "marque uma reunião", "coloque isto no meu calendário", "agende esta tarefa", "encontre um horário para"]
triggers_zh: ["看看我的日程", "这周有什么安排", "检查我的日历", "把知识库和日历对一下", "日历里是不是漏了什么", "为这次会议建笔记", "记录这次会议", "帮我准备这次会议", "安排一个会议", "把这件事放进日历", "给这个任务找个时间"]

Use the obsidian-second-brain skill. Execute `/obsidian-calendar $ARGUMENTS`:

One command for everything that touches the calendar, selected by the first word (the **mode**):

  • `agenda [range]` - read the calendar and write an AI-first snapshot to the vault (read-only on the calendar).
  • `reconcile [window]` - flag commitments the vault implies that are NOT on the calendar (read-only; flags, never writes events).
  • `meeting [selector]` - turn a calendar event into a meeting note in the vault.
  • `schedule <args>` - create or move a calendar event (the only mode that writes to the calendar).

If no mode word is given, infer it: a bare range word (`today`, `week`, `next-week`, a date) means `agenda`; otherwise ask which mode. Default with no argument at all: `agenda today`.

All modes require a Google Calendar MCP. The claude.ai connector exposes `mcp__claude_ai_Google_Calendar__list_calendars`, `list_events`, `get_event`, `create_event`, `update_event`, `suggest_time`; if your calendar MCP namespaces its tools differently, use that server's equivalents. If no calendar MCP is connected, say so clearly and stop - do not fall back to asking the user to paste their calendar.

Always start by reading `_CLAUDE.md` (folder conventions, working hours) and `CRITICAL_FACTS.md` (timezone) if they exist. If neither declares a timezone, default to the session timezone and note that as a caveat. Resolve every folder per `references/folder-map.md` (wiki-style paths shown below).

---

Mode: agenda - read the calendar into a snapshot note

Range argument: `today` (default), `tomorrow`, `week` (current ISO week Mon-Sun), `next-week`, `YYYY-MM-DD`, or `YYYY-MM-DD..YYYY-MM-DD`.

1. Resolve the range against the user's current date; convert start/end to ISO 8601 (`YYYY-MM-DDTHH:MM:SS+/-HH:MM`) in the user's timezone, end bound exclusive at end-of-day local. 2. `list_calendars` once, pick the primary (`primary: true`). Accept `--calendars <id1>,<id2>` to include more; otherwise primary only. 3. `list_events` with `timeMin`, `timeMax`, `singleEvents: true`, `orderBy: "startTime"`; filter cancelled events client-side. 4. For each event capture verbatim: id, htmlLink, summary, start, end, location, description, hangoutLink/conferenceData URL, attendees (email + displayName + responseStatus), organizer, status, recurringEventId. 5. Cross-link attendees against the entities folder (resolved per `references/folder-map.md`): match by full name then email local-part, fuzzy (handle missing diacritics/short forms). Found -> `[[Person Name]]`; not found -> plain name + `(unknown person)`. 6. Detect quality issues: **conflicts** (overlapping intervals on one calendar), **back-to-back stretches** (3+ with no gap), **focus gaps** (working-hours blocks 09:00-18:00 local unless overridden, with no meeting), **externally-organized events** (organizer domain != user's). 7. Write the snapshot (`type: agenda-snapshot`, schema in `references/ai-first-rules.md`) to the agenda folder (resolved per `references/folder-map.md` - wiki-style `wiki/agenda/`, Obsidian-style `Agenda/`): single day `YYYY-MM-DD - <today|tomorrow|day>.md`, week `YYYY-MM-DD - week.md` (Monday prefix), range `YYYY-MM-DD - range.md` (start prefix). If one exists for the range, overwrite it (the calendar is the source of truth) and add `superseded-at: <previous fetched-at>`. The `## For future Claude` preamble must state the calendar is the source of truth, not this note, and `fetched-at` is the recency anchor. Body: `## Range`, `## Summary`, `## Events` (one `### YYYY-MM-DD - <Weekday>` subsection per day; each event a bullet with start-end, title, `[[attendees]]`, location, conference link verbatim, and `event-id: <id>` so other modes can locate it), then `## Conflicts` / `## Focus blocks` / `## External organizers` only if present. 8. Append to the operation log (`Logs/YYYY-MM-DD.md` if the vault uses a `Logs/` folder - create today's file if needed - else `log.md`): `## [<iso>] agenda | <range-label> - <event-count> events, <conflict-count> conflicts`. Inject (do not overwrite) a `## Calendar` link into today's daily note. 9. Report: snapshot path, events per day, conflicts/back-to-back/focus blocks, external organizers, and any `(unknown person)` attendees. Do not

Read more
Ships withobsidian-second-brain

Persistent memory for Claude Code and 6 other CLI agents, stored as plain markdown in your Obsidian vault. Stop re-explaining your projects, decisions and people every session. 45 commands: hybrid semantic search, self-rewriting notes, key-less web research, and scheduled agents that maintain the vault while you sleep.

Get the whole plugin