Skip to content

Releases: leodudedev/cerberus-term

0.21.0

Choose a tag to compare

@github-actions github-actions released this 03 Oct 15:52

Added

  • Drag a tab to reorder the strip. Press a tab and move it sideways; a
    marker shows where it will land, and the new order survives a restart. A
    plain click still selects, double-click still renames, and the close button
    still closes — the drag only starts once the pointer has actually moved.
    With more tabs than fit, holding the tab near either edge scrolls the strip.
    Escape, or switching away from the window, drops the drag and leaves the
    order as it was. Unnamed tabs keep numbering by position, so dragging
    "Terminale 3" to the front makes it "Terminale 1" — the same thing closing
    a tab already does. Name a tab if you want its label to stay put.

Changed

  • The README now leads multi-agent use with named sessions. Running several
    interactive agents side by side, each renamed with /rename, needs nothing
    from Cerberus and every permission prompt still reaches your phone with the
    agent's name on it — so that's the path the docs show first. The headless
    worker setup with live follower panes is unchanged and still documented,
    now scoped to what it's for: batch runs of agents that never prompt.

Full changelog: v0.20.0...v0.21.0

0.20.0

Choose a tag to compare

@github-actions github-actions released this 30 Sep 07:36

Added

  • Telegram notifications carry the session's name. Rename a Claude Code
    session with /rename and every notification it sends shows that name after
    the project — 🦈 Claude · my-app · orchestrator — so when several
    sessions run in the same folder you can tell which one is asking without
    opening the chat. Renaming again takes effect on the next notification. Only
    names you set yourself count: the title Claude generates on its own is left
    out, and a session you never renamed looks exactly as before. Claude Code
    only for now — Codex and Copilot CLI have no equivalent of /rename.

Full changelog: v0.19.0...v0.20.0

0.19.0

Choose a tag to compare

@github-actions github-actions released this 22 Sep 07:26

Added

  • Codex CLI sessions now reach your phone. The third agent Cerberus knows
    about, alongside Claude Code and Copilot CLI. When a Codex session asks to run
    something, the request arrives in Telegram with the command, its risk icon,
    and Codex's own explanation of why it wants permission — the sentence it would
    have put on screen, in whatever language it wrote it.

    Approving from the phone works differently here, and better. For the other two
    agents Cerberus types the answer into the pane, which means reading the dialog
    off the screen and trusting that the option numbers haven't moved since. Codex
    lets the answer be given to it directly, so Approve and Deny are handed back as
    a decision rather than as keystrokes: nothing is typed into the session, and a
    pane that has scrolled or repainted in the meantime cannot be answered wrong.

    The phone has about 25 seconds before Codex falls back to asking at the
    keyboard, so a permission never waits on a phone left in another room — and if
    no notification went out at all, because the project is muted or you haven't
    set up a bot, Codex asks on screen immediately rather than pausing first.
    Answering on the PC retires the buttons in the chat, the same as elsewhere.

    Two things worth knowing. Codex reviews a hook before it will run it: the
    first time, it asks you to trust this one from its own /hooks screen, and
    until you do, nothing arrives — Settings says awaiting trust while that is
    outstanding. And Codex is not offered on Windows yet, for the same reason
    Copilot CLI isn't: nobody has run it there to find out whether the hook field
    behaves the way it does on macOS and Linux.

Fixed

  • A second copy of Cerberus run from a checkout no longer borrows the installed
    app's settings. It shared the same stored bot token and chat id, so a copy
    started for development pushed to the real bot whatever it was told to use
    instead, and a port set through an environment file was read too late to have
    any effect. Both now hold; .env.dev.example describes the arrangement.

Full changelog: v0.18.0...v0.19.0

0.18.0

Choose a tag to compare

@github-actions github-actions released this 11 Sep 19:53

Fixed

  • A dropped Telegram connection no longer takes remote control down for
    good.
    Two things could end the bot's connection for the rest of the session:
    a token that stopped being valid, and a second Cerberus polling with the same
    token — a laptop and a desktop sharing one bot, or a development copy running
    beside the installed app. Neither said anything. Every notification simply
    stopped arriving, and since a quiet phone is also what "nothing needs you"
    looks like, there was no way to tell the two apart. The connection now comes
    back on its own, waiting a little longer between attempts for as long as the
    problem lasts, and the ✈ button in the tab bar turns red with the reason in
    its tooltip when it can't.
  • Waking the Mac no longer leaves the phone silent for minutes. A connection
    that went to sleep mid-request can come back to a socket that never answers
    again; Cerberus now reopens it on wake instead of waiting for it to time out.
    A moment of silence right after the lid opens is still normal — the network
    itself has to come back first.

