Agent skill

Use Vishot With Electron

by moeru-ai in moeru-ai/airi

Capture deterministic Electron windows with Vishot. An agent skill from moeru-ai/airi.

MITAuto-check passedProductivity & Automation

Install Use Vishot With Electron

skills CLI
$ npx skills add moeru-ai/airi --skill use-vishot-with-electron -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install moeru-ai/airi use-vishot-with-electron --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/moeru-ai/airi.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/use-vishot-with-electron .claude/skills/use-vishot-with-electron && rm -rf skills-src

Use ~/.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/

Facts

Skill name
use-vishot-with-electron
GitHub stars
50k
Token cost
~1.7k tokens
SKILL.md length
759 words
Files
2
Skills in repo
24
Repo updated
First seen
Licence
MIT

At a glance

Capture deterministic Electron windows with Vishot. An agent skill from moeru-ai/airi.

  • Works in 10 steps: Identify the Electron package, built… → Search for an existing defineScenario… → Build the application when its main… → …
  • The selected Vishot target is an Electron application and Codex must identify
  • SKILL.md covers Workflow, Window Sizing, Electron Windows and UI State and Scenario Readiness and Locators, plus 1 more section
  • Calls pnpm

What it does

Use Vishot With Electron is an agent skill from moeru-ai/airi. Capture deterministic Electron windows with Vishot. Use when the selected Vishot target is an Electron application and Codex must identify, prepare, and capture one or more renderer windows without relying on window creation order or agent-browser.

Its SKILL.md is about 1.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `agents/openai.yaml`).

It sits in Productivity & Automation, covering Browser automation. It works with Playwright. The repository describes itself as: 💖🧸 Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-sama's altitude. Capable of… The licence is MIT.

When your agent uses it

  • The selected Vishot target is an Electron application and Codex must identify
  • More renderer windows without relying on window creation order

Example prompts

  • “/use-vishot-with-electron”

Workflow steps

10 steps, taken from the first numbered list in SKILL.md.

  1. Identify the Electron package, built main entrypoint, requested window and state, and output directory supplied by the caller.
  2. Search for an existing defineScenario module. In AIRI, start with packages/scenarios-stage-tamagotchi-electron.
  3. Build the application when its main entrypoint is absent or stale. For a production/file renderer, wait for the repository build command…
  4. Run the product scenario with vishot capture --target electron.
  5. When no scenario is needed, use Vishot's direct window capture
  6. Select a unique window with --window-url or --window-title. Omit both only when the first created window is intentionally the target.
  7. If Playwright cannot discover Electron through the package-manager layout, resolve the app package's Electron binary and pass its absolute…
  8. For a non-default state, create a temporary product scenario or extend the existing product-owned scenario with Playwright actions. Do not…
  9. Inspect every screenshot and confirm it depicts the intended window and state.
  10. Return its stable ID, title, window identity, and absolute path to $use-vishot or the caller.

What it can do on your machine

Read from SKILL.md and the folder at commit ec682e2. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • pnpm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use pnpm, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Use Vishot With Electron loads about 1.7k tokens when it runs. Until then it costs about 68 tokens; SKILL.md has 759 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~68
When it runs · the whole SKILL.md, loaded when a task matches
~1.7k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from moeru-ai/airi at commit ec682e2, republished under its MIT licence (© moeru-ai). 759 words, ~1,711 tokens.

Download SKILL.mdSave it as .claude/skills/use-vishot-with-electron/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
use-vishot-with-electron
description
Capture deterministic Electron windows with Vishot. Use when the selected Vishot target is an Electron application and Codex must identify, prepare, and capture one or more renderer windows without relying on window creation order or agent-browser.

Use Vishot with Electron

Keep product routes, selectors, window identities, and interaction scenarios in the product repository.

