Agent skill

Obsidian Plugin Release

by crafter-station in crafter-station/skills

Release a new version of an Obsidian community plugin without forgetting steps.

MITAuto-check passedDevelopment

Install Obsidian Plugin Release

skills CLI
$ npx skills add crafter-station/skills --skill obsidian-plugin-release -a claude-code

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

GitHub CLI
$ gh skill install crafter-station/skills obsidian-plugin-release --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/crafter-station/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/obsidian-plugin-release .claude/skills/obsidian-plugin-release && 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-release
GitHub stars
112
Token cost
~1.8k tokens
SKILL.md length
771 words
Files
6 (incl. scripts, references)
Skills in repo
7
Repo updated
First seen
Licence
MIT

At a glance

Release a new version of an Obsidian community plugin without forgetting steps.

  • Works in 12 steps: Verify clean tree — abort if uncommitted… → Verify version is new — versions.json… → Bump version atomically — write the same… → …
  • User says release the plugin
  • SKILL.md covers Detection, Commands, Edge cases and Anti-patterns (don't), plus 2 more sections
  • Runs TypeScript and JavaScript scripts from its folder; calls git, gh and bun; reaches community.obsidian.md

What it does

Obsidian Plugin Release is an agent skill from crafter-station/skills. Release a new version of an Obsidian community plugin without forgetting steps. Use when: (1) user says "release the plugin", "bump <plugin to X.Y.Z", "ship a new Obsidian release", "tag a new plugin version", "publish to the obsidian directory", (2) the working directory contains manifest.json + main.js + versions.json (Obsidian plugin signature), (3) user wants to scaffold the release workflow into an existing plugin (scaffold-workflow arg). Handles version bump across manifest.json + package.json +…

Its SKILL.md is about 1.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including scripts and reference files (for example `references/changelog-style.md`, `references/scanner-warnings.md` and `scripts/release.ts`).

It sits in Development, covering Commit messages, Linting and formatting and CI/CD. It works with Obsidian, npm, GitHub Actions and Git. The repository describes itself as: Agent skills extracted from real work. Each one shipped something first. The licence is MIT.

When your agent uses it

  • User says release the plugin
  • Bump <plugin to X.Y.Z
  • Ship a new Obsidian release
  • Tag a new plugin version

Example prompts

  • “release the plugin”
  • “bump <plugin to X.Y.Z”
  • “ship a new Obsidian release”
  • “/obsidian-plugin-release”

Requirements

  • Node.js

Workflow steps

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

  1. Verify clean tree — abort if uncommitted changes (unless --allow-dirty).
  2. Verify version is new — versions.json must not already contain it.
  3. Bump version atomically — write the same to manifest.json, package.json, and append versions.json keyed to current minAppVersion. Use…
  4. Build — bun run build. Abort on non-zero.
  5. Lint — bunx eslint src/ (skip if user has no src/ — JS-only plugins exist). Abort on errors.
  6. Stage — git add manifest.json package.json versions.json main.js styles.css. Only those 5 files.
  7. Commit — conventional message, no Co-Authored-By
  8. Push main — git push origin .
  9. Tag — git tag -a -m "Release " (annotated because tag.gpgSign=true is common; annotated works either way).
  10. Push tag — git push origin . This triggers the release workflow.
  11. Wait for workflow — gh run watch --exit-status against the latest run on this tag. Abort if it fails.
  12. Verify release — gh release view --json assets must include main.js, manifest.json, styles.css. Attestation is verified via gh attestation…

What it can do on your machine

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

    Ships 1 file in scripts/ (TypeScript and JavaScript), which the agent can run.

    Shell commands in SKILL.md call:

    • git
    • gh
    • bun
    • bunx
    • npm
    • npx

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

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • community.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 Plugin Release loads about 1.8k tokens when it runs, and up to ~3.8k if it reads all its reference files. Until then it costs about 183 tokens; SKILL.md has 771 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~183
When it runs · the whole SKILL.md, loaded when a task matches
~1.8k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~3.8k

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); the scripts in this folder are not scanned.

SKILL.md

The full file from crafter-station/skills at commit f0fe474, republished under its MIT licence (© crafter-station). 771 words, ~1,797 tokens.

