Repository navigation
Scripts the server runs, a Settings window on the Mac, notifications by
state, tabs in their own windows, and the server as Hive's background item.
Downloads
The same files as 0.1.0, with this version in their names:
hive-0.2.0-macos-arm64.tar.gz, hive-0.2.0-linux-amd64.tar.gz,
Hive-0.2.0-macos-arm64.zip, hive-0.2.0-android.apk and SHA256SUMS.
The APK installs over 0.1.x.
To update on a Mac, replace hive and Hive.app, open Hive once, then
restart the server when it suits you (hive server stop, then any hive
command). Stopping the server ends its programs; shells and agents come back.
Added
- On the Mac, drag a tab out of the title bar or the sidebar to open it in
its own window, or use Move Tab to New Window. A picture of the tab
follows the pointer while you drag. The tab stays in the main window,
faded, with a return arrow that brings it back. These windows reopen
where you left them when hive starts. session.focus_blocktakesactivate: false, to focus a block without
making its window the session's active one.- Tabs on the Mac show a close button while the pointer is on them, in the
title bar and in the sidebar, and move with a short spring when they open,
close or change places. Themotionsetting pickssnappy(the default),
naturaloroff; Reduce Motion always moves them at once. - Notifications by state on the Mac: Needs you, Done and Stopped each turn
on or off and play their own macOS sound (notify-blocked,
notify-done,notify-stopped,sound-blocked,sound-done,
sound-stopped), with a Play button in Settings;dock-badgecounts
the agents that need you on the Dock icon. - A program's progress (OSC 9;4) shows as a ring on its tab, in the title
bar and the sidebar on the Mac, and in the tab strip and sheet on the
phone. The server keeps the last report in the block's view
(progress), so a client that connects later shows it too. - On screen, an agent waiting for you says "Needs you" instead of
"Blocked", on the Mac and the phone. The API keepsblocked. - The
tailscalesetting (andtailscale-hostname) starts the server as
its own Tailscale device, as--tailscaledoes, for a server the Mac app
starts. Settings, Server has Built-in Tailscale, with its state and
Sign In… while it waits for you. - Key sequence hints on the Mac: after a sequence's first key (such as
ctrl+a in ctrl+a>d), a panel lists the keys that can follow and what each
does; in a mode, its keys. A click, find or another window drops the
half-typed sequence.key-hintsturns it off. - Copy on select on the Mac (
copy-on-select, off by default): text you
select with the mouse goes to the clipboard, and the pane says "Copied". - Find in a pane: ⌘F on the Mac (Edit → Find…), and ⋯ → find on the
phone and tablet. Matches in the scrollback are counted and marked, the
latest is current, ⌘G and ⇧⌘G (or the arrows) step through them, and the
marks follow new output. - Pane focus on the Mac: the honey edge glides to the pane you focus, the
others dim (dim-panes:light,more,off), splits even out when
the app opens or closes a pane (balance-splits; the server method
session.balance_window, andbalanceonsession.new_split), and
focus-follows-pointerfocuses the pane under the pointer. - A new Settings window on the Mac: a sidebar of pages (Server, Appearance,
Terminal, Panes, Notifications, Agents and Scripts, Hosts, Shortcuts,
Advanced), back and forward, and search that finds a setting by what it
does. The font shows in a small terminal and the theme as tiles; Claude
Code's hooks connect from the Agents page; Server shows how long the
server has run and turns on the tailnet listener. - The menu bar menu is shorter: the server and how long it has run (click
it for Settings), the agents that need you, how many are working, and the
app's and the server's versions with a button that copies both. - Closing a tab, or its last pane, asks first when a program other than the
shell runs in it, and names it. Theconfirm-closesetting picks
running(the default),alwaysornever; "Don't ask again" sets it
to never. - Tap a path a program printed, on the phone or the tablet, to see the file
without leaving hive: images (pinch to zoom), text with line numbers
(:40opens at that line; the last 2 MB of a long log), folders, and
anything else through Open in…. A sheet over the pane on a phone, a panel
beside the panes on a wide screen. Paths are read where the pane is, also
across wrapped rows. The server serves them atGET /v1/file. - Seeing what scripts do, and turning them off: every change a script
makes is listed (hive script show,hive script audit -f, method
audit.list, eventscript_acted) and shows for a few seconds on the
pane it touched. A script can be put in watch mode (hive script watch,
script.set_mode): it may look, mark panes and notify, and every change
it tries is refused and listed. Scripts declare switches (optionsin
the manifest,h.options,hive script set,script.set_option), and a
notification can offerhive.set_optionandhive.set_modebuttons,
which the server runs for whoever presses them. Only people change
modes, switches and grants. The Mac app has a Scripts window (Hive →
Scripts…) and the phone a Scripts page, with all of this. - hive for Android on tablets: splits side by side when each pane gets 60
columns, every tab in the strip, pages at a reading width, and on wide
screens a sessions column beside the panes. One layout adapts to the
width; phones keep one pane at a time. - hive for Android: long press selects text, with Copy, Select all and
Paste. A two-row key bar on phones with all four arrows (held, they
repeat), alt, ⇧tab, ↵, home and end, and ⋯ for
control keys, symbols, page keys and F1 to F12. ctrl and alt
apply to the next key, or stay on with a second tap. - Hive.app: drag tabs to reorder them in the title bar too, with the others
making room where the tab will land; Escape puts it back. Move Tab
Left and Move Tab Right in the Window menu and the palette. - Starter scripts:
hive script addlists and installslimit-resume,
needs-you,stall-watch,digest,lane-keeper,team,
keep-awakeanddev-panes. - Agents stopped by an error, such as Claude Code at its usage limit, are
donewithkind: "error"and the reason, and the apps show them as
Stopped.agent.acttakesexpect_state, to nudge an agent that is
idle or done. Mac client actionclient.revealbrings a pane forward;
action.runfrom the Mac carries the app'sclient_id. - Scripts: TypeScript or JavaScript the server runs, with the same methods
and events as the CLI.hive script run FILEruns one once, with its log
on stderr and its result on stdout;hive script stop,hive script ls,
hive script checkandhive script types(ahive.d.tsfor editors)
go with it. A script can only read unless allowed
more (--allow control,spawn, or ahive.scriptmanifest), and what it
changes goes to an audit log. Methodsscript.run,script.stop,
script.listandscript.result; scoped eventsscript_started,
script_logandscript_ended; settingscript-remote-run. See
Scripts. - Scripts that keep running: the server runs the scripts in
~/.config/hive/scriptsonce you grant them (hive script grant),
reloads one when you save it, keeps the old version when the new one has
an error, and quarantines one whose handlers keep running too long.
h.storekeeps a script's values across restarts. Commandshive script grant,revoke,enable,disable,reload,logsandaudit;
methods to match; eventsserver_started,restore_finishedand
config_changed; settingscripts. - Every method says which permission a script needs to call it:
read,
screen,control,spawn,input,ui,configorserver.
api listandapi describeshow it, with a note for methods whose
arguments decide it (a layout that runs a command needsspawn). GET /v1/events?types=a,bstreams only events of those types. Some
events, such as a script's log lines, reach only a stream that names them,
so they never crowd the apps' stream or its history.- Keys as data:
keymap.getgives an app its shortcuts (its defaults,
then scripts'h.bind, then the settings file'skeybindlines), with
sequences (ctrl+b>c) and modes (resize/left); event
keymap_changed.client.performasks a connected app to do one of its
own actions. Commandshive keymap,hive actionsandhive do. - Notifications and badges:
notify.sendreaches every app, and the server
keeps notifications for a day (notification.list,notification.ack),
so an app that was closed shows what it missed.status.set,
status.clearandstatus.listput badges on panes; event
status_changed. - Scripts can watch agents (
h.agents.on_state), offer one-tap answers to
blocked agents (h.agents.rule, through the newagent.act, which acts
only if the agent is still blocked on what was seen), react to what
terminals print (h.trigger,h.wait_output), and register actions
(action.list,action.run).hive.terminal.searchfinds lines in a
terminal's screen and scrollback. agent_changedandagent.listcarrykind(what a blocked agent's
notification is about:permission_prompt,elicitation_dialog),
revision(moves on whenever state, message or kind change),
updated_atandcwd.agent.reporttakeskind; the hook sends it,
and leaves it out for a server too old to know it.- Error codes
permission_denied,timeoutandscript_unloaded, for
scripts.
Fixed
- A method that crashed while called over the attach stream (the apps'
connection) stopped the whole server. It now fails that one call with
internal, as it already did over/v1/call. - On macOS, programs in panes could be denied the local network ("No route
to host"), screen recording and accessibility, with no prompt. macOS held
whatever had started the server responsible for them: a shell, or a
Hive.app that had since quit. The server is now responsible for its own
panes, whoever starts it, and has its own name (xyz.matm.hive.server)
and usage text, so macOS asks for it and you grant it once in System
Settings; grants to it and to Hive.app now survive rebuilds and updates.
Hive.app also declares its local network and Apple Events use. - On macOS, closing the terminal app that ran the first
hivecommand
stopped the server and every terminal in it: macOS stops what an app
started when it closes. Hive.app now adds the server as its background
item (Login Items & Extensions), andhiveasks macOS to start it, so it
keeps running when you close Hive or a terminal app. It starts on demand,
not at login, and macOS restarts it after a crash. Terminals started by it
get a UTF-8LANGfrom your macOS language when none is set, and commands
find what your login shell'sPATHfinds. Over SSH,hivefinds the same
server as Hive.app.
Changed
- Scripts' wording on the Mac and the phone says what a script does
instead of "it": "Needs your OK", "Watching only", "Refused: the script
can only watch", "Not sent: the pane had changed". - The Mac sidebar is lighter: it shares the window's background with no
dividing line, the tab in front has no outline, and titles use lighter
weights. A tab's ⌘ number moved to its tooltip. client.performneedscontrolfor app actions that change your layout
(new tabs, splits, closing, resizing);uistill covers showing things.
A script can mark only its own notifications seen.- Hive.app takes its shortcuts from the server's keymap, with sequences and
modes, and lists scripts' actions in the command palette. Every default
has a key a Portuguese keyboard types without Option (⌃⇥ and ⌃⇧⇥ for
tabs, ⌘' for the shortcuts), and the menus show the keys your keyboard
types instead of letting macOS move them to other keys. Both apps show
scripts' badges in pane headers and their notifications, with buttons
that run the script's action, and show what they missed while closed. - hive for Android previews what an agent did on the tab sheet's cards, not
its input box and status bar, and draws symbols such as ⏵ and ⏸ that its
font lacks. Scripts' actions are in the switcher. - hive for Android: a tap on the pane no longer brings up the keyboard; the
keyboard key and a two-finger tap do. A pane nobody else is using opens
fitted to the device. A hardware keyboard types without the on-screen one. - Day theme text reads at 4.5:1: muted is
#6F675C, honey, coral and sage
words use darker text colours, and words on honey are ink. Scripts' state
colours follow the brand: honey running, coral waiting for your OK. session.new_split,session.move_blockand split layouts refuse a
ratiooutside 0 to 1 withbad_request. It used to become 0.5 without a
word, so a percentage such as 30 split the pane in half. Leavingratioout
still means half.