obsidian-plugin
SKILL.md
this.addCommand({ id: 'my-command', name: 'My Command', callback: () => { ... } });
// BAD: Manual cleanup required (avoid) this.app.vault.on('create', this.handler);
</pattern>
</patterns>
<constraints>
<must>
<rule>Apply this skill when creating new Obsidian plugins</rule>
<rule>Apply when adding commands, settings, or views</rule>
<rule>Apply when handling file/folder operations</rule>
<rule>Apply when building plugin UI components</rule>
<rule>Apply when reviewing Obsidian plugin code</rule>
</must>
<avoid>
<rule>Using `innerHTML`, `outerHTML`, or `insertAdjacentHTML`</rule>
<rule>Manual event listener cleanup instead of `registerEvent()`</rule>
<rule>Hardcoded colors instead of CSS variables</rule>
<rule>Using global `app` object in production code</rule>
</avoid>
</constraints>
<best_practices>
<practice priority="critical">See `security.md` for DOM manipulation rules</practice>
<practice priority="high">See `api-patterns.md` for workspace, vault, and editor patterns</practice>
<practice priority="high">See `ui-components.md` for settings, modals, and views</practice>
</best_practices>
<patterns>
<pattern name="terminology">
| Use | Avoid |
|-----|-------|
| keyboard shortcut | hotkey |
| note | file (for .md) |
| folder | directory |
| select | click/tap |
| perform | invoke |
Use sentence case for headings. Bold button text in docs.
</pattern>
</patterns>
<related_skills>
<skill name="security.md">DOM manipulation rules (CRITICAL)</skill>
<skill name="api-patterns.md">Workspace, vault, and editor patterns</skill>
<skill name="ui-components.md">Settings, modals, and views</skill>
</related_skills>