Workflow

  1. Identify the Electron package, built main entrypoint, requested window and state, and output directory supplied by the caller.

  2. Search for an existing defineScenario module. In AIRI, start with packages/scenarios-stage-tamagotchi-electron.

  3. Build the application when its main entrypoint is absent or stale. For a production/file renderer, wait for the repository build command to exit successfully. Pass --settle-ms 2500 so Vishot waits through Vite bundling or renderer reloads; Vishot intentionally has no default delay.

  4. Run the product scenario with vishot capture --target electron.

  5. When no scenario is needed, use Vishot's direct window capture:

    bash
    pnpm exec vishot capture \
      --target electron \
      --app-entrypoint ./path/to/electron-main.js \
      --cwd . \
      --window-url '#/' \
      --settle-ms 2500 \
      --output-dir /absolute/output/main
  6. Select a unique window with --window-url or --window-title. Omit both only when the first created window is intentionally the target.

  7. If Playwright cannot discover Electron through the package-manager layout, resolve the app package's Electron binary and pass its absolute path with --electron-executable.

  8. For a non-default state, create a temporary product scenario or extend the existing product-owned scenario with Playwright actions. Do not add product selectors to this skill.

  9. Inspect every screenshot and confirm it depicts the intended window and state.

  10. Return its stable ID, title, window identity, and absolute path to $use-vishot or the caller.

Window Sizing

Resize the native BrowserWindow through Playwright's Electron handle when a scenario needs a deterministic content size:

ts
const size = { width: 1200, height: 900 }
const browserWindow = await electronApp.browserWindow(page)

try {
  await browserWindow.evaluate((window, target) => {
    window.setContentSize(target.width, target.height)
  }, size)
}
finally {
  await browserWindow.dispose()
}

await page.waitForFunction(target => (
  globalThis.innerWidth === target.width
  && globalThis.innerHeight === target.height
), size)
  • Use BrowserWindow.setContentSize() when the requested dimensions describe the renderer content captured by page.screenshot().
  • Use BrowserWindow.setSize() only when the requested dimensions describe the complete native window, including its frame and title bar.
  • Do not use page.setViewportSize() to resize an Electron window. It overrides renderer viewport metrics through Playwright/CDP but does not resize the native BrowserWindow, so the visible window and screenshot state can disagree.
  • Treat screenshot dimensions as device pixels. On a display with devicePixelRatio = 2, a 1200 × 900 content area normally produces a 2400 × 1800 screenshot.

Electron Windows and UI State

  • Do not treat electronApp.firstWindow() or the next window event as semantic window selection. They reflect creation order, and startup may create Chromium DevTools, splash, onboarding, hidden, or auxiliary windows before the intended product window.

  • Identify a window with a combination of stable URL or hash route, title, and a state-specific visible locator. Scan electronApp.windows() until one window satisfies the identity predicate, and fail if no exact match appears. A window event alone is also insufficient when the app reuses an existing window.

  • Exclude known non-target windows explicitly, such as devtools:// pages or onboarding routes. Select the intended window before changing its hash or route; navigating a wrongly selected renderer can produce a plausible URL with blank or invalid content.

  • Treat controls that expand, collapse, auto-hide, or reuse one toggle for both directions as state machines. For a Control Island or similar surface, first check whether the desired child control is visible. Expand only when it is absent, then wait for the child control before clicking it. Recheck immediately before the action when the surface can auto-collapse.

    ts
    async function ensureControlsOpen(page) {
      const settingsButton = page.locator('button').filter({
        has: page.locator('[i-solar\\:settings-minimalistic-outline]'),
      }).first()
    
      if (await settingsButton.isVisible().catch(() => false))
        return settingsButton
    
      await page.locator('button').filter({
        has: page.locator('[i-solar\\:alt-arrow-up-line-duotone]'),
      }).first().click({ force: true })
      await settingsButton.waitFor({ state: 'visible' })
      return settingsButton
    }

    Keep this logic product-owned because the icon, lifecycle, and open-state postcondition belong to the application.

Show full SKILL.md (246 more words)Show less

