Skip to content

OpenRemote 0.4.3

Choose a tag to compare

@github-actions github-actions released this 28 Oct 22:22
· 98 commits to main since this release

A console that stops telling you things it has not checked, and a saved setup that stops narrating itself.

OpenRemote is one window for the agent harnesses on your computer - Claude Code, Codex, grok, pi, opencode, agy. This release is a night of narrow reads, one surface at a time, fixing places where a screen said something the state did not support.

The console stops telling you things it has not checked

  • A saved setup settles silently. Pressing a setup whose model or project is no longer here used to print a sentence about the difference ("gemini-4-argon-medium is not one Antigravity lists any more, so the chat starts on its default model"). It now applies what it still can and says nothing. Two notes about the chat in front of you stay: a model list that did not load, and a model dropped by a harness switch.
  • The metrics count what the lists count. The Metrics view counted archived chats, so its total disagreed with the sidebar under it, and a status this console does not know was dropped from the sentence with nothing said. It counts the active chats now, and names the ones it cannot classify.
  • A "ran" line stops inventing a time. A last_run stamp in the future was printed as an ordinary past run; a machine whose clock is ahead says so instead.
  • The changes surface says what it could read. An edit report in a shape the fold does not recognise used to produce "No file changes in this chat", the opposite of what the harness reported. Its headline also counted lines from reports that never landed; those are named beside the counts now.
  • Pairing counts down honestly. The code's clock rounded to the nearest second, so it read "Expired" with half a second still working, and "1:00" for fifty-nine seconds. It rounds up, and a phone list that could not be read says so instead of reading as empty.
  • A signed-out agent says where to sign in. In the harness manager the row showed the state and, on onboarding, no way to act on it.
  • An endpoint's address is printed without the credentials in it. A URL pasted with a user and secret in it validated fine and was rendered in the clear beside a masked key field.
  • Privacy mode covers the settings search. An archived chat's title was blurred in the list and readable in the search results one tab over.
  • Compact density says what it covers. It pulls in the settings, list and sidebar rows; the transcript keeps its spacing.
  • A refused archive write says so. Restore left the row where it was with nothing said while the toggles in the same pane reported the identical refusal.
  • Two projects that read the same name say which folder they are, a project whose folder is gone is drawn as what it is, and a project list that failed to load no longer reads as a machine with no projects.
  • The phone's own screen stops addressing a desktop user, its device card looks openable without a hover, and a failed account read says the Cloud did not answer instead of checking for ever.

The shell, the keyboard and the one dropdown

  • Escape in a field outside the chat stops interrupting the turn. Clearing the sidebar's search with Escape also aborted the running turn the sidebar was showing.
  • A dialog hands the keyboard to the control you actually pressed, and to a defined place when that control is gone, never to the body.
  • The dropdown keeps its keyboard, its press and its place. Closing a picker lost focus to the top of the document, one press could dismiss the picker and the dialog behind it, and a menu open while the window shrank hung past the edge.
  • A mode switch no longer leaves the other mode's chat in the pane, and the review over a chat follows the chat you are looking at rather than the primary pane's.
  • An install keeps its answer. Closing the harness manager mid-install threw the daemon's failure away, and every other Install button went dead with no reason on screen.

The client and the data loop

  • A timeout carries a status, an install has a ceiling again (ten minutes plus a second, so the daemon always answers first), and a success whose body could not be read is an error rather than an empty answer.
  • Pointing the console at another daemon no longer keeps the old one's chats, and the poll beat waits for the boot before it owns the lists.
  • The fold cursor moves only past an event the timeline took. A throw used to consume its own event, and now a payload it cannot read becomes an announced gap rather than a pane that redials for ever.
  • A poll beat older than the newest folded event no longer puts the old answer back. The gate uses the daemon's own event stamp, so a finished turn cannot flicker to running and an error line cannot vanish for a beat.
  • openremote-daemon --help answers the usage and exits 0 instead of "unknown command" and 2.

The gate itself

The DOM smoke grew to 22 checks with no skips and now clears a leftover overlay or split with a note, presses a row only where it is on screen, and presses the row menu's mark item. A test that assumed an LF checkout now holds on Windows too.

Known

  • The daemon workspace's cargo fmt --all --check and three clippy lints stay red on the committed tree: they are in files carrying uncommitted work, and the repair is one cargo fmt plus three small edits once that work lands.
  • An installed app still does not look for a newer version. Moving to a newer release means running a newer installer over it, or openremote --update if you installed through npm.