An Obsidian plugin that serves as a personal command center for content creators. Built for managing a YouTube channel's day-to-day operations entirely within Obsidian: editorial pipeline, partnership tracking, daily tasks, analytics, and Gmail inbox — with data automation via Claude Code slash commands running in an integrated terminal.
5 dashboard tabs rendered from vault data:
- OVERVIEW — metrics strip (context window %, YouTube subs/views), latest upload with thumbnail + stats, Gmail inbox brief, daily tasks with click-to-toggle
- HOJE (Today) — video of the day (D-1 publishing logic), daily tasks, pending partnership actions, next 7 days
- CANAL (Channel) — last published video, editorial pipeline (draft/published counts), pending cuts, top videos by retention
- COMERCIAL (Commercial) — partnership kanban summary, pending processes split by "waiting on me" vs "waiting on them", open drafts, next event
- PAUTAS (Content Ideas) — incubating ideas, active specs, plans in execution, short-term radar preview
A skill bar at the bottom provides one-click access to slash commands: plan today, inbox brief, draft partnership responses, refresh data, and more.
The plugin itself is read-only — it only parses markdown/JSON files and renders cards. Data is fetched by external slash commands (~/.claude/commands/*.md) that:
- Query external sources (Gmail via MCP, YouTube API, Google Calendar)
- Write structured JSON to the vault (
Analytics/_inbox.json,_socials.json, etc.) - The plugin's file watcher detects changes and re-renders cards automatically
This means the plugin works without any API keys or network access — it just reads files.
When the Command Center opens, it can automatically:
- Open an integrated terminal (polyipseity Terminal plugin)
- Start a CLI session
- Capture the session ID for context tracking
- Check data freshness (8h gate) and queue
/refresh-cardsif stale
- Obsidian (desktop only)
- Terminal plugin (for integrated terminal)
- Claude Code CLI installed
- Slash commands in
~/.claude/commands/that write the expected JSON schemas (you'll need to create these for your own workflow)
cd .obsidian/plugins/kav-command-center
npm install
npm run buildIn Obsidian: Cmd+R to reload, enable "Kav Command Center" in Community Plugins, then Cmd+P > "Kav: Open Command Center".
npm run dev # esbuild watch mode
npm test # vitest unit tests
npm run test:watch # vitest watch mode
npm run build # production buildUse the Hot Reload plugin for live development. Cmd+R forces a full reload.
The plugin expects a specific folder layout (configurable in settings):
Vault/
├── Daily Notes/ # One note per day with ## Tarefas do Dia section
├── Roteiros/ # Video scripts in dated folders: "YYYY-MM-DD Title 🟢"
├── Parcerias/ # Partnership tracking
│ ├── processos-pendentes.md
│ ├── kanban-parcerias.md
│ └── drafts/
├── Analytics/ # YouTube Analytics CSVs + JSON data files
│ ├── _inbox.json # Written by /update-inbox
│ ├── _socials.json # Written by /update-socials
│ └── _context.json # Written by /update-metrics
├── Producao/ # Editorial planning
│ ├── pautas/
│ ├── specs/
│ └── plans/
└── Eventos/ # Event coverage folders
- Timestamps via Bash, never generated — prevents incorrect timestamps from breaking freshness gates
- Render mutex — serialized async rendering prevents race-condition card duplication
- File watcher with debounce — 80ms debounce coalesces rapid events
- Freshness gate (8h) — skips data refresh if JSONs are recent enough
MIT