원클릭으로
screenshots
Generate the README hero + Mac App Store marketing screenshots (retina, Prose theme, light/dark) via Playwright.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Generate the README hero + Mac App Store marketing screenshots (retina, Prose theme, light/dark) via Playwright.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Validate all LLM-accelerated GitHub issues through systematic QA testing via Circuit Electron.
Human-in-the-loop QA loop for verifying a large feature or refactor against the locally-running app before merge/release. Use when automated tests (e2e, web-e2e) don't cover the behavioral/UX surface and you need a structured, interactive "you drive / I observe" verification pass with in-session bug fixes. Complements qa-pr (automated, Circuit) and qa-web (Playwright).
Automated QA testing for Prose PRs using Circuit Electron. Use when testing pull requests before merge.
Implement one solo-ist/prose GitHub issue end-to-end and open a PR ready for review. Use when an Oz child agent is assigned exactly one issue to fix or build in this repo.
Reference and checklist for building and maintaining CI/CD workflows, inter-workflow communication, dispatch scripts, and cloud agent infrastructure. Use when modifying any workflow YAML, dispatch script, or sentinel-based communication.
Merge scorer and PE signals to route PRs. Applies routing matrix (hitl-light / hitl-full) based on score thresholds and risk levels.
| name | screenshots |
| description | Generate the README hero + Mac App Store marketing screenshots (retina, Prose theme, light/dark) via Playwright. |
Produces the README hero and the Mac App Store screenshot set from a clean, isolated, seeded Prose instance — deterministic, retina (2560×1600), no private data, no live API calls. Built on the e2e Playwright harness.
| Output | Scene (App Store copy) | Mode |
|---|---|---|
01-hero-editor.png (also the README hero) | Hero — post + Projects explorer | ☀️ Light |
02-ai-chat.png | AI Alongside You — chat + mode-switch card | 🌙 Dark |
03-review-diffs.png | Review Every Suggestion — Quick Review | ☀️ Light |
04-edits-history.png | Edits History — the Activity panel | 🌙 Dark |
05-projects-favorites.png | Projects & Favorites — Favorites view | ☀️ Light |
Light hero, then alternating dark/light. Scenes mirror the shot list in
docs/app-store-copy.md. Keep that copy and
this generator in sync when the shot list changes.
| File | Purpose |
|---|---|
e2e/electron.screenshots.spec.ts | Scenes 1, 3, 4, 5 — isolated profile, seeded projects/favorites + the blog fixture |
e2e/electron.screenshot-chat.spec.ts | Scene 2 — the chat mode-switch, injected deterministically (no live AI) |
e2e/fixtures/a-chorus-of-human-voices.md | Demo document (a real blog post). Frontmatter is stripped at runtime so the title leads; a few obvious typos are injected below the fold for the review/activity demos |
docs/app-store-screenshots/ | Destination for the App Store set |
docs/images/prose-screenshot.png | Destination for the README hero (= scene 1) |
Both specs are excluded from the normal e2e run — they self-skip unless
SHOOT=1 is set (test.skip(process.env.SHOOT !== '1', …)).
# 1. Free port 9222 — the dev build binds it; a running dev server blocks the
# screenshot instance. Stop it first (PID file), restart when done.
kill "$(cat .dev.pid)" 2>/dev/null
# 2. Build (the specs launch the built app at out/main/index.js).
npm run build
# 3. Generate → writes to /tmp/prose-shots/
SHOOT=1 npx playwright test electron.screenshots electron.screenshot-chat --workers=1
# 4. Review every shot before committing (they're marketing assets).
open /tmp/prose-shots/*.png
# 5. Place into the repo.
cp /tmp/prose-shots/0{1,2,3,4,5}-*.png docs/app-store-screenshots/
cp /tmp/prose-shots/01-hero-editor.png docs/images/prose-screenshot.png
Inspect each PNG (e.g. with the Read tool) and iterate — re-run a single scene
with ... electron.screenshots -g "03 review" --workers=1.
PROSE_USER_DATA_DIR with
settings.json (Prose theme color: 'prose', projects/favorites, a fake
llm.apiKey so the chat renders configured, aiConsent). No private data,
reproducible.sips -g pixelWidth -g pixelHeight.color: 'prose' (the gold theme; not the mono default).
Light/dark per scene via the dark class on <html>.src/renderer/main.tsx):
window.__prose_tools.executeTool(name, args, mode, provenance?) — drive
open_file, suggest_edit (pass provenance.model so the Activity panel
shows a real model, not "Unknown"), add_comment, accept_diff.window.__prose_chat — seed a conversation + inject messages. Scene 2's
mode-switch is an assistant message whose content carries a real
<tool-result name="request_mode_switch" success="true">{json}</tool-result>
tag, so the rendered card is the actual RequestModeSwitchResult component.safeStorage is unavailable to the Playwright-launched Electron, so a fresh
automated run can't read it. Scene 2 is therefore mocked (the card is the
real component with scripted content) — visually identical to a live exchange.
Don't try to wire a live call; if you must, you'd seed a plaintext key into
the profile's settings.json (ipc.ts reads settings.llm.apiKey first).open -a Prose while generating — it launches the installed app,
which shares userData on the case-insensitive filesystem and fights the
single-instance lock.electron.screenshots.spec.ts (heroBody.replace(...)), not in the fixture.The shot list is owned by docs/app-store-copy.md (issue #612 owns the assets).
If a scene is added/removed/renamed there, update the spec scenes and this table,
regenerate, and replace the files in docs/app-store-screenshots/.