@.llms/CLAUDE.md @.llms/learnings.md
When the user's request matches an available skill, invoke it via the Skill tool. When in doubt, invoke the skill.
These live in .claude/skills/ and are the source of truth for the hard seams.
- Driving the Electron window via CDP (playtesting, clicking through screens, checking console errors, screenshots) →
electron-playtest - Anything that crosses main / preload / renderer (IPC,
electronAPI, native modules, Bluetooth, FS, dialogs) →electron-ipc-architecture, thenelectron-ipc-channelwhen adding/editing a channel - Pyodide, MNE,
webworker/,InstallMNE.mjs, plot/data routing, prod-only analysis failures →pyodide-mne - Epics, live EEG, markers, empty ERPs,
buildMarkerRegistry→redux-observable-epochs
npm run dev starts electron-vite, which also serves the renderer at http://localhost:5173. That URL is not the app.
window.electronAPIand thepyodide://protocol exist only inside the Electron window (preload + main).- Opening
:5173in Chrome //qacrashesLSLStatusListenerand fails Pyodide init (Failed to fetch … pyodide://host/pyodide/pyodide.asm.js). - Never
/qa,/qa-only, or/browseagainstlocalhost:5173. - Playtest the Electron window via CDP — see the
electron-playtestskill (.claude/skills/electron-playtest/SKILL.md).