Download SKILL.mdSave it as .claude/skills/obsidian-plugin-release/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.
name
obsidian-plugin-release
description
Release a new version of an Obsidian community plugin without forgetting steps. Use when: (1) user says "release the plugin", "bump <plugin> to X.Y.Z", "ship a new Obsidian release", "tag a new plugin version", "publish to the obsidian directory", (2) the working directory contains manifest.json + main.js + versions.json (Obsidian plugin signature), (3) user wants to scaffold the release workflow into an existing plugin (`scaffold-workflow` arg). Handles version bump across manifest.json + package.json + versions.json, build, lint, conventional commit, signed annotated tag, push, and lets the GitHub Actions workflow publish the release with build-provenance attestation. Idempotent and dry-run-safe.
version
1.0.0

obsidian-plugin-release

Releasing an Obsidian plugin has 12 manual steps that are easy to half-do (forget versions.json, push tag before main, sign assets without provenance). This skill collapses the flow into a single intent: pick a version → ship.

Detection

The current directory is an Obsidian plugin if all of these exist at the root:

  • manifest.json with id, version, minAppVersion keys
  • versions.json (the map pluginVersion → minAppVersion)
  • main.js listed in .gitignore is fine — we rebuild it

Refuse to run if any of those are missing. Suggest scaffold-workflow if manifest.json exists but .github/workflows/release.yml does not.

Commands

release <version> — full ship
bash
bun run scripts/release.ts <version>          # via package.json script if user added it
# OR direct
~/.claude/skills/obsidian-plugin-release/scripts/release.ts <version>

Steps the script does (each one a hard gate — stop on failure):

  1. Verify clean tree — abort if uncommitted changes (unless --allow-dirty).
  2. Verify version is new — versions.json must not already contain it.
  3. Bump version atomically — write the same <version> to manifest.json, package.json, and append versions.json keyed to current minAppVersion. Use JSON.parse → mutate → write (preserve trailing newline + tab indent that Obsidian expects).
  4. Build — bun run build. Abort on non-zero.
  5. Lint — bunx eslint src/ (skip if user has no src/ — JS-only plugins exist). Abort on errors.
  6. Stage — git add manifest.json package.json versions.json main.js styles.css. Only those 5 files.
  7. Commit — conventional message, no Co-Authored-By:
    chore: release <version>
  8. Push main — git push origin <current-branch>.
  9. Tag — git tag -a <version> -m "Release <version>" (annotated because tag.gpgSign=true is common; annotated works either way).
  10. Push tag — git push origin <version>. This triggers the release workflow.
  11. Wait for workflow — gh run watch --exit-status against the latest run on this tag. Abort if it fails.
  12. Verify release — gh release view <version> --json assets must include main.js, manifest.json, styles.css. Attestation is verified via gh attestation verify on main.js.

