Skip to content

Hive Desktop 0.2.0

Choose a tag to compare

@hay-kot hay-kot released this 09 Sep 19:07
· 5 commits to main since this release
5d10aa0

Downloads are served from Cloudflare R2, not GitHub (decision 0003); this release records the source changes for the stable channel.

Terminal mode and the Chats area arrive, Grafana and exec join the connectors, and the app ships a signed macOS installer.

Added

  • Terminal mode (experimental): tmux-backed sessions rendered by a GPU
    atlas renderer, with searchable scrollback replay on attach, clickable
    links, and pop-up terminals that open straight into a TUI from a chord.
    Typography — family, weight, line height, letter spacing — is configurable.
  • The Chats area (experimental): workspaces, tmux-backed chats, and an
    MCP catalogue. A chat can be pinned into the Code view's session tree to
    stay in reach while you work. Deleting a workspace deletes its folder from
    disk — its chats, its canvases, and everything else under it — behind a
    confirmation that names the path it removes.
  • Canvases (experimental): a chat's agent can put markdown, links and
    laid-out HTML on named canvases shown beside the conversation, via the
    hive-canvas MCP server. HTML blocks are styled by Hive's own class
    vocabulary, so stat tiles, card grids and callouts follow your theme instead
    of whatever the model picked. Each canvas is a file in the workspace folder,
    so it outlives the chat that made it.
  • Scheduled chats (experimental): a workspace can declare schedules: in
    its manifest, a cron expression and a prompt template, and Hive starts the
    chat when it comes due, once more for anything missed while the app was
    closed, and tells the agent to end the session when its task is done. An
    agent can manage a workspace's schedules through the hive-desktop MCP
    server.
  • Grafana connector for metrics, alerts, and IRM alert groups, with
    Alertmanager filtering pushed server-side so large instances stay
    responsive.
  • sources.exec connector — run a command on the poll tick and ingest its
    stdout as a snapshot.
  • Gitea connector for issues, pull requests, and notifications from a Gitea
    or Forgejo instance, configured with typed filters rather than a query
    string. Items land in the feed alongside GitHub's and route through the same
    filters and actions.
  • Generic webhook source, with an uploaded image usable as its feed mark.
  • A signed, notarized macOS .dmg installer beside the update zip, and
    Linux releases for amd64 and arm64.
  • Pick the app's fonts from your installed families. Appearance lists the
    fonts on your machine for the UI and monospace faces, not just the bundled
    Inter and JetBrains Mono.
  • Hive sessions from the app — create one from a feed item or on its own,
    manage them from the UI, and see which session an inbox item started.
  • Dry-run a flow against supplied input without touching live state.
  • Actions declare inputs and render them into their templates, alongside a
    richer default catalog and a native clipboard action type.
  • A notify terminal node, so a feed can notify on new items.
  • In-app problem reporting to a private bucket, and a documentation site
    with search on the landing page.
  • Send the app's own metrics, logs and traces to your OpenTelemetry
    backend.
    Turn on telemetry in settings.yaml with an OTLP endpoint and
    instance id, and Hive exports Go runtime metrics, its log stream, and a
    startup trace over OTLP — no collector to run. Terminal streaming reports
    throughput, backlog depth, pause and resume, and frame latency; every call to
    a source's API reports its duration, its status and which connector made it,
    alongside how much rate-limit budget that connector has left; database
    statements appear on the trace they belong to. Each poll tick is one trace, so
    a stale feed resolves to the source that failed and the request that hung, and
    every log line written inside a trace carries its id. Every signal is tagged with
    the build's version and release channel, so a dev build's data never mixes
    with a release's. development.metrics serves the same metrics at
    /metrics on the local server for a scrape, with or without an endpoint
    configured.
  • Secrets in settings are references, not secrets. The whole telemetry
    destination — endpoint, instance id and token — takes env:NAME,
    file:/path, or a 1Password op://vault/item/field reference, the same
    string 1Password's Copy Secret Reference gives you, and Hive reads the
    values at launch. The token must be a reference; pasting a credential in is
    rejected, so a dotfiles-managed settings.yaml stays safe to commit.
  • ! in the command palette runs a shell command in the Code view — the
    rest of the line opens a window on the attached session and types it there,
    so it runs in that checkout and the shell outlives it.
  • The command palette knows where you are. Code view lists the attached
    session's windows and operations, every other session as an attach row, and
    the configured session and window actions — none of which were reachable
    from it before.
  • Your configured actions are in the palette. The selected inbox item's
    actions are listed under its own reference, and running one opens its input
    form exactly as the detail pane's cards do.
  • A + on a repository in the session tree starts a session in it,
    replacing the session count under the pointer. A workspace in the Chats
    sidebar has the same +, and it starts a chat outright rather than opening
    the new-chat form.
  • Drag a profile tile to reorder the rail (or move the focused tile with
    Alt+Up/Down). The order is saved as profiles.order in settings.yaml;
    profiles you never move stay alphabetical behind the ones you place.
  • An optional status bar above a session (Settings ▸ Terminal), carrying
    its branch, uncommitted and unpushed state, lines changed, and its pull
    request's review and CI status — plus the open-in-editor and show-in-Finder
    buttons a chat already had. The pull-request badge reads GitHub and any
    Gitea or Forgejo instance you have connected, picked from the session's own
    remote.
  • A Tasks overlay over hive's hc issue tracker — a tree and detail split
    with filters, text search, keyboard navigation, status changes, and
    delete/prune, reached from a titlebar icon and the command palette, and,
    from a terminal session's status bar, scoped to that session's repository.
    A poll picks up changes made outside the app, such as from the hive hc
    CLI.
  • The command palette has scope tabs — All, Go to, Actions, and Shell —
    so you can narrow it to just navigation or just actions instead of the
    whole ranked list. @, >, and ! still jump straight into a scope as
    you type.
  • The command palette opens with recent commands, device-local usage data
    that survives restarts and is stored on this device rather than in your
    settings file. Typed queries match fuzzily — scattered characters like
    mkalrd find "Mark all as read" — with title matches ranked above keyword
    matches.
  • Keybindings can be chord sequences, not just single combos. g i /
    g c / g a / g t / g s jump to Inbox, Code, Chats, Tasks, and
    Settings from anywhere, and a which-key hint pill shows the pressed key and
    what it can lead to while a sequence is pending.
  • ? opens a searchable keyboard-shortcut reference — its own tab in the
    command palette. Pressing Enter on any row lands in Settings ▸ Keyboard,
    pre-filtered to that command.
  • The macOS standards are wired up: ⌘, opens Settings, and ⌘[/⌘]
    step back and forward through view history, matching the title bar's own
    buttons.

