Agent skill

Obsidian Debug

by aidenlx in aidenlx/zotlit

Drive the running Obsidian instance to verify plugin changes — build, reload, eval, screenshot.

AGPL-3.0Auto-check passedDevelopment

Install Obsidian Debug

skills CLI
$ npx skills add aidenlx/zotlit --skill obsidian-debug -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install aidenlx/zotlit obsidian-debug --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/aidenlx/zotlit.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/obsidian-debug .claude/skills/obsidian-debug && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
obsidian-debug
GitHub stars
1k
Token cost
~1.5k tokens
SKILL.md length
698 words
Files
1
Skills in repo
16
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Drive the running Obsidian instance to verify plugin changes — build, reload, eval, screenshot.

  • Works in 5 steps: Run obsidian version. If the command is… → Run… → Before you use a vault command, read its… → …
  • The user asks to test
  • SKILL.md covers Vault setup, once per worktree, Commands, Loop and Driving state, plus 1 more section
  • Calls pnpm and vault

What it does

Obsidian Debug is an agent skill from aidenlx/zotlit. Drive the running Obsidian instance to verify plugin changes — build, reload, eval, screenshot. Use after editing plugin UI or behavior to confirm the change works in the real app, when debugging why something looks wrong at runtime, or when another skill says "verify in Obsidian." Also use when the user asks to test, check, run, or screenshot the plugin.

Its SKILL.md is about 1.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development, covering Debugging. It works with Obsidian. The repository describes itself as: Bring your Zotero library into Obsidian. Create literature notes, insert citations, and annotate PDFs without leaving your vault. The licence is AGPL-3.0.

When your agent uses it

  • The user asks to test
  • Screenshot the plugin

Example prompts

  • “verify in Obsidian.”
  • “/obsidian-debug”

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Run obsidian version. If the command is missing, follow the official
  2. Run packages/scripts/scripts/obsidian-vault.ts --help.
  3. Before you use a vault command, read its --help output.
  4. Run packages/scripts/scripts/obsidian-vault.ts check. Vault setup is
  5. Build the plugin, then use the live open command to prepare this

What it can do on your machine

Read from SKILL.md and the folder at commit 27f5752. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • pnpm
    • vault

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • obsidian.md

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Obsidian Debug loads about 1.5k tokens when it runs. Until then it costs about 93 tokens; SKILL.md has 698 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~93
When it runs · the whole SKILL.md, loaded when a task matches
~1.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from aidenlx/zotlit at commit 27f5752, republished under its AGPL-3.0 licence (© aidenlx). 698 words, ~1,497 tokens.

