Repository navigation
Releases: justrach/harness
Release list
Harness v0.2.139
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
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
browseserver 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
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
```mermaidblock 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 textinstead of
deletingprompt(#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
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
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=0still 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
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
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
/resumeresumes 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
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 (
/tmpon 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
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$5stay 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
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 (
) render as images instead of their
caption. Relative paths resolve from the chat's folder, andfile://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.