Scenario Readiness and Locators

  • Implement each scenario around the actual window, route, and UI state. Do not assume every Electron page exposes the same expected text or reaches readiness through the same action sequence.
  • Wait in this order: identify the exact window, confirm its final route, wait for a state-specific visible locator, confirm loading or transient overlays are gone, then let Vishot keep its final renderer stability window for remaining bundling, refresh, animation, or rendering.
  • Use text only when it is visible, unique, stable for the selected locale, and intrinsic to the intended state. Generic headings, placeholders, startup messages, and text copied from another scenario are weak readiness signals.
  • Prefer getByRole() or getByLabel() for accessible controls. For icon-only controls, locate the owning button with filter({ has: iconLocator }) and click the button. Escape : in attribute-based icon selectors, inspect the rendered DOM first, and avoid coordinates, window order, nth-child, or incidental layout classes.
  • If no stable locator exists, add a product-owned selector or scenario helper rather than replacing the condition with a longer fixed timeout.

Stability

  • Wait for a state-specific visible locator before capture; use the fixed delay only as the final Vite/HMR and rendering settle period.
  • Reuse the same isolated application profile, locale, theme, data, and window size for captures that will be compared.
  • Mock or seed network-backed content when it affects the visual result.
  • Capture each requested Electron window separately.
  • Treat a window selector mismatch as a failure; never fall back to a different window silently.

© moeru-ai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in .agents/skills/use-vishot-with-electron of moeru-ai/airi.

  • SKILL.md
  • agents/openai.yaml

Open the folder on GitHubat commit ec682e2

Compare with similar skills

Use Vishot With Electron 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.

Use Vishot With Electron compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Use Vishot With Electron this skillmoeru-ai/airi50k—~1.7kAutomated safety check: PassMIT
Camoufox CLIBin-Huang/camoufox-cli3501 repos~4.5kAutomated safety check: PassMIT
Berth Browsersean-brydon/berthd293—~1.4kAutomated safety check: PassMIT
Browser AutomationbenjaminasterA/antigravity-awesome-skills3751 repos~524Automated safety check: PassMIT
C Browserdaxaur/openpaw173—~383Automated safety check: PassMIT
Lightpanda Browsershepherdjerred/monorepo112—~1.2kAutomated safety check: PassGPL-3.0

Similar skills

  • Camoufox CLI

    Bin-Huang/camoufox-cli

    Anti-detect browser automation CLI & Skills for AI agents. An agent skill from Bin-Huang/camoufox-cli.

    350 GitHub starsUsed in 1 repo~4.5k tokens
    Productivity & AutomationAuto-check passed
  • Berth Browser

    sean-brydon/berthd

    Use your worktree's own page in a headless browser on the box — open it, read a compact snapshot with @refs, click, fill, press keys, wait, take a screenshot to a file, read console errors, and set…

    293 GitHub stars~1.4k tokensUpdated yesterday
    Productivity & AutomationAuto-check passed
  • Browser Automation

    benjaminasterA/antigravity-awesome-skills

    Browser automation powers web testing, scraping, and AI agent interactions.

    375 GitHub starsUsed in 1 repo~524 tokens
    Productivity & AutomationAuto-check passed
  • C Browser

    daxaur/openpaw

    Headless browser automation — navigate pages, click elements, fill forms, take screenshots, scrape content using agent-browser or playwright-cli.

    173 GitHub stars~383 tokensUpdated 4 mo ago
    Productivity & AutomationAuto-check passed
  • Lightpanda Browser

    shepherdjerred/monorepo

    Lightpanda headless browser CLI for fast web content extraction, searching, and fetching When browsing the web, fetching URLs, searching the web, extracting web page content, or needing rendered…

    112 GitHub stars~1.2k tokensUpdated yesterday
    Productivity & AutomationAuto-check passed
  • Covers 原生 Playwright Browser Tool、Chromium 进程池、Session Context、页面与 ARIA snapshot/ref 权威、同源安全、诊断/截图和 Web Browser 面板投影。

    181 GitHub stars~2k tokensUpdated yesterday
    Productivity & AutomationAuto-check passed

