skills/obsidian/obsidian-plugin-release/SKILL.md
Automate Obsidian plugin release workflows including version management, CHANGELOG updates, building, PR creation, and GitHub Release publishing. Use when preparing initial releases or version updates for Obsidian community plugins. Handles version consistency across manifest.json, package.json, and versions.json with support for interactive workflows and individual utility scripts.
npx skillsauth add atman-33/atman-workspace obsidian-plugin-releaseInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Automate the release process for Obsidian community plugins from version bumping through GitHub Release creation.
This skill provides Python scripts for managing Obsidian plugin releases:
Run the interactive workflow for guided release:
python3 .claude/skills/obsidian-plugin-release/scripts/release_workflow.py
This will guide you through:
Use individual scripts for specific tasks:
# Check version consistency
python3 scripts/check_versions.py [project_root]
# Bump version
python3 scripts/bump_version.py <major|minor|patch|X.Y.Z> [project_root]
# Build plugin
python3 scripts/build_plugin.py [project_root]
# Update CHANGELOG
python3 scripts/update_changelog.py <create|update> <version> <owner/repo> [project_root]
# Create PR (requires gh CLI)
python3 scripts/create_pr.py <from_branch> <to_branch> <version> [project_root]
# Create GitHub Release (requires gh CLI)
python3 scripts/create_release.py <version> [--publish] [project_root]
For the first public release of an Obsidian plugin:
# 1. Run interactive workflow
python3 .claude/skills/obsidian-plugin-release/scripts/release_workflow.py
# Select "1. Initial release"
# Follow prompts to set version (default 1.0.0)
# Edit CHANGELOG.md when prompted
# Workflow will build, commit, and push
# 2. Create PR manually or use script
python3 scripts/create_pr.py feature/core main 1.0.0
# 3. Merge PR on GitHub
# 4. Checkout main and build
git checkout main
git pull
python3 scripts/build_plugin.py
# 5. Create release
python3 scripts/create_release.py 1.0.0 --publish
For updating existing plugins:
# 1. Run interactive workflow
python3 .claude/skills/obsidian-plugin-release/scripts/release_workflow.py
# Select "2. Version update"
# Choose bump type: patch (bugs), minor (features), or major (breaking)
# Edit CHANGELOG.md when prompted
# Workflow will build, commit, and push
# 2. Create PR
python3 scripts/create_pr.py feature/new-feature main 1.1.0
# 3. Merge PR on GitHub
# 4. Checkout main and build
git checkout main
git pull
python3 scripts/build_plugin.py
# 5. Create release
python3 scripts/create_release.py 1.1.0 --publish
Note: For manual step-by-step control, use individual scripts documented in "Script Reference" section below.
Validates version consistency across config files.
Checks:
manifest.json version existspackage.json version matches manifest (if exists)versions.json has entry for current versionversions.json entry matches manifest.json minAppVersionUsage:
python3 scripts/check_versions.py [project_root]
Exit codes:
Updates version in all config files atomically.
Updates:
manifest.json: version fieldpackage.json: version field (if exists)versions.json: adds new entry, removes oldUsage:
# Semantic version bump
python3 scripts/bump_version.py patch # 1.0.0 → 1.0.1
python3 scripts/bump_version.py minor # 1.0.0 → 1.1.0
python3 scripts/bump_version.py major # 1.0.0 → 2.0.0
# Explicit version
python3 scripts/bump_version.py 1.5.3
Builds the plugin and verifies artifacts.
Actions:
npm run buildmain.js existsmanifest.json existsUsage:
python3 scripts/build_plugin.py [project_root]
Exit codes:
Creates or updates CHANGELOG.md using Keep a Changelog format.
Modes:
create: Generate initial CHANGELOG.md with TODO sectionsupdate: Add new version section to existing CHANGELOG.mdUsage:
# Create initial CHANGELOG
python3 scripts/update_changelog.py create 1.0.0 owner/repo
# Update for new version
python3 scripts/update_changelog.py update 1.1.0 owner/repo
Generated Structure: The script follows Keep a Changelog format with these requirements:
## [Unreleased]
## [1.1.0] - 2026-01-17
### Added
- New feature
## [1.0.0] - 2026-01-16
### Added
- Initial release
[Unreleased]: https://github.com/owner/repo/compare/1.1.0...HEAD
[1.1.0]: https://github.com/owner/repo/compare/1.0.0...1.1.0
[1.0.0]: https://github.com/owner/repo/releases/tag/1.0.0
⚠️ CRITICAL: Link Definition Placement
[version]: definitions together at the bottomNotes:
Creates GitHub Pull Request using gh CLI.
Requirements:
gh) installed and authenticatedGenerated PR includes:
Usage:
python3 scripts/create_pr.py feature/core main 1.0.0
Setup gh CLI:
# Install: https://cli.github.com/
# Authenticate:
gh auth login
Creates GitHub Release with build artifacts.
Requirements:
gh) installed and authenticatedmain.js, manifest.json, styles.css (optional)Features:
--publish to publish immediately)CHANGELOG Integration:
## [X.Y.Z] - YYYY-MM-DD### Added, ### Changed, ### Fixed, etc.Generated Release Example:
Tag: 1.1.4
Title: Release 1.1.4
Assets: main.js, manifest.json, styles.css
Notes:
## Changed
- Move command/agent editor Save and Cancel buttons into a sticky header
## Installation
### Manual Installation
1. Download main.js, manifest.json, and styles.css
2. Place in: <VaultFolder>/.obsidian/plugins/<plugin-id>/
3. Restart Obsidian and enable the plugin
Usage:
# Create draft release (recommended)
python3 scripts/create_release.py 1.0.0
# Create and publish immediately
python3 scripts/create_release.py 1.0.0 --publish
# Publish draft later via gh CLI
gh release edit 1.0.0 --draft=false
❌ WRONG: v1.0.0 (with 'v' prefix)
✅ CORRECT: 1.0.0 (no prefix)
Obsidian plugin system requires tags without 'v' prefix. All scripts enforce this.
Every GitHub Release MUST include:
main.js (bundled plugin code)manifest.json (plugin metadata)styles.css (optional, but include if present)These files must be built from the main branch after PR merge, not from feature branch.
Three files must stay synchronized:
manifest.json → version fieldpackage.json → version fieldversions.json → entry mapping plugin version to minimum Obsidian versionScripts handle this automatically, but manual edits must maintain consistency.
Scripts that interact with GitHub require the gh CLI:
Installation:
brew install ghwinget install GitHub.cliAuthentication:
gh auth login
Verification:
gh auth status
Run check_versions.py to diagnose:
python3 scripts/check_versions.py
If inconsistent, either:
bump_version.py to fixEnsure build completed successfully:
python3 scripts/build_plugin.py
Check that main.js and manifest.json exist at project root.
Authenticate GitHub CLI:
gh auth login
Follow prompts to complete authentication.
Install Node.js and npm:
Verify installation:
npm --version
Problem: Link definitions scattered between version sections
Symptoms:
## [version] headersSolution:
[version]: link definitions in the fileCorrect structure:
## [1.1.0] - 2026-01-17
...
## [1.0.0] - 2026-01-16
...
[Unreleased]: https://github.com/.../compare/1.1.0...HEAD
[1.1.0]: https://github.com/.../compare/1.0.0...1.1.0
[1.0.0]: https://github.com/.../releases/tag/1.0.0
Problem: Release notes not extracted by create_release.py
Cause: CHANGELOG structure doesn't match expected format
Solution:
## [X.Y.Z] - YYYY-MM-DD### Added, ### Changed, etc.[version]: are at the file end (not scattered between sections)compare/old...new[Unreleased] compares latest version to HEAD# 1. From feature branch, run workflow
python3 .claude/skills/obsidian-plugin-release/scripts/release_workflow.py
# Select: 1 (initial release)
# Version: 1.0.0
# Edit CHANGELOG.md when prompted
# 2. Create PR
python3 .claude/skills/obsidian-plugin-release/scripts/create_pr.py feature/core main 1.0.0
# 3. Review and merge PR on GitHub
# 4. Switch to main and build
git checkout main
git pull origin main
python3 .claude/skills/obsidian-plugin-release/scripts/build_plugin.py
# 5. Create release
python3 .claude/skills/obsidian-plugin-release/scripts/create_release.py 1.0.0
# 6. Review draft release on GitHub, then publish
# Done! Plugin is now released and BRAT-compatible
tools
Zenn記事のMarkdown校正を行うスキル。記事を読み、Zenn独自記法の正確性・見出し構造・コードブロック・リンク・画像・テーブル・埋め込み・メッセージ/アコーディオン記法をチェックし、改善提案を行う。ユーザーが「Zenn記事を校正して」「Zennの記法をチェックして」「記事をレビューして」「Markdown確認して」と依頼した際に使用する。
tools
Develop React applications for VS Code Webview surfaces. Use when working on the `webview-ui` package, creating features, components, or hooks for VS Code extensions. Includes project structure, coding guidelines, and testing instructions.
testing
Best practices for reliable terminal command execution and output capture. Use this skill when running shell commands, especially in environments like WSL where output might be truncated or lost, to ensure results are properly captured and inspected.
databases
Supabaseデータベースマイグレーションの準備を行うスキル。バックアップの作成と差分マイグレーションファイルの生成を実施します。ユーザーが「マイグレーションを準備」「バックアップと差分を作成」「マイグレーションファイルを生成」などのリクエストをした際に使用します。