plugins/obsidian-development/skills/obsidian-check/SKILL.md
Reviews code against all ObsidianReviewBot rules and reports violations with fixes. Use PROACTIVELY before any git push on an Obsidian plugin project. TRIGGER WHEN: preparing an Obsidian plugin for submission or before pushing code DO NOT TRIGGER WHEN: the task is outside the specific scope of this component.
npx skillsauth add acaprino/alfio-claude-plugins obsidian-checkInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Review code against all ObsidianReviewBot rules before pushing. Reports violations grouped by severity with exact file locations and fixes.
/obsidian-check -- scans the current Obsidian plugin project for all bot violations.
Check that manifest.json, package.json, and src/ exist. If not, abort with message.
Check if eslint-plugin-obsidianmd is in package.json devDependencies. If NOT installed:
npm install --save-dev eslint eslint-plugin-obsidianmd @typescript-eslint/parser typescript-eslint @eslint/js
eslint.config.mjs, .eslintrc.*), create eslint.config.mjs:import tsparser from "@typescript-eslint/parser";
import { defineConfig } from "eslint/config";
import obsidianmd from "eslint-plugin-obsidianmd";
export default defineConfig([
...obsidianmd.configs.recommended,
{
files: ["**/*.ts"],
languageOptions: {
parser: tsparser,
parserOptions: { project: "./tsconfig.json" },
},
},
]);
eslint-plugin-obsidianmd was installed and configured.npx tsc --noEmit
Report any type errors.
npx eslint src/ 2>&1
This covers sentence case (ui/sentence-case), inline styles, command rules, manifest validation, TFile/TFolder casts, forbidden elements, and more. Report all ESLint errors and warnings.
These checks catch issues NOT covered by eslint-plugin-obsidianmd. Run by reading the source code:
| # | Check | How to detect |
|---|-------|---------------|
| 1 | No unnecessary type assertions | Search for as Type where ?? fallback makes it redundant |
| 2 | Promises handled | Search for async function calls without await, void, .catch(), or .then() with rejection |
| 3 | No async without await | Search for async methods with no await inside |
| 4 | No promise where void expected | Search for async callbacks in event handlers that expect void |
| 5 | No object stringification | Search for template literals with ?? where left side could be an object |
| 6 | Setting.setHeading() | Search for createEl('h1'), createEl('h2'), createEl('h3') in settings/modals |
| # | Check | How to detect |
|---|-------|---------------|
| 1 | Unused imports | TypeScript check catches these |
| 2 | Unused variables | TypeScript check catches these |
| 3 | console.log in lifecycle | Search for console.log in onload()/onunload() |
id: alphanumeric + dashes, no "obsidian", no "plugin" suffixname: no "Obsidian", no "Plugin" suffixdescription: no "Obsidian", no "This plugin", must end with . ? ! ), under 250 charsid, name, version, minAppVersion, description, authorversion matches latest git tag (if any)Output a structured report:
## Obsidian Lint Report
### TypeScript: [PASS/FAIL]
[errors if any]
### ESLint: [PASS/FAIL]
[errors if any]
### Required Violations: [count]
[grouped by rule, with file:line and suggested fix]
### Optional Warnings: [count]
[grouped by rule]
### Manifest: [PASS/FAIL]
[issues if any]
### License: [PASS/FAIL]
[issues if any]
---
**Result: [READY TO PUSH / FIX REQUIRED ISSUES FIRST]**
[count] required issues, [count] warnings
If violations are found, ask:
For auto-fix, apply changes following the obsidian-plugin-development skill rules (move styles to CSS classes, fix sentence case, remove unnecessary assertions, void unhandled promises, etc.).
development
Unified web frontend knowledge base covering CSS architecture, UX psychology, UI components, distinctive aesthetics, and interface design generation. TRIGGER WHEN: working on web styling, design systems, component decisions, responsive strategy, distinctive frontend aesthetics, or exploring multiple interface designs. DO NOT TRIGGER WHEN: the task is purely backend or unrelated to web frontend.
development
Coordinate parallel code reviews across multiple quality dimensions with finding deduplication, severity calibration, and consolidated reporting. Use this skill when organizing multi-reviewer code reviews, calibrating finding severity, or consolidating review results.
tools
Knowledge base for the codebase-mapper plugin. Provides writing guidelines, tone rules, and diagram conventions for generating human-readable project guides. Referenced by all codebase-mapper agents during document generation. TRIGGER WHEN: referenced by codebase-mapper pipeline agents (codebase-explorer, overview-writer, tech-writer, flow-writer, onboarding-writer, ops-writer, config-writer, guide-reviewer) during document generation. DO NOT TRIGGER WHEN: outside the /map-codebase pipeline (general documentation work should use docs:readme-craft or codebase-mapper:docs-create).
tools
Progressive Web App knowledge base for 2025-2026: Web App Manifest, Service Workers (Workbox 7, Serwist), Web Push (VAPID, RFC 8030/8291/8292, Declarative Push for Safari 18.4+), install flows (beforeinstallprompt, Window Controls Overlay), OPFS storage, Project Fugu, Core Web Vitals (INP < 200ms), security (HTTPS, CSP, COOP/COEP), and distribution (Bubblewrap, PWA Builder MSIX, Capacitor). TRIGGER WHEN: building, auditing, or debugging PWAs, including manifest, service worker, Web Push, install flow, OPFS, Background Sync, Wake Lock, vite-plugin-pwa, Next.js Serwist, @angular/pwa, @vite-pwa/nuxt, Bubblewrap, TWA, PWA Builder, or Capacitor wrapping. DO NOT TRIGGER WHEN: the task is generic frontend styling (use frontend), React performance (use react-development:review-react), cross-platform security unrelated to PWA (use platform-engineering), Tauri or Electron wrappers (use tauri-development), or GA4 / analytics (use digital-marketing).