Changed

  • A new bot token or chat ID in Settings takes effect immediately. It used to
    need a restart of the app, which was easy to miss: the settings said one thing
    and the bot kept using the old credentials until the next launch.

Full changelog: v0.17.0...v0.18.0

0.17.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 14:24

Added

  • An open document reloads itself when the file changes. Reading a spec
    while an agent rewrites it used to show you the version you opened; the viewer
    now notices the new file and re-renders it where you were reading, scroll
    position kept. It follows a save that replaces the file wholesale — a temp
    file plus a rename — which is how editors and agents usually write, and waits
    for the writing to stop before re-rendering. A document in a background tab
    isn't watched at all; it catches up when you come back to it.

Changed

  • Documents load their remote images by default. The badge row of a README
    now fills in on its own instead of waiting for the globe button, which was one
    click too many for something every git host renders without asking. The button
    and the Settings checkbox still turn it off, per machine, and everything else
    about the fetch is unchanged: no cookies, https only, 2 MB and 6 seconds per
    image.

Full changelog: v0.16.0...v0.17.0

0.16.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 12:59

Added

  • Documents can load the images they point at, once you ask. A README whose
    badge row lives on a remote host used to render as a line of broken-image
    glyphs, because the viewer refuses to let a document reach the network on its
    own. Remote images now stand in as a small chip carrying their alt text, and a
    globe button in the viewer bar fetches them on demand and swaps them in.

    It is off by default and stays off until you turn it on, per the checkbox in
    Settings: opening a markdown file should not tell a third-party host that this
    machine just opened it. When you do turn it on, the fetch happens outside the
    browser session — no cookies go out — over https only, capped at 2 MB and 6
    seconds per image, and limited to the image formats the viewer already shows
    from disk.

Fixed

  • The document list opened behind an already-open document, so reaching for
    another file from inside one gave you a dropdown you could not see.

Full changelog: v0.15.0...v0.16.0

0.15.0

Choose a tag to compare

@github-actions github-actions released this 07 Sep 20:58