Changed

  • Settings are sectioned by the surface they change, and the navigation is
    grouped by the app's modes.
  • Auto-update and publishing moved to R2 channel manifests.
  • The Activity view is a ledger, the inbox trash was redesigned, and the feed
    gained date groups, hover actions, and mark-all-as-read.
  • One source message is split into per-entity feed items rather than one
    combined row.
  • A chat workspace writes its own launch command instead of picking an agent
    and one of three autonomy postures. Creating one is now a single choice from
    a searchable list of suggested commands -- the shipped postures plus one per
    agent profile in your hive config -- and picking Custom opens the
    command itself, a template with the workspace directory, the generated MCP
    config and the session id available to it. Any CLI can run in a workspace,
    not only the two Hive shipped flags for, and the editor warns when a command
    skips permission prompts. Existing workspaces migrate to the command their
    posture already ran.
  • The New Session form preselects the agent hive would actually run, and the
    dialog opens on ⌘N.
  • The command palette no longer lists commands that cannot run where you are
    standing — feed commands over a terminal — and keeps item actions and flow
    editing hub-only, since the flows canvas is profile-bound.
  • Quick terminal launchers are scoped to the session they run in rather than
    shared across every session.
  • A quick terminal launcher opens where the terminal you are looking at is,
    rather than in that session's checkout. lazygit follows a cd into another
    repository, and it works on the plain terminals under Terminals and on a
    pinned chat, not just on a session.
  • A new terminal tab opens in the current tab's directory instead of the one
    the session started in — so ⌘T after a cd lands where you were, and the
    scratch terminal's tabs no longer all open in your home directory.
  • / now focuses whichever search box is on screen — the feed's or the Code
    view's session filter — as one shared shortcut (mod+f rides along) rather
    than a Code-only binding, so the two can no longer be rebound independently.
  • The Code view's commands group under "Code" in the palette and the keyboard
    reference, matching the area's name rather than the old "Terminal" label.
  • The Chats sidebar lists every chat under its workspace, instead of a
    workspace list filtering a flat list of chats below it. Workspaces fold and
    unfold, and stay that way; ones with a running agent open on their own. It
    reads like the feed sidebar now — one line, one icon per row — and the
    divider between the two old lists is gone.
  • Every integration card in Settings wears its mark on the same ground, rather than three of them on a white tile and three on the app's own.
  • The app icon is the four-node hive mark.
  • The theme is persisted in settings.yaml instead of webview localStorage.
  • The flow editor's Deploy button no longer carries a menu. The debug panel
    and the Copy prompt shortcut behind it were development affordances;
    every prompt is still in Settings ▸ LLM prompts.
  • Deleting or recycling a session shows its git pre-flight as a checklist:
    a red mark on uncommitted changes or unpushed commits that would be lost,
    a green one on a check that came back clean.

Fixed

  • Grafana alerts render as alerts, not as a bare heading and a timestamp. A
    firing alert carries the Alert kind, a body with its description and the
    value that tripped it, a link to the rule it was raised from, and its folder
    as the container; alerts from one rule on several instances are separated by
    their instance. IRM alert groups get the same kind and a body of their own.
    Both nodes now put string tags in the canonical labels and carry the raw
    label map as alertLabels — a function node reading labels as a map
    wants alertLabels instead. Alerts already in the inbox keep the old payload
    until they next change.
  • A source badge showing an image — Grafana, or a webhook or command source
    with an uploaded mark — filled the badge edge to edge instead of sitting
    inset like the glyph marks beside it.
  • Pasting into a terminal pane is sent as a paste instead of one Enter per
    line, which no longer fires half a script on the way in.
  • A terminal recovers from broker overflow in place; the view is no longer
    torn down and rebuilt underneath you.
  • tmux spawns in the resolved environment, so agent sessions launch.
  • A dead terminal session is presented as not started rather than as an error.
  • GitHub absence confirmation is batched, fixing the rate-limit N+1.
  • Empty-scope inbox rows no longer wedge the flow consumer.
  • The Linux build no longer depends on the BSD-only syscall.Getsid.
  • A node editor in the flows canvas keeps what you typed when the flow
    reloads underneath it, instead of reverting and letting Save write the
    pre-edit values back.