Print the release URL + the community page (https://community.obsidian.md/plugins/<id>) + the deep link (obsidian://show-plugin?id=<id>) at the end.

release <version> --dry

Print every file that would change, the commit message, the tag message, and the workflow that would fire. No writes, no network calls.

release --check

Audit current state. Output:

  • Last released version (from versions.json)
  • Current manifest.json version (warn if ahead of versions.json)
  • Git tree clean? Branch? Ahead/behind origin?
  • Build passes locally?
  • Lint passes locally?
  • Workflow file present? Has attestation step?

Use this before running a release if anything feels off.

release scaffold-workflow

Drop .github/workflows/release.yml into the current plugin. Idempotent — refuses to overwrite unless --force.

Template lives at templates/release.yml. It:

  • Triggers on [0-9]+.[0-9]+.[0-9]+ semver tags
  • Sets up Bun with frozen lockfile
  • Builds via bun run build
  • Generates a build-provenance attestation over main.js, manifest.json, styles.css using actions/attest-build-provenance@v2
  • Creates or updates the release with the 3 signed assets
  • Required permissions: contents: write, id-token: write, attestations: write

Also offer to scaffold templates/eslint.config.mjs if the user is starting from scratch — it ships with the obsidianmd plugin pre-wired and the ignore globs (web/**, assets/**, scripts/**) that match the Obsidian scanner expectations.

Show full SKILL.md (306 more words)Show less

Edge cases

  • tag.gpgSign=true: always use git tag -a -m "..." to avoid the "no tag message" error. Annotated tags work whether signing is enabled or not, so we use them unconditionally.
  • No bun available: fall back to npm run build + npx eslint src/. The released workflow uses Bun regardless — local dev tool is incidental.
  • web/ subdir present: the scanner used to lint web/** and flag the Next.js landing site as a million unsafe-returns. Make sure eslint.config.mjs has web/** in ignores and the ignores block sits before obsidianmd.configs.recommended (the obsidianmd config spreads files: ["**/*.ts", "**/*.tsx"] which otherwise picks web/ up). See references/scanner-warnings.md.
  • Plugin not yet listed on Obsidian Community: the workflow still runs. The release exists, the attestation exists, the deep link obsidian://show-plugin?id=<id> only works once Obsidian's directory crawler picks it up (≤24h after submission).
  • First release ever: the script accepts --first and skips the "version is new" check. Useful when bumping from 0.0.0 to 0.1.0 for the first submission.

Anti-patterns (don't)

  • Don't bypass the tag. The workflow is the source of truth for attestation. Manual gh release create skips the OIDC signing step and the Obsidian scanner will flag missing provenance.
  • Don't squash versions.json. It's a permanent ledger. Appending only.
  • Don't push tag before main. Workflow checks out the tag commit; if main isn't there yet, the build references commits that don't exist on the default branch.
  • Don't release from a dirty tree. The committed main.js must match the built main.js from the source. If they diverge, build-provenance won't fail but reproducibility (Build verified: byte-for-byte) will.

Files

  • skill-creator — for authoring new skills (this one was made with it)
  • skillkit — local analytics for skill usage

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

Files

SKILL.md and 5 other files (scripts, references) in skills/obsidian-plugin-release of crafter-station/skills.

  • SKILL.md
  • references/changelog-style.md
  • references/scanner-warnings.md
  • scripts/release.ts
  • templates/eslint.config.mjs
  • templates/release.yml

Open the folder on GitHubat commit f0fe474

Compare with similar skills

Obsidian Plugin Release 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 Release compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Obsidian Plugin Release this skillcrafter-station/skills112—~1.8kAutomated safety check: PassMIT
Update Dependenciesalorence/django-modern-rpc111—~1.3kAutomated safety check: PassMIT
npm Package Publisherklaudworks/universal-skills181—~923Automated safety check: PassMIT
Python Pypi Package Buildergithub/awesome-copilot40k1 repos~4.6kAutomated safety check: PassMIT
Git Changes ReporterNo-Trade-No-Life/Yuan352—~1.2kAutomated safety check: PassMIT
ReleaseSma1lboy/rove160—~3.1kAutomated safety check: WarnMIT

Similar skills

  • Update Dependencies

    alorence/django-modern-rpc

    Routine update of all project dependencies — uv itself, uv.lock (all groups), tool versions pinned in GitHub workflows and .pre-commit-config.yaml (uv, ruff, mypy...), and SHA-pinned GitHub Actions.

    111 GitHub stars~1.3k tokensUpdated 2 days ago
    DevelopmentAuto-check passed
  • npm Package Publisher

    klaudworks/universal-skills

    Releases an npm package by committing changes, bumping the version with npm version, pushing the tag and checking the GitHub Actions publish.

    181 GitHub stars~923 tokensUpdated 8 mo ago
    DevelopmentAuto-check passed
  • Python Pypi Package Builder

    github/awesome-copilot

    Official

    End-to-end skill for building, testing, linting, versioning, and publishing a production-grade Python library to PyPI.

    40k GitHub starsUsed in 1 repo~4.6k tokens
    DevelopmentAuto-check passed
  • Git Changes Reporter

    No-Trade-No-Life/Yuan

    生成结构化 git 变更报告(JSON + Markdown)。使用此技能当用户提到"git 变更"、"commit 摘要"、"代码审查"、"release note"、"近期改动"、"每日摘要",或需要分析指定 commit 区间的代码变更。包含三元组结构(设计意图、核心代码、影响范围)的语义化报告,适用于代码审查、发布说明、团队同步、CI/CD 等场景。

    352 GitHub stars~1.2k tokensUpdated 5 mo ago
    DevelopmentAuto-check passed
  • Release

    Sma1lboy/rove

    Autonomously cut a Rove (@sma1lboy/rove) release end-to-end — detect the semver bump from pending changesets (flagging an upstream minor you didn't intend), run the release gates, dispatch the…

    160 GitHub stars~3.1k tokensUpdated yesterday
    DevOps & CloudAuto-check: warnings
  • Git PR Workflow

    andymai/brepjs

    This skill should be used when committing, pushing, branching, or merging in the brepjs repository — when a task involves "pre-commit hook failed" (which tier ran, how to bypass), "commit rejected…

    115 GitHub stars~2.9k tokensUpdated yesterday
    DevelopmentAuto-check passed

More from crafter-station/skills

  • Intent Layer

    crafter-station/skills

    Set up hierarchical Intent Layer (AGENTS.md files) for codebases.

    112 GitHub starsUsed in 1 repo~633 tokens
    Auto-check passed
  • CLI Audit

    crafter-station/skills

    Audit an existing CLI against cli-build: how well an agent can operate it and how well a human can read it.

    112 GitHub stars~3k tokensUpdated 1 mo ago
    Auto-check passed
  • Skill Gen

    crafter-station/skills

    Deprecated. An agent skill from crafter-station/skills.

    112 GitHub stars~5.7k tokensUpdated 1 mo ago
    Auto-check passed
  • Generate Brand Assets

    crafter-station/skills

    Generate OG images and favicon based on project branding. An agent skill from crafter-station/skills.

    112 GitHub stars~1.3k tokensUpdated 1 mo ago
    Auto-check passed
  • CLI Build

    crafter-station/skills

    Design and build a CLI that an AI agent can operate safely and a human can supervise.

    112 GitHub stars~5.2k tokensUpdated 1 mo ago
    Auto-check passed
  • Surfacer

    crafter-station/skills

    Compile a mapped surface into working interfaces and keep them alive as the target changes.

    112 GitHub stars~829 tokensUpdated 1 mo ago
    Auto-check passed

Questions about Obsidian Plugin Release

What does Obsidian Plugin Release do?

Release a new version of an Obsidian community plugin without forgetting steps. Obsidian Plugin Release is an agent skill from crafter-station/skills. Release a new version of an Obsidian community plugin without forgetting steps.

When should I use Obsidian Plugin Release?

Obsidian Plugin Release fits situations like: user says release the plugin; bump <plugin to X.Y.Z; ship a new Obsidian release; tag a new plugin version.

How do I install Obsidian Plugin Release in Claude Code?

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

How do I install Obsidian Plugin Release in Codex?

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

Can I use Obsidian Plugin Release 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 crafter-station/skills --skill obsidian-plugin-release -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-release, .gemini/skills/obsidian-plugin-release, .github/skills/obsidian-plugin-release and .opencode/skills/obsidian-plugin-release in your project.

What does Obsidian Plugin Release need to run?

Going by SKILL.md and its folder, Obsidian Plugin Release needs TypeScript and JavaScript for the scripts in its folder and the command-line tools its instructions call (git, gh, bun, bunx, npm and npx). Our summary lists: Node.js.

Does Obsidian Plugin Release access the network?

SKILL.md names 1 domain. In commands or code: community.obsidian.md; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Obsidian Plugin Release 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Obsidian Plugin Release use?

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

About 1.8k tokens (SKILL.md is roughly 7.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2k tokens, read only when the agent opens those files.

What are the alternatives to Obsidian Plugin Release?

Skills that share tags, products or a category with Obsidian Plugin Release: Update Dependencies (alorence/django-modern-rpc, 111 stars), npm Package Publisher (klaudworks/universal-skills, 181 stars), Python Pypi Package Builder (github/awesome-copilot, 40k stars) and Git Changes Reporter (No-Trade-No-Life/Yuan, 352 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Obsidian Plugin Release?

crafter-station (a GitHub organization) maintains it in crafter-station/skills, which has 112 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on September 7, 2026.

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