Use when you need to review local desktop launchers, shortcuts, shell scripts, app wrappers, logging, and update safety.
How this skill is triggered — by the user, by Claude, or both
Slash command
/skillry-mobile-desktop:28-desktop-launcher-reviewThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Review local desktop launchers, shortcuts, shell scripts, app wrappers, logging, and update safety for packaged desktop apps (Electron, Electron-Vite, Tauri, and similar). The core obligation is fail-closed: if the packaged build is missing or stale, the launcher must refuse to open an older app and report the failing command — never silently fall back to a previous build. The output names the ...
Review local desktop launchers, shortcuts, shell scripts, app wrappers, logging, and update safety for packaged desktop apps (Electron, Electron-Vite, Tauri, and similar). The core obligation is fail-closed: if the packaged build is missing or stale, the launcher must refuse to open an older app and report the failing command — never silently fall back to a previous build. The output names the launch mode, a freshness verdict, the fail-closed assessment, script issues with fixes, and the next safe command.
dist/ or out/ path — freshness must be verified.contextIsolation, CSP, and IPC hardening.electron ., electron-vite dev, npm run dev). The default expectation is the packaged app via the main launcher unless the user explicitly asked for dev mode..launcher/build-manifest.json or dist-app/current pointer. If any source input is newer than the packaged build, treat it as stale and require a rebuild before launch.main/preload/renderer entries, the output folder, and the launcher's actual target path. Confirm the entry paths declared in package.json or builder config exist inside the package.Target and freshness:
dist/, out/, or release/ packaged app, not electron . dev mode unless dev was requested..launcher/build-manifest.json exists and matches the current source; dist-app/current points at the fresh build.Entrypoints and script hygiene:
main and preload paths in package.json or builder config exist inside the package.set -euo pipefail; every path is quoted.Logging, shutdown, update:
/dev/null.Build correctness:
# --- launch mode ---
# is the launcher targeting packaged vs dev?
rg -n 'electron \.|electron-vite dev|npm run dev|\.app|dist|out|release' <launcher-script>
# --- build pipeline / entrypoints ---
# build pipeline + entry definitions
cat package.json | jq '{main, scripts, build}'
# entrypoint files actually exist inside the package?
rg -n '"main"|"preload"' package.json
# --- freshness ---
# any source newer than the packaged build pointer?
find src electron -newer dist-app/current -type f 2>/dev/null | head
# manifest present and what it records
cat .launcher/build-manifest.json 2>/dev/null | jq '.' 2>/dev/null
# --- script safety ---
# machine-specific paths, destructive ops, strict mode
rg -n '/Users/[a-z]+/|/home/[a-z]+/|rm -rf|set -e|set -euo pipefail' <launcher-script>
# log destination configured?
rg -n 'logfile|>>|tee|LOG_DIR|log_path' <launcher-script>
# --- shutdown / orphans ---
# child-process spawn and cleanup handling
rg -n 'spawn|exec|trap|kill|SIGTERM|on\(.close.' <launcher-script>
# --- renderer security (quick sanity, not a full audit) ---
# BrowserWindow webPreferences hardening
rg -n 'contextIsolation|nodeIntegration|webSecurity|sandbox' . | head
# --- update mechanism ---
# auto-update / pointer-swap logic
rg -n 'autoUpdater|checkForUpdates|symlink|rename\(|pointer' . | head
# --- code signing / notarization markers ---
# packaged-app signing config (presence, not contents)
rg -n 'codeSign|notarize|hardenedRuntime|entitlements' . | head
npm run dev instead — the user thinks they are testing the release build but are not.dist-app/, so source changes never reach the user even though the launcher "works".set -euo pipefail keeps going after a failed build step and opens a half-baked app.dist-app/ in place; a mid-write crash leaves a corrupt, unlaunchable app with no rollback.$APP_DIR that contains a space splits into multiple arguments and the launch silently targets the wrong path.electron-vite dev, so the user is unknowingly testing an unoptimized dev build with source maps and debug tooling.dist-app/ with no check that it reflects current source, so fixes appear to "not work" because the old build still launches.build-manifest.json is left stale, so the freshness check and rollback logic read the wrong current version.nodeIntegration: true and contextIsolation: false, so any renderer flaw becomes full local code execution.Before clearing a launcher for handoff, walk it through these explicit states and confirm the behavior:
Return:
file:line | issue | fix.Done means the launch mode is confirmed against intent; build freshness is judged from evidence; the fail-closed rule is verified (a stale or failed build cannot open an old app); launcher-script and update-safety issues are listed with file:line fixes; and the safe next command (build or package) is named.
npx claudepluginhub fluxonlab/skillry --plugin skillry-mobile-desktopCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.