Skip to content

Releases: justrach/harness

Harness v0.2.139

Choose a tag to compare

@github-actions github-actions released this 25 Oct 02:58
cfdaa36

Harness v0.2.139

Desktop release for macOS, Windows and Linux: answering an agent's question
no longer risks stopping the run you just answered.

Agent questions

  • For a moment after the question panel closes, a click or tap on Stop is
    ignored. The panel's Submit sits where Stop appears once the run goes on,
    so a double-click on Submit, or one more tap on the phone while the answer
    syncs, used to stop the agent before it acted on your answer (#149).
    After 1.5 seconds Stop works as usual. /stop, Esc-to-stop and Cancel
    question are unchanged.
  • The same rule ships in the iOS and Android apps, which take it in their
    next builds.

Mobile builds are distributed separately; this desktop release does not itself
update TestFlight, App Store or Play installations.

Harness v0.2.138

Choose a tag to compare

@github-actions github-actions released this 24 Oct 14:50
2c1a3da

Harness v0.2.138

Desktop release for macOS, Windows and Linux: a new session can be a plain
chat on the hosted Auto models, agents can use your own browser through
browse, and the phone can open and drive a Mac's iOS Simulators.

Chat mode

  • The new-session canvas has a Chat / Code switch. A chat has no project,
    checkout or branch; it runs graff from your home folder and asks "What's on
    your mind?".
  • Its model menu offers only the hosted Auto tiers: Auto (low), Auto
    (high)
    and Auto (smart). A chat starts on Auto (low) and remembers its
    own last pick without changing your coding defaults. Auto (smart) notes that
    it may incur API costs.
  • The mode is stored on the chat, so an existing chat keeps it. Older apps
    ignore it.
  • If the Auto tiers aren't available (signed out, offline, or an older
    gateway), the switch stays on Code and says why, and a chat-mode draft holds
    its send instead of falling back to another model.
  • On iOS and Android, New chat in the + menu starts the same kind of
    chat after you pick the computer that hosts it.

browse

  • Settings → Accounts → browse (macOS) pairs Harness with the browse app:
    both show the same six digits, you confirm in browse and choose what agents
    may do. Harness's key stays in your login Keychain.
  • Each agent run that takes HTTP MCP servers gets a browse server through a
    local relay with a per-run token. Every request is signed, browse's answers
    are verified against its pinned key, and the run's pages close when it
    ends. Refusals tell the agent what's missing (a scope, tabs you declined, a
    stale clock), and revoking Harness in browse forgets the pairing.

Simulators

  • On iOS, Settings → Simulators lists a Mac's iOS Simulators. Open one to
    watch it live and use it from the phone: taps, swipes, typing, and the
    Home, Lock and volume buttons. A simulator that's off starts when opened;
    swipe to shut one down.
  • Nothing is installed until you tap Set up, which installs a pinned
    streaming helper on the Mac with its install scripts disabled. The helper
    serves only the screen and input for one simulator, on loopback, behind a
    token that changes every run, and stops with Harness or after a minute
    nobody is watching.
  • Only your own devices can reach it. Video is capped at 960 px and 20 fps,
    and the phone asks for a lower frame rate on cellular or Low Data Mode.
    Simulators are macOS only.

Mobile builds are distributed separately; this desktop release does not itself
update TestFlight, App Store or Play installations.

Harness v0.2.137

Choose a tag to compare

@github-actions github-actions released this 24 Oct 12:48
69a7d39

Harness v0.2.137

Desktop release for macOS, Windows and Linux: Mermaid diagrams in agent
replies draw as diagrams, sidebar session search handles the keyboard
properly, links in subagent panes open from the right chat, and two composer
fixes for slash-command completion and the scroll fade.

