From qol-plugin-launcher
Use when working on the qol-tray launcher plugin, including GPUI launcher behavior and architecture.
How this skill is triggered — by the user, by Claude, or both
Slash command
/qol-plugin-launcher:qol-plugin-launcherThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
GPUI launcher is the production launcher. Runs as a long-lived daemon under qol-tray (`daemon.enabled = true`) so cold-start GPU init is amortized. Supports Linux and macOS. Binary name: `launcher`.
GPUI launcher is the production launcher. Runs as a long-lived daemon under qol-tray (daemon.enabled = true) so cold-start GPU init is amortized. Supports Linux and macOS. Binary name: launcher.
.desktop entries (Linux), .app bundles (macOS)/tmp/qol-launcher.sock)plugin.toml:
runtime.command = "launcher"runtime.actions = { open = ["--show"] }[daemon] enabled = true, command = "launcher", socket = "/tmp/qol-launcher.sock"Open Launcher (action run)linux, macosqol-tools/plugin-launcher, pattern launcher-{os}-{arch}src/
main.rs # binary entry: argv parsing, --show/--kill dispatch, daemon spawn
lib.rs # crate root and public re-exports
daemon.rs # Unix socket IPC (show/kill/ping) via qol_plugin_api::daemon
discovery/ # app + file discovery and caching
mod.rs
search.rs # query scoring + ranking
file_scan.rs # file walker
file_cache.rs # cached on-disk index
entry_store.rs # in-memory entry store shared with the UI
platform/
mod.rs
linux.rs # XDG application dir scan, .desktop parser
macos.rs # .app bundle scan
windows.rs # stub
launch/ # how to actually execute an entry per OS
mod.rs
linux.rs # setsid -f <cmd>
macos.rs # open_path_detached(&path)
windows.rs # stub
ui/ # GPUI front-end
mod.rs
run.rs # top-level GPUI app bootstrap
view.rs # root view
render.rs # list / cell rendering
layout.rs # window size + row layout math
controller.rs # user-input → state transitions
input.rs # key + clipboard handling
state.rs # UI state (query, selection, mode)
windows.rs # window creation + reuse helpers
window_ops.rs # show/hide/move ops
keepalive.rs # hidden PopUp to keep GPUI alive when picker is dismissed
platform/
mod.rs
linux.rs # X11 focus/monitor tracking via x11rb
macos.rs # macOS-specific window behaviour
windows.rs # stub
tests/ # property tests (see below)
examples/ # small example binaries
macOS:
/Applications, ~/Applications, /System/Applications (depth 1)Path directly to Command::new("open").arg(path) via launch::macos::open_path_detached — no shell string splitting (avoids .app bundle path crashes)window.remove_window() — cx.hide() hides entire NSApplication and crashes subsequent showLinux:
.desktop filessetsid -f <cmd> with fallbackx11rbLogic validation with auto-generated cases. Split across tests/ by domain:
effective_count u64 underflow when now < last_accessed (clock skew) — fixed with saturating_sub'0' for [a-z] queries) or constructed candidates become identical// Borderless popup
WindowOptions {
titlebar: None,
window_decorations: Some(WindowDecorations::Client),
kind: WindowKind::PopUp,
..Default::default()
}
# Launcher binary
cargo run --bin launcher
# Contract validation
cargo test
The launcher must include a contract validation test to statically validate plugin.toml at cargo test time:
#[cfg(test)]
mod tests {
use qol_tray::plugins::manifest::PluginManifest;
#[test]
fn validate_plugin_contract() {
let manifest_str =
std::fs::read_to_string("plugin.toml").expect("Failed to read plugin.toml");
let manifest: PluginManifest =
toml::from_str(&manifest_str).expect("Failed to parse plugin.toml");
manifest.validate().expect("Manifest validation failed");
}
}
Required Cargo.toml dev-dependencies:
[dev-dependencies]
qol-tray = { path = "../../qol-tray" }
toml = "0.9"
cargo build directly in dev mode.launcher binary in the plugin root — it will shadow target/debug/launcher.qol-tray resolves binaries in order: plugin root → target/debug/ → target/release/.cargo test to validate the contract before linking or shipping.npx claudepluginhub qol-tools/qol-skills --plugin qol-plugin-launcherProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.