# Send Obsidian Plugin Development to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- Download the package from Yavira.
- Extract it into a folder your agent can access.
- Paste one of the prompts below and point your agent at the extracted folder.
## Suggested prompts
### New install

```text
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
```
### Upgrade existing

```text
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "obsidian-plugin-dev",
    "name": "Obsidian Plugin Development",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/davidvkimball/obsidian-plugin-dev",
    "canonicalUrl": "https://clawhub.ai/davidvkimball/obsidian-plugin-dev",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/obsidian-plugin-dev",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=obsidian-plugin-dev",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "references/patterns.md",
      "references/settings.md",
      "SKILL.md"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "slug": "obsidian-plugin-dev",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-06T08:17:57.502Z",
      "expiresAt": "2026-05-13T08:17:57.502Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=obsidian-plugin-dev",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=obsidian-plugin-dev",
        "contentDisposition": "attachment; filename=\"obsidian-plugin-dev-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "obsidian-plugin-dev"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/obsidian-plugin-dev"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/obsidian-plugin-dev",
    "downloadUrl": "https://openagent3.xyz/downloads/obsidian-plugin-dev",
    "agentUrl": "https://openagent3.xyz/skills/obsidian-plugin-dev/agent",
    "manifestUrl": "https://openagent3.xyz/skills/obsidian-plugin-dev/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/obsidian-plugin-dev/agent.md"
  }
}
```
## Documentation

### Obsidian Plugin Development

Build production-ready Obsidian plugins using the obsidian-sample-plugin-plus template.

### 1. Create from Template

# Clone the template (or use GitHub's "Use this template" button)
gh repo create my-plugin --template davidvkimball/obsidian-sample-plugin-plus --public --clone
cd my-plugin

# Or clone directly
git clone https://github.com/davidvkimball/obsidian-sample-plugin-plus.git my-plugin
cd my-plugin
rm -rf .git && git init

### 2. Configure Plugin Identity

Update these files with your plugin's info:

manifest.json:

{
  "id": "my-plugin",
  "name": "My Plugin",
  "version": "0.0.1",
  "minAppVersion": "1.5.0",
  "description": "What your plugin does",
  "author": "Your Name",
  "authorUrl": "https://yoursite.com",
  "isDesktopOnly": false
}

package.json: Update name, description, author, license.

README.md: Replace template content with your plugin's documentation.

### 3. Initialize Development Environment

pnpm install
pnpm obsidian-dev-skills          # Initialize AI skills
./scripts/setup-ref-links.sh      # Unix
# or: scripts\\setup-ref-links.bat  # Windows

### 4. Clean Boilerplate

In src/main.ts:

Remove sample ribbon icon, status bar, commands, modal, and DOM event
Keep the settings tab if needed, or remove it
Rename MyPlugin class to your plugin name

Delete styles.css if your plugin doesn't need custom styles.

### Build & Test

pnpm dev      # Watch mode — rebuilds on changes
pnpm build    # Production build
pnpm lint     # Check for issues
pnpm lint:fix # Auto-fix issues
pnpm test     # Run unit tests

### Install in Obsidian

Copy build output to your vault:

# Unix
cp main.js manifest.json styles.css ~/.obsidian/plugins/my-plugin/

# Or create a symlink for development
ln -s $(pwd) ~/.obsidian/plugins/my-plugin

Enable the plugin in Obsidian Settings → Community Plugins.

Use Hot Reload plugin for automatic reloading during development.

### Entry Point (src/main.ts)

import { Plugin } from 'obsidian';

export default class MyPlugin extends Plugin {
  settings: MyPluginSettings;

  async onload() {
    await this.loadSettings();
    // Register commands, ribbons, events, views
  }

  onunload() {
    // Cleanup: remove event listeners, views, DOM elements
  }

  async loadSettings() {
    this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
  }

  async saveSettings() {
    await this.saveData(this.settings);
  }
}

### Settings Pattern

See references/settings.md for the complete settings UI pattern.

### Common Patterns

See references/patterns.md for:

Commands (simple, editor, check callbacks)
Ribbon icons
Modals
Events and lifecycle
File operations
Editor manipulation

### Constraints

No auto-git: Never run git commit or git push without explicit approval
No eslint-disable: Fix lint issues properly, don't suppress them
No any types: Use proper TypeScript types
Sentence case: UI text uses sentence case (ESLint may false-positive on this — ignore if so)

### Release Checklist

Update version in manifest.json and package.json
Update versions.json with "version": "minAppVersion"
Run pnpm build — zero errors
Run pnpm lint — zero issues
Create GitHub release with tag matching version (no v prefix)
Upload: main.js, manifest.json, styles.css (if used)

### References

Settings UI — Complete settings tab implementation
Common Patterns — Commands, modals, events, file operations
Obsidian API Docs — Official documentation
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: davidvkimball
- Version: 1.0.0
## Source health
- Status: healthy
- Item download looks usable.
- Yavira can redirect you to the upstream package for this item.
- Health scope: item
- Reason: direct_download_ok
- Checked at: 2026-05-06T08:17:57.502Z
- Expires at: 2026-05-13T08:17:57.502Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/obsidian-plugin-dev)
- [Send to Agent page](https://openagent3.xyz/skills/obsidian-plugin-dev/agent)
- [JSON manifest](https://openagent3.xyz/skills/obsidian-plugin-dev/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/obsidian-plugin-dev/agent.md)
- [Download page](https://openagent3.xyz/downloads/obsidian-plugin-dev)