Repository navigation
Releases: ZechCodes/build-releases
Release list
Build Desktop 0.1.4
Build Desktop 0.1.4, built from ZechCodes/build@bd6420a.
macOS apps are signed with a Developer ID certificate and notarized by Apple.
macOS requires Apple Silicon (arm64). Open the DMG and drag Build to Applications, or extract the ZIP. Intel Macs can use the browser client.
Linux packages are available for x86_64 and ARM64: use the AppImage or install the Debian package.
The shell installer selects the correct platform and verifies the signed checksums:
curl -fsSL https://getbuild.ing/install-desktop.sh | sh
The bridge is installed separately; this app connects to the hosted Build service.
Build Desktop 0.1.3
Build Desktop 0.1.3, built from ZechCodes/build@9c454fb.
macOS apps are signed with a Developer ID certificate and notarized by Apple.
macOS requires Apple Silicon (arm64). Open the DMG and drag Build to Applications, or extract the ZIP. Intel Macs can use the browser client.
Linux packages are available for x86_64 and ARM64: use the AppImage or install the Debian package.
The shell installer selects the correct platform and verifies the signed checksums:
curl -fsSL https://getbuild.ing/install-desktop.sh | sh
The bridge is installed separately; this app connects to the hosted Build service.
Build Desktop 0.1.2
Build Desktop 0.1.2, built from ZechCodes/build@9ffc295.
macOS apps are signed with a Developer ID certificate and notarized by Apple.
macOS requires Apple Silicon (arm64). Open the DMG and drag Build to Applications, or extract the ZIP. Intel Macs can use the browser client.
Linux packages are available for x86_64 and ARM64: use the AppImage or install the Debian package.
The shell installer selects the correct platform and verifies the signed checksums:
curl -fsSL https://getbuild.ing/install-desktop.sh | sh
The bridge is installed separately; this app connects to the hosted Build service.
Latest Build Desktop
version.txt identifies the latest complete desktop-v release.
build-bridge 0.2.8
Wire 3.11.0.
Changed
-
Same-LAN browser mDNS candidates are resolved on every eligible LAN interface,
with explicit multicast membership and egress, subnet-validated answers, shared
reply handling and retries that leave TURN available. Container and tunnel
interfaces are excluded; same-credential offers retain pending discovery, and
only live lookups count toward the discovery limit. Relayed sessions keep
checking for direct viability and may restart ICE once when a direct pair
succeeds or mDNS host discovery completes. Optional restarts give direct
candidates a head start
while retaining fallback signaling. Sampling backs off and ends after a bounded
observation window once the one upgrade attempt finishes; slow gathering can
remain pending. The browser's TURN allocation remains allocated after direct
nomination, while relayed traffic stops. Connection diagnostics now say why no
direct pair was attempted and report remote candidate and resolution counts
without peer addresses, coalesced by generation/reason with query details at
debug level (rtc.candidateDiagnostics, wire 3.11.0, #369). -
Text inputs and textareas share token-based field styling in both themes,
with the same standard or compact height, radius, border, background and
focus ring as adjacent selects. Read-only fields retain muted text and a
stable hover border. Task review bases, capture branches and workspace labels
now match the rest of the forms; embedded composers and the source editor
retain their sizing and native editing behaviour. Branch routing menus stay
inside narrow screens, and short task rails keep their Close action fully
in view (#368). -
Saving the conversation menu's Compact at threshold updates the open menu
in place. Its menu, thumb, focus and active drag survive cache repaints
without closing, reopening or replaying animations. Surface rows can appear
or disappear while the menu stays open; removing the focused row moves focus
to the nearest remaining row. Lifted menus remain inside their bounds as
rows change, and removed sliders cannot commit a retired preview (#366). -
Every select shares Build's field styling, chevron and focus ring in both
themes. Chromium's native picker uses the same panel, rows and selection
marks as Build menus; other browsers retain a themed native popup. Compact
diff sorting and narrow conversation reset fields stay within their rows.
Pickers open below their field and flip above when needed, keep single-line
options within the viewport, and fade long selected labels. Settings and sheet
selects match neighbouring input backgrounds (#367). -
Setting the conversation menu's Compact at slider keeps the menu open and
focus on the slider. Its explanation line is removed; the selected value,
stop ticks and accessible name remain. A saved stop stays visible while its
reply is pending and returns to the cached stop on refusal. Escape cancels
a preview and closes the menu, and an outside click saves it and closes (#364). -
The conversation menu's Compact at setting is a slider with discrete stops
for the existing limits, showing only the selected value and description.
Touch release commits a stop; Left/Right preview it until Enter or blur,
Escape cancels the preview, and Up/Down still walk the menu. The conversation
setting and cache update behavior are preserved (#357).
Added
- Clear conversation at the bottom of every agent conversation's menu
confirms removal and opens the harness, model and effort chooser with the
previous settings.conversation.resetstops the old session and removes
its history and artifacts while retaining the agent's identity, workspace
membership and task links. Thread generations prevent stale requests and
cached pages from restoring cleared content, including MCP calls and task
handoffs admitted before the clear. Established turns are stopped before
history is replaced. Project agents receive their standing instructions
again on the fresh start (#358, wire 3.11.0). - The project rail has a Files section with the workspace's shared explorer:
one collapsible root per project source, persistent open tabs, keyboard
navigation, previews, selection and guarded file edits. Project Files links
retain the source, path and line.fs.projectSources(wire 3.9.0) lets
fs.tree,fs.readandfs.writeresolve a configured project source
with the same containment checks as workspace files (#359). - Markdown checklists render as native checkboxes. Readers can tick or untick
task body items with a click or Space; each change saves the marker through
tasks.update, repaints from the cache and survives reopening. Comments and
other markdown surfaces display disabled checkboxes (#347). - Conditional task body writes:
tasks.updateacceptsexpected_body_hash
(SHA-256 of the exact saved UTF-8 body), announced by
tasks.bodyPrecondition. The hash requiresbody; sending it on a
status/priority/label-only update refuses withinvalid_params.
A changed body refuses the whole update with
stale_body. Checklist ticks use this precondition and reload on refusal,
preserving body edits from other devices and agents (#347, wire 3.10.0). - Task reviews save the committed head and resolved base of every Git directory
in a workspace, retain them with private refs, and keep non-Git and unavailable
directories visible.tasks.review.snapshot,tasks.review.get,
tasks.review.diffandtasks.review.completehave matching agent tools.
Reviews include the full saved tree and paged, read-only blob content, even
for unchanged files. Completion records who finished the review and what
they did, and moves the task to Done without closing it or finishing its
workspace. Moving a task to Done also completes its open review, recording
the mover and “Marked done”. Explicit completion also records the column move
and runs its normal follow-on behavior. Diff file listings and patch buffers
are bounded; truncated file listings are marked. Taking a snapshot from a new
workspace replaces the old review history and releases its pins. RPC and MCP
share one description limit. Snapshot updates use a version check; review tasks bypass the
older automatic report/merged-workspace task transitions (#328).
Fixed
- The web client keeps pre-3.11 conversation request shapes on older bridges,
including image paste and attachment reads. Generation fields and new
attachment selectors follow the greeting'sconversation.resetcapability,
using its per-device cached value until hello answers on a reconnect. Cleared
conversations retain required generation fields before hello, and revision
reads keep their already-supported agent and conversation selectors (#363). - The web client loads safely when device contexts are imported before the
connection layer, including Inbox review captures. Shared app state lives
outside the shell so device contexts, feed and cache sync cannot import
their connection consumer; the security-stop export keeps its live binding
without reading it during module initialization (#361). - Installed CLI model probes keep their last usable catalog through failed
or abandoned refreshes. Retries start at 15 seconds, double up to the
ten-minute TTL, and reset after recovery. Background refresh keeps cached
catalogs current. Direct installs and symlinks are re-asked when their PATH
hit, target or modification time changes; underlying updates behind unchanged
mise shims or wrappers rely on periodic refresh or session version hints.
Failures include bounded stderr within the original deadline, abandoned
probes release their claim, and older results cannot overwrite a fresh
reading (#345).
build-bridge 0.2.8, built from ZechCodes/build@8628628.
Install:
curl -fsSL https://getbuild.ing/install.sh | sh
macOS binaries are signed with a Developer ID certificate and notarized by Apple.
Linux builds target glibc 2.35 or newer; macOS builds target macOS 13 or newer.
Verify a download by hand:
sha256sum --check --ignore-missing SHA256SUMS
cosign verify-blob \
--bundle SHA256SUMS.sigstore.json \
--certificate-identity-regexp '^https://github\.com/ZechCodes/(build-web|build)/\.github/workflows/release\.yml@refs/tags/bridge-v' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
SHA256SUMS
build-bridge 0.2.7
Wire 3.5.0.
Added
- A moved task action carries its destination column as
task_action.to
(wire 3.5.0), so the agent's own conversation line can name it (#323). - A development build the bridge service runs can be replaced by a release
from Settings: Install shows a warning naming the release and the restart,
then sendsbridge.install_updatewithreplace_development_build(wire
3.5.0,updates.replaceDevelopmentBuild). It goes through the same
verified download and helper, and rollback restores the development build
and its marker as they were. A bridge started by hand, or a service running
another executable, is still refused; the panel shows the install script
command. A development build running from a cargo target directory is
warned that the nextcargo buildoverwrites the release. An install
queued for when agents are done keeps the confirmation; one queued before
the binary became a development build never runs (#322).
Fixed
capture.reroutewith a destination other than a branch is refused before
the capture's router is touched; it used to end the routing session first
(#211).- Conversation task notices use the new wording on one line, with an ellipsis
when they run out of room. Actor and assignee names omit the workspace;
hover text carries the full line and task title (#323). build-bridge pairretires a stored approval only on the word of the api
that approved it. The identity file now records that api when a pairing
through it completes; one paired before that counts as approved by
https://getbuild.ing, whatever another api later says about it, so one
paired with a self-hosted api needspair --retireafter a revoke. Urls
name the same api when scheme, host (any case) and port (written or
implied) agree.
Another api's "not approved" leaves the identity untouched:pairnames
the api it asked and exits with status 3, and the installer then offers
pair --retire, which takes that api's word.pairrefuses any other
argument (#320).- Agent sessions and CLI probes the bridge starts no longer inherit
BRIDGE_IDENTITY_FILEor identity keys from its environment, so a tool an
agent runs under a temporaryHOMEcannot reach this machine's identity.
A user's own terminal keeps them (#320). install.shquotes the commands it prints to paste, and the line that puts
the install directory onPATH, so any install path it accepts works
pasted into sh, bash or zsh, including one with$, a backtick, a quote, a
backslash or!. Run withBRIDGE_API_URL, it starts each command it
prints with that variable, so a pastedpairorinstall-serviceasks
the same api (#320).- A device you just approved is usable in seconds rather than 30 s or more.
The bridge sends its first heartbeat the moment the relay authenticates
its socket, and again each time the socket comes back, a failed beat's
retry included, instead of at the next 30 s tick. It dials the relay before
starting its background services and redials about half a second after a
socket ends (spread either way, doubling to 30 s). While showing a pairing
code it asks for its approval every second for two minutes, then every
2 s; an api answering 429 or 5xx is asked less often, after its
Retry-Afterwhen it gives one, and an api out of reach (no connection, or
a 404 while it is redeployed) is waited for up to two minutes instead of
ending the pairing. A code the api says is gone (revoked, or no such
device) ends the pairing after three such answers, saying to run
build-bridge pairagain. After an approve, the app reads the device list every
second until it lists the device online, for up to 90 s (#321). - A failed update check no longer sticks: the next successful check clears
it, and it reads "Could not check for updates.", beside the available
version when one was found. Only a failed install reads "The update
failed." and lasts until an install succeeds. An error saved by an older
bridge with no sign an install ran is read as a check's, so the stuck 404
goes with the next check; a development build drops it at startup (#322). - A disabled Install button in the update panel no longer looks pressable
(#322).
Changed
- Add a device's pairing-link warning reads as a warning, in amber, not as an
error (#320). - A development build no longer checks for releases on its own, at startup
or daily; it checks when asked. Nothing marks it as having an update, and
it forgets an earlier run's check at startup, so it sends no
update_availablean older app would badge (#322).
build-bridge 0.2.7, built from ZechCodes/build@ccb486f.
Install:
curl -fsSL https://getbuild.ing/install.sh | sh
macOS binaries are signed with a Developer ID certificate and notarized by Apple.
Linux builds target glibc 2.35 or newer; macOS builds target macOS 13 or newer.
Verify a download by hand:
sha256sum --check --ignore-missing SHA256SUMS
cosign verify-blob \
--bundle SHA256SUMS.sigstore.json \
--certificate-identity-regexp '^https://github\.com/ZechCodes/(build-web|build)/\.github/workflows/release\.yml@refs/tags/bridge-v' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
SHA256SUMS
build-bridge 0.2.6
Changed
build-bridge pairprints a short block that fits 80 columns: the pairing
code, the fingerprint's first 32 hex digits (128 bits), and one
approve at:link to/app/#/pair/<code>. The link opens Add a device
with this device looked up, after sign-in if needed. The sheet says a link
opened it and warns that approving gives the machine access to your
account; approving is still your press. The approve screen shows the same
32 digits, with the full fingerprint beneath (#319).- When
pairsets aside a revoked or unknown pairing, it now says so in two
lines naming~/.build. The README says how to put the old identity back
(#319). install.shdrops its "If a pairing code appears" hint. Both installers
break their lines between words to fit 80 columns, and give commands to
paste lines of their own (#319).
build-bridge 0.2.6, built from ZechCodes/build@1ebff70.
Install:
curl -fsSL https://getbuild.ing/install.sh | sh
macOS binaries are signed with a Developer ID certificate and notarized by Apple.
Linux builds target glibc 2.35 or newer; macOS builds target macOS 13 or newer.
Verify a download by hand:
sha256sum --check --ignore-missing SHA256SUMS
cosign verify-blob \
--bundle SHA256SUMS.sigstore.json \
--certificate-identity-regexp '^https://github\.com/ZechCodes/(build-web|build)/\.github/workflows/release\.yml@refs/tags/bridge-v' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
SHA256SUMS
build-bridge 0.2.5
Changed
install.shandinstall-desktop.shprint one plain line per step, say
nothing when cosign is absent (the checksum is still verified), and end
every error on what to do next; colour only on a terminal without
NO_COLOR(#318).
Fixed
- The release workflow stages its assets outside the checkout and publishes
through a draft, so a failed upload leaves no public release (#305). - Release notes carry this file's entry for the tagged version (#303).
build-bridge pairon a machine whose stored pairing was revoked or is
unknown to the api no longer dead-ends on "not approved yet": it sets the old
identity aside, says which api answered and how to undo it, and pairs a new
device with a fresh code.install-servicegives the same reason,
uninstall-servicesays it keeps the identity, and the status check times
out instead of hanging (#317).
build-bridge 0.2.5, built from ZechCodes/build@5c3d5e1.
Install:
curl -fsSL https://getbuild.ing/install.sh | sh
macOS binaries are signed with a Developer ID certificate and notarized by Apple.
Linux builds target glibc 2.35 or newer; macOS builds target macOS 13 or newer.
Verify a download by hand:
sha256sum --check --ignore-missing SHA256SUMS
cosign verify-blob \
--bundle SHA256SUMS.sigstore.json \
--certificate-identity-regexp '^https://github\.com/ZechCodes/(build-web|build)/\.github/workflows/release\.yml@refs/tags/bridge-v' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
SHA256SUMS
build-bridge 0.2.4
build-bridge 0.2.4, built from ZechCodes/build@7d3ce64.
Install:
curl -fsSL https://getbuild.ing/install.sh | sh
macOS binaries are signed with a Developer ID certificate and notarized by Apple.
Linux builds target glibc 2.35 or newer; macOS builds target macOS 13 or newer.
Verify a download by hand:
sha256sum --check --ignore-missing SHA256SUMS
cosign verify-blob \
--bundle SHA256SUMS.sigstore.json \
--certificate-identity-regexp '^https://github\.com/ZechCodes/(build-web|build)/\.github/workflows/release\.yml@refs/tags/bridge-v' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
SHA256SUMS
build-bridge 0.2.13
Wire 3.24.0.
Security
This release removes a compromised certificate authority from the root
certificates bundled with the bridge, which secure its relay connection;
upgrade promptly. The bridge's other HTTPS requests trust your operating
system's certificate store, so apply your OS certificate updates too.
- Update the bridge's Rust CA bundles to remove a compromised root certificate
(#753).
Fixed
-
Publish newly opened workspace reviews before notifying clients, and
acknowledge review closes only after durable completion. -
Restore startup and message delivery for capture agents.
-
Load the user's Claude MCP servers and connectors alongside Build's server.
-
Keep slow MCP replies alive for a bounded five-minute wait without resending
actions; Pi budgets each queued tool call from dispatch and timeouts advise
checking the outcome before retrying. -
Retain Codex provider-recovery state across restarts, avoid retrying permanent
failures, and deliver sanitized failure notices once to the requester and
assigned task. -
Keep quiet-workspace reminders informational and limit reminders for locked
workspaces to once a week. -
Preserve parked projects when their home folder is unavailable, and restore
their coordinator and workers when it returns (#533). -
Fence source change subscriptions against replaced scopes and stale watcher
passes, preserving separate cache keys for each source (#550). -
Close failed WebRTC peers after a replacement client session is established,
while retaining peers that recover (#373). -
Accept repeated Linux ARP-table configuration records so safe LAN discovery
is not disabled (#674). -
Source Git mutations and settings edits serialize with base sync off the app
mutex. Queued syncs and mutations recheck source location after waiting;
project.sync_sourceaccepts capturedsource_path(sources.syncBasePath).
Workspace cuts pin configured-base commits, include and disclose local base
commits, and retain the fetched fast-forward cut path (#530). -
Claude headless agents show as working when the child resumes a turn itself
after a result, including the elapsed clock and interrupt control (#553). -
Centre the collapsed inbox popover and hover-peek carets beneath the inbox
toggle on phone and desktop layouts, including left safe-area insets. Keep
the card attached by sharing the standing directory rail's inset policy (#482). -
Unread counters include only watched conversations and task news since the
current watch began. Watch baselines survive restart; rewatching excludes
earlier history. Cached SPA badges also suppress unwatched agents on older
bridges (#474). -
Read marks publish the conversation owner's updated badge state. Chat read
reports survive transient failures with bounded backoff and work when a
cached unread count lags behind the transcript. Accepted reads are confirmed
from the reported cursor, so reading earlier history unblocks the tail; older
bridges get a conditional attention-only roster refresh that preserves detail
fields and skips unchanged values (#473). -
Chat message ages update live and on return to the foreground without moving
rows; refresh pauses while chat is hidden or Agents overview is open (#467). -
Recognize Claude's saved API key using its config precedence, and treat blank
or non-string credentials as absent across harnesses (#434, #466). -
Detect installed or removed harness CLIs in model listings without restarting
the bridge (#434). -
Keep Codex sessions alive through late items and compaction turns, queuing
messages during compaction for their own turn (#421). -
Preserve the last applied model and effort, including defaults, when
adopting a Codex-started turn (#421). -
Cap WebRTC GSO batches at the peer family's UDP payload limit, including
IPv4-mapped peers, to prevent whole-batch drops (#375). -
Move LAN sweep interface and neighbour reads outside the WebRTC core lock,
stopping probes when ownership changes or cached state expires (#376). -
Treat an overflowed LAN sweep address watch as a change until drained,
so stale interface ownership cannot authorize probes (#376). -
Report IPv6 and oversized neighbour-table sweep skips accurately, and allow
bounded scouting when neighbour GC thresholds are equal (#376). -
Refresh after mutations during a cache pass, so Git initialization and other
changes appear without waiting for an unrelated refresh (#454). -
Stop superseded cache reads without blocking fresh diff reads; abandoned
session waits cannot restart sync or clear a new sync's marker (#454, #460). -
Read newly created files before opening them, replacing earlier deleted-file
contents without overwriting newer concurrent cache updates (#433). -
Keep cached PR status and sync observations current across delayed replies,
cleared reviews and reconnects, preserving review drafts (#406). -
Bound and reuse commits-since-review history reads, and reject counts for a
different displayed snapshot head (#427, #453). -
Wait briefly for overlapping explicit PR synchronization, and release capture
and merge leases when their operations finish even if a child retains an
inherited descriptor (#404). -
Preserve effective project Git hooks and their nested Git configuration during
fenced PR merges; recover registered hook fence resources at startup after
verifying ownership and process death, preserving live or uncertain launches
(#423). -
Retain workspaces and build output while PR merge or saved publication is
unsettled, preserve concurrent merge completion during task comments and read
backfills, and classify legacy PR action refusals as client errors (#404, #423). -
Keep PR push bursts coalesced across polling, bound metadata registration,
share linked-worktree metadata watches without watching private pins, and
recover interrupted unpublished snapshot captures (#403). -
Recover interrupted initial PR receiving-ref writes and preserve review
opening setup when another worktree holds the original branch (#402). -
Establish recoverable PR tracking refs before opening succeeds, so the first
UI Push publishes to the review receiver even without origin (#402). -
Keep long task comments and loaded images in place when ages, references or
review metadata refresh, and follow new comments when reading at the bottom
(#410).
Added
-
Keep one pinned project coordinator and add source-writing project workers,
including retry-safe task assignment without creating a workspace (#532, #533). -
Open terminal tabs against an explicit original project source, including
plain folders; live shells hold that source's location until closed (#531). -
Load newest-only activity pages with exact whole-run digests, while retaining
on-demand access to the full activity (#496). -
Add per-harness compaction thresholds at device, project and workspace scopes,
with conversation overrides and inherited/configured settings kept separate
from the policy applied when a session opens (wire 3.22.0, #655, #660). -
Attach agent-created files to chat replies and agent handoffs, preserving
stored copies and ranged reads for larger recordings (wire 3.23.0, #696). -
Introduce the durable write journal, bounded status and confirmation
subscriptions, and authenticated process epochs (wire 3.24.0, #739). No write
methods are enabled for acknowledgement/confirmation yet. -
Waiting-on task orchestration (wire 3.21.0, #558/#562): atomic create and
scoped dependency tools, bounded reverse reads, saved assignment/retry
answers and quiet delivery notices. Blocked user assignments preserve
explicit questions and become actionable when prerequisites resolve. -
Secure transport is maintained in this checkout (
transport/js, Python
reference/tests, and the existing Rust implementation). SPA/web locks, CI and
app/QA images use the in-tree binding; developers no longer need a sibling
clone. Build is the maintenance/audit and private vulnerability-reporting
destination. The imported JS/Python BSL notice and original pinned repository
history remain intact; no protocol, session, identity or root-license change
accompanies this consolidation (#572, #575–#579). -
Project sources in Git and pushes (wire 3.21.0, #529): every Git verb
project Changes uses addresses one original source byproject_id,
source_idand its capturedsource_path(git.projectSources), with
per-source cache keys; a moved source is refused withconflictand a plain
folder says it is not a Git repository.changes.subscribetakes a
project_sourcescope (changes.projectSources) whose git, files and
terminal items carry the source's identity, for plain folders too. Clients
that do not ask hear nothing new. -
Harness inventory reports installation, CLI/session versions and saved sign-in
status for Claude, Codex and Pi (harnesses.list,harnesses.refresh, #434). -
PR task pages show snapshots and opinions, with Merge, Close, Reopen and
retryable publication results (#408). -
PR task pages offer Reclaim after merge and publication settle; locked
workspaces must be unlocked first (#408). -
New file from the Files tree:
fs.createFilecreates one empty file in a
workspace or project source, refusing names that already exist (#433). -
PR-style review tasks with dedicated branches, local push synchronization,
explicit base retargeting and RPC/MCP lifecycle controls (#405). -
PR sync observations count the commits since the user's last reviewed
snapshot, or flag a rewritten history, and the Changes header shows
"N commits since your last review" (#427). -
Internal PR lifecycle and durable merge service: current-snapshot opinions,
recoverable Closed reopening, guarded merge finalization, interrupted-operation
recovery and explicit retry of saved publication results (#404). -
Bridge-owned PR ref synchronization without a connected client: terminal
pus...