blurt: Skill for Claude Code

.claude/skills/release/SKILL.md

release is a skill for Claude Code from AssemblyAI/blurt. It costs 72 tokens per session (1,728 once invoked), scanned A, original, MIT.

A release workflow for building, signing, notarizing, packaging, and publishing a Blurt version through GitHub Actions. Notarization is Apple's approval process for software distributed outside the Mac App Store.

In plain words
What is it for?
Use it when shipping a new Blurt version, including creating the release build, DMG, GitHub tag, and published release.
Why use it?
It organizes the checks and publishing steps needed for a signed macOS release. It also prevents version conflicts and requires confirmation before publishing an irreversible release.

Skill for Claude Code

Written for Claude Code: disable-model-invocation in frontmatter.

This is AssemblyAI/blurt's own configuration. It tells Claude Code how to work on blurt itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything blurt configures →

Reuse

Borrowing it

Nothing to install: this file belongs to AssemblyAI/blurt. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/AssemblyAI/blurt/main/.claude/skills/release/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/AssemblyAI/blurt

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for release

README.md
[![agentmods](https://agentmods.dev/badge/skills/assemblyai/blurt/release/github.svg)](https://agentmods.dev/skills/assemblyai/blurt/release)
Your own site
<a href="https://agentmods.dev/skills/assemblyai/blurt/release"><img src="https://agentmods.dev/badge/skills/assemblyai/blurt/release/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for release

Your own site · 80×15
<a href="https://agentmods.dev/skills/assemblyai/blurt/release"><img src="https://agentmods.dev/badge/skills/assemblyai/blurt/release.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 72 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,728 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00072 $0.01728
Opus 5.5 $0.00029 $0.00691
Sonnet 5.5 $0.00014 $0.00346
Haiku 4.5 $0.00007 $0.00173

Measured 1mo ago against content hash c876bdfcd9a4, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

release scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.claude/skills/release/SKILL.md · 116 lines

How it starts

The opening of the file, as written. The whole thing — 116 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Releasing Blurt

Everything happens in GitHub Actions, not on this machine — so this works from a web or chat session with no terminal, and without permission to dispatch a workflow. Confirm the target version with the user before starting — publishing is hard to undo.

Preconditions (verify first)

  • main is up to date and green; releases ship from main.
  • The release-build environment has the signing + notary secrets and SPARKLE_ED_PRIVATE_KEY, and release-publish has required reviewers. See RELEASE.md — that is the source of truth for custody. Without them the release workflow fails on its secrets-presence step.
  • Check the highest existing vX.Y.Z tag, not just the version on main: an orphan tag from an abandoned release means the next patch number is already taken, and release-bump.sh refuses to reuse one.

Steps

  1. Start release-bump. You almost certainly can't dispatch a workflow (that needs actions: write), so push a marker branch instead — it needs only the push you already do:

    git push origin main:refs/heads/release/v0.1.37
    

    The branch name names the version, and it must carry nothing of its own: the workflow refuses a marker that isn't an ancestor of main. It then runs scripts/release-bump.sh on macos-26 (marketing version + build number in App/Blurt/project.yml, regenerate the project, commit) and force-pushes the bump onto that same branch. Dispatching still works if you do have the permission, and only that path accepts an empty version (next patch).

  2. Get the release notes written. The bump also commits release-notes/X.Y.Z.md: the commits since the last release in an HTML comment, and a TODO where the notes go. They are what Sparkle's update window shows every user, check fails while the TODO is there, and the release build refuses to run without them — there is no automatic fallback. Read RELEASE.md → Release notes → Writing them first and follow it: translate each commit into what a user notices, drop what they wouldn't (refactors, CI, docs, reverted work), order by how noticeable it is, and match the length and voice of the model notes there. Fewer bullets is better than padding. Before drafting, skim the merged PRs behind the subjects (gh pr view <n>) when a subject doesn't say what the user sees. Run scripts/check-release-notes.sh, then show the draft to the user — with the commits you left out and why — and get their go-ahead before committing it to the release branch. Their judgment is the point of the rule.

  3. Open the PR for that branch and hand it to the user to merge. The workflow does not open it, on purpose: a PR created by GITHUB_TOKEN never triggers check and so can never merge. Opening it from here works — an agent's own credentials are not GITHUB_TOKEN.

  4. Merging it starts release — no dispatch. release.yml triggers on a push to main touching project.yml; its resolve job confirms the version changed and isn't already tagged, then the build job does the whole Apple path (xcodebuild Release → sign nested code → notarize → staple → DMG → verify → EdDSA-sign the DMG → write appcast.xml with the notes) and uploads the artifacts. Dispatch release by hand only to re-run a failed build, to republish, or for a non-main dry run.

  5. Hand the ship gate to the user — the publish job parks on the release-publish environment. Tell them to download the DMG from the run's artifacts, install it, and approve once it works. Nothing is rebuilt after approval, so what they test is what ships. release-publish.sh then tags, pushes, and publishes — and flipping the release to latest is what moves the Sparkle feed, so installed copies see it within a day.

Read the full file on GitHub · 116 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 1mo ago Changed · +23 lines · +11 tokens per session c876bdfcd9a4
  2. 2mo ago First seen · 93 lines · 61 tokens per session scan A dd389fb7917d

Subscribe to this mod's changes

release is a skill published in the GitHub repository AssemblyAI/blurt (65 stars, last pushed today), licensed MIT. It adds 72 tokens to every session and 1,728 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.