Agent skill

Beta Release

by joybro in joybro/obsidian-similar-notes

A skill your agent uses when releasing a beta build of this Obsidian plugin for BRAT-based testing (e.g.

MITAuto-check passedAI & LLM Engineering

Install Beta Release

skills CLI
$ npx skills add joybro/obsidian-similar-notes --skill beta-release -a claude-code

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

GitHub CLI
$ gh skill install joybro/obsidian-similar-notes beta-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/joybro/obsidian-similar-notes.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/beta-release .claude/skills/beta-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
beta-release
GitHub stars
107
Token cost
~3.7k tokens
SKILL.md length
1,786 words
Files
1
Skills in repo
2
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when releasing a beta build of this Obsidian plugin for BRAT-based testing (e.g.

  • Works in 9 steps: Sanity check before bumping → Determine the beta version → Update files → …
  • Releasing a beta build of this Obsidian plugin for BRAT-based testing (e.g
  • SKILL.md covers Overview, The pattern this repo uses, Reading current release state… and When to Use, plus 3 more sections
  • Calls gh, git and npm; reaches github.com

What it does

Beta Release is an agent skill from joybro/obsidian-similar-notes. Use when releasing a beta build of this Obsidian plugin for BRAT-based testing (e.g. "release 1.3.0-beta.1", "베타 릴리즈", "ship a beta via BRAT") — before the eventual stable release of the same X.Y.Z.

Its SKILL.md is about 3.7k 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 AI & LLM Engineering. It works with Obsidian and Ollama. The licence is MIT.

When your agent uses it

  • Releasing a beta build of this Obsidian plugin for BRAT-based testing (e.g

Example prompts

  • “release 1.3.0-beta.1”
  • “ship a beta via BRAT”
  • “/beta-release”

Workflow steps

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

  1. Sanity check before bumping
  2. Determine the beta version
  3. Update files
  4. Commit
  5. Push and tag
  6. Draft the release body and hand off to the maintainer
  7. Reopen auto-closed issues (if any)
  8. Post BRAT-invite comments on relevant issues
  9. After beta testing → stable

What it can do on your machine

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

    • gh
    • git
    • npm

    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:

    • github.com

    Also links to:

    • forum.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

Beta Release loads about 3.7k tokens when it runs. Until then it costs about 53 tokens; SKILL.md has 1,786 words of instructions outside code blocks.

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

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 joybro/obsidian-similar-notes at commit fc90799, republished under its MIT licence (© joybro). 1,786 words, ~3,655 tokens.

Download SKILL.mdSave it as .claude/skills/beta-release/SKILL.md (or your agent's skills folder).
name
beta-release
description
Use when releasing a beta build of this Obsidian plugin for BRAT-based testing (e.g. "release 1.3.0-beta.1", "베타 릴리즈", "ship a beta via BRAT") — before the eventual stable release of the same X.Y.Z.

Beta Release

Overview

This plugin ships pre-release builds via BRAT so the maintainer (and any opted-in reporters) can test changes for a few days before stable. Stable users continue to receive only the version listed in manifest.json via Obsidian's community plugin store.

Pair skill: bump-version handles the stable bump that closes out the beta cycle.

The pattern this repo uses

The default-branch manifest.json stays at the previous stable. package.json carries the X.Y.Z-beta.N semver-prerelease. A tag X.Y.Z-beta.N triggers release.yml, which auto-creates a draft release whose asset manifest.json is version-synced to the tag and is auto-marked pre-release for -beta/-alpha/-rc tags; the maintainer just reviews and publishes.

The key insight: the default-branch manifest.json and the release-asset manifest.json are different copies and are meant to differ during a beta — branch stays at stable (store-safe), asset matches the tag (BRAT-correct).

Why this pattern (verified against BRAT's official guide, not guessed):

  • Obsidian's community plugin store reads manifest.json on the default branch — keeping it at the stable version is what blocks the beta from reaching all users (BRAT guide: "Obsidian will pick up an update once the manifest.json in the default branch of your repository changes."). The store does not read pre-release assets, so the asset version is free to be the beta version.
  • BRAT uses the release tag as the source of truth and "validates both the release tag version and the version in the manifest.json asset … notifying users of the discrepancy" when they disagree. So a stable asset manifest on a -beta tag still works (testers get the right main.js and BRAT shows the tag version) but shows testers a needless version-mismatch warning — which is why release.yml now syncs the asset manifest to the tag (BRAT guide best practice: "Always ensure the version in your released manifest.json matches your release tag version").
  • manifest-beta.json is not used and should not be — BRAT ignores it from v1.1.0 on (legacy). A survey of 8 popular plugins found only dataview still ships one. release.yml's asset-sync replaces what manifest-beta.json used to do.

Sources: BRAT Developer Guide, BRAT pre-release/version-picker update.

Reading current release state (don't re-derive — this tripped past sessions up)

The default-branch manifest.json version is not a reliable indicator of the beta line: betas are cut without bumping it, so a X.Y.Z-beta.N tag's committed manifest still says the previous stable. Use these instead:

  • What's been cut: git tag --sort=-creatordate
  • Draft vs published / prerelease: gh release view <tag> --json isDraft,isPrerelease,publishedAt — NOT gh release list (it lists drafts too) and NOT the changelog/manifest.
  • CHANGELOG caveat: a dated ## [X.Y.Z] - YYYY-MM-DD heading can exist before X.Y.Z ships (the beta-prep step renames ## [Unreleased] early), so a dated heading does not mean that version is released.

Why it matters: wrong release-state assumptions produce wrong user-facing guidance — e.g. telling the maintainer to "publish the draft" when it's already live, or sending an email that points at a release link that 404s.

When to Use

  • User asks for "beta release", "release X.Y.Z-beta.N", "ship a beta", "BRAT 으로 테스트"
  • A batch of fixes/features has landed on main and you want maintainer-only test exposure before stable

If the user just says "release 1.3.0" (no beta), use bump-version instead.

Process

0. Sanity check before bumping
  • Confirm main is the branch and has the work to ship.
  • git log --oneline <last-stable-tag>..HEAD — eyeball the commit set.
  • Scan every commit message in that range for Closes #N / Fixes #N / Resolves #N. If any appear, those issues will auto-close the moment you push to main from the beta-bump commit onward — which is wrong for a beta (the issue should close on stable, not on the beta build). If you find any, plan to reopen those issues after pushing (see step 6) and use Refs #N in future commits.
1. Determine the beta version
  • Default N=1 for the first beta of a given X.Y.Z. Subsequent betas of the same X.Y.Z increment N.
  • If the user gives an explicit version (e.g. /beta-release 1.3.0-beta.2), use it.
2. Update files
  • package.json → "version": "X.Y.Z-beta.N"
  • manifest.json → leave at the previous stable (do not change)
  • CHANGELOG.md → rename the existing ## [Unreleased] section to ## [X.Y.Z] - YYYY-MM-DD (the stable header, not -beta.N). If a ## [X.Y.Z] section already exists — you're shipping beta.2+ of the same X.Y.Z, so an earlier beta already created it — do NOT rename; that would produce a duplicate [X.Y.Z]. Instead merge the ## [Unreleased] entries into the existing ## [X.Y.Z] section under the matching categories, then delete the now-empty [Unreleased] header (keep the existing date; bump-version finalizes it at stable). Feature sessions maintain ## [Unreleased] as work lands (see repo CLAUDE.md → Changelog), so the entries should already be present — add any that were missed. Reuse the [X.Y.Z] section as-is for the eventual stable bump. Follow the existing categories (Added / Changed / Improved / Fixed) and reference issue numbers (#N). Write from user perspective — see bump-version for the same conventions.

Verify each entry against the user-facing surface before finalizing. Commit descriptions tell why and how a change was made; CHANGELOG entries tell what the user sees. These diverge in small but visible ways — e.g. a UI control described as a "slider" that's actually addText (number input); a fix said to affect "the sidebar" that also affects the in-document panel; a setting whose label in code differs from the working name in the commit. For each entry, open the component that implements the change and confirm control type, exact label, and which views are affected. The same verified entry text feeds into the release body in step 5 — getting it right here means the release body is correct by construction.

3. Commit
bash
git commit -m "chore: prepare X.Y.Z beta

- package.json: A.B.C -> X.Y.Z-beta.N
- manifest.json: stays at A.B.C so the community plugin store does not
  push the beta to stable users; BRAT testers receive this build via the
  X.Y.Z-beta.N prerelease.
- CHANGELOG entry for X.Y.Z is drafted in place and will be reused at
  stable release time."
4. Push and tag
bash
git push origin main
git tag X.Y.Z-beta.N
git push origin X.Y.Z-beta.N

The push of the tag triggers .github/workflows/release.yml → builds with npm run build → version-syncs the asset manifest.json to the tag (the committed default-branch file is untouched) → adds --prerelease for -beta/-alpha/-rc tags → creates a draft release with assets main.js, manifest.json, styles.css.

Wait for the workflow with gh run watch <id> (or gh run list --workflow=release.yml --limit 1).

Show full SKILL.md (815 more words)Show less
5. Draft the release body and hand off to the maintainer

The maintainer publishes via the GitHub UI (so they visually confirm assets + flags). Provide a release body draft.

Scope for beta.2+ bodies: incremental, not cumulative (decided 2026-08-29, 1.7.0-beta.3). Detail only what's new since the previous published beta, then one line "Everything from X.Y.Z-beta.N-1 is included: <comma-list of headline items>". Rationale: the primary readers are BRAT testers already on the previous beta (they need the delta); newcomers from an issue link get the cumulative picture via the one-line link; full duplication drifts as entries get edited across betas. The CHANGELOG [X.Y.Z] section remains the cumulative record and the stable release note aggregates. (A beta whose predecessor was never published — like 1.7.0-beta.2 after unpublished beta.1 — is effectively the first beta: write it cumulatively.)

Template (first beta of a cycle; adapt the intro and body scope per the rule above for beta.2+):

markdown
First beta of the X.Y.Z release — <one-line summary of the headline changes> (#refs, with contributor credits inline).

## Installing via BRAT

1. Install the [BRAT](https://github.com/TfTHacker/obsidian42-brat) plugin in Obsidian
2. Open BRAT settings → **Add Beta Plugin** → paste `joybro/obsidian-similar-notes`

## What's in this beta

<summarize the CHANGELOG entry here — do NOT paste a long entry verbatim. Keep each item's bold title + one-sentence "what the user sees"; drop nested sub-bullets and deep mechanism prose; merge same-root-cause Fixed items into one line. The release note is a scannable announcement; the CHANGELOG file stays detailed and untouched.>

## Feedback

If anything looks off (<2-3 concrete symptoms specific to this beta's changes>), please report on #<issue> or #<issue>. Thanks!

## Known limitation (optional)

<list anything unfixed, e.g. cannot-reproduce reports>

Credit contributors inline in the intro line — maintainer convention (asked for explicitly on 1.7.0-beta.2 when a draft omitted it). Forms: (#42, suggested by @user) for an idea/report, (#51, contributed by @user in #54) for a PR. Check each shipped item's issue/PR for who to credit. The Feedback section is standing, not optional — it routes reports to the tracked issues (release pages have no comment box, see Gotchas).

Set the body on the draft yourself — do not make the maintainer paste it. gh release edit modifies the draft's body only; it does NOT publish (the release stays draft: true):

bash
gh release edit X.Y.Z-beta.N --notes-file <path-to-body.md>

Then hand the maintainer the draft URL and these steps:

  1. Open the draft release and review the pre-filled body + assets
  2. Confirm "Set as a pre-release" is already ticked — release.yml sets it automatically for -beta tags; just verify it (don't rely on memory that it's automatic — glance at the checkbox)
  3. Publish

The maintainer still publishes via the UI so they visually confirm assets + the prerelease checkbox. Do not call gh release edit --draft=false yourself unless the user explicitly asks; that is the publication step and surfaces an external-visible artifact.

6. Reopen auto-closed issues (if any)

For each issue your step 0 scan flagged: gh issue reopen <N>. Note in the BRAT-invite comment that it was reopened because auto-close fired off the beta.

7. Post BRAT-invite comments on relevant issues

For each issue addressed by this beta, post a short comment. Tone is short and friendly — see prior maintainer comments on the issue or in past resolved issues for voice match. Template:

Hi @<reporter>, <one-line summary of the fix/feature> in X.Y.Z-beta.N. <Optional: reopen explanation if applicable.>

If you want to try the beta before stable, install via BRAT:
1. Install the BRAT plugin
2. Add Beta Plugin → `joybro/obsidian-similar-notes`

Release notes: https://github.com/joybro/obsidian-similar-notes/releases/tag/X.Y.Z-beta.N

Will <ping again | close this> once X.Y.Z stable is out. Thanks!

If the issue covers multiple items, mirror them as a - [x] / - [ ] checklist so the reporter sees per-item status (esp. for unreproduced items).

Posting issue comments is external-visible — require explicit user approval before invoking gh issue comment.

8. After beta testing → stable

When the maintainer is satisfied:

  • manifest.json A.B.C → X.Y.Z (this is what releases the plugin to all users)
  • package.json X.Y.Z-beta.N → X.Y.Z
  • CHANGELOG.md entry — reuse as-is, or amend if any follow-up fixes landed during the beta
  • New commit chore: bump version to X.Y.Z, push
  • git tag X.Y.Z && git push origin X.Y.Z → release workflow re-runs, draft created
  • Publish (no prerelease checkbox this time)
  • On each tracked issue: post a stable-shipped comment and gh issue close <N>

(bump-version skill covers the file-change mechanics; this step is what closes out the beta cycle.)

Gotchas

GotchaWhyMitigation
Closes #N in a commit message auto-closes the issue on push, but you're only releasing a betaGitHub keywordUse Refs #N in commit messages while a stable hasn't shipped; reopen if it slipped through
Lint max-lines fails on long test filesThe repo's .eslintrc.json had max-lines: 400 applied globally until #39 cycle — test overrides now relax itIf it regresses, ensure overrides[].files: ["**/__tests__/**", "**/*.test.ts(x)"] still disables max-lines and max-lines-per-function
GitHub release page has no comment boxReleases are view-only — only issues/PRs accept commentsWhen writing release body or asking for feedback, point to #<issue> (not "leave a comment here")
Workflow creates the release as prerelease: false (fixed)release.yml now adds --prerelease for *-beta*/*-alpha*/*-rc* tags and syncs the asset manifest.json version to the tagMaintainer only verifies the (already-ticked) checkbox before publishing — no manual toggle needed
BRAT testing on a different machineThe plugin needs to be installed via BRAT (not install-local.sh) when the test machine doesn't have the repo checkoutConfirm BRAT is installed on the test machine before betas are needed

Common mistakes

  • Bumping manifest.json to the beta version → community plugin store would push the beta to all stable users. Always leave manifest.json at the previous stable until the stable release.
  • Writing the CHANGELOG entry as ## [X.Y.Z-beta.N] — use ## [X.Y.Z] so it can be reused at stable without edits.
  • Asking the maintainer to publish via gh release edit instead of the UI — small risk, but they lose the visual confirmation of assets/checkbox state. Hand off the UI flow unless they explicitly delegate.
  • Posting BRAT-invite comments before the maintainer publishes the release (the URL in the comment will 404 until publish).

© joybro, 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/beta-release of joybro/obsidian-similar-notes.

Open the folder on GitHubat commit fc90799

Compare with similar skills

Beta 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.

Beta Release compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Beta Release this skilljoybro/obsidian-similar-notes107—~3.7kAutomated safety check: PassMIT
Vault Contextual RetrievalAgriciDaniel/claude-obsidian15k—~1.4kAutomated safety check: PassMIT
Hugging Face LLM Trainerhuggingface/skills11k3 repos~7.2kAutomated safety check: PassApache-2.0
Subwave LLM Benchperminder-klair/subwave1.4k—~2.4kAutomated safety check: NotesMIT
DGX Spark Memory and Thermal Opswshobson/agents40k1 repos~2kAutomated safety check: PassMIT
Skill Conductorsmixs/skill-conductor179—~6.6kAutomated safety check: PassMIT

Similar skills

  • Vault Contextual Retrieval

    AgriciDaniel/claude-obsidian

    Builds and queries a local contextual BM25 index over an Obsidian vault, with optional Nomic reranking through Ollama and strict consent rules before any text leaves the machine.

    15k GitHub stars~1.4k tokensUpdated 27 days ago
    Knowledge ManagementAuto-check passed
  • Hugging Face LLM Trainer

    huggingface/skills

    Official

    Trains or fine-tunes language and vision models with TRL or Unsloth on Hugging Face Jobs cloud GPUs, then converts the results to GGUF.

    11k GitHub starsUsed in 3 repos~7.2k tokens
    AI & LLM EngineeringAuto-check passed
  • Subwave LLM Bench

    perminder-klair/subwave

    Benchmark and compare LLM models for SUB/WAVE's on-air calls — track picks, segments, listener requests, DJ scripts, banter, and programme beats — in both candidate-pool and agent modes, using…

    1.4k GitHub stars~2.4k tokensUpdated today
    AI & LLM EngineeringAuto-check: notes
  • Plans memory headroom, works through out-of-memory failures and watches temperature and power during long ML training jobs on NVIDIA DGX Spark.

    40k GitHub starsUsed in 1 repo~2k tokens
    AI & LLM EngineeringAuto-check passed
  • Skill Conductor

    smixs/skill-conductor

    Create, edit, evaluate, and package agent skills. An agent skill from smixs/skill-conductor.

    179 GitHub stars~6.6k tokensUpdated 2 mo ago
    AI & LLM EngineeringAuto-check passed
  • Pii Safe Documents

    danyuchn/pii-guard

    Processes sensitive local documents through PII Guard and a local Ollama model into a reversible redacted copy, without letting the main agent read the original or restored contents.

    249 GitHub stars~2.7k tokensUpdated 5 days ago
    AI & LLM EngineeringAuto-check passed

More from joybro/obsidian-similar-notes

  • Bump Version

    joybro/obsidian-similar-notes

    A skill your agent uses when bumping to a stable X.Y.Z release (e.g., "release 1.3.0", "bump to 0.13.0", "prepare 2.0.0").

    107 GitHub stars~2.2k tokensUpdated 1 mo ago
    Auto-check passed

Works with

Questions about Beta Release

What does Beta Release do?

A skill your agent uses when releasing a beta build of this Obsidian plugin for BRAT-based testing (e.g. Beta Release is an agent skill from joybro/obsidian-similar-notes.g.

When should I use Beta Release?

Beta Release fits situations like: releasing a beta build of this Obsidian plugin for BRAT-based testing (e.g.

How do I install Beta Release in Claude Code?

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

How do I install Beta Release in Codex?

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

Can I use Beta 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 joybro/obsidian-similar-notes --skill beta-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/beta-release, .gemini/skills/beta-release, .github/skills/beta-release and .opencode/skills/beta-release in your project.

What does Beta Release need to run?

Going by SKILL.md and its folder, Beta Release needs the command-line tools its instructions call (gh, git and npm).

Does Beta Release access the network?

SKILL.md names 2 domains. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. As links in the text: forum.obsidian.md. This is read from the text; nothing was executed.

Is Beta 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. Review the folder before installing.

What licence does Beta Release use?

Beta 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 Beta Release use?

About 3.7k tokens (SKILL.md is roughly 15k 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 Beta Release?

Skills that share tags, products or a category with Beta Release: Vault Contextual Retrieval (AgriciDaniel/claude-obsidian, 15k stars), Hugging Face LLM Trainer (huggingface/skills, 11k stars), Subwave LLM Bench (perminder-klair/subwave, 1.4k stars) and DGX Spark Memory and Thermal Ops (wshobson/agents, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Beta Release?

joybro (a GitHub user) maintains it in joybro/obsidian-similar-notes, which has 107 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on September 5, 2026.

Source: joybro/obsidian-similar-notes on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.