Skip to content

Releases: PerfectoWeb/Belay

Belay 1.1.0

Choose a tag to compare

@david-build david-build released this 14 Aug 17:23

A new welcome screen, and two fixes. Nothing about detection, power or the panel
changed: this release is what somebody sees in the first thirty seconds and the
two bugs found underneath it.

Added

A welcome screen that shows what the app does instead of describing it. The
greeting is handwritten and draws itself, traced from the artwork as thirty-one
curve segments and stroked by trimming a path — no animation runtime, no asset
loaded at launch, and one number under withAnimation. It plays once, on
opening, and never comes back.

What follows it is a twelve-second loop: a MacBook with an agent writing into
it, Belay's mark beside it as the sun of a circular orbit, four agents going
round and finishing one at a time, the mark blinking and going grey, and the
screen falling dark under a moon with three letters rising off it. The machine
is Apple's own product bezel, whose display is cut out of the artwork, so our
screen sits behind it; the two PNGs come to fifteen kilobytes.

Sound under the scene, and only there. An agent finishing is a bubble; the
Mac letting go and coming back are the same two notes read in either direction.
All three are synthesised by scripts/make-sounds.swift like every other sound
in the app, and all three are gated by the system's interface-sounds preference
and then by Belay's own switch.

Fixed

The scene's sound drifted away from the picture. It was scheduled as a chain
of relative sleeps — wait the gap, play, wait the next gap — and Task.sleep
guarantees a floor rather than a deadline. On the main actor, which is redrawing
the scene thirty times a second, every wait wakes a little late and the error
accumulates: about three quarters of a second per pass, so by the fifth pass the
sleeping note landed on a lit screen. Every wait is now measured to its due
moment on the same clock the picture is drawn from, and a cue more than 0.35 s
late is dropped rather than played against the wrong frame.

The folder picker could attach its sheet to an invisible window.
GenericTargetsSection.hostWindow matched the settings window by identifier and
took the first hit, but a closed settings window lingers in NSApp.windows, so
a session that had opened settings twice had two candidates and picked between
them by luck. Losing looked, from the outside, like the picker refusing to open.
It now requires the window to be visible. This was BLOCKERS.md B9, the
intermittent CI failure that had never been identified.

The update check retried hourly whenever it failed. The timestamp that
paces it to once a day was written only after a successful fetch, so an offline
Mac left nothing behind and every hourly tick read the check as still due — up
to twenty four attempts in a day the app, the privacy policy and the release
notes all describe as one. The attempt is what gets recorded now, because the
attempt is what was promised.

Three mode names were clipped in translation. All three sit side by side in
one 330pt panel, and Spanish ran four points over the tab it had to fit in;
Italian and French cleared it by less than two. Shortened in Spanish, Italian,
French and German, and a test now measures every language against the metrics
the picker lays out with.

Belay 1.0.0

Choose a tag to compare

@david-build david-build released this 14 Aug 11:50

Belay holds your Mac awake while a local AI coding agent is actually working,
and lets it sleep normally the rest of the time. It watches Claude Code, Codex,
Gemini CLI and Cline. No account, no API key, nothing leaves your Mac.

Requires macOS 14 or later. Universal: Apple silicon and Intel.

Install

Open the disk image and drag Belay to Applications.

The app and the disk image are both signed with a Developer ID and notarized by
Apple, and both carry a stapled ticket — so the first launch works with no
network and without a right-click-Open dance.

SHA-256  0cd221706e1410216bb72a022b549ef77c7bae1cdd57774e5933f711e35517f9

What it does

Detection is local. Belay reads the session files your agent already writes:
how large they are, whether they grew, when they were last written, and whether
the last record says a turn ended. It does not read your prompts, your replies
or your code, and it keeps no copy of anything it reads.

Claude Code needs no configuration. Codex, Gemini CLI and Cline are one-tap
presets. Anything else that writes files while it works can be covered by
pointing Belay at a folder.

Three modes: Auto holds sleep off only while an agent is working, Always
on
holds it until you switch back, Off never holds it.

Six languages: English, Russian, German, Spanish, French, Italian.

Privacy

One network request a day, to ask GitHub whether a newer version exists. It
carries no identifier and nothing about you or your machine, it never installs
anything on its own, and it can be turned off in Settings. That is the only
request the app makes. Full policy: https://perfectoweb.github.io/Belay/privacy/


The complete changelog for this release is in
CHANGELOG.md.