Download SKILL.mdSave it as .claude/skills/obsidian-debug/SKILL.md (or your agent's skills folder).
name
obsidian-debug
description
Drive the running Obsidian instance to verify plugin changes — build, reload, eval, screenshot. Use after editing plugin UI or behavior to confirm the change works in the real app, when debugging why something looks wrong at runtime, or when another skill says "verify in Obsidian." Also use when the user asks to test, check, run, or screenshot the plugin.

Debug Loop

Drive the running Obsidian app through obsidian to verify plugin changes against real rendered state. The DOM is the source of truth.

Vault setup, once per worktree

  1. Run obsidian version. If the command is missing, follow the official Obsidian CLI installation guide, then restart the terminal. Use the registered obsidian command on every platform.
  2. Run packages/scripts/scripts/obsidian-vault.ts --help.
  3. Before you use a vault command, read its <command> --help output.
  4. Run packages/scripts/scripts/obsidian-vault.ts check. Vault setup is complete when the command succeeds. Follow its recovery instructions when it fails.
  5. Build the plugin, then use the live open command to prepare this worktree's Development Vault:
bash
pnpm --filter @zotlit/obsidian build:dev

Editing the Fixture Spec or its committed vault-page assets changes the next Fixture build, not the open Development Vault. Use the live open command before you look for those changes. Use the live remove command when you tear the vault down.

Commands

CommandWhat it does
obsidian vault=<id> plugin:reload id=zotlitReload the plugin after a build
obsidian vault=<id> commands filter=zotlitList available plugin commands
obsidian vault=<id> command id=zotlit:<cmd>Run a command
obsidian vault=<id> eval code='<js>'Run JS in the app, returns the value
obsidian vault=<id> dev:screenshot path=<abs>Capture the window (absolute path required)
obsidian vault=<id> dev:errorsCaptured errors
obsidian vault=<id> dev:consoleConsole output

The CLI always exits 0. Read the output text: => prefixes a result, and failures come back as Error: … or Vault not found.

Loop

  1. Build — pnpm --filter @zotlit/obsidian build:dev copies the bundle into this worktree's Development Vault.
  2. Reload — obsidian vault=<id> plugin:reload id=zotlit.
  3. Open — obsidian command id=zotlit:<cmd>, or eval to mount a view in a specific split.
  4. Probe — obsidian eval code='…' with getComputedStyle(el) / el.getBoundingClientRect() to assert what actually rendered. A computed-style assertion is worth more than eyeballing a screenshot, and it is the only way to catch a state that expires on its own — a flash class is gone by the time the capture lands.
  5. Screenshot — obsidian dev:screenshot path=<absolute-path>. Save inside the workspace.
  6. Errors — obsidian dev:errors / obsidian dev:console.

Driving state

Values change through code, and DOM ops check how the UI looks and behaves.

TargetExpression
Obsidian app configapp.vault.setConfig(key, value)
ZotLit settingapp.plugins.plugins.zotlit.settingTab.setControlValue("citation.at-trigger", false)

setControlValue runs the same SettingsService path the rendered control does and persists to the plugin's data.json; getControlValue reads the effective value back. Read the value first and put it back when you are done.

Gotchas

Show full SKILL.md (303 more words)Show less
Settings land in their own window

app.setting.open() renders into a separate Electron window by default since 1.13.4, and eval, dev:dom, and dev:screenshot all address the main one — so settings read as never opened. Run /obsidian-settings → "Verifying on screen" for the config that brings the modal back into the main window, and for reaching the separate window when its own chrome is the thing under test.

No await in eval

Code runs in a non-async wrapper — top-level await is a syntax error. Fire the promise and verify in a follow-up eval, or grab references synchronously. Hold the leaf from getLeaf(...) and revealLeaf(it) in the same call rather than re-querying getLeavesOfType(...) after an async setViewState (races, returns []).

Stale screenshots

A capture taken right after reload or revealLeaf may show old DOM while the change is already live. Cross-check against an eval DOM/computed-style query — if they disagree, the DOM query wins. Re-shoot. A DevTools window open over Obsidian can also steal the capture — close it first.

Confirm which vault answered

An untargeted command goes to the focused window, which may belong to another worktree. Pass vault=<id>, and confirm with eval code='app.vault.adapter.basePath' — it must print the Development Vault path reported by obsidian-vault.ts --help for the worktree you build from. data.json edits target that same path.

Occluded window

When document.visibilityState === "hidden", scroll events don't dispatch and the compositor stops repainting — scroll-driven UI (e.g. TanStack Virtual) looks frozen and screenshots return stale frames. Drive scrolling with el.scrollTop = x; el.dispatchEvent(new Event("scroll")) and assert via DOM queries.

Full-scale Fixture data

Build a Stress Build with pnpm fixture stress. Read the current Device Override before you change it:

bash
obsidian vault=<id> eval \
  code='app.plugins.plugins.zotlit.services.zoteroPref.dataDirOverride'

Point the live plugin at the absolute tmp/acceptance-fixture/zotero-data path:

bash
obsidian vault=<id> eval \
  code='app.plugins.plugins.zotlit.services.zoteroPref.setDataDir("<absolute path>")'

Afterwards, call setDataDir again with the previous value, or null when it was empty. This restores the vault-scoped Device Override and reconnects the database service.

© aidenlx, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/obsidian-debug of aidenlx/zotlit.

Open the folder on GitHubat commit 27f5752

Compare with similar skills

Obsidian Debug next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Obsidian Debug compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Obsidian Debug this skillaidenlx/zotlit1k—~1.5kAutomated safety check: PassAGPL-3.0
Debug Obsidiansaberzero1/quartz-syncer139—~1.9kAutomated safety check: PassMIT
Obsidian CLI Devtoolshashgraph-online/awesome-codex-plugins1.2k—~874Automated safety check: PassApache-2.0
Self LearnPratiyush/llm-wiki395—~1.6kAutomated safety check: PassMIT
JSON Canvasheyitsnoah/claudesidian2.6k18 repos~3.5kAutomated safety check: PassMIT
Trellis Session Insightmindfold-ai/Trellis15k4 repos~1.7kAutomated safety check: PassAGPL-3.0

Similar skills

  • Debug Obsidian

    saberzero1/quartz-syncer

    Debug and investigate plugin issues in a running Obsidian instance — collect diagnostic data, inspect state, trace events, and identify root causes via the operability facade.

    139 GitHub stars~1.9k tokensUpdated 7 days ago
    DevelopmentAuto-check passed
  • Obsidian CLI Devtools

    hashgraph-online/awesome-codex-plugins

    A skill your agent uses when the user needs Obsidian runtime debugging or developer introspection through official desktop Obsidian CLI developer commands, including devtools, console/errors…

    1.2k GitHub stars~874 tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Self Learn

    Pratiyush/llm-wiki

    Extract reusable patterns from recent sessions, propose framework improvements, and (with approval) update the framework docs.

    395 GitHub stars~1.6k tokensUpdated 3 mo ago
    Knowledge ManagementAuto-check passed
  • JSON Canvas

    heyitsnoah/claudesidian

    Create and edit JSON Canvas files (.canvas) with nodes, edges, groups, and connections.

    2.6k GitHub starsUsed in 18 repos~3.5k tokens
    DevelopmentAuto-check passed
  • Trellis Session Insight

    mindfold-ai/Trellis

    Reach into past AI conversation history through the trellis mem CLI.

    15k GitHub starsUsed in 4 repos~1.7k tokens
    DevelopmentAuto-check passed
  • Native Data Fetching

    CherryHQ/cherry-studio-app

    A skill your agent uses when implementing or debugging ANY network request, API call, or data fetching.

    4k GitHub starsUsed in 6 repos~2.9k tokens
    DevelopmentAuto-check: notes

More from aidenlx/zotlit

All 16 skills in this repo
  • I18n UI Text

    aidenlx/zotlit

    Obsidian house style for the wording of user-facing UI strings — command names, setting labels, button text, notices, modal copy.

    1k GitHub stars~2.8k tokensUpdated today
    Auto-check passed
  • Obsidian CSS

    aidenlx/zotlit

    Style Obsidian plugin UI with Tailwind + native components. An agent skill from aidenlx/zotlit.

    1k GitHub stars~4.8k tokensUpdated today
    Auto-check passed
  • Arkregex

    aidenlx/zotlit

    Typed regex authoring with arkregex in this repo. An agent skill from aidenlx/zotlit.

    1k GitHub stars~952 tokensUpdated today
    Auto-check passed
  • Changelog Entry

    aidenlx/zotlit

    Write a user-facing changelog entry under apps/docs/content/changelog/.

    1k GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Discord Announcement

    aidenlx/zotlit

    Draft a Discord announcement from a changelog entry. An agent skill from aidenlx/zotlit.

    1k GitHub stars~604 tokensUpdated today
    Auto-check passed
  • Inlang I18n

    aidenlx/zotlit

    Define ZotLit UI messages in the Inlang Message Format and consume them through the generated JSON Language Pack facade.

    1k GitHub stars~1k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Obsidian Debug

What does Obsidian Debug do?

Drive the running Obsidian instance to verify plugin changes — build, reload, eval, screenshot. Obsidian Debug is an agent skill from aidenlx/zotlit. Drive the running Obsidian instance to verify plugin changes — build, reload, eval, screenshot.

When should I use Obsidian Debug?

Obsidian Debug fits situations like: the user asks to test; screenshot the plugin.

How do I install Obsidian Debug in Claude Code?

Run `npx skills add aidenlx/zotlit --skill obsidian-debug -a claude-code`. Or copy the skill folder (.agents/skills/obsidian-debug in aidenlx/zotlit) into .claude/skills/obsidian-debug in your project. Claude Code loads it when a task matches its description.

How do I install Obsidian Debug in Codex?

Run `npx skills add aidenlx/zotlit --skill obsidian-debug -a codex`. Or copy the skill folder (.agents/skills/obsidian-debug in aidenlx/zotlit) into .agents/skills/obsidian-debug in your project. Codex loads it when a task matches its description.

Can I use Obsidian Debug in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add aidenlx/zotlit --skill obsidian-debug -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/obsidian-debug, .gemini/skills/obsidian-debug, .github/skills/obsidian-debug and .opencode/skills/obsidian-debug in your project.

What does Obsidian Debug need to run?

Going by SKILL.md and its folder, Obsidian Debug needs the command-line tools its instructions call (pnpm and vault).

Does Obsidian Debug access the network?

SKILL.md names 1 domain. As links in the text: obsidian.md. This is read from the text; nothing was executed.

Is Obsidian Debug safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Obsidian Debug use?

Obsidian Debug is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Obsidian Debug use?

About 1.5k tokens (SKILL.md is roughly 6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Obsidian Debug?

Skills that share tags, products or a category with Obsidian Debug: Debug Obsidian (saberzero1/quartz-syncer, 139 stars), Obsidian CLI Devtools (hashgraph-online/awesome-codex-plugins, 1.2k stars), Self Learn (Pratiyush/llm-wiki, 395 stars) and JSON Canvas (heyitsnoah/claudesidian, 2.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Obsidian Debug?

aidenlx (a GitHub user) maintains it in aidenlx/zotlit, which has 1,026 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on October 7, 2026.

Source: aidenlx/zotlit on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.