Manages project-specific architecture and conventions for the Extended Embeds Obsidian plugin.

Install

mkdir -p .claude/skills/project-davidvkimball && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/14872" && unzip -o skill.zip -d .claude/skills/project-davidvkimball && rm skill.zip

Installs to .claude/skills/project-davidvkimball

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Project-specific architecture, maintenance tasks, and unique conventions for Extended Embeds.
93 charsno explicit “when” trigger
Intermediate

Key capabilities

  • Scan for image elements with specific alt text
  • Replace image elements with rich media embeds
  • Manage embed providers based on URL priority
  • Cache embed data to reduce API calls
  • Apply project-specific CSS styling to embeds

How it works

A MarkdownPostProcessor scans for `<img>` elements where `alt === "embed"` and replaces them with rich embeds. An EmbedManager checks URLs against providers in priority order.

Inputs & outputs

You give it
Obsidian `![embed](url)` syntax in reading mode
You get back
Rich media embeds (GitHub cards, Spotify players, CodePen iframes)

When to use project

  • Add a new embed provider
  • Maintain plugin architecture
  • Debug embed rendering
  • Configure embed settings

About this skill

Extended Embeds Project Skill

Obsidian plugin that intercepts ![embed](url) syntax in reading mode and renders rich media embeds (GitHub cards, Spotify players, CodePen iframes, etc.).

Core Architecture

  • MarkdownPostProcessor: Scans for <img> elements where alt === "embed" and replaces with rich embeds.
  • Provider Pattern: Each embed type is a self-contained provider implementing EmbedProvider (test + render).
  • URL Routing: EmbedManager checks URLs against providers in priority order (specific first, Open Graph fallback last).
  • Caching: In-memory cache with configurable TTL to avoid redundant API calls.

Project-Specific Conventions

  • Use requestUrl from Obsidian (not fetch) for all network requests.
  • Sync render methods must not use the async keyword (lint rule: require-await).
  • Settings use createSettingsGroup() from src/utils/settings-compat.ts for SettingGroup API compatibility.
  • CSS classes are prefixed with extended-embed-.
  • Theme detection: document.body.classList.contains("theme-dark") when set to auto.
  • No :::directive syntax. All embeds use ![embed](url) exclusively.

Key Files

  • src/main.ts: Plugin lifecycle, registers MarkdownPostProcessor.
  • src/settings.ts: ExtendedEmbedsSettings interface, setting tab with provider toggles.
  • src/embed-manager.ts: Provider registry, URL routing, theme detection.
  • src/cache.ts: In-memory cache with TTL (createCacheManager).
  • src/utils/settings-compat.ts: createSettingsGroup() backward compatibility utility.
  • src/providers/base.ts: EmbedProvider interface (id, name, test, render).
  • src/providers/*.ts: Individual provider implementations.
  • styles.css: All embed card and iframe styling using CSS custom properties.

Maintenance Tasks

  • Adding a New Provider: Create src/providers/<name>.ts, add toggle to settings interface and defaults, import/register in embed-manager.ts (before opengraph), add toggle to settings tab, add CSS.
  • API Changes: Monitor GitHub API and Obsidian API for breaking changes.
  • Provider Testing: Verify each provider renders correctly in both dark and light modes.

When not to use it

  • When not working with Obsidian plugins
  • When not processing `![embed](url)` syntax
  • When not needing to render rich media embeds

Limitations

  • Requires `![embed](url)` syntax for embeds
  • Relies on specific Obsidian API for network requests
  • CSS classes must be prefixed with `extended-embed-`

How it compares

This workflow automatically transforms specific markdown syntax into rich media directly within Obsidian, unlike manually embedding content.

Compared to similar skills

project side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
project (this skill)05moNo flagsIntermediate
playwright-browser-automation298moReviewIntermediate
codex-skill125moReviewAdvanced
bullmq-specialist256moNo flagsIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

You might also like

playwright-browser-automation

lackeyjb

Complete browser automation with Playwright. Auto-detects dev servers, writes clean test scripts to /tmp. Test pages, fill forms, take screenshots, check responsive design, validate UX, test login flows, check links, automate any browser task. Use when user wants to test websites, automate browser interactions, validate web functionality, or perform any browser-based testing.

29146

codex-skill

feiskyer

Use when user asks to leverage codex, gpt-5, or gpt-5.1 to implement something (usually implement a plan or feature designed by Claude). Provides non-interactive automation mode for hands-off task execution without approval prompts.

12110

bullmq-specialist

davila7

BullMQ expert for Redis-backed job queues, background processing, and reliable async execution in Node.js/TypeScript applications. Use when: bullmq, bull queue, redis queue, background job, job queue.

2595

browser-tools

Whamp

Lightweight Chrome automation toolkit with shared configuration, JSON-first output, and six focused scripts for starting, navigating, inspecting, capturing, evaluating, and cleaning up browser sessions.

694

fix-dependabot-alerts

microsoft

Fix Dependabot security alerts by updating vulnerable npm dependencies. Use when the user mentions "dependabot", "security alerts", "vulnerability", "CVE", or wants to update packages with security issues.

1872

run-nx-generator

nrwl

Run Nx generators with prioritization for workspace-plugin generators. Use this when generating code, scaffolding new features, or automating repetitive tasks in the monorepo.

571

Search skills

Search the agent skills registry