Agent skill

Obsidian Plugin Quality

by RafaelGB in RafaelGB/Obsidian-ZettelFlow

Audit ZettelFlow against the official Obsidian plugin guidelines and the Community-hub automated review / quality score.

MITAuto-check passedDevelopment

Install Obsidian Plugin Quality

skills CLI
$ npx skills add RafaelGB/Obsidian-ZettelFlow --skill obsidian-plugin-quality -a claude-code

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

GitHub CLI
$ gh skill install RafaelGB/Obsidian-ZettelFlow obsidian-plugin-quality --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/RafaelGB/Obsidian-ZettelFlow.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/obsidian-plugin-quality .claude/skills/obsidian-plugin-quality && 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-plugin-quality
GitHub stars
174
Token cost
~1.6k tokens
SKILL.md length
695 words
Files
1
Skills in repo
9
Repo updated
First seen
Licence
MIT

At a glance

Audit ZettelFlow against the official Obsidian plugin guidelines and the Community-hub automated review / quality score.

  • Works in 6 steps: Run the official linter (the ground truth) → Fast static audit (grep the known… → Manifest & release hygiene → …
  • Asks to check plugin quality
  • SKILL.md covers When to use, How to run the audit and Output format
  • Calls rg, npm and npx

What it does

Obsidian Plugin Quality is an agent skill from RafaelGB/Obsidian-ZettelFlow. Audit ZettelFlow against the official Obsidian plugin guidelines and the Community-hub automated review / quality score. Use before a release, when preparing a directory submission, or when the user asks to "check plugin quality", "raise the Obsidian score", "run the reviewer", or "prepare for submission". Runs the same rule set Obsidian's automated reviewer uses and reports concrete, file-anchored fixes.

Its SKILL.md is about 1.6k 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 Linting and formatting. It works with Obsidian and ESLint. The repository describes itself as: ZettelFlow is a plugin for Obsidian that helps you to create and manage your notes in a Zettelkasten way. The licence is MIT.

When your agent uses it

  • Asks to check plugin quality
  • Raise the Obsidian score
  • Run the reviewer
  • Prepare for submission

Example prompts

  • “check plugin quality”
  • “raise the Obsidian score”
  • “run the reviewer”
  • “/obsidian-plugin-quality”

Requirements

  • Node.js

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Run the official linter (the ground truth)
  2. Fast static audit (grep the known anti-patterns)
  3. Manifest & release hygiene
  4. Commands, settings & UI text
  5. ZettelFlow-specific risk review
  6. The transformation gate (constitution §XI)

What it can do on your machine

Read from SKILL.md and the folder at commit 088de36. 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:

    • rg
    • npm
    • npx

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

  • Network

    No URLs in SKILL.md. Its commands use npm and npx, which can reach the network depending on how they are called.

    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 Plugin Quality loads about 1.6k tokens when it runs. Until then it costs about 108 tokens; SKILL.md has 695 words of instructions outside code blocks.

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

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 RafaelGB/Obsidian-ZettelFlow at commit 088de36, republished under its MIT licence (© RafaelGB). 695 words, ~1,649 tokens.

Download SKILL.mdSave it as .claude/skills/obsidian-plugin-quality/SKILL.md (or your agent's skills folder).
name
obsidian-plugin-quality
description
Audit ZettelFlow against the official Obsidian plugin guidelines and the Community-hub automated review / quality score. Use before a release, when preparing a directory submission, or when the user asks to "check plugin quality", "raise the Obsidian score", "run the reviewer", or "prepare for submission". Runs the same rule set Obsidian's automated reviewer uses and reports concrete, file-anchored fixes.

Obsidian plugin quality audit

Obsidian's Community hub (May 2026) runs an automated review on every plugin version and publishes a 1–100 source-code quality score plus safety scorecards. The score is essentially how clean the code is against eslint-plugin-obsidianmd + the developer policies + the submission requirements. This skill reproduces that audit locally.

Background reference (keep it in sync): docs/development/obsidian-review-and-scoring.md.

When to use

  • Before cutting a release or tagging a version.
  • Before (re-)submitting to the community directory.
  • When the user asks to improve the Obsidian score / pass the automated review.

How to run the audit

Work through the phases in order. Report findings grouped by category, most-severe first, each anchored to file:line with a concrete fix. Do not auto-apply large refactors without confirming scope with the user first.

Phase 1 — Run the official linter (the ground truth)

The project currently lints with oxlint and a legacy .eslintrc.js; neither encodes the Obsidian rules. Add and run the official rule set:

bash
npm i -D eslint eslint-plugin-obsidianmd @typescript-eslint/parser
# with an eslint.config.mjs using obsidianmd.configs.recommended (see the doc)
npx eslint "src/**/*.{ts,tsx}"

If the flat config is not yet present, create eslint.config.mjs as shown in docs/development/obsidian-review-and-scoring.md §5. Treat every eslint-plugin-obsidianmd error as a score deduction.

Phase 2 — Fast static audit (grep the known anti-patterns)

Run these and triage each hit:

CheckCommand (ripgrep)Rule / guideline
HTML injection`rg -n "innerHTMLouterHTML
Inline styles`rg -n ".style.setAttribute(['"]style" src`
Detach leaves on unloadrg -n "detachLeavesOfType" srcdetach-leaves → remove from onunload.
Hardcoded config dirrg -n "\.obsidian/" srchardcoded-config-path → use vault.configDir.
Node/Electron on mobile`rg -n "require(from ['"](fs
Global app`rg -n "window.app\bapp." src`
var / Promise chains`rg -n "\bvar\s.then(" src`
Regex lookbehindrg -n "\(\?<" srcregex-lookbehind → unsupported on some iOS.
Direct activeLeafrg -n "workspace\.activeLeaf" srcUse getActiveViewOfType().
Adapter over Vaultrg -n "\.adapter\." srcPrefer the Vault API.
Phase 3 — Manifest & release hygiene
  • manifest.json: valid id, name, semver version, minAppVersion, description (≤250 chars, action verb, ends with ., not starting "This is a plugin"), author.
  • fundingUrl present only because donations are accepted (ZettelFlow: yes).
  • versions.json exists and maps each version → minAppVersion. ⚠️ Currently missing — see docs/development/obsidian-review-and-scoring.md §6.
  • version-bump.mjs exists (referenced by the version npm script). ⚠️ Currently missing.
  • Release workflow attaches main.js, manifest.json, styles.css under a git tag equal to manifest.version (no v prefix). Cross-check .github/workflows/releases.yml.
  • LICENSE present with a valid copyright notice (validate-license).
Show full SKILL.md (297 more words)Show less
Phase 4 — Commands, settings & UI text
  • Command ids/names don't repeat the plugin id/name or the word "command".
  • No default hotkeys shipped.
  • Settings headings use setHeading() (not manual HTML), no "settings" in the heading text.
  • All user-facing strings are Sentence case, not Title Case. (ZettelFlow has an i18n layer at src/architecture/lang/ — audit en/es locale strings too.)
Phase 5 — ZettelFlow-specific risk review
  • Canvas monkey-patching (src/architecture/plugin/canvas/extensions/CanvasPatcher.ts) patches internal Canvas APIs via monkey-around. This is a manual-review flag: keep the patches defensive (they already register uninstallers via plugin.register), guard every patched method behind existence checks, and document the risk. Verify against the current minAppVersion.
  • .js extension registration (CodeView): already wrapped in try/catch — keep it.
  • Logger gating (src/architecture/monitoring/Logger.ts): error is silenced when the logger toggle is off. Consider always allowing error.
  • onunload only clears the action store; confirm no leaked resources (most are covered by Obsidian's register* auto-teardown).
Phase 6 — The transformation gate (constitution §XI)

Beyond the linter, judge the change against the design gate:

  • Transformation. Ask "what knowledge transformation does this enable?" Flag surface that doesn't transform/connect/evaluate/discover/advance knowledge as secondary.
  • No net complexity. The change removes/merges a command, view, setting or path, or hardens a boundary — it doesn't only add. Rising net surface is a finding.
  • Boundaries. The Knowledge layer (architecture/knowledge, future knowledge/) imports no obsidian and makes no network/AI call; derived metrics are queries over the model, not new dashboard features. Existing .zftemplate systems and saved settings still work; no command/view removed without an alias.

Output format

Produce a prioritized report: (1) blocking submission issues (missing versions.json, manifest errors), (2) eslint-plugin-obsidianmd errors, (3) security (HTML injection), (4) styling/inline-style migrations, (5) polish (sentence case, commands). For each: the rule, the file:line, and the exact fix. Offer to apply the low-risk mechanical fixes (innerHTML = "" → .empty(), adding the eslint config) in a follow-up.

© RafaelGB, MIT. 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 .claude/skills/obsidian-plugin-quality of RafaelGB/Obsidian-ZettelFlow.

Open the folder on GitHubat commit 088de36

Compare with similar skills

Obsidian Plugin Quality 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 Plugin Quality compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Obsidian Plugin Quality this skillRafaelGB/Obsidian-ZettelFlow174—~1.6kAutomated safety check: PassMIT
Obsidian Plugin Development Guidelinesgapmiss/obsidian-plugin-skill190—~4.5kAutomated safety check: PassMIT
LobeHub Alint Rule Set Maintenancelobehub/lobehub83k—~1.9kAutomated safety check: PassCustom licence
Eslint Migrate Optionsbiomejs/biome26k—~1.4kAutomated safety check: PassApache-2.0
Ultraciteagustinusnathaniel/nextarter-tailwind1252 repos~1.2kAutomated safety check: PassMIT
Code Qualityredis/RedisInsight8.9k—~1.2kAutomated safety check: PassCustom licence

Similar skills

  • Obsidian Plugin Development Guidelines

    gapmiss/obsidian-plugin-skill

    Rules and references for building Obsidian plugins: ESLint rules, TypeScript practices, memory cleanup, API choices, UI standards and the community submission process.

    190 GitHub stars~4.5k tokensUpdated 15 days ago
    DevelopmentAuto-check passed
  • Maintains LobeHub's model-backed alint rule set: writing rules, removing false positives against real code, deciding warn versus error and tracking token cost.

    83k GitHub stars~1.9k tokensUpdated today
    DevelopmentAuto-check passed
  • Official

    A skill your agent uses when biome migrate eslint must preserve configurable ESLint rule options through source-option models, Biome conversions, typed rule variants, and migration fixtures.

    26k GitHub stars~1.4k tokensUpdated today
    DevelopmentAuto-check passed
  • Ultracite

    agustinusnathaniel/nextarter-tailwind

    Ultracite is a zero-config linting and formatting preset for JavaScript/TypeScript projects.

    125 GitHub starsUsed in 2 repos~1.2k tokens
    DevelopmentAuto-check passed
  • Code Quality

    redis/RedisInsight

    Official

    Code-quality standards for RedisInsight: TypeScript strictness, naming conventions (camelCase, PascalCase, UPPERSNAKECASE), linting rules, no any without reason, no !important in styles, and…

    8.9k GitHub stars~1.2k tokensUpdated 5 days ago
    DevelopmentAuto-check passed
  • Boundaries Architect

    javierbrea/eslint-plugin-boundaries

    Act as a software architect: analyze a repository's folder structure and cross-file import dependencies, detect its architectural pattern, design element/file boundaries with the user, and configure…

    997 GitHub stars~4.2k tokensUpdated yesterday
    DevelopmentAuto-check passed

More from RafaelGB/Obsidian-ZettelFlow

All 9 skills in this repo
  • New Action

    RafaelGB/Obsidian-ZettelFlow

    Scaffold a new ZettelFlow action following the project's 4-file convention (Action / Component / Settings / SettingsReader), register it, and document it.

    174 GitHub stars~1.1k tokensUpdated yesterday
    Auto-check passed
  • Release

    RafaelGB/Obsidian-ZettelFlow

    Cut a compliant ZettelFlow plugin release — version bump, versions.json, build, tag, and a GitHub Release whose notes follow the house format.

    174 GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed
  • Specify

    RafaelGB/Obsidian-ZettelFlow

    Stage 1 of the SDD pipeline — write a ZettelFlow spec into a GitHub issue body (problem, value, functional requirements, testable acceptance criteria, capability disclosure, out-of-scope).

    174 GitHub stars~759 tokensUpdated yesterday
    Auto-check passed
  • Sdd

    RafaelGB/Obsidian-ZettelFlow

    The Spec-Driven Development pipeline for ZettelFlow — the end-to-end flow (constitution → specify → plan → tasks → implement → verify) and which skill/agent owns each stage.

    174 GitHub stars~842 tokensUpdated yesterday
    Auto-check passed
  • TDD

    RafaelGB/Obsidian-ZettelFlow

    The test-driven development workflow for ZettelFlow — write a failing test first, run jest, use the Obsidian mock and the bare-specifier alias mappings, and know which code is unit-testable.

    174 GitHub stars~724 tokensUpdated yesterday
    Auto-check passed
  • Implement

    RafaelGB/Obsidian-ZettelFlow

    Stage 4 of the SDD pipeline — execute a ZettelFlow task checklist (in a GitHub issue comment) test-first (red → green → refactor), one commit per advance, keeping npm run verify green and CI green…

    174 GitHub stars~1.7k tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Obsidian Plugin Quality

What does Obsidian Plugin Quality do?

Audit ZettelFlow against the official Obsidian plugin guidelines and the Community-hub automated review / quality score. Obsidian Plugin Quality is an agent skill from RafaelGB/Obsidian-ZettelFlow. Audit ZettelFlow against the official Obsidian plugin guidelines and the Community-hub automated review / quality score.

When should I use Obsidian Plugin Quality?

Obsidian Plugin Quality fits situations like: asks to check plugin quality; raise the Obsidian score; run the reviewer; prepare for submission.

How do I install Obsidian Plugin Quality in Claude Code?

Run `npx skills add RafaelGB/Obsidian-ZettelFlow --skill obsidian-plugin-quality -a claude-code`. Or copy the skill folder (.claude/skills/obsidian-plugin-quality in RafaelGB/Obsidian-ZettelFlow) into .claude/skills/obsidian-plugin-quality in your project. Claude Code loads it when a task matches its description.

How do I install Obsidian Plugin Quality in Codex?

Run `npx skills add RafaelGB/Obsidian-ZettelFlow --skill obsidian-plugin-quality -a codex`. Or copy the skill folder (.claude/skills/obsidian-plugin-quality in RafaelGB/Obsidian-ZettelFlow) into .agents/skills/obsidian-plugin-quality in your project. Codex loads it when a task matches its description.

Can I use Obsidian Plugin Quality 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 RafaelGB/Obsidian-ZettelFlow --skill obsidian-plugin-quality -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-plugin-quality, .gemini/skills/obsidian-plugin-quality, .github/skills/obsidian-plugin-quality and .opencode/skills/obsidian-plugin-quality in your project.

What does Obsidian Plugin Quality need to run?

Going by SKILL.md and its folder, Obsidian Plugin Quality needs the command-line tools its instructions call (rg, npm and npx). Our summary lists: Node.js.

Does Obsidian Plugin Quality access the network?

SKILL.md contains no URLs. Its commands use npm and npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Obsidian Plugin Quality 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 Plugin Quality use?

Obsidian Plugin Quality is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Obsidian Plugin Quality use?

About 1.6k tokens (SKILL.md is roughly 6.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 Plugin Quality?

Skills that share tags, products or a category with Obsidian Plugin Quality: Obsidian Plugin Development Guidelines (gapmiss/obsidian-plugin-skill, 190 stars), LobeHub Alint Rule Set Maintenance (lobehub/lobehub, 83k stars), Eslint Migrate Options (biomejs/biome, 26k stars) and Ultracite (agustinusnathaniel/nextarter-tailwind, 125 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Obsidian Plugin Quality?

RafaelGB (a GitHub user) maintains it in RafaelGB/Obsidian-ZettelFlow, which has 174 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 8, 2026.

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