Parallax

The desktop app

What the Parallax window shows and does, and how it works with the agent that drives the same simulator.

The Parallax desktop app is a macOS window onto the same app and simulator the agent works on. The beta is invite-only. When it is open, all your agents share one Parallax core, so the window and every agent see the same app.

Beta

The window described here is what the beta has. Features that are not listed are not there yet.

Layout

  • Left: the session list.
  • Middle: the live simulator screen (one device, or two side by side), with the Device panel beside it.
  • Right: approvals and agent activity.
  • Bottom: the dock with terminal tabs, logs and errors.

At start the window shows the device saved for it; when that device is gone, it picks the next saved booted device, else the first booted one. A device that disappears while the window runs is not replaced: its column says it is gone.

The toolbar has the simulator picker (every simulator and emulator, grouped as iPhone, iPad and Android, booted ones marked; choosing never boots anything), the pointer mode, the one device or side by side switch, a Metro status pill ("Metro connected" or "Metro not running"), Reload and Screenshot. Panels collapse: session list ⌘B, right panel ⌥⌘B, dock ⌘J. The layout is remembered per window.

Live screen and input

The simulator's screen streams in the window. You click, type and swipe on it as you would on the simulator. A strip beside the device has the hardware buttons (for example the action button and volume on an iPhone, Back on Android). The agent's taps and typing arrive on the same simulator.

Android emulators

An Android AVD that is not running is listed as "shut down"; choosing it shows Boot, which starts it. An emulator booted from the window stays booted after Parallax quits, like an iOS simulator; if its boot fails, Parallax stops the emulator it started. The picture comes up when the emulator has finished booting, without choosing it again. The picture comes from scrcpy-server (Apache 2.0), which Parallax pushes to the emulator while the window shows it and removes afterwards.

Inspector and pick

Switch the pointer from Interact to Select element, then click the screen. The Inspector shows the component under the click: its name, file and line, owner chain (library parts collapsed), frame, testID, and props with secrets redacted. Open in editor jumps to the file. See Inspector and pick.

Two simulators

Side by side shows two devices at once, each with its own column: two simulators, or an iOS simulator and an Android emulator. A scope menu in the Device panel chooses which device the panel shows. See Two simulators.

Device panel

Tabs next to the screen, all scoped to the selected device:

  • Inspector: the picked component.
  • Network: the app's requests, with a filter by URL, method or status. A request opens to its headers and body; Copy as cURL and Attach to message remove secrets first.
  • State: the stores registered with the SDK, with a search over keys and values, and what changed in the last snapshot.
  • Navigation: the navigators and the focused route, and each change of route as it happens.
  • Performance: frame rates, slow React commits and what the JS thread did. See Performance and animations.
  • Security: hints about the app's files, logs and requests, with masked evidence; Attach a finding to a message or Accept… it with a reason. See Security hints.

See Network, state and navigation.

Logs and errors

The dock's Logs tab shows the app's console, with a minimum level and a text filter, and a marker where the app reloaded or the connection was lost. Errors shows uncaught errors and build errors with a symbolicated stack. An error card can open the file or be attached to a message for the agent. Without the SDK, logs come through the debugger, with a shorter history; the SDK adds the full history.

Terminal tabs and sessions

The dock's Terminal tab holds real terminal tabs. New session opens one; start your agent in it. Tabs get the PARALLAX_TAB variable, so the agent's tools know which tab they belong to. With the hooks installed, the session list shows each agent session and whether it is working, waiting for you ("Needs you") or idle. Clicking a session in the list opens its tab. A stopped session can be resumed: a new tab opens in the saved folder with the resume command on the prompt line, and you press Enter. For Codex it is codex resume --no-daemon <id>: only without the daemon can Parallax tell which tab the session runs in. Clear history forgets stopped sessions, messages no agent has read, and the saved decisions and activity.

Approvals, activity, decisions, messages

The right panel has four tabs:

  • Approvals: cards waiting for you, each with Allow and Deny; a "Running now" list of Parallax calls in progress. See Approvals.
  • Activity: what agents read or did through Parallax, grouped, filterable by session.
  • Decisions: your past answers, kept for 30 days.
  • Messages: what you sent to agents and whether it was read.

Send to agent

The composer at the bottom takes a message and, optionally, an attached element or error. Its target follows the active terminal tab: switching tabs selects that tab's session, the message target and that session's device column.

  • A tab whose agent has no session yet is a target of its own, for example "To Codex in tab 2". Codex reports its session only with its first prompt, also after codex resume. The text is pasted into the agent's prompt line, and the message waits for the session that appears in that tab.
  • A new session of the same agent in the same tab takes over the old session's unread messages.
  • A tab with no agent says "No agent in this tab: start claude or codex here, or pick a session", and Send to agent is off.
  • A stopped session is a target only when you pick it in the session list; the message waits until you resume it.

Send to agent puts the message in an inbox. With the hook installed, the agent is nudged to read it with the parallax_inbox tool; if the agent's prompt is ready in the tab, the text is also pasted there. Parallax never submits a pasted message: you press Enter, and the status then reads "you sent a prompt; if you did not edit the text the agent has it". A line under the composer says what became of the last message (queued, nudged, read, not picked up). If no agent has the Parallax tools loaded, the composer says so and points to npx -y @parallax-rn/mcp@0.1.0-beta.2 setup claude (or codex).

What the window does not do

Physical devices are not supported. The Device panel tabs above are every panel this build has.

On this page