Skip to content

hive 0.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 06 Nov 23:32

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_block takes activate: 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. The motion setting picks snappy (the default),
    natural or off; 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-badge counts
    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 keeps blocked.
  • The tailscale setting (and tailscale-hostname) starts the server as
    its own Tailscale device, as --tailscale does, 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-hints turns 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, and balance on session.new_split), and
    focus-follows-pointer focuses 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. The confirm-close setting picks
    running (the default), always or never; "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
    (:40 opens 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 at GET /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, event script_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 (options in
    the manifest, h.options, hive script set, script.set_option), and a
    notification can offer hive.set_option and hive.set_mode buttons,
    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 add lists and installs limit-resume,
    needs-you, stall-watch, digest, lane-keeper, team,
    keep-awake and dev-panes.
  • Agents stopped by an error, such as Claude Code at its usage limit, are
    done with kind: "error" and the reason, and the apps show them as
    Stopped. agent.act takes expect_state, to nudge an agent that is
    idle or done. Mac client action client.reveal brings a pane forward;
    action.run from the Mac carries the app's client_id.
  • Scripts: TypeScript or JavaScript the server runs, with the same methods
    and events as the CLI. hive script run FILE runs one once, with its log
    on stderr and its result on stdout; hive script stop, hive script ls,
    hive script check and hive script types (a hive.d.ts for editors)
    go with it. A script can only read unless allowed
    more (--allow control,spawn, or a hive.script manifest), and what it
    changes goes to an audit log. Methods script.run, script.stop,
    script.list and script.result; scoped events script_started,
    script_log and script_ended; setting script-remote-run. See
    Scripts.
  • Scripts that keep running: the server runs the scripts in
    ~/.config/hive/scripts once 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.store keeps a script's values across restarts. Commands hive script grant, revoke, enable, disable, reload, logs and audit;
    methods to match; events server_started, restore_finished and
    config_changed; setting scripts.
  • Every method says which permission a script needs to call it: read,
    screen, control, spawn, input, ui, config or server.
    api list and api describe show it, with a note for methods whose
    arguments decide it (a layout that runs a command needs spawn).
  • GET /v1/events?types=a,b streams 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.get gives an app its shortcuts (its defaults,
    then scripts' h.bind, then the settings file's keybind lines), with
    sequences (ctrl+b>c) and modes (resize/left); event
    keymap_changed. client.perform asks a connected app to do one of its
    own actions. Commands hive keymap, hive actions and hive do.
  • Notifications and badges: notify.send reaches 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.clear and status.list put 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 new agent.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.search finds lines in a
    terminal's screen and scrollback.
  • agent_changed and agent.list carry kind (what a blocked agent's
    notification is about: permission_prompt, elicitation_dialog),
    revision (moves on whenever state, message or kind change),
    updated_at and cwd. agent.report takes kind; the hook sends it,
    and leaves it out for a server too old to know it.
  • Error codes permission_denied, timeout and script_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 hive command
    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), and hive asks 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-8 LANG from your macOS language when none is set, and commands
    find what your login shell's PATH finds. Over SSH, hive finds 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.perform needs control for app actions that change your layout
    (new tabs, splits, closing, resizing); ui still 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_block and split layouts refuse a
    ratio outside 0 to 1 with bad_request. It used to become 0.5 without a
    word, so a percentage such as 30 split the pane in half. Leaving ratio out
    still means half.