github devswha/ovis v0.4.19
Ovis v0.4.19

5 hours ago

New features

  • Update a PC's own older Ovis right from its card in this app.
  • Antigravity chat works on Windows.
  • Chat shows pictures from omp sessions and Codex tools.
  • OpenCode subagents show as background tasks, as Claude Code's do.
  • Settings can revoke every paired device at once.

Improvements

  • Korean in the terminal uses a coding font that matches the Latin.
  • With only the Host shown, the sidebar starts with its workspaces.
  • The phone key bar can show or hide the keyboard in the terminal.
  • Queued or held messages can be edited back in the message box.
  • A device whose push alerts stopped is told why and can fix it.

Bug fixes

  • Chat shows an agent's words and tools in the order it wrote them.
  • A PC whose own Ovis restarts reconnects to it by itself.
  • Updates stay installed when your home folder is a symlink.
  • Connecting a remote PC from Windows no longer hangs.
  • Voice input in the Android and iOS apps can use the microphone.
Full changelog

Added

  • Antigravity (Agy) chat on Windows: the pane's held conversation lock is found through the
    Restart Manager, so Chat reads the native conversation instead of falling back to terminal text.
    A process without a conversation, an unreadable creation time, or an ambiguous hold keeps
    Terminal.
    (#2016 by @kyop21)
  • A device whose push alerts stopped is told why: when the push service retired its subscription,
    the server no longer knows it or it was made for another server key, one line over the pane and
    the Test notification row of Settings → Alerts say so and offer Turn alerts on again, which
    subscribes the device anew; a refusal is told and opens Alerts, where Send test answers it. The
    server keeps the outcome of the last push to each subscription (push-delivery.json, owner-only,
    bounded like the retired list) and answers POST /api/push/status to the subscription's owner
    holding its keys alone. A failure older than the last success, no answer, throttling or a server
    error never raises the line, and no probe push is sent to find out.
    (#1995)
  • Settings → Phone & devices lists what protects the server, read-only: whether an access token is
    set, whether the pairing gate is closed, the kind of address it listens on and how this browser
    reached it. Whether it can be reached from the internet stays "Unknown" unless the request came
    through Tailscale Funnel, and no token value is ever shown.
    (#1975)
  • Chat shows the pictures in an omp session: one sent with a prompt, a prompt that is only a
    picture (as a turn of its own), and one a tool such as read returned. omp keeps their bytes in
    its blob store; Chat reads them from there and serves only bytes that match the name omp gave
    them. A picture omp keeps in its blob store shows when the PC runs Linux; on macOS and Windows
    only pictures omp keeps in the session itself show for now (#2004).
    (#1998)
  • Chat shows a picture a Codex tool returned (view_image, an image generation, a screenshot a
    command read) in that tool's row, loaded when the row is opened.
    (#1998)
  • An OpenCode 2 pane's subagents are background tasks, as a Claude Code pane's are: the message
    box's button and the sidebar badge count those running, the list shows them with the newest ten
    that ended in the last day, a turn that ends while they run reads BG with its finish alerted
    once, and one whose pane no longer runs that session reads as lost. A subagent run in the
    background leaves a card in the chat with its answer, and a foreground one's answer no longer
    shows OpenCode's <subagent> tag.
    (#1987)
  • Edit queued or held messages back into the composer without replacing its existing draft.
    (#2041 by @odfalik)
  • A PC whose own Ovis is older than this app can now be updated from here. When that Ovis can update
    itself, the PC's card offers "Update this PC's Ovis to vX", and with automatic PC bridge updates
    on it runs unasked. The app asks that server over SSH to install the release its own updater offers,
    shows its progress and reconnects once it is back on the new version. When it cannot update itself,
    the card says why and shows where that Ovis answers.
    (#2048)
  • Rename tab is a command palette action and a shortcut with no default key (bind one in
    Settings → Shortcuts): it opens the inline name field of the open tab, as the tab menu's Rename
    does.
    (#1981)
  • Settings → Phone & devices can revoke every paired device at once, the current one included, in
    one durable step that also voids any pairing code or unconfirmed pairing still out; the access
    token, the PC itself and its Tailscale login keep getting in, and the gate stays closed to
    strangers. Every open window is told when a device pairs, with a line that opens Phone & devices,
    and devices with alerts on get a notification of it.
    (#1977)
  • Settings → Appearance → Sidebar filter turns off the Filter field above the sidebar's lists on
    this device. With it off, Filter workspaces and agents in the command palette opens the field,
    focused, for as long as you filter.
    (#2073)
  • The terminal's key bar on a phone has a Show keyboard / Hide keyboard key after the Input line
    switch and Paste: it raises the keyboard for the current input mode or puts it away without
    sending a key, changing the mode or resizing the pane, and shows whether the keyboard is really up.
    (#1973)

Changed

  • When the sidebar shows one PC and it is the Host (the only PC, or the others hidden on this
    device), its PC header row is gone and its workspaces start the list. Its state, notices and
    errors still show, and its + is a New workspace row under the workspaces. A remote PC
    shown alone keeps its header, with its name and its manage menu.
    (#2073)

Fixed

  • Escape on an open agent list in the New session, Earlier sessions and New worktree dialogs closes
    only the list in Safari too, where a list opened with the mouse leaves the focus off its button;
    before, that Escape closed the whole dialog. An overlay opened over the dialog, such as Add PC,
    still takes its own Escape.
    (#1972)
  • A message queued in Chat for an agent started through a launcher that stays in front of it (an
    npm claude wrapper, a shell script) is held when the agent behind the launcher restarts, as it
    is for an agent started directly, instead of going to the new agent.
    (#1986)
  • On macOS, checking which agent a queued or first message goes to no longer stops the server
    while ps answers.
    (#1986)
  • Antigravity chat on macOS no longer falls back to Terminal for the whole of every turn: the
    catalog snapshot is opened through its real path instead of the /var symlink.
    (#2030 by @phlips5437)
  • Voice input in the Android and iOS apps can use the microphone: the Android app now asks for it
    instead of refusing it without a prompt, and the iOS app carries the microphone usage text that
    iOS requires before an app records.
    (#2035 by @nahwan-kim)
  • Chat keeps a turn's words and tool calls in the order the agent wrote them, as the terminal
    does: text written before a tool call no longer drops below every command of the turn.
    (#2060)
  • A Claude Code question asked while the fullscreen layout shows its diff panel beside the session
    now gets its question card instead of the generic input screen.
    (#1984 by @bonecool999)
  • Chat greets a Codex started by typing codex in a terminal, before its first message, as it
    does one started from the app, instead of saying the conversation is unavailable. It does so only
    when the screen shows Codex's start screen with nothing said, no resume or fork started
    it, and no conversation of that folder was begun or written since it started.
    (#1967)
  • Command Code suggestions show one row per command name, matching what Command Code runs.
    (#1970)
  • When a Command Code commands folder is too large to list in full, suggestions no longer offer a
    command Command Code would not run, and skills are offered as /skill:<name>.
    (#1970)
  • An unreadable Command Code commands folder no longer empties the whole command menu.
    (#1970)
  • Command Code completion stays open after /mode:.
    (#1970)
  • Very large or hostile repositories no longer hide your personal skills.
    (#1970)
  • Skill names are recognized in files with BOM-prefixed frontmatter headers.
    (#1970)
  • Copilot conversation history stays bound to the same session during a verified foreground
    parent-to-child process handoff, without accepting unrelated processes or stale reports.
    (#1955 by @YuuuXie)
  • Copilot Chat keeps conversations readable when recorded tool arguments are strings, including
    non-JSON input, while preserving bounded input display and verified tool output.
    (#2024 by @YuuuXie)
  • Copilot Chat can recover after a temporary log read failure or an append during its first read,
    without restarting the bridge or trusting a lost session binding.
    (#2061 by @YuuuXie)
  • Copilot Chat retains verified session continuity across safe partial log lines and retries
    concurrent log writes without permanently discarding the last verified checkpoint.
    (#2025 by @YuuuXie)
  • Earlier sessions now lists Hermes conversations made by /branch or a gateway reset, each
    resumed by its own id; Hermes's delegated runs, tool sessions and compression continuations
    stay hidden.
    (#2001)
  • With Settings → Terminal → Use alongside herdr's own window on, a tab you are in now also lets go
    of its pane after 10 seconds without typing, a click or a paste in its terminal. herdr's own window
    then has the pane at its own size again, instead of drawing it cut off with typing and clicks
    landing in the wrong place for as long as the tab stayed open. The next key, click, paste or
    composition in the tab takes the pane back, and what you typed goes in once, the first key
    included. If the pane cannot be taken back within 5 seconds, what you typed waits for you to send
    or discard it. With the setting off nothing changes.
    (#2002)
  • On an iPad whose Safari page zoom for Ovis is below 100%, the message box follows the on-screen
    keyboard again: a page zoom is no longer taken for a pinch zoom
    (#1957 by @Noobear).
  • Ovis for Mac keeps an unsent draft when the window follows the server to a new port: the chat's
    draft, the terminal's held input and held messages typed on the old port show on the new one,
    still waiting for Send or Discard.
    (#1996)
  • A crash or power loss no longer leaves the app unable to start because its saved remote PCs
    cannot be read. The damaged file is kept beside it under a new name, the app starts without
    those PCs, and Settings > Remote PCs names the file so you can add them again. The saved PCs
    and herdr's machine approvals are now written so that a crash cannot leave them unreadable,
    and only when they changed instead of on every refresh.
    (#2045 by @mattmarcin)
  • On macOS the server no longer pauses every connection while ps tells when an agent's process
    started or which terminal it runs in: it reads both from the kernel instead.
    (#1980)
  • Opening a file an agent named without its folder no longer pauses the server while git lists a
    large repository.
    (#1980)
  • Muse chat reads a session that /fork started in Muse 1.4.13, instead of falling back to
    Terminal.
    (#2052 by @jpcarranza94)
  • Muse chat reads the last 16 MiB of a growing session log once per append to check it for a
    rewrite, instead of hashing it twice with SHA-256.
    (#2027 by @jpcarranza94)
  • OpenCode: an @skill sent from Chat that did attach is no longer reported as not attached when
    the agent row redraws, a bordered line is on screen or the theme has no bold, and the message
    recorded for a send matches what was typed. If OpenCode shows that Tab switched its agent or
    attached another skill, nothing more is typed and the message stays in Chat.
    (#1991)
  • OpenCode: sending an @skill before the pane's skill list has loaded no longer pauses the server
    to scan the disk; the mention goes as plain text unless the skill is already known.
    (#1991)
  • A PC whose own Ovis restarts while this app is connected (its update, a crash, a reboot) now
    shows Reconnecting… and comes back by itself once that Ovis is back, instead of asking for setup
    approval; nothing of this app's is started on that PC in its place.
    (#2071)
  • A failed update of a PC's own Ovis now says so on the PC's card, with why, and in the line under
    the header, and one that ends on another version keeps the address to update it on that PC.
    (#2071)
  • A draft in the message box no longer stops ⌘⇧↑ / ⌘⇧↓ (Ctrl+Shift on Windows and Linux) from
    moving to the previous or next pane: the box keeps the keys only while they still select text
    that way, and the next press switches panes.
    (#2034 by @jpcarranza94)
  • A pane's unsent message, terminal line, held input, held chat messages and lens no longer show
    up in another pane after herdr restarts and gives its pane IDs out again. The earlier text waits
    in Recover unsent text in the pane's menu, where it can be put back in a message box (never
    sent), copied or discarded. A server restart alone keeps everything in place. Text kept before
    this update waits there too on the first load, since nothing says which herdr it was written for.
    (#1997)
  • A first message held because the agent started for it has ended now says so, apart from a pane
    whose terminal or agent session changed, and both notes read in Korean, Japanese and Chinese
    instead of the bridge's English.
    (#1969)
  • A PC whose SSH address is changed in its dialog now moves there only once that setup connects. A
    setup cancelled at its approval, or one that fails, leaves the PC at its own address, so a later
    reconnect or bridge update no longer starts this app's bridge at an address that was never approved.
    Until it connects there, the PC's card keeps its own panes, herdr version and update offer.
    (#2078)
  • A PC's own Ovis that updated itself but still answers an older version than this app's keeps its
    address and link on the PC's card, with why it cannot be updated from here.
    (#2078)
  • Pi's installed questionnaire tool now uses the web prompt card for options, free-text answers,
    and multi-question review, including narrow panes. Answers are bound to the pending tool call
    and checked against the current widget before input is sent; incomplete reviews cannot submit.
    (#2003 by @philipprass-prog)
  • Queued-message Edit requires ownership on the bridge and shares its withdrawal outcome with
    other tabs' held-copy resends, so a delivery that already won or could not be confirmed cannot
    also restore the draft. Dismissing uncertain text does not claim it was withdrawn.
    (#2041 by @odfalik)
  • Pi transcript confirmation reads bounded history tails and new entries instead of re-reading
    the whole conversation, and tolerates ongoing appends without accepting partial records.
    (#2041 by @odfalik)
  • Exact Pi delivery receipts reconcile after browser reconnection or reload on the local machine
    without clearing unrelated messages that happen to have the same text. Remote-machine receipt
    resumption is disabled until relays can identify the originating paired device securely.
    (#2041 by @odfalik)
  • Adding a PC whose own Ovis listens on another address than 127.0.0.1 (its HOST set to, say, its
    Tailscale address) connects instead of failing with "ECONNRESET": that Ovis now also answers the
    app's SSH tunnel on the PC's 127.0.0.1. An older Ovis set up that way, or one whose HOST is a host
    name, gets an error saying to update it or set HOST=127.0.0.1 there.
    (#1983)
  • A pane that comes back after herdr could not restore it, or whose terminal herdr replaced, shows
    its screen as current again when its attachment recovered meanwhile, instead of keeping its DONE
    dot until new output arrives.
    (#1990)
  • Settings opened right after it was closed, or right after the command palette closed on a phone, no
    longer closes by itself on a slow device: the late step back off the closed one's history entry is
    no longer taken for a Back.
    (#2023)
  • The terminal draws Korean in a coding face that matches its Latin text, in Ovis for Mac's window
    and in every browser: the app now carries the Hangul of D2Coding, fetched only once a pane prints
    Korean. Before, Korean fell back to the system's proportional font (Apple SD Gothic Neo on a Mac,
    Malgun Gothic on Windows) beside Menlo or Consolas. An installed Korean coding font still comes
    first where the browser can use it.
    (#2062)
  • In Safari and Ovis for Mac's window, the terminal measures Nerd Font icons again once their font
    arrives, so a late icon font no longer leaves icons sized for the stand-in font.
    (#2062)
  • The terminal sizes icons and Korean from the faces that draw them however their fonts arrive.
    Before, two faces arriving together (both Korean weights from the cache in Ovis for Mac's window,
    or an icon with Korean) could leave icons drawn across the next cell and Korean enlarged past its
    two cells, and one font chunk that failed to load could keep the others at the stand-in's size.
    (#2074)
  • The bundled Korean face is no longer fetched when a Korean font installed ahead of it draws the
    text, nor while a terminal font typed in Settings loads, and that font is applied without
    waiting for it.
    (#2074)
  • A long IME composition in Direct typing keeps its newest characters in view again: one too long
    for the room right of the cursor moves left, and one wider than the terminal shows its end,
    instead of being cut off at the right edge.
    (#2031 by @yaaayaaa)
  • The words the bridge writes on an agent's prompt card itself, such as the /goal card's Close, the
    omp /handoff card's Cancel, a Hermes result's Dismiss, a fallback card's title and its Yes and No,
    and the model pickers' questions, now read in Korean, Japanese and Chinese. What the agent drew
    stays as the agent wrote it.
    (#1979)
  • Update and restart keeps the new version when $HOME, or the folder Ovis keeps its state in, is
    reached through a symlink (such as /home/<user> linked to another volume). Before, the updated
    server went back to the old version after its restart and offered the same update again.
    (#2070)
  • Skills and prompts are found on native Windows when HOME is unset: discovery falls back to
    USERPROFILE, then the user's home as Windows reports it.
    (#2057 by @kyop21)
  • Connecting a remote PC from Windows no longer hangs at "Checking the remote environment…": the
    server now runs Git for Windows' OpenSSH, because the one that ships with Windows never exits
    after a remote command prints something when the server starts it. OVIS_SSH picks another
    ssh. Git's ssh does not read Windows' ssh-agent service: setup asks for a password or a
    key file's passphrase instead, once, and the app key makes later reconnects unattended.
    (#1989)

Maintenance

  • The check slot tests take their lock ports below 32768, under the ports Linux, macOS and Windows
    hand out on their own by default, so a neighbouring test's server can no longer take a ticket
    port and shift the queue; the ticket desk wait is measured on a clock of the test's own instead
    of the host's speed.
    (#1978)
  • The Grok exact store lookup tests wait until their fixture process runs its own script before
    reading its open files, so a loaded CI runner no longer fails them at random.
    (#2011)
  • The terminal insert contract test reads its recorder's log again until a deadline instead of
    waiting for a file watch event, which Bun could miss for the last write, and a timeout now names
    what the wait was for and how much text arrived.
    (#1988)
  • The Settings pages demo regression waits for a phone's sheets (Settings, the command palette) to
    finish rising before it clicks in them, so a loaded runner no longer clicks beside Settings' close
    button and times out.
    (#2032)
  • The status hub's OpenCode subagent tests give their stand-in device store the pairing listener
    the hub now subscribes to, so they run again on main.
    (#2040)
  • The Windows plugin tests remove their scratch folder again while Windows still holds a file in
    it for a moment after the processes they started are gone, instead of failing a passed test on
    EPERM.
    (#1982)

Don't miss a new ovis release

NewReleases is sending notifications on new releases.