Skip to content

Harness Remote v2.11.0

Choose a tag to compare

@github-actions github-actions released this 18 Aug 14:39
· 1434 commits to main since this release

Release

Stable release of Harness Remote 2.11.0: the Android APK below, plus unsigned Windows, macOS and Linux desktop builds attached by the desktop workflow.

What's Changed

  • One server per machine, instead of one public server per harness. A machine daemon discovers the supported agents installed on the host — OpenCode, Codex CLI, Claude Code, Oh My Pi and PI — and exposes all of them behind a single Harness Remote endpoint. The client picks the harness and the model it wants. Remote setup stops multiplying with the number of harnesses you use.
  • Managed OpenCode no longer leaks its plumbing into the settings. It runs on an internal loopback server, and its internal host and port are no longer something you configure: the public daemon port, normally 4097, is the only one you enter.
  • Model discovery is scoped to the selected agent and travels through the same machine endpoint as everything else, so the catalog you see belongs to the harness you are actually talking to.
  • The same server profiles work from Desktop and Android. Browser clients still need their exact origin allowed with --cors, because credentialed CORS cannot use a wildcard; native clients need no CORS configuration at all.
  • Attach images to a prompt on the Oh My Pi bridge, from both the desktop and mobile composers.
  • The app ships in Simplified Chinese, alongside English, Italian and Traditional Chinese.
  • PI is a much better citizen. Sessions carry their native titles and rename metadata instead of a shared placeholder, history is read from the journal PI already keeps, streamed Markdown and replayed text fragments render as one message, and a failed or retried provider call no longer leaves the transcript disagreeing with the journal. Windows behaviour is steadier throughout.
  • Provider errors say what went wrong. An ACP backend's actionable detail used to be swallowed and reported as a generic internal error; the message now reaches the screen.
  • Session replay and history merging are faster, by trimming the common prefix before the expensive merge rather than running it over material that already matches.
  • A new app icon, across the launcher, the browser tab, the installed web app, the desktop packages and the splash screens. The previous one was a wordmark that lost its detail at the sizes an icon is actually seen at.
  • The task structure that 3.0 will run on is built and shipping in this release. Harness Remote 2.11.0 carries a working task layer under the hood: tasks are persisted per machine with a real lifecycle — draft, starting, running, completed, failed — enforced by the store rather than assumed by the caller, so a task cannot silently skip a state or enter a terminal one twice. Each task owns a run, and a run owns its agent session, which gives the explicit task/run/session relationship the next generation needs. A task can execute in its own isolated Git worktree, and what the run changed can be inspected afterwards — branch state, commits ahead and behind the source. Runs are reconciled when the daemon restarts: a task that was mid-run is adopted back together with its agent session, or marked failed with a reason, instead of hanging as permanently running. New tasks remember the model you last used, per machine and per agent. Malformed task state is set aside and preserved rather than discarded.
  • What that means for 3.0, TaskDesk. The next generation grows the project from a remote session controller into a task manager for coding agents — a machine-centric home, projects as first-class entities, per-task harness and model selection, and finish, review, cleanup and reopen flows. The interface that drives all of the above is deliberately not wired into the shipped app yet: it stays behind a development-only flag, so 2.11.0 changes nothing about how you work today while the foundation it will stand on is already in place and under test.
  • A lot of bugs are gone. 45 of the 193 commits in this release are fixes, most of them found while stabilising the multi-agent architecture against real harnesses on Windows, macOS and Android. The ones worth naming are below.

Fixes

  • Saved server profiles survive an upgrade. Legacy profiles are preserved and migrated on reload rather than quietly rewritten, and the setup wizard no longer saves PI and Oh My Pi as Codex.
  • Sessions go to the harness you chose. OMP and PI route to their own harness, the selected harness travels with the request, and the speculative fallback that could silently land a session on Codex is gone. Session state is isolated per machine and harness, so two servers no longer share one another's sessions.
  • The first-run wizard works from a clean install again, and a manually entered server name is kept instead of being overwritten by discovery.
  • The connection test reports the real backend when it is talking to a machine daemon, rather than a mismatched one.
  • The model catalog answers in bounded time. Its refresh has an authoritative timeout, cold startup is allowed to finish, the catalog's own bookkeeping session no longer appears in your session list, and a persisted catalog session is hidden until it has been refreshed.
  • The completion sound waits for the session to actually finish instead of firing at the first quiet moment.
  • Android opens OpenCode sessions again, with session folders scoped to the right server.
  • Settings stays open while PI replays its history, and the replay completes instead of stopping short.
  • Message and session action menus draw above the composer rather than behind it.
  • An HTML response during task discovery is explained instead of surfacing as an opaque parse failure.

Contributors

  • A big thank you to @luccapinto (Lucca Pinto) for image attachments on the Oh My Pi bridge — the protocol plumbing, the composer work, and the test coverage behind both.
  • A big thank you to @joyfish666 (Wang Huanyu) for the Simplified Chinese translation, for making Enter insert a new line on touch devices where it used to send, and for lifting the message and session action menus clear of the composer.
  • A big thank you to @Baylar55 (Baylar Sadigov) for making history merge replay faster by trimming the common prefix before the merge runs.
  • A big thank you to @giuliastro (Giulio Ardoino) for the unified multi-agent architecture and the machine daemon, the task layer behind TaskDesk 3.0, the harness routing and profile migration work, the PI integration, the model catalog bounds, the app icon, the long tail of fixes, the documentation, testing, and release integration.

Notes

  • Built from ffac6c7118b3bfa2dd4150ed8696c924f36c154a
  • Version code 21100

Full changelog: v2.10.3...v2.11.0