agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites,…
Expert guide for Electron development with Electron Vite and Electron Builder. Use when developing Electron applications, working with main/renderer processes, IPC communication, preload scripts, security configuration, native module handling, or build/distribution setup.
$ npx -y skills add pedronauck/skills --skill electron-dev --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/electron-devContext preview
The summary Claude sees to decide when to auto-load this skill.
Expert guide for Electron development with Electron Vite and Electron Builder. Use when developing Electron applications, working with main/renderer processes, IPC communication, preload scripts, security configuration, native module handling, or build/distribution setup.
name: electron-dev description: Expert guide for Electron development with Electron Vite and Electron Builder. Use when developing Electron applications, working with main/renderer processes, IPC communication, preload scripts, security configuration, native module handling, or build/distribution setup. allowed-tools: Read, Grep, Glob
This skill provides guidelines, patterns, and best practices for building production-grade Electron applications using Electron Vite and Electron Builder.
1. **Core Rules**: For detailed Electron development patterns and guidelines, refer to `references/patterns.md` within this skill. 2. **Security**: Always enable `contextIsolation`, `sandbox`, and disable `nodeIntegration`. 3. **Architecture**: Main process handles Node.js operations; renderer focuses on UI; preload bridges them securely.
The main process handles:
Key guidelines:
The renderer process:
The preload script is the **only bridge** between renderer and main:
import { contextBridge, ipcRenderer } from "electron";
contextBridge.exposeInMainWorld("electronAPI", {
invoke: (channel: string, args?: unknown) => {
const validChannels = ["db:query", "file:save", "app:close"];
if (validChannels.includes(channel)) {
return ipcRenderer.invoke(channel, args);
}
throw new Error(`Invalid IPC channel: ${channel}`);
},
});Always configure `webPreferences` with these settings:
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
contextIsolation: true, // REQUIRED
enableRemoteModule: false, // REQUIRED
sandbox: true, // REQUIRED
nodeIntegration: false, // REQUIRED
webSecurity: true,
}ipcMain.handle("db:insert", async (event, data: unknown) => {
if (!isValidInsertData(data)) {
throw new Error("Invalid data");
}
return db.insert(data);
});import { defineConfig } from "electron-vite";
export default defineConfig({
main: {
build: {
outDir: "dist/main",
rollupOptions: {
external: ["better-sqlite3", "native-module-name"],
},
},
},
preload: {
build: { outDir: "dist/preload" },
},
renderer: {
build: {
outDir: "dist/renderer",
rollupOptions: {
output: {
manualChunks: {
vendor: ["react", "react-dom"],
},
},
},
},
},
});For native modules like `better-sqlite3`: 1. Exclude from rollup in electron-vite config 2. Include in `extraResources` in Electron Builder config 3. Use dynamic imports in main process 4. Rebuild for Electron using `@electron/rebuild`
// Exposing entire Node.js API
contextBridge.exposeInMainWorld("require", require);
// Not validating IPC messages
ipcMain.handle("dangerous", (event, data) => {
fs.writeFileSync(data.path, data.content);
});
// Using __dirname in renderer
const imagePath = `${__dirname}/images/logo.png`;// Whitelist specific channels
contextBridge.exposeInMainWorld("electronAPI", {
invoke: (channel: string, args: unknown) => {
if (!["safe:channel"].includes(channel)) throw new Error("Invalid");
return ipcRenderer.invoke(channel, args);
},
});
// Validate all arguments
ipcMain.handle("file:write", async (event, { path, content }) => {
if (typeof path !== "string" || typeof content !== "string") {
throw new TypeError("Invalid arguments");
}
// Safe to use
});Before finishing a task involving Electron:
| Issue | Solution | |-------|----------| | White screen in production | Check asset paths use `base: './'`, verify build output | | Native module fails | Exclude from rollup, include in extraResources | | IPC not working | Verify preload path, contextIsolation enabled, channel whitelisted | | HMR not working | Run with `-w` flag, check VITE_DEV_SERVER_URL |
For detailed configuration examples and additional patterns, consult `references/patterns.md`.
A curated collection of 87 agent skills for Claude Code and compatible AI coding assistants — 40 original (⭐️), 34 hand-picked (💎), and 13 marketing & business (📣).
Repo: pedronauck/skills
Browser automation CLI for AI agents. Use when the user needs to interact with websites,…
Answer questions about the AI SDK and help build AI-powered features. Use when developers:…
Autonomously optimize any Claude Code skill by running it repeatedly, scoring outputs against…
Centrifugo real-time messaging server expert for WebSocket PUB/SUB, channel management, JWT…
Retrieves up-to-date documentation, API references, and code examples for any developer…
Diátaxis Documentation Expert. An expert technical writer specializing in creating…