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.zipInstalls 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.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
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  syntax in reading mode and renders rich media embeds (GitHub cards, Spotify players, CodePen iframes, etc.).
Core Architecture
- MarkdownPostProcessor: Scans for
<img>elements wherealt === "embed"and replaces with rich embeds. - Provider Pattern: Each embed type is a self-contained provider implementing
EmbedProvider(test + render). - URL Routing:
EmbedManagerchecks 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
requestUrlfrom Obsidian (notfetch) for all network requests. - Sync render methods must not use the
asynckeyword (lint rule:require-await). - Settings use
createSettingsGroup()fromsrc/utils/settings-compat.tsfor SettingGroup API compatibility. - CSS classes are prefixed with
extended-embed-. - Theme detection:
document.body.classList.contains("theme-dark")when set to auto. - No
:::directivesyntax. All embeds useexclusively.
Key Files
src/main.ts: Plugin lifecycle, registers MarkdownPostProcessor.src/settings.ts:ExtendedEmbedsSettingsinterface, 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:EmbedProviderinterface (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 inembed-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 `` syntax
- →When not needing to render rich media embeds
Limitations
- →Requires `` 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.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| project (this skill) | 0 | 5mo | No flags | Intermediate |
| playwright-browser-automation | 29 | 8mo | Review | Intermediate |
| codex-skill | 12 | 5mo | Review | Advanced |
| bullmq-specialist | 25 | 6mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by davidvkimball
View all by davidvkimball →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.
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.
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.
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.
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.
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.