Cline Desktop App Release
cline/cline
Covers preparing, tagging and publishing a Cline desktop app release on the stable, beta or nightly channel through the desktop-publish GitHub workflow.
Builds a rebranded Qwen Code desktop package from the Tauri shell using only a brand id and a logo, with sensible derived defaults.
$ npx skills add QwenLM/qwen-code --skill desktop-brand-builder -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install QwenLM/qwen-code desktop-brand-builder --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/QwenLM/qwen-code.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/desktop/.agents/skills/desktop-brand-builder .claude/skills/desktop-brand-builder && 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 "desktop-brand-builder" agent skill from https://github.com/QwenLM/qwen-code/tree/main/packages/desktop/.agents/skills/desktop-brand-builder into .claude/skills/desktop-brand-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "desktop-brand-builder", 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/QwenLM/qwen-code/tree/main/packages/desktop/.agents/skills/desktop-brand-builderType 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 QwenLM/qwen-code --skill desktop-brand-builder -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install QwenLM/qwen-code desktop-brand-builder --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/QwenLM/qwen-code.git skills-src && mkdir -p .agents/skills && cp -r skills-src/packages/desktop/.agents/skills/desktop-brand-builder .agents/skills/desktop-brand-builder && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "desktop-brand-builder" agent skill from https://github.com/QwenLM/qwen-code/tree/main/packages/desktop/.agents/skills/desktop-brand-builder into .agents/skills/desktop-brand-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "desktop-brand-builder", 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 QwenLM/qwen-code --skill desktop-brand-builder -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install QwenLM/qwen-code desktop-brand-builder --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/QwenLM/qwen-code.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/packages/desktop/.agents/skills/desktop-brand-builder .cursor/skills/desktop-brand-builder && 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 "desktop-brand-builder" agent skill from https://github.com/QwenLM/qwen-code/tree/main/packages/desktop/.agents/skills/desktop-brand-builder into .cursor/skills/desktop-brand-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "desktop-brand-builder", 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/QwenLM/qwen-code.git --path packages/desktop/.agents/skills/desktop-brand-builder--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 QwenLM/qwen-code --skill desktop-brand-builder -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install QwenLM/qwen-code desktop-brand-builder --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/QwenLM/qwen-code.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/packages/desktop/.agents/skills/desktop-brand-builder .gemini/skills/desktop-brand-builder && 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 "desktop-brand-builder" agent skill from https://github.com/QwenLM/qwen-code/tree/main/packages/desktop/.agents/skills/desktop-brand-builder into .gemini/skills/desktop-brand-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "desktop-brand-builder", 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 QwenLM/qwen-code desktop-brand-builderInstalls 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 QwenLM/qwen-code --skill desktop-brand-builder -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/QwenLM/qwen-code.git skills-src && mkdir -p .github/skills && cp -r skills-src/packages/desktop/.agents/skills/desktop-brand-builder .github/skills/desktop-brand-builder && 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 "desktop-brand-builder" agent skill from https://github.com/QwenLM/qwen-code/tree/main/packages/desktop/.agents/skills/desktop-brand-builder into .github/skills/desktop-brand-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "desktop-brand-builder", 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 QwenLM/qwen-code --skill desktop-brand-builder -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install QwenLM/qwen-code desktop-brand-builder --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/QwenLM/qwen-code.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/packages/desktop/.agents/skills/desktop-brand-builder .opencode/skills/desktop-brand-builder && 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 "desktop-brand-builder" agent skill from https://github.com/QwenLM/qwen-code/tree/main/packages/desktop/.agents/skills/desktop-brand-builder into .opencode/skills/desktop-brand-builder/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "desktop-brand-builder", 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.
desktop-brand-builderBuilds a rebranded Qwen Code desktop package from the Tauri shell using only a brand id and a logo, with sensible derived defaults.
You normally supply a lowercase brandId and a local logo path, plus an optional website. The agent derives the rest: the app name and artifact prefix come from title-casing the brandId, and the bundle identifier comes from the reversed website host with a desktop suffix, or a fallback pattern when there is no valid host. Once the required fields are present it proceeds without a confirmation step. Optional overrides cover app name, app id, artifact prefix, updater endpoints and key, and a target of mac, win, linux or all.
Work happens in an isolated build clone so the main repository stays clean, and branding is applied through the Tauri configuration, the icons folder and the bootstrap startup UI. Updater endpoints stay empty by default, so a branded build never polls the official Qwen Code feed and the official feed never updates it; a public key is required if you supply your own endpoints. A bundled brand-create.mjs script supports the build, and the skill replaces an older Electron-based brand builder.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit d9c6f8c. 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:
npmnpxgitnodeFrom 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:
acme.aiFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
TAURI_SIGNING_PRIVATE_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Qwen Code Desktop Brand Builder loads about 2.1k tokens when it runs. Until then it costs about 73 tokens; SKILL.md has 868 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); the scripts in this folder are not scanned.
The full file from QwenLM/qwen-code at commit d9c6f8c, republished under its Apache-2.0 licence (© QwenLM). 868 words, ~2,128 tokens.
.claude/skills/desktop-brand-builder/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Create a branded desktop package from packages/desktop with the least
user input possible. The user should usually provide only:
brandId: acme-ai
logo: /absolute/path/to/logo.png
website: https://acme.aiwebsite is optional. Do not ask for app name, app id, artifact name,
copyright, or updater endpoints unless the user explicitly asks to override
them.
This skill replaces the Electron-era brand builder that lived in the older,
since-deleted Electron packages/desktop (removed in PR 9085, before this
Tauri shell took over that path). The Tauri shell is the only desktop
implementation now; branding hooks are src-tauri/tauri.conf.json,
src-tauri/icons/, and the bootstrap/ startup UI.
Required fields:
brandId: must match ^[a-z][a-z0-9-]*$logo: local file path; must exist; .png recommended (square, >= 1024px)Optional overrides:
websiteappNameappId (Tauri bundle identifier)artifactPrefixupdaterEndpoints (JSON array; empty array disables in-app updates)updaterPubkey (base64 public key; required when updaterEndpoints
is non-empty — must match the TAURI_SIGNING_PRIVATE_KEY used to sign
your updater artifacts)target: mac, win, linux, or allIf required input is missing, ask once:
请提供:
brandId: 例如 acme-ai,只能小写字母、数字、短横线
logo: 本地 logo 文件路径(建议 1024x1024 PNG)
website: 可选Once the required fields are present, proceed without a confirmation step.
Infer missing values deterministically:
appName: title-case the hyphen-separated brandId; acme-ai becomes
Acme AIartifactPrefix: title-case the hyphen-separated brandId and join with
hyphens; acme-ai becomes Acme-AIappId: if website has a valid host, reverse the host labels and append
.desktop; https://acme.ai becomes ai.acme.desktopappId: app.<brandId>.desktopupdaterEndpoints: empty by default. A branded build must never poll the
official Qwen Code updater feed, and the official feed must never update a
branded build. Only set endpoints when the user supplies their own feed.Work in an isolated build clone so the working repository stays clean:
BUILD_ROOT="$PWD/brand-builds/<brandId>-<timestamp>"
mkdir -p "$BUILD_ROOT"
git clone --branch main --single-branch \
https://github.com/QwenLM/qwen-code.git \
"$BUILD_ROOT/qwen-code"
cd "$BUILD_ROOT/qwen-code"
git checkout -B brand-<brandId> origin/mainIf the clone or checkout fails, stop and report the failure. Do not continue
as if brand-<brandId> was created.
Create a temporary brand.json in the build directory:
{
"brandId": "acme-ai",
"logo": "/absolute/path/to/logo.png",
"website": "https://acme.ai",
"appName": "Acme AI",
"appId": "ai.acme.desktop",
"artifactPrefix": "Acme-AI",
"updaterEndpoints": [],
"updaterPubkey": ""
}Install dependencies. The brand script itself only needs the desktop package's
own node_modules, but npm run build:runtime shells out to the repo
root (which uses cross-env and other root devDependencies), so the
root install is also required before packaging:
# Root dependencies (needed by build:runtime → cross-env, esbuild, etc.)
npm install
# Desktop package dependencies
cd packages/desktop
npm install --workspaces=false
cd ../..Then run this skill's bundled brand creation script with plain Node (the script has no dependencies beyond Node >= 18):
node packages/desktop/.agents/skills/desktop-brand-builder/scripts/brand-create.mjs \
--shell-root /absolute/path/to/qwen-code/packages/desktop \
--config /absolute/path/to/brand.jsonThe agent should not hand-edit tauri.conf.json, icon files, or bootstrap
brand strings when this bundled script is available. The bundled script is the
source of truth for patching config and generating resources.
What the script does:
src-tauri/tauri.conf.json: productName, identifier,
bundle.shortDescription, and plugins.updater.endpoints. When
updaterEndpoints is empty it also clears bundle.createUpdaterArtifacts
and blanks the official plugins.updater.pubkey (set to empty string
rather than deleted, because the updater plugin requires the field);
a brand supplying its own feed must supply its own pubkey.npx --yes @tauri-apps/cli icon <logo> (falls back to a warning if the
CLI cannot run; in that case copy the logo over src-tauri/icons/icon.png
manually and tell the user the remaining sizes are stale).bootstrap/index.html and bootstrap/bootstrap.js, and replaces
bootstrap/qwen-code-logo.svg usage with the brand logo.Package with the current host target unless the user requested a target:
cd packages/desktop
npm run build:runtime --workspaces=false
npx tauri build # current platformCross-compile: build:runtime bundles the Node runtime for the platform
indicated by QWEN_DESKTOP_TARGET (defaults to the host). When targeting a
different platform you must re-run build:runtime with the env var set
before each tauri build --target, otherwise the packaged artifact contains
a wrong-arch Node binary and fails at launch with an exec format error:
# Cross-compile: set QWEN_DESKTOP_TARGET and re-run build:runtime per target
QWEN_DESKTOP_TARGET=aarch64-apple-darwin npm run build:runtime --workspaces=false
npx tauri build --target aarch64-apple-darwin # explicit macOS arm64For target: all, iterate build:runtime → tauri build per target; run
only targets supported by the current machine or CI environment. Do not
claim cross-platform artifacts were produced unless the files exist.
Artifacts land under packages/desktop/src-tauri/target/release/bundle/
for the host target, or src-tauri/target/<triple>/release/bundle/ when
--target <triple> is used.
Branded builds are unsigned by default. The upstream release pipeline's signing secrets (Apple, Windows) and updater private key belong to the official Qwen Code releases only. For a brand that needs signed releases or in-app updates, set up separate credentials and a separate updater feed; do not reuse the upstream ones.
To generate a signing key pair for your updater feed:
npx @tauri-apps/cli signer generate -w ~/.tauri/my-brand.key
# The .key file is the private key (set as TAURI_SIGNING_PRIVATE_KEY in
# your build CI). The corresponding .pub file contains the base64 public
# key — paste it into brand.json as updaterPubkey.After packaging:
packages/desktop/src-tauri/target/release/bundle/
(or src-tauri/target/<triple>/release/bundle/ for cross-compile targets)
(dmg/, nsis/, appimage/, or deb/).sha256sum or shasum -a 256 for each artifact.hdiutil verify for generated DMG files.brandId: show the regex and ask for a corrected value.logo: ask for a valid local path.packages/desktop/.agents/skills/desktop-brand-builder/scripts/brand-create.mjs
is missing, and include the expected command.productName is no longer the default (Qwen Code Desktop). Start from
a fresh clone — do not re-run the script in an already-patched tree.Do not delete the build directory on failure. Never re-run brand-create
in the same clone — the script is single-use. The "preserve the build
directory" guidance is for post-mortem debugging, not for retrying the
brand step. If the brand config was wrong, discard the clone and start
fresh.
© QwenLM, 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
SKILL.md and 1 other file (scripts) in packages/desktop/.agents/skills/desktop-brand-builder of QwenLM/qwen-code.
Open the folder on GitHubat commit d9c6f8c
Qwen Code Desktop Brand Builder 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 |
|---|---|---|---|---|---|---|
| Qwen Code Desktop Brand Builder this skillQwenLM/qwen-code | 28k | — | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| Cline Desktop App Releasecline/cline | 70k | — | ~4.5k | Automated safety check: Pass | Apache-2.0 | |
| Code Reviewtimwuhaotian/the-pair | 379 | — | ~250 | Automated safety check: Pass | MIT | |
| Cursor BYOK Desktop Releaseleookun/cursor-byok | 3.2k | — | ~1.3k | Automated safety check: Pass | MIT | |
| Desktop Release Sync LandingEynzof/Hermes-CN-Desktop | 1.8k | — | ~1.3k | Automated safety check: Pass | Custom licence | |
| Markdown Paged GuideBigStrongSun/ccswitchmulti | 121 | — | ~589 | Automated safety check: Pass | MIT |
cline/cline
Covers preparing, tagging and publishing a Cline desktop app release on the stable, beta or nightly channel through the desktop-publish GitHub workflow.
timwuhaotian/the-pair
Comprehensive code review with security and performance checks
leookun/cursor-byok
Guides releases of the Cursor BYOK desktop app on GitHub, with strict rules on who may publish and how version tags, updater manifests and signing are handled.
Eynzof/Hermes-CN-Desktop
Use only for stable/public Hermes Agent CN Desktop releases that should be visible to all users.
BigStrongSun/ccswitchmulti
Render Markdown manuals into polished per-page PNG images and PDF deliverables.
dohooo/helmor
Autonomous local-development debugging loop for Helmor bugs.
QwenLM/qwen-code
Reproduces a feature from Codex or Claude Code in Qwen Code by running the reference agent under capture, reading the traces, then implementing matching behavior.
QwenLM/qwen-code
Guides end-to-end testing of the Qwen Code CLI in headless mode with real model calls, MCP test servers and inspection of raw API traffic.
QwenLM/qwen-code
Scheduled CI skill that scans a repository for small, certain docs, test and code hygiene issues and fixes them on one branch with a commit per finding.
QwenLM/qwen-code
Walks through capturing and comparing V8 heap snapshots to find memory leaks in the Qwen Code Node.js CLI, using tmux and the chrome-devtools CLI.
QwenLM/qwen-code
Drives Qwen Code in a real tmux session the way a user would and saves a readable step-by-step transcript of each screen for maintainers to review.
QwenLM/qwen-code
Runs a reference agent (Codex or Claude Code) and Qwen Code on the same scenario, captures HTTP and terminal traces, and compares them until behavior matches.
Categories
Builds a rebranded Qwen Code desktop package from the Tauri shell using only a brand id and a logo, with sensible derived defaults. You normally supply a lowercase brandId and a local logo path, plus an optional website. The agent derives the rest: the app name and artifact prefix come from title-casing the brandId, and the bundle identifier comes from the reversed website host with a desktop suffix, or a fallback pattern when there is no valid host.
Qwen Code Desktop Brand Builder fits situations like: producing a white-label desktop client of Qwen Code under your own brand; generating DMG, EXE, AppImage or deb installers with a custom name and logo; pointing a branded desktop build at your own updater feed.
Run `npx skills add QwenLM/qwen-code --skill desktop-brand-builder -a claude-code`. Or copy the skill folder (packages/desktop/.agents/skills/desktop-brand-builder in QwenLM/qwen-code) into .claude/skills/desktop-brand-builder in your project. Claude Code loads it when a task matches its description.
Run `npx skills add QwenLM/qwen-code --skill desktop-brand-builder -a codex`. Or copy the skill folder (packages/desktop/.agents/skills/desktop-brand-builder in QwenLM/qwen-code) into .agents/skills/desktop-brand-builder 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 QwenLM/qwen-code --skill desktop-brand-builder -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/desktop-brand-builder, .gemini/skills/desktop-brand-builder, .github/skills/desktop-brand-builder and .opencode/skills/desktop-brand-builder in your project.
Going by SKILL.md and its folder, Qwen Code Desktop Brand Builder needs JavaScript for the scripts in its folder, the command-line tools its instructions call (npm, npx, git and node) and credentials named TAURI_SIGNING_PRIVATE_KEY. Our summary lists: A checkout of the qwen-code repository with packages/desktop; A local square PNG logo, ideally 1024 pixels wide.
SKILL.md names 1 domain. In commands or code: acme.ai; 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 no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. 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.
Qwen Code Desktop Brand Builder 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 2.1k tokens (SKILL.md is roughly 8.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 Qwen Code Desktop Brand Builder: Cline Desktop App Release (cline/cline, 70k stars), Code Review (timwuhaotian/the-pair, 379 stars), Cursor BYOK Desktop Release (leookun/cursor-byok, 3.2k stars) and Desktop Release Sync Landing (Eynzof/Hermes-CN-Desktop, 1.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
QwenLM (a GitHub organization) maintains it in QwenLM/qwen-code, which has 28,410 GitHub stars. The repository holds 41 skills in this directory. The repository was last updated on October 11, 2026.
Source: QwenLM/qwen-code on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.