Resolve PR Review
shencangsheng/easydb_app
Resolve pull request code review comments end-to-end. An agent skill from shencangsheng/easydb_app.
A skill your agent uses when adding software auto-update to a Tauri 2 desktop app, or when users ask about tauri-plugin-updater integration, app update checking, distinguishing installer vs portable…
$ npx skills add luochang212/skill-zoo --skill tauri-updater -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install luochang212/skill-zoo tauri-updater --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/luochang212/skill-zoo.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/tauri-updater .claude/skills/tauri-updater && 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 "tauri-updater" agent skill from https://github.com/luochang212/skill-zoo/tree/main/skills/tauri-updater into .claude/skills/tauri-updater/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tauri-updater", 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/luochang212/skill-zoo/tree/main/skills/tauri-updaterType 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 luochang212/skill-zoo --skill tauri-updater -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install luochang212/skill-zoo tauri-updater --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/luochang212/skill-zoo.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/tauri-updater .agents/skills/tauri-updater && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "tauri-updater" agent skill from https://github.com/luochang212/skill-zoo/tree/main/skills/tauri-updater into .agents/skills/tauri-updater/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tauri-updater", 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 luochang212/skill-zoo --skill tauri-updater -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install luochang212/skill-zoo tauri-updater --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/luochang212/skill-zoo.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/tauri-updater .cursor/skills/tauri-updater && 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 "tauri-updater" agent skill from https://github.com/luochang212/skill-zoo/tree/main/skills/tauri-updater into .cursor/skills/tauri-updater/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tauri-updater", 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/luochang212/skill-zoo.git --path skills/tauri-updater--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 luochang212/skill-zoo --skill tauri-updater -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install luochang212/skill-zoo tauri-updater --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/luochang212/skill-zoo.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/tauri-updater .gemini/skills/tauri-updater && 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 "tauri-updater" agent skill from https://github.com/luochang212/skill-zoo/tree/main/skills/tauri-updater into .gemini/skills/tauri-updater/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tauri-updater", 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 luochang212/skill-zoo tauri-updaterInstalls 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 luochang212/skill-zoo --skill tauri-updater -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/luochang212/skill-zoo.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/tauri-updater .github/skills/tauri-updater && 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 "tauri-updater" agent skill from https://github.com/luochang212/skill-zoo/tree/main/skills/tauri-updater into .github/skills/tauri-updater/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tauri-updater", 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 luochang212/skill-zoo --skill tauri-updater -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install luochang212/skill-zoo tauri-updater --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/luochang212/skill-zoo.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/tauri-updater .opencode/skills/tauri-updater && 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 "tauri-updater" agent skill from https://github.com/luochang212/skill-zoo/tree/main/skills/tauri-updater into .opencode/skills/tauri-updater/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tauri-updater", 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.
tauri-updaterA skill your agent uses when adding software auto-update to a Tauri 2 desktop app, or when users ask about tauri-plugin-updater integration, app update checking, distinguishing installer vs portable…
Tauri Updater is an agent skill from luochang212/skill-zoo. Use when adding software auto-update to a Tauri 2 desktop app, or when users ask about tauri-plugin-updater integration, app update checking, distinguishing installer vs portable builds for updates, or generating update manifests for GitHub Releases.
Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It works with Tauri, GitHub and Rust. The repository describes itself as: All-in-One Desktop Agent Skills Utility. Welcome to the Skill Zoo, where all your skills live! The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1c7afa6. 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:
buncargoFrom 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:
github.comapi.github.comobjects.githubusercontent.comgithub-releases.githubusercontent.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
TAURI_SIGNING_PRIVATE_KEYTAURI_SIGNING_PRIVATE_KEY_PASSWORDFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Tauri Updater loads about 2.7k tokens when it runs. Until then it costs about 66 tokens; SKILL.md has 715 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 luochang212/skill-zoo at commit 1c7afa6, republished under its MIT licence (© luochang212). 715 words, ~2,657 tokens.
.claude/skills/tauri-updater/SKILL.md (or your agent's skills folder).Add self-update to a Tauri 2 desktop app using tauri-plugin-updater. Covers macOS DMG, Windows NSIS (auto-install), and Windows portable (manual download link). Uses a GitHub Releases-hosted latest.json manifest with signed artifacts.
tauri-plugin-updater integrationDon't use for:
Tauri updater only works with installers (NSIS, MSI, DMG). Portable builds need a different path.
| Build | Update method | Implementation |
|---|---|---|
| macOS DMG | Auto-download + install | tauri-plugin-updater full flow |
| Windows NSIS | Auto-download + install | tauri-plugin-updater full flow |
| Windows Portable | Link to GitHub Releases | Button opens releases page |
Detecting portable at runtime: Use a Cargo feature flag:
# Cargo.toml
[features]
portable = []// Rust command
#[tauri::command]
pub fn is_portable_build() -> bool {
cfg!(feature = "portable")
}Normal build: cargo build --release
Portable build: cargo build --release --features portable
In lib.rs, conditionally register the updater plugin — skip it when the portable feature is active:
#[cfg(all(desktop, not(feature = "portable")))]
app.handle()
.plugin(tauri_plugin_updater::Builder::new().build())
.expect("Failed to register updater plugin");When is_portable_build() returns true, the frontend shows a GitHub Releases link instead of the auto-update flow.
bun tauri signer generate -w ~/.tauri/<app-name>.keyHit enter twice for empty password. Produces:
~/.tauri/<app-name>.key — private key → store as GitHub Secret TAURI_SIGNING_PRIVATE_KEY~/.tauri/<app-name>.key.pub — public key → paste into tauri.conf.jsonEmpty password is fine — the key lives in encrypted GitHub Secrets. Adding a password means also managing TAURI_SIGNING_PRIVATE_KEY_PASSWORD in CI.
src-tauri/Cargo.toml:
[features]
portable = []
[dependencies]
tauri-plugin-updater = "2"
tauri-plugin-process = "2"src-tauri/src/lib.rs:
// Always register process plugin (needed for relaunch after update)
.plugin(tauri_plugin_process::init())
.setup(|app| {
// Skip updater for portable builds
#[cfg(all(desktop, not(feature = "portable")))]
app.handle()
.plugin(tauri_plugin_updater::Builder::new().build())
.expect("Failed to register updater plugin");
Ok(())
})Register is_portable_build as a Tauri command in the invoke handler.
Command file (e.g. commands/settings.rs):
#[tauri::command]
pub fn is_portable_build() -> bool {
cfg!(feature = "portable")
}src-tauri/tauri.conf.json:
{
"bundle": {
"createUpdaterArtifacts": true
},
"plugins": {
"updater": {
"pubkey": "<PUBLIC KEY FROM .pub FILE>",
"endpoints": [
"https://github.com/<owner>/<repo>/releases/latest/download/latest.json"
]
}
}
}The releases/latest/download/ URL pattern uses GitHub's redirect to always serve the latest release's asset.
Update CSP connect-src to allow GitHub release asset domains:
connect-src 'self' ipc: http://ipc.localhost https://api.github.com https://github.com https://objects.githubusercontent.com https://github-releases.githubusercontent.comsrc-tauri/capabilities/default.json — add permissions:
{
"permissions": [
"updater:default",
"process:default",
"process:allow-restart"
]
}Install:
bun add @tauri-apps/plugin-updater@^2 @tauri-apps/plugin-process@^2State machine:
idle → checking → up-to-date
→ downloading → ready-to-restart
→ available (download retry) → downloading → ready-to-restart
→ error → idle (retry)
Portable: always shows "GitHub Releases" link button| State | UI | Action |
|---|---|---|
idle | "Check for Updates" button | check() |
checking | Spinner, disabled button | Wait |
up-to-date | "Up to date" | None |
downloading | Version number + cumulative byte progress | Wait |
available | Version number + "Download & Install" | Retry downloadAndInstall() after a download failure |
ready-to-restart | "Restart Now" button | relaunch() |
error | Friendly message + Retry | check() |
Key API details:
check() returns null when up-to-date (not an error)check() throws on network failure or 404 (manifest doesn't exist yet) — show friendly message, not raw errordownloadAndInstall() progress callback: use event.data.chunkLength (not position/length). Track cumulative bytes with a state updater.Update object in a useRef to avoid stale closure in the progress callback.Error handling pattern — never expose raw errors:
try {
const result = await check();
if (result) { /* downloadAndInstall() immediately */ }
else { /* up-to-date */ }
} catch {
// Network error, 404, rate limit, etc.
setStatus("error"); // shows friendly t("updater.error") message
}Build job — pass signing key:
- name: Tauri build
uses: tauri-apps/tauri-action@v0
env:
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
with:
args: --target ${{ matrix.target }}Rename updater artifacts (after build, before upload):
- name: Rename updater artifacts
shell: bash
run: |
case "${{ matrix.target }}" in
universal-apple-darwin)
TAR=$(find "$BUNDLE/macos" -name "*.app.tar.gz" | head -1)
[ -n "$TAR" ] && mv "$TAR" "$BUNDLE/<App>-${VERSION}-macOS.app.tar.gz"
[ -f "${TAR}.sig" ] && mv "${TAR}.sig" "$BUNDLE/<App>-${VERSION}-macOS.app.tar.gz.sig"
;;
x86_64-pc-windows-msvc)
EXE_SIG=$(find "$BUNDLE/nsis" -name "*.exe.sig" | head -1)
[ -f "$EXE_SIG" ] && mv "$EXE_SIG" "$BUNDLE/<App>-${VERSION}-Windows.exe.sig"
;;
esacWindows portable rebuild:
- name: Create portable zip (Windows)
if: matrix.target == 'x86_64-pc-windows-msvc'
shell: pwsh
run: |
cargo build --release --manifest-path src-tauri/Cargo.toml --target ${{ matrix.target }} --features portable
# ... package the portable binary as beforeThe --features portable flag compiles a binary where is_portable_build() returns true and the updater plugin is not registered.
Generate latest.json (in release job, after all artifacts are available):
- name: Generate updater manifest
run: |
MACOS_SIG=$(cat artifacts/macos/*.app.tar.gz.sig 2>/dev/null || echo "")
WINDOWS_SIG=$(cat artifacts/windows/*.exe.sig 2>/dev/null || echo "")
jq -n \
--arg version "$VERSION" \
--arg pub_date "$(date -u +"%Y-%m-%dT%H:%M:%SZ")" \
--arg macos_sig "$MACOS_SIG" \
--arg macos_url "https://github.com/<owner>/<repo>/releases/download/${VERSION}/<App>-${VERSION}-macOS.app.tar.gz" \
--arg windows_sig "$WINDOWS_SIG" \
--arg windows_url "https://github.com/<owner>/<repo>/releases/download/${VERSION}/<App>-${VERSION}-Windows.exe" \
'{
version: $version,
notes: "",
pub_date: $pub_date,
platforms: {
"darwin-x86_64": { signature: $macos_sig, url: $macos_url },
"darwin-aarch64": { signature: $macos_sig, url: $macos_url },
"windows-x86_64": { signature: $windows_sig, url: $windows_url }
}
}' > latest.json
- name: Upload manifest
run: gh release upload "$TAG_NAME" latest.jsonmacOS universal binary: Both darwin-x86_64 and darwin-aarch64 point to the same .app.tar.gz with the same signature.
| Build | Standard output | Updater artifact | Updater uses? |
|---|---|---|---|
| macOS universal | <App>-*.dmg | <App>-*.app.tar.gz + .sig | Yes (tar.gz) |
| Windows NSIS | <App>-*.exe | <App>-*.exe + .sig | Yes (exe re-used) |
| Windows Portable | <App>-*-Portable.zip | N/A | No (releases link) |
| Mistake | Fix |
|---|---|
| Pushing tag before main | Always push main first. Tag on unpushed commit won't trigger CI on correct SHA |
Forgetting createUpdaterArtifacts | No .app.tar.gz or .sig files will be generated |
| CSP blocking download | Add objects.githubusercontent.com and github-releases.githubusercontent.com to connect-src |
Missing process:allow-restart | relaunch() fails silently |
| Showing raw errors to user | Catch and show friendly message. The first release won't have latest.json yet — that's a 404, not a bug |
| Wrong progress event fields | Tauri 2 uses event.data.chunkLength, not position/length |
Treating check() null as error | null = no update available, it's a success case |
| Stale closure in download callback | Store Update in useRef, not just useState |
| Manifest URL case mismatch | latest.json in endpoints must match the uploaded filename exactly |
| Not cleaning up unused i18n keys | When replacing a manual releases button with updater UI, remove old translation keys |
.app.tar.gz and .sig are separate from the DMG. Homebrew cask formulas are unaffected.tauri.conf.json likely doesn't match the private key used in CI. Regenerate and redeploy.© luochang212, MIT. 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 skills/tauri-updater of luochang212/skill-zoo.
Open the folder on GitHubat commit 1c7afa6
Tauri Updater 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 |
|---|---|---|---|---|---|---|
| Tauri Updater this skillluochang212/skill-zoo | 117 | — | ~2.7k | Automated safety check: Pass | MIT | |
| Resolve PR Reviewshencangsheng/easydb_app | 590 | — | ~2.4k | Automated safety check: Pass | MIT | |
| Release VersionGOODBOY008/r-shell | 153 | — | ~4k | Automated safety check: Pass | MIT | |
| Bump Versionflyxl/datazen | 114 | — | ~392 | Automated safety check: Pass | GPL-3.0 | |
| Git Workflowbkywksj/knowledge-base | 330 | — | ~1.1k | Automated safety check: Pass | Custom licence | |
| Update V8 Versionopeninterpreter/openinterpreter | 69k | 2 repos | ~845 | Automated safety check: Pass | Apache-2.0 |
shencangsheng/easydb_app
Resolve pull request code review comments end-to-end. An agent skill from shencangsheng/easydb_app.
GOODBOY008/r-shell
Release a new r-shell version and create a published GitHub release with contributor credits.
flyxl/datazen
Update the DataZen application version number across all files and trigger a GitHub release rebuild.
bkywksj/knowledge-base
Git 工作流与版本管理技能,规范分支策略、提交信息和发布流程. An agent skill from bkywksj/knowledge-base.
openinterpreter/openinterpreter
Bumps the pinned v8 and rusty_v8 versions in Codex, validates the release-candidate path with the v8-canary check, and traces failures to upstream build changes.
mountain-loop/yaak
Create or edit Yaak changelogs. An agent skill from mountain-loop/yaak.
luochang212/skill-zoo
A skill your agent uses when the user asks to release a new version, ship a build, or publish a Skill Zoo release.
luochang212/skill-zoo
A skill your agent uses when publishing or preparing to publish an npm package from this repository, especially the Skill Zoo CLI package under packages/cli.
luochang212/skill-zoo
分析和判断任何论断、报告、想法或需求的真实性、价值与做法。当用户说"这个 bug 是真的吗"、"分析一下这个问题/这个报告/这个说法"、"这个修复值得做吗"、"帮我看下这个建议靠不靠谱",或用户给出一个待评估的 bug 报告、文章摘录、设计提案时使用。先核验、复现、定级、讲清原理、判断是否值得做,而不是直接相信或直接动手改代码。也适用于评估"要不要重构"。
A skill your agent uses when adding software auto-update to a Tauri 2 desktop app, or when users ask about tauri-plugin-updater integration, app update checking, distinguishing installer vs portable…. Tauri Updater is an agent skill from luochang212/skill-zoo. Use when adding software auto-update to a Tauri 2 desktop app, or when users ask about tauri-plugin-updater integration, app update checking, distinguishing installer vs portable builds for updates, or generating update manifests for GitHub Releases.
Tauri Updater fits situations like: adding software auto-update to a Tauri 2 desktop app; users ask about tauri-plugin-updater integration; app update checking; distinguishing installer vs portable builds for updates.
Run `npx skills add luochang212/skill-zoo --skill tauri-updater -a claude-code`. Or copy the skill folder (skills/tauri-updater in luochang212/skill-zoo) into .claude/skills/tauri-updater in your project. Claude Code loads it when a task matches its description.
Run `npx skills add luochang212/skill-zoo --skill tauri-updater -a codex`. Or copy the skill folder (skills/tauri-updater in luochang212/skill-zoo) into .agents/skills/tauri-updater 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 luochang212/skill-zoo --skill tauri-updater -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tauri-updater, .gemini/skills/tauri-updater, .github/skills/tauri-updater and .opencode/skills/tauri-updater in your project.
Going by SKILL.md and its folder, Tauri Updater needs the command-line tools its instructions call (bun and cargo) and credentials named TAURI_SIGNING_PRIVATE_KEY and TAURI_SIGNING_PRIVATE_KEY_PASSWORD. Our summary lists: A credential in TAURI_SIGNING_PRIVATE_KEY.
SKILL.md names 4 domains. In commands or code: github.com, api.github.com, objects.githubusercontent.com and github-releases.githubusercontent.com; the agent is likely to contact these when it follows the instructions. 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.
Tauri Updater is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.7k tokens (SKILL.md is roughly 11k 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 Tauri Updater: Resolve PR Review (shencangsheng/easydb_app, 590 stars), Release Version (GOODBOY008/r-shell, 153 stars), Bump Version (flyxl/datazen, 114 stars) and Git Workflow (bkywksj/knowledge-base, 330 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
luochang212 (a GitHub user) maintains it in luochang212/skill-zoo, which has 117 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 9, 2026.
Source: luochang212/skill-zoo on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.