Release
Stable release of Harness Remote 3.4.0: the Android APK below, plus unsigned Windows, macOS and Linux desktop builds attached by the desktop workflow.
Harness Remote 3.4.0 is about never losing the agent's work.
Claude Code's background subagents and commands now come back on their own, a prompt sent while the agent is busy is never blocked again, and Sessions open faster and more reliably across every harness.
✨ Highlights at a glance
| What changed | Why it matters | |
|---|---|---|
| 🔁 | Background work resumes live (Claude Code) | The agent's follow-up turn shows up exactly as in the CLI: no more "I'm waiting…" followed by silence |
| 📨 | Prompt while the agent works | Queued or steered into the running turn, never dropped, never blocking the composer |
| ⚡ | Session-first loading | Active Sessions reopen straight into the live reply; Sessions in later projects are found automatically |
| 🖥️ | Codex is back on desktop | Bundled Codex is detected even when its PATH entry is broken |
🔁 Background agents now come back — just like the CLI
When Claude Code launches a background subagent, a run_in_background command or a monitor, it ends its turn with "I'll report back when it finishes". In the CLI, the finished work wakes the model up and it carries on by itself. Through Harness Remote, that follow-up turn used to be silently lost: the Session read Ready, the resumed tool calls were dropped and the answer arrived unnoticed, if at all.
Now Harness Remote adopts that turn:
- The Session goes back to working on its own, with no prompt from you.
- The resumed output and its tool calls arrive as a new reply, and the turn closes after 30 seconds of silence (longer while one of its tools is still running), with the usual finished notification.
- Several subagents in parallel? Each one that finishes wakes the Session again, and every report is its own paragraph.
- A prompt you send meanwhile queues behind it, and Stop cancels it like any other turn.
💡 Tip: ask Claude to delegate long work to background subagents and keep chatting; the results land in the Session when they are ready.
📨 Prompt while the agent works
Sending a prompt mid-turn is never refused. What happens next depends on the harness:
- Codex → the prompt is steered into the live turn straight away, and Codex's answer appears right below it.
- Every other harness → the prompt waits in a Queued strip above the composer and starts automatically when the current turn ends.
- Each queued prompt has its own × to withdraw just that one; Stop still ends the running turn and clears the queue.
- The daemon is the single source of truth for the queue (
started/queued/steered), so the state survives switching Sessions, reloading the app or opening a second client.
⚡ Session-first loading, pagination and startup
- Reopening an active Session shows the history loader, then the live reply already working. "Is getting started" is now reserved for a prompt you just sent.
- Session discovery reads through empty pages (within a bounded time budget and at most four requests), so Sessions in later project roots are discovered even when the first ones are empty.
- Returning to the foreground clears stale live statuses and refreshes the Session index.
- The desktop app waits for the local machine list before opening the Machines manager on its own.
🖥️ Desktop and mobile
- Codex reappears on desktop even when its PATH entry is a dangling symlink: the bundled executable is detected, its cached account is reused without forcing a browser login, and its history is read from the same
CODEX_HOME. - On mobile, machine actions wrap above full-width details and project folders.
- Session filter selects are fully clickable, caret included, and settings controls keep room for translated labels.
🛠️ Fixes
- Claude Code — back-to-back replies are no longer glued into one run-on sentence (
…the results.The subagent…); each reply is its own paragraph. - Claude Code — a resumed turn is no longer reported idle by the status check just because no prompt is pending.
- Codex — an adopted steering turn now settles from its real silence instead of a fixed 90 seconds after steering, which could close it mid-stream.
- Prompts enter a Session one at a time: a prompt sent during the previous one's model switch no longer starts a parallel turn.
- Transcript order — the running reply stays above queued prompts, steered output lands below the steered prompt, and the newest page keeps its own order, so replies no longer move under the wrong prompt.
- Composer — Send stays available next to Stop, and a send no longer waits for the streaming refresh (which delivered prompts after the turn instead of queueing them).
- OpenCode 2 — the native
defaulteffort no longer breaks continuation; history exports are coalesced and retried; reasoning-only updates no longer end a turn early; replies are no longer lost when its export becomes the source. - Release notes — the release tag now keeps Markdown headings, which v3.3.0 lost.
✅ Verification
- Bridge: full
node --testsuite green. Web: type-check plus everysrc/*.test.mjs, desktop and Chromium smoke suites, and all required pull request checks. - End-to-end in the real UI against live harnesses: OMP, Claude Code, OpenCode 2 and MiMo queue mid-turn, Codex steers, and Claude Code background subagents resume on their own — checked headless and in the desktop app.
Notes
- Built from
d19f6278733826fdc2d6d520dbfe73117e3bae26 - Version code
30400
Full changelog: v3.3.0...v3.4.0