Agent skill
pre-release
Validates a project is ready to tag and ship. Use when tagging a release, cutting a version, shipping a package, or asking "are we ready to release?" Checks repo hygiene, CI status, docs, version sync, and build verification. Optimized for Obsidian plugins with fallback detection for other project types.
Install this agent skill to your Project
npx add-skill https://github.com/philoserf/claude-code-setup/tree/main/skills/pre-release
SKILL.md
Pre-Release Gate
Systematic verification that a project is ready to tag and release. Runs every check, reports a summary, and blocks on failures.
Usage
Invoke with an optional version argument:
/pre-release— detect version from package.json, manifest.json, or similar/pre-release 1.2.0— verify against a specific expected version
Project Detection
Detect the project type from the root directory before running checks. This determines which commands and files to verify.
Obsidian plugin (primary path): manifest.json contains an id field and obsidian appears in devDependencies. Expect package.json, manifest.json, versions.json, and build artifacts main.js, styles.css.
Other projects: Detect from go.mod (Go), pyproject.toml (Python), Cargo.toml (Rust), or fall back to generic checks. Adapt commands accordingly — the checklist structure stays the same, but the specific commands change.
Checklist
Run all checks from the project root. Use parallel tool calls where checks are independent. Report results as they complete.
Phase 1: Repository State
Run these in parallel:
- Clean working tree —
git statusmust show no uncommitted changes (staged or unstaged). Untracked files are acceptable only if covered by.gitignore. - On default branch — Confirm the current branch is
main(or the repo's default). Releases should be tagged from the default branch. - Up to date with remote —
git fetch originthen compareHEADwithorigin/main. Warn if behind. - No open PRs targeting main —
gh pr list --base main --state openshould be empty or the user should acknowledge pending PRs.
Phase 2: Quality & Build
Run the project's validation pipeline. For Obsidian plugins, this is typically a single command that covers multiple concerns.
- Validate — Run the project's validate script if one exists (
bun run validate,make validate, etc.). For Obsidian plugins, this typically runs type checking, linting, build, and verifies artifacts exist. If no validate script exists, run check/lint, test, and build as separate steps. - Tests pass — Run the project's test command (
bun test,go test ./...,pytest, etc.). Skip if the validate script already ran tests. - Walkthrough current — If a
walkthrough.mdexists, runuvx showboat verify walkthrough.mdto confirm code blocks match current source. Skip if no walkthrough exists. - Dependency audit — Run the project's audit command (
bun audit --audit-level=critical,uv pip audit,go vuln check, etc.). Warn on high severity, block on critical.
Phase 3: Release Readiness
- Version consistency — All version-bearing files must agree on the target version:
package.json→versionmanifest.json→version(Obsidian plugins)versions.json— must have an entry mapping the target version to aminAppVersion(Obsidian plugins)Cargo.toml,pyproject.toml,go.mod— as applicable If versions disagree, suggest running the version-bump script (e.g.,bun run version) if one exists.
- CHANGELOG entry —
CHANGELOG.md(or equivalent) must have a section for the target version. - CI passing on main —
gh run list --branch main --limit 1should show a successful run. If the latest run failed, report which jobs failed. - Tag available —
git tag -l <version>must be empty (tag doesn't already exist). - Previous release tag exists — Verify there's at least one prior tag. For first releases, note this as informational rather than blocking.
- Changes since last tag — Show
git log --oneline <last-tag>..HEADso the user can review what's included.
Output
Present a summary table after all checks complete:
Pre-Release Gate: v2.0.0 (Obsidian plugin)
===========================================
| # | Check | Status | Details |
|----|------------------------|--------|--------------------------------|
| 1 | Clean working tree | PASS | |
| 2 | On default branch | PASS | main |
| 3 | Up to date with remote | PASS | |
| 4 | No open PRs | WARN | 1 open PR (#36) |
| 5 | Validate | PASS | types, lint, build, artifacts |
| 6 | Tests pass | PASS | 12 tests |
| 7 | Walkthrough current | PASS | showboat verified |
| 8 | Dependency audit | PASS | |
| 9 | Version consistency | PASS | 2.0.0 across all files |
| 10 | CHANGELOG entry | PASS | 2.0.0 section found |
| 11 | CI passing | PASS | |
| 12 | Tag available | PASS | 2.0.0 not yet tagged |
| 13 | Prior release exists | PASS | 1.5.0 |
| 14 | Changes since last tag | INFO | 8 commits |
Result: READY (0 failures, 1 warning)
Status meanings
- PASS — Check succeeded, no action needed
- WARN — Non-blocking concern the user should acknowledge
- FAIL — Blocking issue that must be resolved before tagging
- INFO — Informational, not pass/fail
- SKIP — Check not applicable to this project
After the gate
If all checks pass (no FAIL status), ask the user if they want to proceed with tagging. The release workflow is tag-push — GitHub Actions handles building and publishing the release:
git tag -a <version> -m "Release <version>"
git push origin <version>
For Obsidian plugins, this triggers the release workflow which builds the plugin and creates a GitHub release with main.js, styles.css, and manifest.json as assets.
If any check fails, list the failures and suggest specific fixes. Do not offer to tag.
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
local-issues
Reviews a codebase for bugs, design issues, and code cleanliness problems with specific file paths and line numbers. Use when auditing code quality, finding bugs, doing a code review, finding problems, or reviewing a project for issues. Creates issue files in `.issues/` directory.
skill-improve
Generates prioritized improvement recommendations for Claude Code skills. Use when improving skills, enhancing customizations, or wanting actionable feedback on how to make a skill better. Provides impact/effort prioritization with specific fix suggestions.
release
Executes the final release workflow for Obsidian plugins after pre-release checks pass. Use when tagging a release, publishing a version, or shipping an Obsidian plugin. Bumps version via bun run script, creates git tag, pushes to trigger GitHub Actions, and updates GitHub release notes from CHANGELOG.md.
skill-quality
Scores Claude Code skills (1-5) across 6 weighted quality dimensions aligned with official Anthropic docs. Use when evaluating skill quality, rating skills, scoring customizations, comparing skill effectiveness, or checking if a skill follows best practices. Produces per-dimension scores with evidence, weighted totals, quality tier classification, and actionable improvement recommendations.
obsidian-cli
Interacts with Obsidian vaults using the Obsidian CLI to read, create, and manage notes, tasks, properties, tags, and more. Also supports plugin and theme development with commands to reload plugins, run JavaScript, capture errors, take screenshots, and inspect the DOM. Use when the user asks to interact with their Obsidian vault, manage notes, add to daily note, find notes about a topic, check tasks, append to a note, query the vault, list tags, list files, manage bookmarks, check sync status, view file history, use templates, query bases, run QuickAdd, perform vault operations from the command line, or develop and debug Obsidian plugins and themes.
cc-check
Runs systematic tests on Claude Code customizations. Use when testing whether a customization works correctly, running functional and regression tests, smoke testing a skill, or validating that a skill or hook behaves as expected. Executes sample queries and validates responses against expected behavior.
Didn't find tool you were looking for?