Added

  • A markdown reader in every pane. The new document button in a pane header lists
    the markdown of the project that pane is in — the repo root plus configurable
    folders (docs/, doc/, documenti/, .claude/ by default), newest first
    with CLAUDE.md, AGENTS.md and README.md pinned — and opens the one you
    pick as a rendered document over the pane: headings, tables, highlighted code
    and mermaid diagrams in the app's own palette, with find-in-document
    (Cmd+F), links between documents followed in place, an expand button to take
    over the whole window, and close or Esc back to the CLI. The document is an overlay, not a pane,
    so the pty underneath is never resized and the session in it never redraws.

    The scan is rooted at the project (nearest .git, else the pane's cwd) and
    cannot leave it: symlinks out are skipped, and a read outside the root is
    refused in main whatever the renderer asks for. The folder list is global in
    Settings and overridable per project with docs.globs in .cerberus.json.

Changed

  • The pane header's buttons are drawn icons now, in groups. They were
    Unicode glyphs from half a dozen blocks, each landing at its own weight and
    optical size at 12px — the settings gear was a dot, the document one an
    anonymous block. They're one stroked set on a single grid, a little larger,
    ordered document · favourites · splits · window and separated by hairlines,
    with the close button last.
  • The focused pane is framed on all four sides. The highlight was an inset
    outline, which the terminal canvas painted straight over, leaving the accent
    only above and below the pane.
  • Scrollbars follow the theme. The platform scrollbar was a bright slab
    against the dark panels; every scrolling surface — the document list, the
    document itself, the settings, the terminals — now gets a thin one in the
    app's own tones.

Fixed

  • The installer no longer replaces Cerberus while it's running. Its guard
    used pgrep, which by default excludes its own ancestors — so run from a
    Cerberus pane, the one place an update is most likely to be typed, it never
    saw the app it was looking for and went ahead anyway. It now reads the process
    list directly, and a pane is recognised before that: CERBERUS_PANE_ID says
    outright that the shell belongs to the app being replaced, so the script says
    that rather than a vaguer "it's open".

    The README serves the script from main, so this is live for everyone without
    waiting for a release.

Full changelog: v0.14.0...v0.15.0

0.14.0

Choose a tag to compare

@github-actions github-actions released this 07 Sep 14:12

Added

  • A one-line installer for macOS and Linux, install.sh, published in the
    repo and now the first thing the README offers:
    curl -fsSL .../install.sh | sh. The Gatekeeper quarantine that makes an
    unsigned build open as "damaged" is attached by the browser, not by the
    format — curl never sets it — so an install that never goes through a
    browser opens on the first double click with no xattr -cr. It puts
    Cerberus.app in /Applications on macOS and the AppImage plus a desktop
    entry under ~/.local/share on Linux, re-runs as an update, refuses to swap a
    bundle out from under a running app, and verifies every download against the
    release checksums.

  • SHA256SUMS-<os>.txt on every release, uploaded by the build workflow
    after the installers land. The installer verifies against them, and a manual
    download can now be checked by hand.

  • A zip artifact for macOS alongside the .dmg, which is what the
    installer extracts — a disk image has to be mounted, an archive doesn't.

    Two things the script deliberately doesn't cover. Windows has no
    equivalent: SmartScreen isn't attached by the download the way the macOS
    quarantine is, so nothing short of a signing certificate removes that prompt —
    keep using the .exe. And Intel Macs still aren't built, so the script
    says so and stops rather than installing an Apple Silicon build that can't
    run. Both are unchanged from before, not new limits.

Changed

  • CI actions bumped off the Node 20 runtime — actions/checkout@v7,
    pnpm/action-setup@v6, actions/setup-node@v7, actions/upload-artifact@v7.
    Every run since 0.13.0 warned that these were being forced onto Node 24; that
    substitution is a grace period, not a contract, and the release build is what
    breaks when it ends. Behaviour is unchanged: the caching changes in
    setup-node v5/v6 only affect the automatic path, and this repo names
    cache: pnpm explicitly.
  • The README's install section leads with the script and demotes the direct
    downloads, and the quarantine note now says why it happens and that macOS 15
    moved "Open Anyway" into System Settings. The old right-click → Open it used
    to imply stopped working there.

Full changelog: v0.13.0...v0.14.0

0.13.0

Choose a tag to compare

@github-actions github-actions released this 07 Sep 13:24

Added

  • A keyboard shortcut cheat sheet, opened by the ? button in the tab bar,
    by Cmd+/ (Ctrl+Shift+/ elsewhere), or from Help → Keyboard Shortcuts. The
    leader key also answers Ctrl+B ?. Every binding the app has was reachable
    only from the README until now, which is the wrong place to look them up from
    inside the app. The list is built per platform, so nobody reads a Cmd row on
    Windows.

  • Cerberus now asks before leaving processes behind. Closing a pane kills
    its shell, and with it whatever was running in the foreground — that part has
    always worked. What survives is everything detached from the terminal: a
    nohuped build, a disowned job, a dev server whose launching shell already
    exited. Those used to keep running with nothing left on screen to say so.

    On quit the panes are inventoried before their ptys are killed, and anything
    from that inventory still alive a moment later is listed by name with the
    choice to terminate it or leave it running. A tick box records the answer;
    Settings → Leftover processes on quit changes it back to asking. A process
    that deliberately left its terminal — setsid, a double-forked daemon — is
    not listed, on purpose: it is not the terminal's to kill.

    The Windows path (PowerShell inventory, taskkill /T /F) is implemented and
    unit-tested but, like the rest of the Windows support, has not been exercised
    on real hardware.

Fixed

  • The close button of a renamed tab now parks at the right edge of the chip
    instead of sitting against the label.

Full changelog: v0.12.0...v0.13.0

0.12.0

Choose a tag to compare

@github-actions github-actions released this 08 Aug 21:26

Added

  • Right-click a pane for the operations you'd otherwise go up to the header
    strip for: clear the pane's buffer, star or unstar its directory, jump to
    another favourite, close the pane. The header is 26 pixels tall and sits at
    the top of a pane you're usually working at the bottom of; this puts the same
    four things under the pointer. The star entry knows whether the directory is
    already a favourite and offers the opposite. Follower panes, which tail a log
    and have no shell to cd, get the clear and close entries only.

    Clearing wipes the pane's scrollback, the way iTerm's Clear Buffer does. The
    shell running inside is not touched and does not notice.

    There is no Paste entry, though an early cut had one backed by a list of
    recent copies. Keeping such a list honest means polling the system clipboard,
    which captures whatever you copy anywhere on the machine — a password manager
    included — for the sake of a shortcut Cmd+V already covers.

Full changelog: v0.11.0...v0.12.0