You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Claude Code sessions now report their own state instead of relying on
a guess from terminal output alone. Every session Hive spawns gets HIVE_SESSION_ID / HIVE_SOCKET in its environment, and Claude
sessions get hooks wired through claude --settings that call hived hook on prompt submit, turn end, and permission prompts. A
waiting-for-permission session now shows exactly that — not a guess
from "no output for two seconds" — and the sidebar/tile glyph and
tooltip get a real prompt/summary instead of nothing. Falls back to
the existing heuristic tier automatically when claude predates the
hooks it needs.
Pi sessions now report their own state, the way Claude Code sessions
already do. Hive ships a small Pi extension with the daemon and loads
it into every Pi session it spawns, so the sidebar and tile glyphs
show what Pi is actually doing — working on your prompt, waiting on a
confirmation, or settled after a reply — with the last thing Pi said
in the tooltip. Nothing to install: the extension is written to
Hive's state directory at startup and is inert if you run pi
yourself. Falls back to the existing heuristic tier if it cannot be
written.
Every session now shows what it is doing. The sidebar row and the grid
tile header carry a state glyph — working, idle, waiting for you,
exited — so a screen of ten agents can be read at a glance instead of
clicked through one at a time. Hovering names the state in words.
Hive reads the state from what the terminal actually renders, so it
works for every agent and for plain shells, and a session that is
waiting on you keeps saying so until you look at it.
Ideas in the GUI: ⌘I opens a capture sheet from anywhere — type
the note, pick idea / bug / feedback, pick the project (the one you
are working in, prefilled) — and Enter files it and hands focus
straight back to the terminal. Each project card shows a badge with
how many ideas are waiting; clicking it, or ⇧⌘I, opens that
project's inbox, where a row can be edited in place, marked done
(the note is kept, it just leaves the inbox) or deleted behind a
confirm. Ideas filed from a session's shell with hived idea add
show up in the same list, live. Deleting a project now asks before
it discards the ideas captured for it.
Start a session from an idea. Every open note in the inbox gets a Start session action: it opens the usual agent launcher with the
project pinned and an opening prompt built from the note, worktree
checkbox and all. The prompt is an instruction, not a label — a bug
asks the agent to reproduce it and find the root cause before
touching code, an idea asks it to propose a plan first — with your
note as the subject — and editable right there in the launcher, since
the note was jotted down mid-task and this is the last moment to
sharpen it (sharpening it does not change the stored note). Claude and
Pi receive it as their opening argument, and for them the idea flips to started and links back to its session,
whose sidebar row carries a small idea glyph. Every other agent gets
the prompt offered instead of typed in: a bar above the grid
shows the note with Paste and Dismiss, so you place it once
you can see the agent is actually ready — Hive cannot tell an agent's
input box from its startup "do you trust this directory?" gate, and
you can. Paste drops it in without sending it and links the idea;
Dismiss leaves the note in the inbox. The plain shell and your own
custom agents get no prompt at all, and the launcher says so before
you start.
A mis-filed idea can be corrected. The inbox's Edit now opens the
same sheet you captured it with, so the note, its kind and the
project it belongs to are all editable — the capture sheet fills the
project in from whatever session you happened to be in, so getting it
wrong is ordinary, and deleting and retyping was not a fix.
Ideas: capture a note against a project without interrupting what
you are doing. From inside any Hive session's shell, hived idea add "the grid loses focus" files one against that
session's project (-k bug or -k feedback for the other kinds),
and hived idea list shows what is waiting — --all for every
project. Ideas outlive the session that filed them, so closing it
loses nothing. Deleting a project deletes its ideas, and Hive now
refuses that delete while any of them are still open rather than
discarding captured work silently. The ⌘I capture sheet and the
in-app inbox follow.
Hive can now tell you what changed. The gift in the sidebar header opens a
What's New list — everything that has shipped, grouped by release and newest
first, plus what is coming next — and carries a dot until you have read the
current release. It reads the same curated feature list the website shows, is
bundled with the build, and needs no network.
macOS text editing in a session now covers the full set: ⌥⌦ deletes the
word after the cursor and ⌘⌦ deletes to the end of the line, mirroring the
⌥⌫ and ⌘⌫ that already worked. Both chords previously did nothing at all —
xterm encoded them as \x1b[3;3~ / \x1b[3;9~, which no shell binds.
The keyboard-shortcuts overlay (⌘/) and the README now list every
terminal-level editing key, not just some of them.
Changed
The menu bar's summary now reads "2 waiting on you" instead of
"2 need you", and says the same thing the dots beside the sessions
do. The collapsed project card in the main window uses the same
wording, so the two surfaces no longer describe the same count
differently.
Hovering a session's state icon, in the sidebar or on a tile, now
shows what that session was asked to do, the last thing the agent
said, and whether the state was reported by the agent or guessed from
its terminal output.
Desktop notifications say which kind of answer is wanted: "waiting
for permission" when an agent is blocked on a yes/no, "waiting for
input" otherwise.
A minimized project chip now shows how many sessions the project holds
and how many of them are waiting on you, next to the same state icon the
sidebar rows and grid tiles use — so a minimized project tells you what
a collapsed one does, including whether a session is waiting for
permission rather than just waiting.
A minimized chip and a collapsed project card now derive "needs you"
from one shared rule, so the two can no longer disagree. That rule is
stricter than the old one on both: a session that has exited, or that
has not finished starting, no longer counts as waiting on you, so a
stale bell can't outlive the session that raised it.
CI is a little faster and its cancellation rules are now correct. The
Windows leg spent three minutes of every run enabling a Windows media
codec feature that no test uses, and two pushes to the same pull request
both ran the full three-platform matrix instead of the first being
superseded. Developer-facing only — nothing about the app itself changes.
On a minimized project chip in the sidebar, the session count is now
right-aligned instead of sitting next to the project name, with the
attention badge immediately to its left. Counts line up down the list.
Fixed
A session's state glyph no longer gets stuck showing the wrong thing
when an agent reports two events at almost the same moment. Each
report arrives on its own connection, so a fast pair could be applied
out of order and leave a finished session showing "working" (or a
resolved prompt still showing "waiting") until the next event. Reports
that arrive late are now ignored in favour of what the daemon already
knows. Affects Claude and Pi sessions alike.
A session whose agent stopped reporting no longer claims the agent
said it was idle. When Hive falls back to guessing because an agent's
hooks went quiet, the state icon's tooltip now says "guessed from
terminal output" instead of continuing to credit the agent for a
state it never sent.
A grid tile's header now shows the same thing its sidebar row does.
Both read the session the daemon broadcasts, where the header
previously rendered from a copy refreshed only when the grid was
rebuilt — so a session could disagree with itself depending on where
you looked, and a tile's window title could stay blank for a session
whose tile had been rebuilt or was never attached.
Minimized and collapsed projects stay that way across a restart when
you run more than one Hive daemon. Every GUI process shares one
webview storage area, so instances attached to different state
directories were overwriting each other's sidebar state — each launch
pruned the other's project ids as "projects that no longer exist" and
emptied the tray. The two keys (hive.minimizedProjects, hive.collapsedProjects) are now suffixed with an id derived from the
daemon's state directory. Your existing sidebar state carries over to
one instance; the others start from a clean slate once and keep their
state from then on.
The in-app build button no longer fails with "build.sh failed" on
Apple Silicon Macs. An app launched from Finder inherits only the
system PATH, which does not include Homebrew's /opt/homebrew prefix or
a Node version manager's directory, so the build died looking for npm.
The build script now runs with the PATH the user's own login shell
reports, probed the way VS Code does it — interactive login shell,
marker-delimited output, per-shell argument forms. When the toolchain
still cannot be found, the button now names the missing tool instead
of reporting a bare "build.sh failed".
Hive sets HIVE_RESOLVING_ENVIRONMENT=1 while it asks your shell for
its PATH. Guard the expensive parts of your shell rc file with it if
an interactive startup does work you would rather Hive skipped.
Restarting Hive no longer risks leaving the daemon unreachable. When
the old hived shut down while its replacement had already taken
over the socket path, it could delete the replacement's socket —
inode numbers get reused, so "is this still my socket?" answered yes
for a file the old daemon never bound. The dying daemon now asks the
socket instead of the filesystem, and leaves any socket that is still
being served alone.
Clicking a link in a terminal now only opens http, https and mailto
URLs. A program could previously print a link labelled with one thing
that pointed at a local file or another app's URL scheme, and a click
would launch it.
The daemon socket moved out of the shared /tmp into a directory only
your user can reach — $TMPDIR/hive/ on macOS, $XDG_RUNTIME_DIR/hive/
on Linux — and Hive now checks that directory's owner and permissions
before trusting it, whether it is binding to it or dialing it. On a
shared machine another account could previously plant a fake socket
there and read everything you typed.
Programs running inside a Hive session can now only report their state
back to Hive and capture ideas for their own project (hived idea). They
could previously use the same connection to create, attach to or kill
sessions, remove worktrees, shut the daemon down, or list every session
you have open. This raises the bar rather than sealing a boundary — an
agent runs as you and Hive does not sandbox it — so SECURITY.md now says
so plainly. Requires a daemon restart, which Hive will prompt for after
the update.
hived idea list --all is refused from inside a session, where hived idea list now shows that session's project. --all works from an ordinary
shell, which it did not before — it needed a session's environment and
was therefore unreachable in every context the moment the in-session case
was closed.
Hive refuses to start a second daemon against one state directory. The
old guard was the socket file, which only worked while the socket path
stayed put; it is now a lock on the state directory itself, which is
the thing that can only have one writer.
Upgrading is handled for you. Because the socket moved, a Hive daemon
left running from before the update would otherwise have been invisible
to the new one, and you would have ended up with two of them managing
the same sessions. The app now finds that older daemon and offers the
same "restart to finish updating" banner it shows for any out-of-date
daemon; restarting from there shuts the old one down and starts the new
one. Nothing to do by hand.
The "latest" update channel now checks that the source checkout's
remote is exactly github.com/lucascaro/hive before pulling and
building from it. A URL that merely contained that text used to pass.
Security
macOS releases are now signed with an Apple Developer ID certificate,
notarized by Apple, and stapled. A fresh install no longer trips the
"unidentified developer" warning, and no right-click-Open workaround
is needed.
The in-app updater now refuses any downloaded release that is not
signed by Hive's Apple Developer team, and says so specifically
rather than reporting a generic checksum error. Previously the only
check was a SHA-256 manifest published alongside the download, which
catches a corrupted transfer but not a tampered one. The installed
app is left untouched when the check fails.