Fix Random CI Test Failure
dotnet/macios
Investigate and fix flaky/random CI test failures in dotnet/macios.
Cut and publish a new NarraCat-app version — bump the version number, build the Windows x64 package in CI, package + sign + notarize the macOS build locally, and publish both platforms into one…
$ npx skills add yannikzz/narracat-novel-agent --skill release-app -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install yannikzz/narracat-novel-agent release-app --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/yannikzz/narracat-novel-agent.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/release-app .claude/skills/release-app && 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-app" agent skill from https://github.com/yannikzz/narracat-novel-agent/tree/main/.claude/skills/release-app into .claude/skills/release-app/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-app", 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/yannikzz/narracat-novel-agent/tree/main/.claude/skills/release-appType 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 yannikzz/narracat-novel-agent --skill release-app -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install yannikzz/narracat-novel-agent release-app --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/yannikzz/narracat-novel-agent.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/release-app .agents/skills/release-app && 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-app" agent skill from https://github.com/yannikzz/narracat-novel-agent/tree/main/.claude/skills/release-app into .agents/skills/release-app/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-app", 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 yannikzz/narracat-novel-agent --skill release-app -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install yannikzz/narracat-novel-agent release-app --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/yannikzz/narracat-novel-agent.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/release-app .cursor/skills/release-app && 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-app" agent skill from https://github.com/yannikzz/narracat-novel-agent/tree/main/.claude/skills/release-app into .cursor/skills/release-app/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-app", 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/yannikzz/narracat-novel-agent.git --path .claude/skills/release-app--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 yannikzz/narracat-novel-agent --skill release-app -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install yannikzz/narracat-novel-agent release-app --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/yannikzz/narracat-novel-agent.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/release-app .gemini/skills/release-app && 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-app" agent skill from https://github.com/yannikzz/narracat-novel-agent/tree/main/.claude/skills/release-app into .gemini/skills/release-app/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-app", 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 yannikzz/narracat-novel-agent release-appInstalls 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 yannikzz/narracat-novel-agent --skill release-app -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/yannikzz/narracat-novel-agent.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/release-app .github/skills/release-app && 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-app" agent skill from https://github.com/yannikzz/narracat-novel-agent/tree/main/.claude/skills/release-app into .github/skills/release-app/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-app", 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 yannikzz/narracat-novel-agent --skill release-app -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install yannikzz/narracat-novel-agent release-app --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/yannikzz/narracat-novel-agent.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/release-app .opencode/skills/release-app && 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-app" agent skill from https://github.com/yannikzz/narracat-novel-agent/tree/main/.claude/skills/release-app into .opencode/skills/release-app/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-app", 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-appCut and publish a new NarraCat-app version — bump the version number, build the Windows x64 package in CI, package + sign + notarize the macOS build locally, and publish both platforms into one…
Release App is an agent skill from yannikzz/narracat-novel-agent. Cut and publish a new NarraCat-app version — bump the version number, build the Windows x64 package in CI, package + sign + notarize the macOS build locally, and publish both platforms into one GitHub Release. Use this whenever the user wants to ship a new version, asks what version is live, or wants to know whether a release is ready to go — 发新版 / 发版 / 发布新包 / 打包发出去 / 上线新版本 / 给用户推更新 / 出个正式版 / 现在线上是哪一版. Also use it for anything that goes wrong before, during, or after a release: notarization or signing looks stuck…
Its SKILL.md is about 1.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including scripts.
It sits in Testing & QA, covering Failing and flaky tests and App store release. It works with macOS and GitHub. The repository describes itself as: 面向中国网文作者的 AI 共创桌面应用 | AI-powered desktop writing studio for Chinese web novels. The licence is AGPL-3.0.
Read from SKILL.md and the folder at commit 2c49f9f. 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.
Ships 1 file in scripts/ (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
ghnodecurlxcrunbungitFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
update.narracat.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Release App loads about 1.6k tokens when it runs. Until then it costs about 249 tokens; SKILL.md has 398 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 noted patterns worth knowing about, such as sudo or a known installer.
**bun 不把 `.env` 传给 node 子进程**(`package:release` 正是 bun run → node),所以脚本自己加载 `.env.local` / `.env`。凭证明明配好了却报缺失,先往这个方向查。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); the scripts in this folder are not scanned.
The full file from yannikzz/narracat-novel-agent at commit 2c49f9f, republished under its AGPL-3.0 licence (© yannikzz). 398 words, ~1,636 tokens.
.claude/skills/release-app/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.发一个新版本 = 抬版本号 → CI 出 Windows 包 → 本机打 mac 包并签名公证 → 两个平台的产物进同一个 GitHub Release。
这件事不可逆:Release 一旦发布,所有装了 App 的用户都会自动收到。所以下面每一步的顺序和闸都不是形式主义,撞到闸就停下来问人,不要绕过去。
更新代理(workers/narracat-update)把两个平台的更新清单都翻译成 releases/latest/download/<清单名>:
/mac-arm64/latest-mac.yml → releases/latest/download/latest-mac.yml
/win-x64/latest.yml → releases/latest/download/latest.yml所以一个只含单平台产物的 Release 一旦成为 latest,另一个平台的清单查询直接 404 —— 那条更新链就此断掉,直到下一次带上该平台产物的发布为止。不是"用户停在上一版",是从此收不到任何更新,两端都没有报错。
release.mjs 已经加了闸(必须显式给 --with-win 或 --mac-only),但闸拦得住命令、拦不住判断:--mac-only 只在 Windows 从未发布过、或 Windows CI 出不了包而 mac 有紧急修复要发时才用。Windows 正式发布之后,用它就等于主动掐断 Windows 用户的更新链。
| 平台 | 在哪打 | 为什么只能在那儿 |
|---|---|---|
| macOS arm64 | 本机 | 签名要读本机钥匙串里的 Developer ID 证书,之后还要跑 Apple 公证 |
| Windows x64 | GitHub CI | mac 交叉编译不出能用的 Windows 包(keytar / better-sqlite3 是 mac 原生二进制);且 SignPath 的免费签名硬要求"可验证地从源码构建" |
版本号一致不靠人盯:两边都读同一个 package.json(ADR-0038)。
先跑这个,它把该确认的一切一次报全(只读,不改任何东西):
node .claude/skills/release-app/scripts/preflight.mjsWindows 产物在本机时(--with-win 那条老路)再跑一次带目录核对:
node .claude/skills/release-app/scripts/preflight.mjs --win-dir <目录>走 --win-from-release(常规路径)时不需要这一步 —— 产物在 GitHub 上,由发布脚本远程核验。
它检查:在不在 main、工作区干不干净、与远端同步没、版本号是否合法且高于线上已发布的 latest、这个 tag 是不是已经发过、三样凭证齐不齐、签名身份在不在、Windows 三件产物齐不齐且版本号对不对得上。
有 ✗ 就先解决再往下走 —— 这些问题在后面每一步都会重新撞上,只是那时候人已经等了半小时。把结果用大白话转述给用户,不要只甩脚本输出。
版本号由人决定,不会自己往上走(ADR-0038)。改 package.json 的 version 一处即可,其余全部从它派生。
| 这次发的是 | 怎么走 |
|---|---|
| 修 bug、小改进 | patch:0.3.0 → 0.3.1 |
| 有用户能感知的新能力 | minor:0.3.0 → 0.4.0 |
| 正式公开发布 | 1.0.0(留给那一刻,不要提前用掉) |
改完要走 PR 合进 main,不要直接推 main(有分支保护,直推不会被拒、只会留一条绕过记录)。
发版前值得先问用户一句:这一版对用户来说是什么? 这既决定 patch 还是 minor,也是 Release notes 的内容。可以用 git log --oneline v<上一版>..main 看这一版实际包含什么,用大白话总结给用户确认 —— 用户关心的是"能感觉到什么变化",不是提交列表。
确认下来的那段话就写进 docs/release-notes/<版本号>.md,跟版本号一起走 PR 合进 main。
它会成为 Release 页最前面的正文;不写就只有通用样板。
gh workflow run windows-release-build.yml --ref main
gh run watch <run-id> --exit-status # 约 5 分钟CI 出完包会直接把三件产物传进 v<版本> 的 draft Release,本机不需要下载任何东西。
draft 不被匿名 API 与 releases/latest 看见,所以传上去 ≠ 发出去 —— 人工确认闸仍在步骤 3。
为什么不是「下载 artifact 再上传」:产物 244MB,而国内实测下载约 23KB/s(要 3 小时), 那条路等于把发版卡死。CI 在 GitHub 内网里传是秒级的。artifact 仍然保留,供调试与留档。
CI 拒绝往已发布的 Release 里传东西(那会把线上文件悄悄换掉而版本号不变)。撞上这个报错说明版本号忘了抬。
⚠️ CI 全绿不构成任何功能保证 —— 这条流水线从不启动界面,而已知的 Windows 崩溃全在渲染层。CI 只证明"包能打出来"。
bun --no-cache run release --win-from-release--win-from-release = Windows 三件已由 CI 就位在 draft 里。发布前会远程核验它们真的在、且不是 0 字节的空壳(上传中断会留下名字齐全的空文件);缺任何一件都会中止并告诉你重跑哪条命令。
产物已经在本机时(少见)用 --with-win <目录> 那条老路,行为不变。
这一条命令会:打 mac 包 → 签名 → 公证 → 建 draft Release → 传两个平台的全部产物 → 最后才 publish。20-40 分钟,其中大部分是公证在等 Apple。
顺序纪律:先建 draft、传完全部资产、最后才 publish。draft 不被匿名 API 与 releases/latest 看见,所以在资产全部传完之前没有任何用户能看到这个版本 —— 任一步失败,Release 停在 draft,线上仍是上一版,零影响。
中途会有一个确认界面列出待传的全部文件。这是最后一道人工闸,让用户过目再确认。
⚠️ 这条命令必须由用户在真实终端窗口里跑(Terminal / iTerm)。它检查 process.stdin.isTTY,
拒绝任何非交互调用——包括 Claude Code 里的 ! 命令 前缀,那个也不是 TTY。这道闸防的正是
「脚本或 CI 自动把版本发出去」,所以不要试图绕过它。把 cd <仓库路径> 和发布命令一起给用户,
让他粘进终端;发完让他说一声,再自己去核验完成判据(下面那节),不要凭他一句「好了」就收工。
不需要再开任何「抬版本号」的收尾 PR。 以前要把 HIGHEST_SHIPPED_VERSION 常量抬到刚发的版本、
再把 package.json 抬到下一个占位号,2026-09-16 起撤了:「线上最高是几」由预检和发布脚本直接问
GitHub 的 latest release,仓库里不再手抄。下一版的号在下次发版的第一步(步骤 1)再定,
package.json 在两次发版之间停在刚发的那个号上是正常状态。
然后验证线上真的通了:
curl -sS -o /dev/null -w "mac %{http_code}\n" https://update.narracat.com/mac-arm64/latest-mac.yml
curl -sS -o /dev/null -w "win %{http_code}\n" https://update.narracat.com/win-x64/latest.yml两个都应该是 200。任何一个是 404,就说明那个平台的更新链断了 —— 多半是这次的 Release 少传了那个平台的产物。
公证轮询超时 ≠ 公证失败。 脚本等不到不代表 Apple 没批。先查:
xcrun notarytool info <submission-id> --key ... --key-id ... --issuer ...状态是 Accepted 的话,公证早就过了,只差把票据钉上去:xcrun stapler staple <path>。这能省掉重新公证的二十多分钟 —— 别急着重跑整条流水线。
dmg 的 sha512 与清单里的值对不上是正常的,不是要修的 bug。electron-builder 的清单记的是 zip 的哈希,dmg 是另外打的。
三样凭证缺一不可(签名证书 / 公证凭证 / 语料 token),发版档在第一步就断言。其中语料 token 最阴 —— 缺了 App 照常能开、照常能写,只是永远不注入真人范例,静默降质,没人会发现。
bun 不把 .env 传给 node 子进程(package:release 正是 bun run → node),所以脚本自己加载 .env.local / .env。凭证明明配好了却报缺失,先往这个方向查。
发版是给所有用户推送,所以 mac 包发出去之前值得本机装一下走一遍(能打开、能新建项目、能写一章)。CI 和单测都证明不了这件事。
Windows 首个 beta 是未签名的,用户必然撞 SmartScreen 蓝屏警告(点"更多信息"→"仍要运行")。这是 SignPath Foundation 免费签名的硬条款要求的必经步骤 —— 必须先以未签名形态发布过才能申请 —— 不是疏忽,发之前跟用户说清楚。
不需要传任何文件,也不需要发新版本:打开 Release 页 → 编辑上一个正常版本 → 勾选 "Set as the latest release" → 保存。
更新代理认的就是 GitHub 的 latest 标记,所以这个动作立刻让所有客户端回到上一版。
说"发好了"之前,这几条都要成立:
curl 都返回 200gh release view <tag> --json body -q .body)前四条任何一条不成立,都要如实告诉用户哪里没成,而不是报告"发布成功"。
发布说明那条是 0.3.1 踩出来的:CI 建 draft 时写的占位串被当成发布说明发给了所有用户, 连「Windows 未签名会撞 SmartScreen」那段该告知的话都一起丢了(
releaseNotes()在--win-from-release路径上根本没被调用)。脚本已修并有变异验证过的测试兜底, 但产物齐全 + 更新链 200 不代表这个 Release 对用户是像样的,所以判据里单列一条。
这一版对用户是什么,写在 docs/release-notes/<版本号>.md(见该目录 README)。
发版时它会排在发布说明最前面,后面自动接上通用样板(升级方式 + 首次安装 + Windows 未签名提示)。
不写不阻断发版,但预检会出一条提醒,且发布说明就只剩样板、答不了「这一版改了什么」。
步骤 3 那个确认界面现在会把真正会发出去的发布说明原样打出来 —— 按确认之前先读一遍它, 用户在 Release 页看到的就是那段。
© yannikzz, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (scripts) in .claude/skills/release-app of yannikzz/narracat-novel-agent.
Open the folder on GitHubat commit 2c49f9f
Release App 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 App this skillyannikzz/narracat-novel-agent | 103 | — | ~1.6k | Automated safety check: Notes | AGPL-3.0 | |
| Fix Random CI Test Failuredotnet/macios | 2.9k | — | ~1.3k | Automated safety check: Pass | Custom licence | |
| CI Fix MonitorZaxbyHub/opencode-swarm | 493 | — | ~551 | Automated safety check: Pass | MIT | |
| Releasenotepadqq/notepadqq | 2.3k | — | ~2k | Automated safety check: Pass | GPL-3.0 | |
| Workbuddy Skin Studiocdredfox/workbuddy-skin-studio | 198 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Debug Os Failure On GitHubstrands-agents/box | 249 | — | ~1.3k | Automated safety check: Notes | Apache-2.0 |
dotnet/macios
Investigate and fix flaky/random CI test failures in dotnet/macios.
ZaxbyHub/opencode-swarm
Codex adapter for monitoring and fixing CI failures on opencode-swarm PRs.
notepadqq/notepadqq
Release a new Notepadqq version. An agent skill from notepadqq/notepadqq.
cdredfox/workbuddy-skin-studio
Apply a reversible theme/skin to the WorkBuddy desktop app (Tencent AI office agent) via local Chromium DevTools Protocol (CDP) injection.
strands-agents/box
Debug a CI failure on an OS you are not on (you are on Linux, it fails on macos-latest, or the reverse) without opening a pull request per attempt.
callebtc/sayit
Build, sign, validate, notarize, and publish Say It macOS DMG releases using the repository release script.
yannikzz/narracat-novel-agent
View or change NarraCat-app's internal-test release gate / remote kill switch (the release-guard Cloudflare Worker in workers/release-guard).
yannikzz/narracat-novel-agent
Narrative structure knowledge for long-form web fiction, covering emotional stakes, tension rhythm, climax layering, foreshadowing payoff pacing, value shifts and event architecture, multi-thread…
yannikzz/narracat-novel-agent
A reference work analysis method providing text decomposition and five-dimension extraction framework (premise / world / characters / structure / style, with narrator voice sub-framework under…
yannikzz/narracat-novel-agent
Web-fiction craft material library consumed by the /write brief compressor — retention mechanics (hooks, pacing, conflict clarity, dialogue load, payoff delivery, chapter-end pull) kept as…
yannikzz/narracat-novel-agent
Guide for answering natural language questions about novel content by querying NovelMemory MCP read tools from the main conversation.
yannikzz/narracat-novel-agent
A real-novel writing style reference library backed by the novelquerystylereference MCP tool.
Categories
Cut and publish a new NarraCat-app version — bump the version number, build the Windows x64 package in CI, package + sign + notarize the macOS build locally, and publish both platforms into one…. Release App is an agent skill from yannikzz/narracat-novel-agent. Cut and publish a new NarraCat-app version — bump the version number, build the Windows x64 package in CI, package + sign + notarize the macOS build locally, and publish both platforms into one GitHub Release.
Release App fits situations like: wants to ship a new version; asks what version is live; wants to know whether a release is ready to go — 发新版 / 发版 / 发布新包 / 打包发出去 / 上线新版本 / 给用户推更新 / 出个正式版 / 现在线上是哪一版; anything that goes wrong before.
Run `npx skills add yannikzz/narracat-novel-agent --skill release-app -a claude-code`. Or copy the skill folder (.claude/skills/release-app in yannikzz/narracat-novel-agent) into .claude/skills/release-app in your project. Claude Code loads it when a task matches its description.
Run `npx skills add yannikzz/narracat-novel-agent --skill release-app -a codex`. Or copy the skill folder (.claude/skills/release-app in yannikzz/narracat-novel-agent) into .agents/skills/release-app 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 yannikzz/narracat-novel-agent --skill release-app -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-app, .gemini/skills/release-app, .github/skills/release-app and .opencode/skills/release-app in your project.
Going by SKILL.md and its folder, Release App needs JavaScript for the scripts in its folder and the command-line tools its instructions call (gh, node, curl, xcrun, bun and git). Our summary lists: Node.js.
SKILL.md names 1 domain. In commands or code: update.narracat.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Release App is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.6k tokens (SKILL.md is roughly 6.5k 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 App: Fix Random CI Test Failure (dotnet/macios, 2.9k stars), CI Fix Monitor (ZaxbyHub/opencode-swarm, 493 stars), Release (notepadqq/notepadqq, 2.3k stars) and Workbuddy Skin Studio (cdredfox/workbuddy-skin-studio, 198 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
yannikzz (a GitHub user) maintains it in yannikzz/narracat-novel-agent, which has 103 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 7, 2026.
Source: yannikzz/narracat-novel-agent on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.