Chats

  • A ```mermaid block in an agent's reply draws as a diagram, like
    it already did in Markdown file previews. While the reply streams, the
    block shows as code until its fence closes, then renders once, off the
    main thread, and is cached so scrolling and repaints don't redo it. The
    block's header switches between the diagram and its source and copies the
    source; a click opens the diagram full size. Diagrams follow light and dark
    mode and scale to fit narrow panes. If the renderer can't read the source,
    you get the code block with a short note.
  • Links in a subagent's pane open from the chat that owns them, including a
    child opened from a parent pane that wasn't focused. Closing a child tab
    revokes its link actions, even from a menu that was already open, and a
    reopened child gets working ones (#456).

Sidebar

  • Session-name search only treats bare keys as search actions: ⌘↵ or a
    modified arrow no longer opens or moves through results. Focus, result
    visibility and row styling are fixed (#492).

Composer

  • Tab-completing a slash command typed in front of existing text keeps that
    text: /goal|prompt text + Tab gives /goal prompt text instead of
    deleting prompt (#575).
  • The composer only fades its top or bottom edge while written text is cut
    off there. Trailing blank lines below the last line no longer wash it out
    (#578).

Mobile builds are distributed separately; this desktop release does not itself
update TestFlight, App Store or Play installations.

Harness v0.2.136

Choose a tag to compare

@github-actions github-actions released this 24 Oct 08:39
05c1ec5

Harness v0.2.136

Desktop release for macOS, Windows and Linux: long chats stay responsive
while an agent streams, Harness logs what it was doing if it ever stalls, and
"tell me when it's done" alerts follow who actually asked for the work. On
iOS, the chat header steps between sessions in place, the Home controls read
as one row, and the remote folder browser opens folders instantly.

This is the first release that installations on v0.2.135 pick up with the
new titlebar update icon: they download it in the background and restart
into it on their own once nothing would be interrupted.

Chats

  • A long conversation no longer slows down as an agent streams into it. Each
    new token used to redo work for the whole transcript on the main thread
    (the message rail's prompt previews and every tool group's animation); on a
    3,200-turn chat that took about 78 ms per token in a debug build, and now
    about 10 ms. Opening that chat went from 73 ms to 21 ms (#342).
  • If the app ever stops responding for more than 5 seconds, Harness logs what
    the main thread was busy with (the action, input event or task, and the
    window's route and transcript size) and how long it lasted. On macOS a stall
    of 10 seconds or more also saves one stack sample to the logs folder (at
    most once every 30 minutes, newest three kept). The logs carry no chat
    content. This is so the next minutes-long freeze can be diagnosed (#342).

Agents

  • Completion alerts follow who asked for the work. A turn the agent continues
    on its own keeps the last prompt's owner, so "tell me when it's done" still
    chimes; work another agent asked for stays silent. A chat whose row arrives
    after its session still gets its alert, and an archived chat never alerts
    (#499).
  • Messages from another agent can't wake an archived chat, even when they're
    marked only by where they came from rather than by their text (#498).

iOS

  • The session header steps between sessions with arrows in place of the
    floating session pill, and status indicators no longer act as buttons. In a
    stacked split, Split and ✕ stay on the bar (#430).
  • Home's project and grouping controls sit together above the list as two
    matching pills: All projects (or the project's name) and By time / By
    project / By device
    . The bar only shows the connection status, when there
    is one, and VoiceOver reads the current project (#419).
  • The remote folder browser shows folders you've visited instantly and
    refreshes them in the background; going back no longer waits on the
    computer, and taps stay responsive while a folder loads. Pull to refresh,
    and a failed folder says why. The computer lists folders faster, checking
    for git only in the folders it returns, several at once (#420).

Mobile builds are distributed separately; this desktop release does not itself
update TestFlight, App Store or Play installations.

Harness v0.2.135

Choose a tag to compare

@github-actions github-actions released this 23 Oct 12:30
9d4dfe9

Harness v0.2.135

Desktop release for macOS, Windows and Linux: updates move to an icon in the
titlebar, and once a new version is downloaded Harness restarts into it on its
own while nothing would be interrupted. Runs that a quit, crash or update
cuts short pick themselves back up, graff included, without asking an
agent's question twice.

Updates

  • The update notice is now an icon in the titlebar, next to +, instead of
    a strip above the account menu. It shows when a new version is downloading,
    ready, or failed; hover for details. Click it to restart into a ready
    update now, or to try a failed download again.
  • When an update is ready, Harness closes and reopens on the new version by
    itself, but only when it's safe: no agent on this computer is working or
    waiting on an answer, no file has unsaved edits, no composer has an unsent
    message or attachment, no terminal is open, and you haven't used the app
    for a minute (10 seconds if another app is in front).
  • A 10-second notice comes first, with Restart now and Later. Any
    input during the countdown cancels it until the next quiet moment. Later
    skips the automatic restart for that version; it still installs when you
    quit.
  • If Harness isn't the app in front, it reopens in the background without
    taking focus. It comes back with the same windows, chat tabs, splits and
    selected chat, and shows Updated to v0.2.135 once.
  • Settings → Devices has Restart automatically to install updates (on by
    default). The version card there follows the same download: it shows
    progress, Restart to update once ready, and Try again after a
    failure. HARNESS_AUTO_UPDATE=0 still turns automatic updates off.

Runs pick back up after a restart

  • Quitting Harness (⌘Q, Restart now, installing an update on quit) now
    lets the engine settle its runs before the app exits. Before, a quit with
    an agent working cut it off mid-stream, and the next launch treated it as a
    crash.
  • A turn cut short by a quit, crash or update resumes on its own on the same
    agent and conversation, graff (Codegraff) included, even when the chat's
    settings hadn't been saved yet. A quit that was itself cut short no longer
    sends the turn twice.
  • A run that was waiting on your answer to an agent's question is no longer
    asked the same question again. The original question stays answerable, and
    answering it carries on the run.
  • The note in the chat is calmer: "Harness restarted — picking this run back
    up" (or "Harness updated to v0.2.135 — …"), as a grey chip instead of a red
    error. A run that won't resume still says so.

Mobile builds are distributed separately; this desktop release does not itself
update TestFlight, App Store or Play installations.

Harness v0.2.134

Choose a tag to compare

@github-actions github-actions released this 23 Oct 10:06
93cbdf3

Harness v0.2.134

Desktop release for macOS, Windows and Linux: links work again in a chat pane
that used to be the other side of a split, ⌘W asks once whether closing a
chat should archive it, and a Stop that lands right after you answer an
agent's question now says so. The Harness TUI shares chats with the app, and
⌘⇧P opens the project picker.

Chats and panes

  • Links in a chat pane open again after it becomes the main view, for example
    when you close a split after focusing its second pane, or pick another chat
    in that pane. Before, a left click did nothing and the link menu's Open in
    Harness
    and Open in external browser closed without opening anything
    (#456).
  • Releasing a text selection over another split pane no longer activates that
    pane (#198).
  • ⌘W follows Archive sessions when closing tabs or panes: off, it just
    closes; on, it closes and archives. ⌘⌥W always just closes. The first time
    you press ⌘W, Harness asks which you want and remembers it.
  • Collapsed tool previews shorten long file paths (relative to the chat's
    folder, ~ for your home folder, … for the rest) and keep the command and
    its flags readable. The expanded view and copied text are unchanged (#367).
  • ⌘⇧P (Ctrl+Shift+P off macOS) opens the project picker; it's rebindable in
    Settings → Shortcuts.
  • Custom sidebar sections are gone; pins, sorting, compact mode and the
    project and device groups stay (#490).

Agents

  • When a run is stopped right after you answer an agent's question, the chat
    says the task stopped and why, instead of ending on your answer. The
    computer running the chat also logs which device sent the Stop (#149).
  • Prompt history (↑) works from a fixed snapshot, so live updates can't move
    or break it, and question, queue and chat-switch editors keep your real
    unsent draft (#516).
  • Archiving a chat retires its idle agent so other agents can't wake it, and
    a restore that races an archive resolves in the order you acted (#498).

TUI

  • The Harness TUI joins a running Harness engine as another client: its
    threads are your Harness chats, a chat started there shows in the desktop
    sidebar and on your phone, and turns started elsewhere stream into it live.

iOS

  • The model picker's corner button turns into a checkmark as soon as you pick
    a different model, and VoiceOver reports the selected model (#407).

Mobile builds are distributed separately; this desktop release does not itself
update TestFlight, App Store or Play installations.

Harness v0.2.133

Choose a tag to compare

@github-actions github-actions released this 23 Oct 06:29
aba27d7

Harness v0.2.133

Desktop release for macOS, Windows and Linux: long chats no longer drop the
connection to the engine, a run that fails because you're signed out or out of
usage says so with a Log in button, a chat's pull request can be merged from
the composer, and queued prompts wait after a failed turn. The phone apps
manage cloud sandboxes and GitHub CI, and Android can send to live sessions.
Many smaller fixes come from upstream Zeron.

Agents and sessions

  • A long chat no longer makes Harness lose its engine and report that the
    engine keeps stopping. Large messages are now sent in pieces.
  • A run that fails because the agent is signed out or has reached its usage
    limit shows "Signed out" or "Limit reached", with a Log in button that opens
    Accounts on the computer the chat runs on.
  • After a turn fails, queued prompts wait instead of the next one going out
    on its own (#466).
  • A graff chat moved onto another save with /resume resumes from that save
    after a restart.
  • A chat that doesn't name a model no longer borrows the last model you used,
    and an agent whose model list comes back empty shows it empty instead of
    loading forever.
  • A subagent's opening prompt appears once in its transcript, not twice.
  • The effort slider runs from lowest to highest for every agent that
    advertises effort levels.
  • A new worktree chat no longer fails without an error when a git hook in the
    repository needs a tool from your shell's PATH.
  • Cmd+K's Recent Files no longer flicker while the list loads.
  • Pushing to a remote whose push URL is disabled uses its fetch URL.
  • Claude Code: dated model IDs fold into their model's row, and a sign-in
    whose Keychain write is refused is saved to the credentials file instead.
  • Cursor: runs on a Plus subscription send the model's default options.
  • OpenCode 2: the question tool's forms can be answered, and a question no
    longer appears twice.
  • Codex: a global npm install that is missing its native binary is repaired
    before the first run.

Desktop

  • While a chat's branch has an open pull request, a Merge action sits beside
    its badge in the composer. The first click asks, the second merges, and
    GitHub's reason shows inline if it refuses.
  • Archived chats, split panes and parked tabs restore as you left them, and a
    deleted session can't come back through a stale tab.
  • An image dropped on a pane attaches to that pane's chat, even after
    navigating, resizing or switching windows mid-drag.
  • Settings → Archived can delete every archived session, after a
    confirmation.
  • The sidebar's Show menu can hide the Archived section.
  • The mouse's back and forward buttons move through your history.
  • An idle subagent tab shows its agent's icon.
  • Clicking a file on a tool call opens it in the files panel, and the file
    viewer can open it in your default editor.
  • Text in an expanded tool call's output can be selected and copied.
  • On macOS, files dropped from any folder, including Downloads, attach, and
    text fields no longer offer one-time-code AutoFill.
  • "New project" in project menus drops its ellipsis.

Cloud

  • Settings → Agents → Cloud sandboxes can create a temporary sandbox for API
    and tool use, separate from the persistent one, with Copy ID and Delete.

iOS

  • Settings → Codegraff manages cloud sandboxes (sizes with their hourly
    rate, start, keep running, turn off, delete, and create) and GitHub CI
    (budgets, concurrency, per-repository defaults and recent jobs), through one
    of your computers.
  • The composer keeps your saved model and effort while the computer's model
    list loads, and the folder browser, branch picker and usage pages ignore
    stale replies from another computer or folder.
  • A session can be deleted from the Sessions list, after a confirmation.
  • A run that fails because you're signed out or out of usage says so.
  • Images can be dragged into a chat or the composer, from Photos, Files or a
    screenshot thumbnail. They stage as attachments and aren't sent until you
    send.
  • When switching a project's branch fails, the reason stays visible next to
    the branch picker.
  • Home drops the All / Needs you / Running filters and the "need you ·
    running" totals; every session stays listed with its own status.

Android

  • Signed-in sessions can be sent to: run, steer, stop, answer a question and
    queue messages on live sessions.
  • The same model, folder and branch fixes as iOS, and Home drops its status
    filters.

Docs

  • The README is available in Spanish.

Mobile builds are distributed separately; this desktop release does not itself
update TestFlight, App Store or Play installations.

Harness v0.2.132

Choose a tag to compare

@github-actions github-actions released this 22 Oct 23:38
d2291fa

Harness v0.2.132

Desktop release for macOS, Windows and Linux: archived chats stay out of other
agents' conversations, coordination between agents no longer chimes, and
session sounds follow Focus on macOS. A chat opened through a symlinked folder
resumes after a quit, and the sidebar can search sessions by name.

Agents and archived chats

  • Archiving a chat takes it out of agent-to-agent traffic. A message from
    another chat to an archived one is refused with an "archived" error instead
    of starting a turn, mail queued before the archive is held until you restore
    the chat, and room mentions no longer wake it. Restoring or prompting the
    chat yourself works as before (#498).
  • A turn that only answered another agent's message finishes silently: no
    completion sound, "Run finished" banner or phone notification. Work you
    asked for still alerts when it finishes, even when it consulted other agents,
    and an archived chat never sounds a completion (#499).
  • A chat opened through a symlinked folder (/tmp on macOS, for example)
    resumes its conversation after Harness quits mid-turn, instead of starting a
    new session (#530).

Sounds and notifications

  • On macOS, with desktop notifications on, a session chime while Harness is in
    the background plays as the notification's own sound, so Do Not Disturb,
    Focus and Harness's notification settings apply to it. With Harness in front,
    or with notifications off, chimes play as before (#518).

Composer and sidebar

  • Pasted text that mentions a command, like /resume, stays plain text; only
    choosing a completion makes a command (#506).
  • Prompt history (↑) no longer recalls messages delivered by other agents or
    rooms (#516).
  • The sidebar can search sessions by name (#492).
  • Open in Harness and Open in external browser work on links in a split pane
    that isn't focused (#456).

Cloud

  • Creating a cloud sandbox offers the available sizes with their hourly price,
    and running sandboxes show their size and rate.
  • Settings has a GitHub CI page for connecting repositories to CodeGraff
    runners, with budgets, concurrency and per-repository defaults.

iOS

  • A queued message can have images added, replaced and removed from its
    Attachments editor, from Camera, Photos or Files (#187, #493).

Mobile builds are distributed separately; this desktop release does not itself
update TestFlight, App Store or Play installations.

Harness v0.2.131

Choose a tag to compare

@github-actions github-actions released this 22 Oct 12:47
4430f56

Harness v0.2.131

Desktop release for macOS, Windows and Linux: Claude Code sessions that leave
work running in the background are no longer stopped after 30 idle minutes,
and a quit or update now picks interrupted work back up. Pending agent
questions stay visible, inline math renders, and split panes accept dropped
images.

Agents keep working

  • A Claude Code session waiting on its own background work (a background
    command, monitor, agent or workflow) is no longer stopped after 30 minutes
    without a new message. Stopping it killed that work (#517).
  • An agent that keeps waking to answer its own finished background tasks is no
    longer treated as a runaway loop. A turn that keeps resuming with nothing
    settling still stops, now visibly with a message saying why (#341, #517).
  • Quitting or updating Harness no longer drops work for good. A turn that was
    running is sent again on the same Claude Code or graff session when Harness
    starts, and an agent whose background work the restart stopped is told, so
    it can start that work again (#482).
  • A queued prompt no longer sends itself after a turn fails. The queue pauses
    until you send or retry (#466), and a steer accepted just before the failure
    waits in the queue rather than starting a new turn (#467).
  • A chat woken by a phone message keeps listening for the command while you
    open other chats, so the message no longer waits until you visit it (#412).
  • When a chat's sync push quota runs out, only its own pushes wait; rows and
    other chats keep syncing, and retries back off (#344).

Questions and the composer

  • Pending agent questions open on their own, open again when you reselect the
    active session, and come back after an answer fails to send (#479).
  • A half-typed answer survives switching tabs (#478).
  • A protected queue edit sent from the phone is confirmed as soon as it is
    saved (#465).

Tabs, panes and the sidebar

  • ⌘⇧T reopens a closed split pane in its place. ⌘W archives and closes a
    session, and ⌘⌥W only closes it (#455).
  • An archived session keeps its pane after ⌘D makes it inactive (#489).
  • Images can be dropped onto any open pane, which becomes the active one
    (#488).
  • Web links open from a split pane that isn't focused (#456).
  • Hovering a session in the sidebar shows a ⋯ menu button next to Archive
    (#475).
  • After the app is unresponsive for a while, the keyboard shortcuts pressed
    meanwhile open one new tab or split, not one per press (#342).

Transcript

  • Inline $…$ math renders, while prices like $5 stay as written.
  • On macOS, accents over capital letters show (X̄, X̂); they used to sink
    into the letter.
  • Images an agent opens to look at show under its reply (Claude Code).
  • Subagent controls read "Waiting on subagent", "Message subagent", "Resume
    subagent" and "Close subagent", and unnamed workers no longer get empty
    transcript tabs (#468).
  • A message sent from another device that is still waiting for this computer
    shows how long it has waited (#413).

Mobile builds are distributed separately; this desktop release does not itself
update TestFlight, App Store or Play installations.

Harness v0.2.130

Choose a tag to compare

@github-actions github-actions released this 21 Oct 14:19
7ed97a6

Harness v0.2.130

Desktop release for macOS, Windows and Linux: ⌘⇧T reopens a closed tab where it
was, Markdown images show in agent replies, and graff follow-ups in a worktree
start again. Branch renames the chat's own agent made no longer ask for
confirmation.

Tabs and transcript

  • ⌘⇧T (Window → Reopen Closed Tab) reopens the last closed chat tab at its old
    position, with its split and project. Pressing it again goes further back,
    up to 20 tabs. Sessions archived by closing the tab come back. Off macOS
    the shortcut is Ctrl+Alt+Shift+T, because Ctrl+Shift+T already opens a new
    chat tab. You can rebind it in Settings → Shortcuts (#455).
  • Images in agent replies (![alt](path)) render as images instead of their
    caption. Relative paths resolve from the chat's folder, and file:// and
    Windows drive paths work (#400).
  • A text selection can start in the whitespace beside a line, so the first
    character is easy to catch.
  • Clicking a link works even when its destination preview would cover it or
    other text is selected (#456).

Agents and graff

  • A branch rename made by the chat's own agent (git branch -m) no longer
    asks you to confirm the branch change on the next message (#453).
  • After "send now" interrupts a turn in a graff worktree, the follow-up no
    longer fails with "that workspace name is already a worktree or branch".
    Harness now launches graff from the main checkout (codegraff#1693).

Development builds

  • A development build of Harness never installs a release update, so it
    keeps its own identity, data folder and port (#452).

Mobile builds are distributed separately; this desktop release does not itself
update TestFlight, App Store or Play installations.