More from moeru-ai/airi

All 24 skills in this repo
  • Simple English

    moeru-ai/airi

    Write or rewrite technical text with the rules of ASD-STE100 Simplified Technical English so it is clear, unambiguous, and free of AI slop.

    50k GitHub starsUsed in 2 repos~4.6k tokens
    Auto-check passed
  • Review pending AIRI translations on Crowdin in a batch, then sync them into the repository.

    50k GitHub stars~1.5k tokensUpdated today
    Auto-check passed
  • Upload a local image or file to GitHub's user-attachments storage and return a URL suitable for issue, pull request, discussion, or comment Markdown.

    50k GitHub stars~554 tokensUpdated today
    Auto-check passed
  • Create PR

    moeru-ai/airi

    Prepare and create an AIRI pull request with verifiable change context, architecture evidence, and required visual evidence.

    50k GitHub stars~2.3k tokensUpdated today
    Auto-check passed
  • Test AIRI display-model imports with agent-browser across stage-tamagotchi Electron, stage-web, and stage-pocket mobile web layouts.

    50k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • A skill your agent uses when Codex needs to inspect, debug, or automate an Electron app through agent-browser and Chrome DevTools Protocol, especially when the app has multiple BrowserWindow…

    50k GitHub stars~3.1k tokensUpdated today
    Auto-check passed

Works with

Questions about Use Vishot With Electron

What does Use Vishot With Electron do?

Capture deterministic Electron windows with Vishot. An agent skill from moeru-ai/airi. Use Vishot With Electron is an agent skill from moeru-ai/airi. Capture deterministic Electron windows with Vishot.

When should I use Use Vishot With Electron?

Use Vishot With Electron fits situations like: the selected Vishot target is an Electron application and Codex must identify; more renderer windows without relying on window creation order.

How do I install Use Vishot With Electron in Claude Code?

Run `npx skills add moeru-ai/airi --skill use-vishot-with-electron -a claude-code`. Or copy the skill folder (.agents/skills/use-vishot-with-electron in moeru-ai/airi) into .claude/skills/use-vishot-with-electron in your project. Claude Code loads it when a task matches its description.

How do I install Use Vishot With Electron in Codex?

Run `npx skills add moeru-ai/airi --skill use-vishot-with-electron -a codex`. Or copy the skill folder (.agents/skills/use-vishot-with-electron in moeru-ai/airi) into .agents/skills/use-vishot-with-electron in your project. Codex loads it when a task matches its description.

Can I use Use Vishot With Electron in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add moeru-ai/airi --skill use-vishot-with-electron -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/use-vishot-with-electron, .gemini/skills/use-vishot-with-electron, .github/skills/use-vishot-with-electron and .opencode/skills/use-vishot-with-electron in your project.

What does Use Vishot With Electron need to run?

Going by SKILL.md and its folder, Use Vishot With Electron needs the command-line tools its instructions call (pnpm).

Does Use Vishot With Electron access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Use Vishot With Electron safe to install?

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.

What licence does Use Vishot With Electron use?

Use Vishot With Electron is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Use Vishot With Electron use?

About 1.7k tokens (SKILL.md is roughly 6.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Use Vishot With Electron?

Skills that share tags, products or a category with Use Vishot With Electron: Camoufox CLI (Bin-Huang/camoufox-cli, 350 stars), Berth Browser (sean-brydon/berthd, 293 stars), Browser Automation (benjaminasterA/antigravity-awesome-skills, 375 stars) and C Browser (daxaur/openpaw, 173 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Use Vishot With Electron?

moeru-ai (a GitHub organization) maintains it in moeru-ai/airi, which has 50,267 GitHub stars. The repository holds 24 skills in this directory. The repository was last updated on October 11, 2026.

Source: moeru-ai/airi on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.