Drive VoiceOS (Electron) agent by text over CDP: agent-text-send IPC
VoiceOS 0.1.40 accepts --remote-debugging-port (relaunch: osascript quit, then open -a VoiceOS --args --remote-debugging-port=9333; no --remote-allow-origins needed for Node WebSocket). Renderer windows are index.html#/agent-notch, #/agent-history-notch, #/pill; dashboard is index.html with no hash (recreate with open -a after it is closed; api.showMainWindow does nothing). From the agent-notch renderer, window.api.send("agent-text-send",{text,widgetVisible:false,visibleSessionId:null}) starts a typed agent turn. Subscribe with window.api.on(channel,cb) to agent-notch-turn-started / agent-status-update (status 5 = streamed text, 7 = complete, 8 = confirm required) / agent-complete / agent-confirm-required. window.api.agentHistory.getRecent(n) returns transcript and response_text. Integration Reload is window.api.integrationMarketplace.refresh(manifestId). Widget cards are out-of-process iframes: Page.getFrameTree omits them, so use Target.setAutoAttach flatten plus DOM.getFrameOwner/getBoxModel for click coordinates. The notch auto-collapses about 5s after an answer, so screenshot at completion (screencapture -R on the window rect; CDP screenshots of the transparent window come out white).