Release Digest
Kiln-AI/Kiln
Post a "what's changed since the last release" recap to the release Slack channel for final QA.
Back-port fix(es) onto an existing release line and cut a patch release.
$ npx skills add tetherto/qvac --skill release-patch -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install tetherto/qvac release-patch --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/tetherto/qvac.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/ocr-ggml/.agent/skills/release-patch .claude/skills/release-patch && rm -rf skills-srcUse ~/.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/
Install the "release-patch" agent skill from https://github.com/tetherto/qvac/tree/main/packages/ocr-ggml/.agent/skills/release-patch into .claude/skills/release-patch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-patch", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/tetherto/qvac/tree/main/packages/ocr-ggml/.agent/skills/release-patchType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add tetherto/qvac --skill release-patch -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install tetherto/qvac release-patch --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tetherto/qvac.git skills-src && mkdir -p .agents/skills && cp -r skills-src/packages/ocr-ggml/.agent/skills/release-patch .agents/skills/release-patch && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "release-patch" agent skill from https://github.com/tetherto/qvac/tree/main/packages/ocr-ggml/.agent/skills/release-patch into .agents/skills/release-patch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-patch", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add tetherto/qvac --skill release-patch -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install tetherto/qvac release-patch --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tetherto/qvac.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/packages/ocr-ggml/.agent/skills/release-patch .cursor/skills/release-patch && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "release-patch" agent skill from https://github.com/tetherto/qvac/tree/main/packages/ocr-ggml/.agent/skills/release-patch into .cursor/skills/release-patch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-patch", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/tetherto/qvac.git --path packages/ocr-ggml/.agent/skills/release-patch--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add tetherto/qvac --skill release-patch -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install tetherto/qvac release-patch --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tetherto/qvac.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/packages/ocr-ggml/.agent/skills/release-patch .gemini/skills/release-patch && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "release-patch" agent skill from https://github.com/tetherto/qvac/tree/main/packages/ocr-ggml/.agent/skills/release-patch into .gemini/skills/release-patch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-patch", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install tetherto/qvac release-patchInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add tetherto/qvac --skill release-patch -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/tetherto/qvac.git skills-src && mkdir -p .github/skills && cp -r skills-src/packages/ocr-ggml/.agent/skills/release-patch .github/skills/release-patch && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "release-patch" agent skill from https://github.com/tetherto/qvac/tree/main/packages/ocr-ggml/.agent/skills/release-patch into .github/skills/release-patch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-patch", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add tetherto/qvac --skill release-patch -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install tetherto/qvac release-patch --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tetherto/qvac.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/packages/ocr-ggml/.agent/skills/release-patch .opencode/skills/release-patch && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "release-patch" agent skill from https://github.com/tetherto/qvac/tree/main/packages/ocr-ggml/.agent/skills/release-patch into .opencode/skills/release-patch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-patch", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
release-patchBack-port fix(es) onto an existing release line and cut a patch release.
Release Patch is an agent skill from tetherto/qvac. Back-port fix(es) onto an existing release line and cut a patch release. Create the new release branch from the base with NO direct commits, land the fix(es) and the version+changelog bump via PRs into it, then publish via the release skill. Use for patching a shipped version (e.g. what an older SDK release pins) without pulling in later main-line changes.
Its SKILL.md is about 3k 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 Development, covering Changelog and release notes. The repository describes itself as: Open-source local AI SDK - run AI on-device with no cloud, no API keys. Supports GGUF, RAG, image, music, and video generation, speech-to-text, P2P inference, and more… The licence is Apache-2.0.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit d92f697. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
gitnpmghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, npm and gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
GITHUB_TOKENPAT_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Release Patch loads about 3k tokens when it runs. Until then it costs about 94 tokens; SKILL.md has 1,419 words of instructions outside code blocks.
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.
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.
The full file from tetherto/qvac at commit d92f697, republished under its Apache-2.0 licence (© tetherto). 1,419 words, ~2,983 tokens.
.claude/skills/release-patch/SKILL.md (or your agent's skills folder).Cut a patch release on an existing release line (a shipped x.y.z a consumer still depends on)
by back-porting one or more already-merged fixes, without dragging in later main-line changes.
Use this when, e.g., an older SDK release pins @qvac/<pkg> ^0.36.3 and needs a fix that only landed
on main/a newer minor. The output is a new patch (e.g. 0.36.4) published under the line's
maintenance dist-tag — latest is left pointing at the newest version.
<package> is the directory name under packages/ (e.g. llm-llamacpp). <fix-PR-or-commit> is one
or more merged fix PRs (or their squash-merge SHAs). [base-release-branch] is the release line to
patch (e.g. release-llm-0.36.3); if omitted, discover it in Step 1.
Never commit or git push directly onto a release-* branch. The release-* ruleset requires all
changes to arrive via a merged PR (a bare branch creation push is allowed; subsequent commits are
rejected — GH013 … Changes must be made through a pull request). So: create the release branch as an
exact copy of the base, push it once, then land every change (fix cherry-picks, version bump) via
PRs whose base is that release branch.
packages/sdk/package.json: "@qvac/<pkg>": "^0.36.3" → the 0.36 line, and the patch must be
>= 0.36.3 < 0.37.0.release skill's default is
release-<package>-<version> / tag <package>-v<version>, but real patch lines have used a short
prefix: branch release-llm-<version> + tag llamacpp-llm-v<version>. Do not assume — verify:git ls-remote origin 'release-*' | grep -i <pkg> # candidate branches
git ls-remote --tags origin | grep -iE '<pkg>|llm' # candidate tagsgit show <ref>:packages/<pkg>/package.json | grep '"version"'). That commit is the base.<newver> and the base branch as <base>.main)For each fix PR, take the squash-merge commit on main, not the PR's individual branch commits:
gh pr view <N> --repo tetherto/qvac --json number,title,mergeCommit --jq '{n:.number,title,sha:.mergeCommit.oid}'Do not cherry-pick a version/changelog-only PR (e.g. a prior x.y.z bump) — that bump is redone
for this line in Step 6.
For each source commit, diff its touched files between the base and the commit's parent:
git diff --numstat <base> <squash-sha>~1 -- <touched-paths>Empty output ⇒ that file is identical at the base ⇒ the hunk applies cleanly. Non-empty ⇒ that file diverged ⇒ expect a conflict there (typically test files). If the core source files are identical, the back-port is safe; a few diverged test files are resolved by grafting in Step 5. If everything is heavily diverged, stop and reconsider (the fix may need manual porting, not a cherry-pick).
git -C <repo> fetch origin <base>
git -C <repo> worktree add <wt> origin/<base>
git -C <wt> checkout -b release-<pkg>-<newver> # exact copy of the base, no edits
git -C <wt> config user.email "<you>"; git -C <wt> config user.name "<you>"
git -C <wt> push origin release-<pkg>-<newver> # branch-creation push (allowed)Commit identity = the releaser; never add an AI signature / Co-Authored-By. Confirm HEAD == base
commit. Do not bump the version here — leave it at the base value (publish-safe).
Work on a normal-named branch (not release-*, so it isn't push-protected):
git -C <wt> checkout -b <TICKET>/backport-<pkg>-<newver>
git -C <wt> cherry-pick <squash-sha>...Resolve only the expected diverged-file conflicts by grafting the commit's added block into the base file (keep the base file's structure; do not reformat unrelated lines). All identical-at-base files apply automatically.
Validate completeness (that the cherry-pick captured the source, nothing missed):
git rev-parse <squash-sha>:<file> == git rev-parse HEAD:<file> for each.git show <squash-sha> -- <file> +-lines vs git diff <base> HEAD -- <file> +-lines).Push the helper branch; open PR #1 with base = release-<pkg>-<newver> (four-emoji body; link the
source PR(s)).
CI: add the matrix labels — prebuilds, run-cpp-addon-tests, run-desktop-addon-tests,
run-mobile-addon-tests — to run the fix-validating jobs. Do not add
verified: ci-router reads only those four names, so verified selects no stage and fails
silently, costing a CI round. (The label still exists and its siblings' descriptions still read
"requires verified" — that text is stale; the label gate was retired, and
ci-trust-policy.test.mjs asserts it stays retired.) Auto-approve the release
environment deployment when it appears. Always read failures from full logs via
gh api repos/tetherto/qvac/actions/jobs/{id}/logs — gh run view --job --log silently truncates
(~1.1 MB of ~9 MB) and can fake a "hang". Triage flaky-vs-real; pre-existing environment failures
(e.g. test-darwin-x64 macOS-x64-VM timeouts) are non-gating and not blockers — confirm the fix's own
tests pass. Merge PR #1 into the release branch.
On another helper branch off the (now fix-carrying) release branch:
packages/<pkg>/package.json: base version → <newver>.packages/<pkg>/CHANGELOG.md: add ## [<newver>] - <YYYY-MM-DD> (bracketed heading — the release
workflow requires this format) above the base entry; reuse the original fix's changelog wording,
crediting the fix PR(s). package.json version MUST equal the new heading.npm run lint in packages/<pkg> (older release lines use
standard, newer use prettier); match whatever that branch enforces.Open PR #2 (base = release-<pkg>-<newver>).
release skill to verify)Merging the bump PR into the release-* branch is a trusted push → on-merge-<pkg>.yml runs and
publishes automatically. No labels are needed on a merge/push: push is a trusted event in
ci-router, which short-circuits label parsing and enables every stage on its own. Publication is
gated by version>npm + release-merge-guard. Follow the release skill for the monitor/verify mechanics (its Steps 4–6),
with these nuances:
release-skill latest-guard caveat. The release skill's Step 1 compares the local version to
npm latest and stops if not higher. A back-port (e.g. 0.36.4 < latest 0.38.0) fails that
check — so the publish path for a maintenance patch is the on-merge auto-trigger from the PR merge,
and you verify against the line's maintenance dist-tag, not latest. Use the release skill for
its monitor/verify steps; don't let the latest-guard block a legitimate back-port.npm-dist-tag-determination action publishes an older-than-latest patch under a
maintenance tag (e.g. release-<major.minor>) and must NOT move latest. This is correct —
consumer semver ranges (^0.36.3) resolve by version, so they still pick up the new patch.create-tag job fails (HTTP 403/422). It uses secrets.GITHUB_TOKEN, which is not authorized to
create the protected release tag (no repo tag-ruleset; a user/PAT can). So the git tag is NOT created
automatically — create it manually with a user/PAT credential:git tag <pkg-tag-prefix>-v<newver> <release-branch-sha> # e.g. llamacpp-llm-v0.36.4
git push origin <pkg-tag-prefix>-v<newver>create-release-tag.yml to use secrets.PAT_TOKEN, like label-gate does.)npm view @qvac/<pkg>@<newver> version → the new patch exists.npm view @qvac/<pkg> dist-tags → latest unchanged; the new patch under its maintenance tag.npm view @qvac/<pkg>@'<range>' version).release-* — the ruleset blocks direct commits after branch creation. Land
everything via PRs whose base is the release branch (helper branches are normal-named).gh run view --log truncates — use gh api …/actions/jobs/{id}/logs; sanity-check job duration
vs timeout before believing a "hang". (See reference_gh_job_log_truncation.)release-* auto-publishes (on-merge, trusted push) — the version bump is the
point-of-no-return; keep version at base until then.latest.create-tag 403/422 → create the tag manually (GITHUB_TOKEN can't; PAT/user can).release-skill Step 1 latest-guard doesn't fit back-ports — verify against the maintenance tag.Co-Authored-By in commits or PRs.standard on older release lines, prettier on newer; run npm run lint.@qvac/llm-llamacpp 0.36.4 (QVAC-22472)SDK 0.15 pinned ^0.36.3; the n_predict-inside-reasoning fix was only on main/0.37+.
release-llm-0.36.3 = tag llamacpp-llm-v0.36.3 (84be415c, v0.36.3).0d782b12c (the fix). PR #3327 (0.37.1 bump) NOT cherry-picked.qwen3-5.test.js diverged → grafted the one
new test block; blob-identity confirmed for the rest.release-llm-0.36.4 created from base (no changes) → PR #3337 (fix) → PR #3342 (0.36.4 bump).0.36.4 under dist-tag release-0.36; latest stayed
0.38.0. create-tag failed 403/422 → tag llamacpp-llm-v0.36.4 created manually via SSH.release-merge-guard fails on merge → version not bumped or CHANGELOG heading missing/mis-formatted.release-* and packages/<pkg>/**
changed; check on-merge-<pkg>.yml runs.latest moved to the patch → the dist-tag logic mis-fired; restore with
npm dist-tag add @qvac/<pkg>@<real-latest> latest.© tetherto, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in packages/ocr-ggml/.agent/skills/release-patch of tetherto/qvac.
Open the folder on GitHubat commit d92f697
Release Patch 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Release Patch this skilltetherto/qvac | 674 | — | ~3k | Automated safety check: Pass | Apache-2.0 | |
| Release DigestKiln-AI/Kiln | 5.2k | — | ~2.7k | Automated safety check: Pass | Custom licence | |
| Releaseddalcu/mlx-serve | 1.8k | — | ~1.8k | Automated safety check: Pass | Custom licence | |
| Skills Constitutionjiabaobei/skills-constitution | 231 | — | ~5.6k | Automated safety check: Pass | MIT | |
| Phoenix Release NotesArize-ai/phoenix | 12k | — | ~6.7k | Automated safety check: Pass | Custom licence | |
| Skill ProvenanceLeoYeAI/openclaw-master-skills | 2.2k | — | ~4.8k | Automated safety check: Pass | MIT |
Kiln-AI/Kiln
Post a "what's changed since the last release" recap to the release Slack channel for final QA.
ddalcu/mlx-serve
mlx-serve pre-release validation checklist, CalVer versioning, release steps, and CHANGELOG style.
jiabaobei/skills-constitution
当 Agent 接到专业任务(编码/爬虫/文件操作/API调用/数据分析/文档/部署/推送等)时,强制先查记忆层和技能索引,有匹配必用、无匹配必搜、答复时自动推荐(排除已装)。用于防止 Agent 跳过技能直接硬扛通用能力。跨平台通用(WorkBuddy/Claude/ChatGPT/Cursor/Gemini 等 20+ 框架)。完整版本史见 CHANGELOG.md。
Arize-ai/phoenix
Create Phoenix release documentation grounded in actual code changes.
LeoYeAI/openclaw-master-skills
Version tracking for Agent Skills bundles and their associated files across sessions, surfaces, and platforms.
moeru-ai/airi
Write or rewrite technical text with the rules of ASD-STE100 Simplified Technical English so it is clear, unambiguous, and free of AI slop.
tetherto/qvac
Creates a Solutions page in the QVAC documentation website from a real use case, generalizing the case into reusable guidance and registering the page in the site navigation.
tetherto/qvac
Updates the docs website after a change to the SDK or CLI. An agent skill from tetherto/qvac.
tetherto/qvac
Plan and prepare the QVAC agent-stack release cascade across @qvac/inference, @qvac/sdk, @qvac/cli, @qvac/ai-sdk-provider, @qvac/opencode-plugin, and @qvac/openclaw-plugin.
tetherto/qvac
Run the deterministic code-quality audit, turn related findings into contextual remediation groups, prepare approval-gated Asana proposals, reconcile recurring runs, or configure twice-monthly…
tetherto/qvac
Review C++ changes for string parameter and call-site efficiency conventions (std::stringview, std::string&&, const std::string&, const char, and TransparentStringMap lookup).
tetherto/qvac
Generate changelog entries for a target add-on package. An agent skill from tetherto/qvac.
Categories
Back-port fix(es) onto an existing release line and cut a patch release. Release Patch is an agent skill from tetherto/qvac. Back-port fix(es) onto an existing release line and cut a patch release.
Release Patch fits situations like: patching a shipped version (e.g; tasks that involve Changelog and release notes.
Run `npx skills add tetherto/qvac --skill release-patch -a claude-code`. Or copy the skill folder (packages/ocr-ggml/.agent/skills/release-patch in tetherto/qvac) into .claude/skills/release-patch in your project. Claude Code loads it when a task matches its description.
Run `npx skills add tetherto/qvac --skill release-patch -a codex`. Or copy the skill folder (packages/ocr-ggml/.agent/skills/release-patch in tetherto/qvac) into .agents/skills/release-patch in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add tetherto/qvac --skill release-patch -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/release-patch, .gemini/skills/release-patch, .github/skills/release-patch and .opencode/skills/release-patch in your project.
Going by SKILL.md and its folder, Release Patch needs the command-line tools its instructions call (git, npm and gh) and credentials named GITHUB_TOKEN and PAT_TOKEN. Our summary lists: A credential in GITHUB_TOKEN; A credential in PAT_TOKEN.
SKILL.md contains no URLs. Its commands use git, npm and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
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.
Release Patch is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Release Patch: Release Digest (Kiln-AI/Kiln, 5.2k stars), Release (ddalcu/mlx-serve, 1.8k stars), Skills Constitution (jiabaobei/skills-constitution, 231 stars) and Phoenix Release Notes (Arize-ai/phoenix, 12k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
tetherto (a GitHub organization) maintains it in tetherto/qvac, which has 674 GitHub stars. The repository holds 50 skills in this directory. The repository was last updated on October 7, 2026.
Source: tetherto/qvac on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.