Skip to content

Releases: ZingerLittleBee/Heeler

v0.1.8

Choose a tag to compare

@ZingerLittleBee ZingerLittleBee released this 13 Sep 15:26

Added

  • iPad is a first-class target again. App Store builds include iPhone and
    iPad, iPad supports all four interface orientations, and make sim-ipad /
    make test-ipad run against the iPad simulator. (PR #323)
  • Drag text and images into the Composer on iPad. Send stays disabled, with
    a visible "Waiting for image…" hint next to the button, until dropped
    images finish staging. (PR #323)
  • Hardware keyboard shortcuts: ⌘1–9 selects visible Agents, ⌘[ / ⌘] switches
    Agents, ⌘F searches, ⌘N starts an Agent, ⌘, opens Settings, ⌘⇧H opens Hosts,
    ⌘E switches Direct Input / Composer, ⌘Return sends the focused Composer draft,
    and ⌘W closes the Agent view. (PR #323)
  • On iPad, Heeler opens in more than one window and resizes freely under Stage
    Manager. Long-press an Agent and choose Open in New Window, or drag its row
    out; each window restores its own Agent after a relaunch. Windows on Agents
    of different Hosts are all live at once. A Host has one live terminal, so
    windows on the same Host hand it to the one you last touched or typed in,
    or to a window you just opened; the others show Live in Another Window
    with Take Over Here (not while that Host's Shell Terminal is open), and
    returning to the app leaves it where it was. A notification for an Agent
    already on screen brings that window forward instead of opening another,
    and a live window resize sends the Host one terminal resize once the
    window settles. (PR #323)

Changed

  • Direct Input's More button matches the arrow key size and shortcut spacing,
    with equal padding at the strip's outer edges. (PR #323)
  • The Terminal keyboard fills its dock width on iPhone and iPad without
    increasing its height. Character keys share one width across staggered
    rows, with wider Shift, Backspace, and Space keys. Agent and Skills
    keyboard wells remain centered on wide screens. (PR #323)
  • On iPad the Composer's tools dock, Direct Input's Keys dock, and the
    Shell terminal's Keys dock no longer leave the system keyboard's floating
    candidate and prediction bar over the dock. (PR #323)
  • iPad adapts its two-column Console to landscape and portrait, with a Show Agents
    action in empty detail, form sheets for Hosts, Settings, New Agent, Skills,
    Rename, Snippets, and Worktree, plus Attach Links popovers. (PR #323)

Fixed

  • The pairing popup keeps startup errors on screen until a keypress, instead
    of exiting immediately and closing the Herdr pane. Missing SSH host keys
    now tell the user to enable Remote Login or run sudo ssh-keygen -A.
    (#319)
  • Agent List Fields no longer refuses every edit after a build with a
    different field set saved on the same device: field names this build does
    not know are dropped on load instead of making the whole saved catalog
    unreadable. When the saved fields truly cannot be read, both Agent List
    Fields screens say so before any edit, keep the fields read-only, and offer
    Reset Saved Fields. (#320; PR #321)

v0.1.7

Choose a tag to compare

@ZingerLittleBee ZingerLittleBee released this 12 Sep 15:49

Added

  • Muse appears in Start Agent when the Host has muse on PATH. Notifications
    and Live Activities name it Muse, and the Heeler plugin accepts muse
    sidebar row overrides. (#297)
  • Direct Input's shortcut row gains a Paste key after ⇧Enter, so pasting into
    an Agent no longer needs a hardware keyboard. The text goes through the
    same paste review as ⌘V. (#307)
  • The Agents list has a search field. Typing filters Agents by working
    directory or title text, combines with the Host filter, and hides empty
    Host sections in grouped mode only while their Host is nominal; a
    reconnecting or failed Host keeps its section. (#292)
  • In Compose, swipe between Agent controls and a full Terminal keyboard with
    letters, numbers, symbols, Ctrl/Alt/Shift, and F1–F12. The same keyboard is
    available in Open Terminal's Keys mode. Both pages match the iOS keyboard
    height and preserve the Composer draft. Tap a modifier to apply it to the
    next key; tap it again to cancel. (#270; PR #302)
  • Skills and Snippets are available in Direct Input as well as Compose.
    Selecting one inserts it into the active input without pressing Enter.
    (PR #302)
  • Hold Backspace for 0.3 seconds to keep deleting; release to stop. This works
    in the Agent controls, Direct Input shortcut row, and full Terminal keyboard.
    (PR #302)

Changed

  • Custom keyboards now use Ghostty's key encoding, which distinguishes more
    Ctrl/Shift combinations and supports enhanced keyboard reporting. Layouts
    and controls stay the same. (PR #298)
  • Terminal character keys use larger labels and uppercase letter keycaps.
    Function key labels keep their existing size. (PR #302)
  • Direct Input's tools dock opens the full Terminal keyboard without the
    Agent controls page, since those keys are already in the toolbar. (PR #302)
  • Agent, Terminal, and Direct Input toolbar keys use a soft gray highlight
    and light haptic feedback when tapped. Agent controls put Backspace at the
    top right and Shift+Tab at the bottom left. The Direct Input shortcut row
    no longer duplicates the Terminal keyboard's Ctrl/Alt buttons. (PR #302)

Fixed

  • Switching Agents keeps the Terminal tools keyboard selected instead of opening
    the iOS keyboard over the controls. Returning from the Agent list no longer
    restores stale keyboard focus, and keyboard height tracking resumes correctly.
    (PR #302)
  • Backspace keeps its full touch area while pressed and tolerates small finger
    movements, so holding near an edge no longer cancels deletion. (PR #302)
  • Backspace highlights and repeats while held, even when surrounding gestures
    delay button events until release. This applies to Agent controls, the
    Direct Input shortcut row, and the Terminal keyboard. (PR #302)
  • Modifier and keyboard layer keys keep their selection color while pressed,
    without flashing gray or shrinking. (PR #302)
  • Fixed missed taps on terminal controls near the left edge, where the
    swipe-back gesture could intercept them. (PR #302)
  • New Agent now discovers agents installed through mise. The discovery PATH
    includes mise's shims directory, resolved from MISE_DATA_DIR or
    XDG_DATA_HOME when either reaches the non-interactive SSH environment,
    otherwise ~/.local/share/mise/shims. (#293)
  • The Lock Screen Live Activity shows three Agents with three-row Agent List
    Fields instead of two before "+N more". The row budget overestimated card
    height and its test measured only frame minimums, not the rendered text.
    Four three-row cards exceed ActivityKit's 160 pt limit, so four rows remain
    only for two-row layouts. (#281)

v0.1.6

Choose a tag to compare

@ZingerLittleBee ZingerLittleBee released this 08 Sep 18:05

Added

  • Agent cards and the keyboard switcher use herdr's sidebar fields and Agent
    order. Customize each Host's card layout in Settings > Agent List Fields:
    add, style, move, or remove herdr, Heeler, and plugin fields across up to
    three rows, with a Console preview and automatic saving. Sync from plugin
    refreshes the first two rows; the third defaults to directory and keeps
    your edits when syncing. (#277, #281)

  • Live Activities follow each Host's Agent List Fields, including directory
    and plugin fields, on the Lock Screen and expanded Dynamic Island. Update
    the Heeler plugin on each Host to use these fields in background updates.
    (#281)

Changed

  • Relicensed the Heeler suite from AGPL-3.0 to Apache License 2.0. (#282)

Fixed

  • Hiding Composer keeps terminal links available through a floating link button
    above the latency indicator. It matches the scroll controls, opens the same
    link list, and does not reduce the terminal's height. (PR #284)

  • Secondary field styles now render correctly in Agent cards and previews. (#281)

  • Agent List Fields groups each Host's controls in one card, wraps field
    chips, and uses the Console card for its preview, including the status
    badge and Host name. (#281)

  • Connecting to a Host whose login shell is nushell or another non-POSIX shell
    no longer fails with "The remote home directory could not be resolved". The
    home probe now runs under POSIX sh, matching the other setup probes. (#275;
    PR #276)

v0.1.5

Choose a tag to compare

@ZingerLittleBee ZingerLittleBee released this 03 Sep 18:06

Added

  • Agent detail now has up/down buttons for jumping between your messages and
    returning to the latest output. You can use them while the Agent is working,
    and manual scrolling stops a jump. (#268; PR #272)

Fixed

  • Pasting text with Windows-style line breaks now opens the paste review sheet
    instead of submitting each line separately. (#268)

  • Terminal layout now updates immediately when the keyboard cannot open. (#263)

  • New Agent now finds Agent CLIs installed with Bun, Cargo, Homebrew, or
    Linuxbrew, as well as standard user-local installs. (#254)

v0.1.4

Choose a tag to compare

@ZingerLittleBee ZingerLittleBee released this 31 Aug 16:55

Changed

  • When no size has been saved, Terminal Text Size now defaults to 8 pt instead
    of 14 pt. Existing saved sizes do not change. (#256; PR #257)

Added

  • HeelerSSH connections negotiate post-quantum hybrid key exchange
    (mlkem768x25519-sha256) against servers that offer it, via a libssh2
    snapshot that carries upstream ML-KEM support; servers without it keep
    using curve25519-sha256. (#261)

  • Agent detail now offers Direct Input, which hides the Composer and routes iOS
    keyboard input directly to the live Attach PTY. A persistent row above the
    Agent switcher provides Esc, Tab, Shift-Tab, arrow keys, Backspace,
    Shift-Enter, and Enter; keyboard show/hide controls remain in the switcher.
    Composer remains the default. Switching modes preserves the draft and keeps
    a visible iOS keyboard in place. (#251; PR #253)

Fixed

  • Attach terminals begin restoring as soon as a reconnected Host's Transport
    is ready, without waiting for event subscription and snapshot recovery. (#264; PR #265)

v0.1.3

Choose a tag to compare

@ZingerLittleBee ZingerLittleBee released this 27 Aug 17:16

Changed

  • Live Activity Lock Screen uses system semantic colors and shares the Console
    status palette; it shows up to four Agents in a dense hierarchy, stale
    updates retain an out-of-date caption, and each visible Agent opens its
    detail while the surrounding activity opens the Console. An iOS 27
    ActivityKit regression can still force the Dark appearance and prevent an
    existing activity from refreshing after a system appearance change. (#247)

Added

  • Console can switch between the flat status-sorted Agent list and a by-Host
    grouped list with collapsible sections; collapsed Hosts show Live
    Activity-style Blocked, Working, and Done count pills, and both the
    presentation choice and per-Host collapse state persist across launches.
    (#245)

v0.1.2

Choose a tag to compare

@ZingerLittleBee ZingerLittleBee released this 25 Aug 17:57

Added

  • Cursor (2.4+) Agents get a Skills catalogue, probed from .cursor/skills
    and .agents/skills at the project root and home.

  • Skills catalogues for thirteen more kinds, each probing its CLI's
    documented directories — Antigravity, Cline, GitHub Copilot CLI, Devin
    CLI, Droid, Grok Build, Hermes Agent, Kilo Code, Kimi CLI, OMP, Kiro CLI,
    Qoder CLI, Qwen Code; Gemini CLI, Amp, Mastra Code, and Maki stay out by
    design.

  • Agent detail shows the Host's latest SSH API latency next to Agent status,
    on a status row that now follows the terminal theme's luminance. (#236)

  • The Composer suggests discovered Skills inline while an invocation prefix
    is typed, and the More menu gains a searchable Skill picker — both insert
    the command into the draft without sending. (#234)

  • Open Terminal in Agent detail's More menu: an interactive shell in the
    Agent's launch directory, one reused tab per Workspace, an IME-safe fixed
    input row, Back for desktop handoff, Close Terminal to reclaim the
    tab. (#231)

  • New Agent can start in a new Workspace at a remote directory, with an
    optional label, even when the Host reports none. (#230)

  • Console cards mark linked worktrees, whose repository, branch, and
    checkout path show in Agent detail alongside a confirmed remove that keeps
    the local branch. (#99)

Changed

  • Hosts get a distinct Connecting state, separate from automatic
    Reconnecting, a paused connection, and loading Agents on a live events
    path. (#155)

  • Failures show a short summary, optional detail, and a recovery suggestion
    only when the error supports one. (#163)

  • GhosttyTerminal 1.3.1 → 1.4.0 (Ghostty v1.3.1): surfaces survive window
    detaches, draws pace on a display link, and keyboard input rides the
    upstream key encoder with better IME handling. (#242)

Fixed

  • Covering a terminal with a presentation no longer risks a later crash
    from ghostty's orphaned content layer calling into freed renderer
    memory. (#242)

  • A slow ordinary Host request no longer freezes a live Attach session. (#130)

v0.1.1

Choose a tag to compare

@ZingerLittleBee ZingerLittleBee released this 20 Aug 15:49

Added

  • Qwen Code appears in Start Agent when the Host has qwen on PATH. (#216)

  • Pairing Codes can be copied from the Host popup with c and pasted in the
    app, so pairing no longer depends on scanning a QR that may overflow a
    small terminal. A failed copy prints the code for manual selection. (#204)

Changed

  • When the Agent is Blocked at an approval or question dialog, Composer Send
    types the draft into the live Attach terminal without pressing Enter, then
    shows the tools keyboard so Enter or Esc is one tap. If the Host rejects
    agent.prompt with agent_blocked after status lagged, Send takes the
    same path instead of showing a rejection. Idle, Working, Done, and Unknown
    still deliver through agent.prompt. (#217)

Fixed

  • Connecting to a herdr 0.8.2 Host no longer shows the "newer than this app
    was built against" notice. The committed schema snapshot now matches
    protocol 20. (#218)

v0.1.0

Choose a tag to compare

@ZingerLittleBee ZingerLittleBee released this 19 Aug 18:15

Fixed

  • Opening an Agent no longer dies with exec: herdr: not found (exit 127) on a
    Host that installed herdr via Homebrew or linuxbrew. The API socket never
    needed herdr on PATH, so the Console could already list Agents; Attach
    and the other CLI execs now append the usual install prefixes after the
    session PATH (~/.local/bin, /opt/homebrew/bin,
    /home/linuxbrew/.linuxbrew/bin). (#206)

Added

  • Pin agents from the Console list with a long-press toggle. Pinned agents
    stay at the top, most recently pinned first. Long-press a chip in the Agent
    switcher on the detail screen to pin or unpin it there too. Lock-screen Live
    Activities show each Host's active agents: status counts plus the top
    agents (pinned eligible first, then blocked, done, working), updating in
    near real time while the app is open and via push after it suspends, ending
    when every agent goes idle. Agent names, titles, and host names stay
    end-to-end encrypted and are decrypted on device at render time; the relay
    sees only the counts. Opt in per Host from Notification Settings; requires
    the updated herdr plugin. (#212)

  • Agent detail now places a plus menu to the left of Send. It can add an image
    from Photos or a file up to 64 MiB from Files, stages the selection privately
    on the Host over SFTP, and inserts the resulting path into the local draft
    without submitting it. Discovered Links appear beside the plus menu, while
    the former title-bar Agent actions live in a separate More menu immediately
    to its right. Agent detail omits the visible title bar so terminal output uses
    the full area below the system status bar, while preserving edge-swipe
    navigation and matching status-bar contrast to the terminal theme. (#182)

  • Agent detail now combines the complete live libghostty terminal with a local
    Composer. The terminal preserves TUI rendering, scrollback, and PTY resize,
    including touch scrolling in alternate-screen TUIs, but no longer accepts
    direct keyboard, paste, or pointer-click input.
    Drafting makes no network requests;
    Send delivers the complete message once and shows delivery, Agent work, and
    Done states from acknowledgments and status pushes. Failed messages can be
    retried or returned to the draft without losing text, and drafts survive
    terminal recovery, backgrounding, and Host reconnects. The Agent switcher
    sits at the bottom of the Composer, keeping session changes and the keyboard
    toggle within reach without reopening the Console. While the keyboard is
    visible, a neighbouring control switches between the iOS keyboard and a
    tabbed tools keyboard. Its Agent controls send Esc, Tab, Shift-Tab, arrows,
    Enter, and Backspace directly to the Agent without changing the draft. The
    The tools dock stays positioned behind the system keyboard and replaces it
    without exposing the disappearing native candidate row as an empty frame.
    Both modes share the same complete measured height, including the native iOS
    candidate and paste area and the Home Indicator area, so switching does not
    move the Composer or change the terminal's root geometry, grid size, or
    rendered frame.
    (#182)

  • Settings > About now has Acknowledgements: every redistributed third-party
    component ships with its exact upstream licence notice, including libssh2
    and its secondary sources, OpenSSL, Ghostty and its stack, the monospaced
    fonts, and the rest of the audited inventory. The catalogue fails loudly
    when a notice is missing or malformed. (#161; PR #170)

Changed

  • Lock-screen Live Activities now headline the most urgent agent's task
    title and show no Host identity. Each agent row is a tap target that
    opens that agent's detail in the app; a tap outside the rows opens the
    Console. A reconnect no longer treats a transient empty Agent list as
    "all idle" and dismisses the activity.

  • Live Activity agent lines now lead with the herdr agent name (e.g.
    reviewer) ahead of the task title. Unnamed agents and updates from
    older plugins render exactly as before.

  • App Store builds now target iPhone only. The notification service uses the
    same device family, so App Store Connect no longer treats iPad screenshots as
    part of the release requirements.

  • Heeler once again supports iOS 18 and later. The removed Dictation feature no
    longer holds the app at iOS 26, and the bundled OpenSSL/libssh2 artifacts now
    share the restored iOS 18 deployment target. (#35)

  • Notification setup now distinguishes device registration from per-Host
    configuration, accurately describes relay-visible metadata and Notification
    Key custody, warns when a custom relay uses cleartext HTTP, and uses
    Heeler-branded generic fallback alerts. (PR #195)

  • Opening an Agent now gives Heeler priority over an existing terminal client.
    Attach and Reattach use herdr's takeover mode, so a stale mobile connection
    or a desktop client can no longer prevent the Agent detail terminal from
    opening. The displaced client is disconnected.

  • A Host whose SSH server has stream-local forwarding turned off now says so
    even when herdr isn't on the SSH session's PATH. Heeler tries to start
    herdr once before giving up; when that attempt itself failed, the checks
    used to report "the herdr server is not running" and drop the forwarding
    half of the diagnosis. Since a typical macOS Host keeps herdr at
    ~/.local/bin or /opt/homebrew/bin — neither on the default PATH of an
    SSH command — that hit exactly the Hosts most likely to need the forwarding
    advice. (#125)

  • Hosts no longer need socat. Heeler now reaches herdr's socket over an SSH
    stream-local forward instead of launching a remote helper per request, so
    SSH access and a running herdr server are the whole prerequisite. The socat
    path field is gone from Add/Edit Host, the onboarding checklist has dropped
    its "socat installed" row, and existing Hosts carry over untouched — nothing
    to reconfigure. If a Host's SSH server has stream-local forwarding turned
    off (it is on by default), the checks now say so. (#122)

  • The app is now named Heeler: the home-screen name, the microphone and
    camera permission prompts, and the notification extension's display name
    all say Heeler instead of Herdr. herdr remains the name of the server it
    connects to; the App Store listing will be "Heeler for herdr". The GitHub
    repository moved to ZingerLittleBee/Heeler and the in-app repository and
    privacy-policy links follow (the old URLs redirect).

  • The pairing plugin's id and display name are now both heeler (the id was
    herdr-mobile.pairing, the display name Heeler Pairing). Hosts still
    running the plugin under an old id keep working: Notification Registration
    matches the installed id — current first, then legacy — and writes into
    that plugin's own config directory, so updating the plugin
    (herdr plugin install ZingerLittleBee/Heeler/plugin --ref main --yes) can
    happen whenever convenient. After updating it, redo Notification
    Registration from the app once; pairing and SSH access are unaffected
    throughout.

  • The pair popup now opens full-screen so the Pairing Code QR has the whole
    terminal to render in. The QR itself is unchanged, so every released app
    version keeps scanning it.

  • The pair popup's address checklist now pre-selects a single default address
    instead of every likely one: the address on the platform's primary interface
    (en0 on macOS, eth0 on Linux), falling back to the best-ranked private
    LAN, Tailscale, or ULA candidate when that interface is absent.

  • The pair popup's QR screen now renders the code starting at the top row and
    trims trailing text to the pane height, so the QR can no longer be clipped
    into scrollback on short terminals.

Fixed

  • Malformed herdr API error responses that carry an empty id now fail the
    originating request immediately with the server's error instead of hanging
    until the request deadline. herdr answers unparseable requests with
    id: ""; because each API connection serves one request, that empty id is
    attributable to the sole in-flight request on the connection. (#177)

  • On iPad, one window's keyboard no longer ends another window's keyboard
    handoff. Keyboard notifications are process-wide and each window can hold
    a live terminal, so a frame event from one window's keyboard transition
    could unfreeze the other terminal's grid before the keyboard had settled
    for it. A terminal now heeds a transition only for its own keyboard: it
    must be first responder, and a frame event must leave the keyboard
    covering its own window. Process-wide show/hide broadcasts no longer end a
    handoff. (#157; PR #175)

  • Attach again withholds generic remote startup and SSH rc chatter until the
    attach command begins. The attach exec prints a short handshake marker
    immediately before herdr agent attach, and the client drops everything
    before it. A channel that dies before the handshake still emits the withheld
    text once as the diagnosis. (#166)

  • An open Agent terminal no longer stays blank after the app may have suspended.
    Returning at or beyond the Background Grace Period, or after an observed
    suspension, now shows Connecting while the old PTY stops, then opens a new PTY
    Attach with a new terminal surface while preserving links, image actions, and
    pending Paste review. While the Host's replacement snapshot is still loading,
    the session screen also stays on Connecting instead of briefly claiming the
    Agent is gone. Brief trips out of the app keep the existing Attach and do not
    show Connecting. (#141)

  • A Host that is reconnecting no longer tells you its Agent has gone. The
    session screen said "This Agent's pane is no longer reported" whenever the
    Agent list emptied, which a dropped connection does exactly as a closed
    pane does — so the app reported a permanent loss at the moment it was
    successfully recovering. It now...

Read more