Skip to content

Releases: zypher-systems/Reeve

Reeve v0.7.1

Choose a tag to compare

@github-actions github-actions released this 19 Oct 19:53
ae325e3

Critical fix. On any machine where Reeve has been used for a while, every tool call can start failing
with io: stream did not contain valid UTF-8, whatever the model. Update as soon as you can.

Update

reeve update

If your Reeve already shows the error, reeve update installs 0.7.1 and then reports the same error,
because it writes its receipt after the install, with the old code. The update did happen: reeve --version says 0.7.1. Restart the observer yourself, since the failed command skipped that step:

systemctl --user restart reeved

On 0.4.0 or earlier, run the installer once more instead:

curl -fsSL https://raw.githubusercontent.com/zypher-systems/reeve/main/install.sh | sh

Fixed

  • Tool calls failing with "stream did not contain valid UTF-8". Before each action Reeve writes a
    receipt that links to the one before it, and it finds that one by reading the last 64 KiB of the month's
    receipt log. Once the log had grown past that, a read could start in the middle of a character, such
    as an em dash in an earlier command, and the receipt couldn't be written. Reeve doesn't act without a
    receipt, so the call stopped, and since nothing new was written the log stayed the same and every call
    after it failed too, in conversations, standing orders and the observer's drafts alike. Reeve now reads
    that tail as bytes and decodes only the last line, which always starts on a character.

Your receipts were never damaged: the log reads and verifies as before, and the next action continues the
chain where it stopped.

Nothing else changed.

Reeve v0.7.0

Choose a tag to compare

@github-actions github-actions released this 11 Oct 10:24
1d82310

Debian and Ubuntu, and a fresh session without closing Reeve.

Update

reeve update

On 0.4.0 or earlier, run the installer once more instead:

curl -fsSL https://raw.githubusercontent.com/zypher-systems/reeve/main/install.sh | sh

On Debian and Ubuntu, that same installer is the way in: the binaries are static, so they run on any
release. There's no .deb yet.

New

  • Debian and its family (Ubuntu, Mint, Raspberry Pi OS): the package tools speak apt-get, and the
    same promise holds as on Fedora and Arch: every package change made through them can be taken back.
    • Undo. The receipt records what dpkg logged while the command ran (installed, upgraded, removed,
      with versions). Undo is one apt-get that puts the old versions back from /var/cache/apt/archives
      and removes what was new. It's simulated first (apt-get -s): if apt can't resolve it, or the undo
      would also remove or change a package the receipt never touched, it's refused and nothing changes. A
      version the cache no longer has is asked for by name; if the repos don't carry it either, apt says so.
    • Installs and upgrades run apt-get update first and keep a config file you edited rather than
      stopping at a prompt. An empty upgrade is apt-get upgrade --with-new-pkgs: nothing is removed, and
      what would need a removal is held back and listed. pkg_remove is apt-get remove: config files
      stay, and nothing else goes along.
    • The floor knows Debian: libc6, dpkg, apt, systemd-sysv, the bootloader packages, the
      running kernel's linux-image, kernel packages named by a pattern, install foo- as a removal,
      --allow-remove-essential (as a flag or an -o config item), and dpkg's --force-depends /
      --force-all when removing (as a flag, a comma list, a Dpkg::Options value, or DPKG_FORCE) all
      take a typed yes, in every mode.
    • reeved says a reboot is pending when a newer kernel package is installed, when the running
      kernel was rebuilt under the same name, or when /var/run/reboot-required is set, and reports
      security updates from apt. The state of the machine (/report) reads dpkg's log for what changed.
    • needrestart lists the services an upgrade left on old libraries instead of restarting them on its
      own. Ask Reeve to restart them: each is its own approved, undoable action.
  • ctrl+n: a fresh session. The chat clears and Reeve forgets the conversation; receipts, memory,
    findings, and the board stay. /new does the same, now also before a model is connected. For leaving
    Reeve open as a dashboard between tasks.

Changed

  • sys_info reports AppArmor beside SELinux, and whether /var/run/reboot-required is set.
  • The shell's environment sets APT_LISTCHANGES_FRONTEND=none and NEEDRESTART_MODE=l, so apt never
    waits on a pager or restarts services behind your back.
  • The policy classifies apt-get, apt, aptitude, dpkg, apt-mark, dpkg-reconfigure,
    update-alternatives, needrestart, unattended-upgrade, and add-apt-repository; apt-cache,
    apt-config, dpkg-query, and debsums are reads, and apt-get -s makes anything a read.

Heads up

  • Undo on Debian needs the old packages in apt's cache. apt-get keeps them; apt (the friendly
    command) deletes them after each install, and apt-get clean empties the cache. When one is missing,
    Reeve asks the repos for that version, which works until the next point release.
  • After an undo, a dependency that was marked automatic comes back marked manual, so autoremove won't
    offer it later. pkg_list user shows it.
  • pkg_list updates is only as fresh as the last apt-get update. pkg_upgrade and pkg_install
    refresh the lists first.
  • Tested live in Debian 12 (apt 2.6) and Debian 13 (apt 3.0) containers: install, remove, upgrade, undo
    both ways, the refusal, the cache miss, and a failed install. Not yet run on a real server, on Ubuntu,
    or on a multi-arch system.

Reeve v0.6.1

Choose a tag to compare

@github-actions github-actions released this 02 Oct 04:49
4c964a6

A fix for package undo on Arch.

Update

reeve update

On 0.4.0 or earlier, run the installer once more instead:

curl -fsSL https://raw.githubusercontent.com/zypher-systems/reeve/main/install.sh | sh

Fixed

  • Undoing a package that replaced another, on Arch. That undo needs its two steps in the other
    order: pacman refuses the first try, nothing changes, and Reeve runs the second. On a machine where
    sudo prints a warning on every call (sudo: unable to resolve host …), Reeve took the warning for sudo
    saying no and stopped after the first try, so the undo failed every time. Reeve now goes by pacman's
    own log, in any language: if pacman started and changed nothing, the other order runs; if sudo never
    let it start, the undo stops and you aren't asked for the password again.

Nothing else changed, and nothing on Fedora.

Reeve v0.6.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 14:26
6729b05

Arch and Omarchy, and skills: jobs done your way, by name.

Update

reeve update

On 0.4.0 or earlier, run the installer once more instead:

curl -fsSL https://raw.githubusercontent.com/zypher-systems/reeve/main/install.sh | sh

New

  • Arch, as safe as Fedora. Package changes can be undone. pacman has no transaction ids, so the
    receipt records what pacman logged (installed, upgraded, removed, with versions), and undo puts the old
    versions back from pacman's cache and removes what was new, in whichever order pacman accepts.
  • The AUR, on your word. A package the repos don't have is built with paru or yay. The approval card
    shows its PKGBUILD, and names any install script it runs as root.
    • You're asked every time: YOLO and session yeses never cover an AUR build, and standing orders can't
      do one. A raw paru -S or yay typed through the shell is treated the same.
    • A system upgrade stays pacman -Syu. AUR updates are listed apart, with aur:, and rebuilt by name.
  • snap-pac. Where it's installed, pacman already snapshots every transaction, so Reeve adds no pair of
    its own and records snap-pac's on the receipt.
  • reeved on Arch says a reboot is pending when the running kernel's modules are gone, and reports
    security updates from arch-audit when it's installed.
  • Omarchy's theme. On Omarchy, Reeve takes the current theme and follows omarchy-theme-set while it
    runs, light themes included. A theme of your own goes in ~/.reeve/themes/<name>.toml, with the keys of
    Omarchy's colors.toml.
  • Skills. A skill is a job you want done your way, saved by name in ~/.reeve/skills/<id>.md: a
    one-line description and the steps.
    • Run one with /id (what you type after it goes along), from ⌃K, or with ⏎ on the new skills tab of
      F8 memory. Reeve also uses one when what you ask clearly matches its description, and says so.
    • Make one by saying "save that as a skill" after Reeve does something, or with n on the skills tab.
      The card shows the whole text, and you're asked every time.
    • Three starters are written the first time Reeve runs: tidy-downloads, update-everything, and
      why-slow. Delete them and they stay deleted.
    • A standing order can use a skill: "every Sunday, use the tidy-downloads skill".

Changed

  • The default theme is auto: Omarchy's on Omarchy, slate everywhere else. A theme you set stays.
  • Package search and the update list on Arch include the AUR when paru or yay is installed.
  • A package command that fails partway still records what it changed, so it can be undone.
  • The slash palette lists your skills after the commands.
  • A skill edited in your editor (e on the skills tab) leaves a receipt, so F4 can undo it.

Heads up

  • A skill grants nothing: each step still asks the way it always would. Writing into ~/.reeve/skills
    any other way than "save that as a skill" or your own editor needs a typed yes.
  • Undo on Arch needs the old packages in pacman's cache. If paccache or pacman -Sc removed one, undo
    names it and changes nothing.
  • Undo on Arch is two pacman transactions. Where neither can go first, it's refused before anything
    changes. If it stops between the two, the failed undo's own receipt takes back the half that ran.
  • The card shows an AUR package's PKGBUILD, not the install script or patches beside it.
  • On Arch, pacman, its undo, and yay were tested live in a container. paru, snap-pac, and following a
    running Omarchy's theme have unit tests but haven't run on a real system yet.
  • A skill named like a slash command (update) isn't in the slash palette; it's in ⌃K and F8.

Reeve v0.5.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 01:55
f067463

Reeve tells you when a new version is out, and installs it with one command.

Update

curl -fsSL https://raw.githubusercontent.com/zypher-systems/reeve/main/install.sh | sh

This is the last time you need that line for an update: from 0.5.0 on, reeve update does it.

New

  • A tag for new versions. reeved asks GitHub for the latest release a minute after it starts and
    every 12 hours. When a newer one is out, the header shows ↑ <version> next to reeved's status.
    /update says what's out, links the release notes, and gives the command, and ⌃K lists it at the
    top. There's no popup.

    • If reeved isn't running, Reeve asks when you open it, at most once a day.
    • [updates] check = false in config.toml turns the checks off.
    • After an update, a window that's still on the old version says restart for <version>.
  • reeve update. It installs the newest release the way Reeve was installed:

    • With install.sh: it downloads the release, checks it against the release's SHA256SUMS, and
      runs that release's own installer over your copy, using sudo only for a system install.
    • From the release RPM: it checks the RPM the same way, shows the sudo dnf upgrade it will run,
      and runs it when you say yes.
    • From pacman: it hands over to your AUR helper.
    • Built from source: it says how to rebuild instead.

    It restarts reeved when reeved runs the copy it just replaced, and it leaves a receipt every time,
    failures included. --check only says what's out, --version v0.5.0 installs a particular release,
    and --rollback goes back to the version the last update replaced, from its own release, checked the
    same way.

  • What 1.0 means. The design now lists what has to be true before Reeve is 1.0, and what's done
    so far (design.md, §14).

Changed

  • install.sh over an existing install says updated (0.4.0 → 0.5.0) and skips the first-install
    notes.
  • reeve doctor says whether a newer release is out.

Heads up

  • The check is one request to GitHub every 12 hours, with reeve/<version> as the user agent.
    Nothing else is sent.
  • SHA256SUMS comes from the same release as the files. It catches a corrupted download or a bad
    mirror, not a compromised release.
  • A copy of Reeve somewhere no installer puts it (not in a bin/ folder) isn't replaced; reeve update says so and stops.

Reeve v0.4.0

Choose a tag to compare

@github-actions github-actions released this 30 Sep 04:02

Standing orders by asking: tell Reeve to do something every so often, and it keeps doing it.

Update

curl -fsSL https://raw.githubusercontent.com/zypher-systems/reeve/main/install.sh | sh

New

  • Ask for an order. Say "clear my thumbnail cache every Sunday if it's over 500 MB" or "whenever the
    disk fills up, vacuum the journal". Reeve looks first, then writes a standing order and asks you once.
    The approval card shows it in plain words: when it runs, what it does, the exact commands and files it
    may change, and the most it spends a run and a day. ⏎ approves it and it's on; reeved runs it from
    then on. Ask the same way to change, pause, or delete one.
    • Nothing answers that card for you: not YOLO, not "yes to the rest", not a session yes.
    • An order can't make another order, and neither can the drafter.
  • A form for orders. n in F7 orders opens one, in five sections (what, when, what it may do, limits,
    after), with a line of help under every field and a live What it will do beside it.
    • Start blank or from an example; pick a schedule from choices (every day, every week, every few hours
      or minutes) instead of writing one.
    • Tick what reeved finds that should start a run, and the kinds of change it may make, in plain words.
    • ctrl+s saves, and points to anything missing first. e edits an order in the same form; E opens
      its file in $EDITOR.
  • Undo for orders. Saving, turning an order on or off, deleting one, and editing it in $EDITOR each
    leave a receipt with the file as it was. u in F7 undoes the last change; F4 activity has them all.

Changed

  • Saving an order changes only what you changed. Comments, keys Reeve doesn't know, and edits made to
    the file while the form was open stay. If the same field changed in both places, the form says so, and a
    second ctrl+s keeps yours.
  • Limits follow the schedule. "Every 30 minutes" gets 48 runs a day, a little under 30 minutes apart.
    Before, the default limits (4 a day, 6 hours apart) quietly slowed a frequent schedule down; the form and
    the card now say when limits would.
  • Deleting an order can be undone, and a new order never replaces another.
  • The examples are written the first time you open F7, once. Delete them and they stay deleted
    (reeve orders examples writes them again).
  • Turning an order on or off keeps the rest of its line, comment included.

Heads up

  • Orders are run by reeved, not cron: it checks every 10 seconds. It's a systemd user service, so it runs
    while you're logged in (a locked screen counts), and a daily or weekly run missed while the machine was
    off runs when reeved next starts. Start it in /observer, or with reeve daemon install.
  • An order's root commands still need a sudoers rule, since nobody's there to type a password. s in F7
    shows the exact lines.
  • reeve undo of a change to an order is on the floor (a typed yes), like writing the file directly.
  • Closing the form with changes keeps it until Reeve quits: n (or e on the same order) brings it back.

Reeve v0.3.2

Choose a tag to compare

@github-actions github-actions released this 29 Sep 18:12

Reeve asks less: reading never asks, scratch files are free, and one yes can cover a whole request.

Update

curl -fsSL https://raw.githubusercontent.com/zypher-systems/reeve/main/install.sh | sh

Changed

  • Reading never asks. Reeve reads a command the way the shell will run it:
    • if, for … do … done, case, functions, and builtins like cd, export, read, and [[ are
      structure, not unknown programs.
    • awk and sed programs are read. Printing and substituting run at once; an awk program that writes a
      file, pipes to a command, or calls system(), a sed w, e, or -i, and scripts Reeve can't see
      (-f) still ask.
    • tool --help and tool --version ask nothing, and neither do reeve's own read-only commands or
      udevadm info and abrt-cli list.
  • Scratch is free. Each session has its own folder, ~/.reeve/scratch/<session> ($REEVE_SCRATCH in
    every command), and Reeve is told to keep intermediate files there. Writing there, or creating a new file
    in /tmp, never asks. Folders are cleared after a week.
  • One yes can cover more. On an approval card:
    • a is yes to the rest of this request: every other change to your files runs until Reeve finishes
      answering you. (Inside a verified change, a is still yes to the rest of the change.)
    • s allows this kind of change for the session: writes in ~/Documents, deletes in ~/Downloads,
      or runs flatpak, not only the exact same command. The card says which.

Replayed against real receipts, 22 shell commands that asked became 6. Asking for a list of installed
packages written to a Markdown file now asks once, for the file.

New

  • [approvals] undoable, off by default. Set it to true in ~/.reeve/config.toml and changes Reeve
    can undo (file writes, edits, moves, and deletes it keeps a copy of) run without asking, each with its
    undo in the chat. Shell changes, which can't be undone, still ask. The top bar shows tiered · ↶ auto.

Fixed

  • A verified change's checks must only read; one that writes a new file in /tmp or in scratch is
    refused too. (0.3.1 was never published: its tests caught this.)

Heads up

  • a used to mean "allow for this session"; that's s now. Nothing changes for root, system files,
    packages, or services: they ask every time, and the floor still needs a typed yes.
  • Standing orders and the drafter still treat scratch and /tmp writes as writes.

Reeve v0.3.1

Choose a tag to compare

@github-actions github-actions released this 29 Sep 18:14

Superseded by 0.3.2. 0.3.1 failed its CI tests; 0.3.2 has the same changes, plus a fix. Install 0.3.2 or later.

Reeve asks less: reading never asks, scratch files are free, and one yes can cover a whole request.

Update

curl -fsSL https://raw.githubusercontent.com/zypher-systems/reeve/main/install.sh | sh

Changed

  • Reading never asks. Reeve reads a command the way the shell will run it:
    • if, for … do … done, case, functions, and builtins like cd, export, read, and [[ are
      structure, not unknown programs.
    • awk and sed programs are read. Printing and substituting run at once; an awk program that writes a
      file, pipes to a command, or calls system(), a sed w, e, or -i, and scripts Reeve can't see
      (-f) still ask.
    • tool --help and tool --version ask nothing, and neither do reeve's own read-only commands or
      udevadm info and abrt-cli list.
  • Scratch is free. Each session has its own folder, ~/.reeve/scratch/<session> ($REEVE_SCRATCH in
    every command), and Reeve is told to keep intermediate files there. Writing there, or creating a new file
    in /tmp, never asks. Folders are cleared after a week.
  • One yes can cover more. On an approval card:
    • a is yes to the rest of this request: every other change to your files runs until Reeve finishes
      answering you. (Inside a verified change, a is still yes to the rest of the change.)
    • s allows this kind of change for the session: writes in ~/Documents, deletes in ~/Downloads,
      or runs flatpak, not only the exact same command. The card says which.

Replayed against real receipts, 22 shell commands that asked became 6. Asking for a list of installed
packages written to a Markdown file now asks once, for the file.

New

  • [approvals] undoable, off by default. Set it to true in ~/.reeve/config.toml and changes Reeve
    can undo (file writes, edits, moves, and deletes it keeps a copy of) run without asking, each with its
    undo in the chat. Shell changes, which can't be undone, still ask. The top bar shows tiered · ↶ auto.

Heads up

  • a used to mean "allow for this session"; that's s now. Nothing changes for root, system files,
    packages, or services: they ask every time, and the floor still needs a typed yes.
  • Standing orders and the drafter still treat scratch and /tmp writes as writes.

Reeve v0.3.0

Choose a tag to compare

@github-actions github-actions released this 29 Sep 02:24

A new TUI: the whole machine on one board, and nothing useful a screen away.

Update

curl -fsSL https://raw.githubusercontent.com/zypher-systems/reeve/main/install.sh | sh

New

  • The board. Home is eight tiles, one per function key:
    • F1 needs you: the approval asking now, with its keys, then the fixes the drafter wrote while you
      were away.
    • F2 health: CPU over the last day, memory, swap, temperature, network, and disks.
    • F3 findings, F4 activity (every receipt), and F5 spend (today by role and by hour).
    • F6 changed: packages, kernels, /etc, and services.
    • F7 orders and F8 memory.
  • Open a tile with its F-key or a click. It takes the main area: a list and, beside it, the selected
    item in detail. The other seven fold into a strip along the top that keeps their numbers live.
    esc goes back to where you were.
  • F1 needs you puts everything waiting on you in one queue: the approval asking now, the drafted
    fixes, and a kernel waiting for a reboot. ⏎ answers or runs the one selected.
  • F4 activity shows every receipt full screen: what ran, its result, whether it can be undone, and its
    place in the hash chain. u undoes it, v verifies the chain.
  • F6 changed lists what changed on the machine: package versions, the kernel, /etc files (with
    Reeve's own marked), and services.
  • ? on any tile asks Reeve about what's selected. The question says what it's about.
  • ctrl+k and the other panels dim what's behind them.

Changed

  • The chat opens when you send something, or with ↑ from the board. It's the same timeline as
    before; tool results now line up on the right instead of trailing a dotted line.
  • Approvals: on the board, an approval waits in F1 needs you, and ⏎ a n answer it from there.
    In the chat, it asks in the chat as before.
  • The default theme is slate (cool near-black, filled tiles). [ui] theme = "ink" in
    ~/.reeve/config.toml brings back 0.2.0's warm charcoal; "brass" is the original.
  • Keys: F1…F8 open the tiles (was F1…F6 for tabs). tab / shift+tab walk the board and each
    tile. ^r opens F4 activity.

Heads up

  • Tiles are drawn with half-block characters, which Konsole, kitty, foot, and most terminals draw edge to
    edge. With 16 colors or none, tiles get rounded borders instead.
  • On a narrower terminal (under about 110 columns) the board uses two columns. Any tile that doesn't fit
    still opens with its F-key.

Reeve v0.2.0

Choose a tag to compare

@github-actions github-actions released this 29 Sep 00:33

A new TUI: everything Reeve did, and what it cost, on one timeline.

Update

curl -fsSL https://raw.githubusercontent.com/zypher-systems/reeve/main/install.sh | sh

New

  • The ledger. Home is one timeline of the conversation and everything Reeve did:

    • tool calls branch off Reeve's replies, with their result and receipt number;
    • a verified change is a bracket around its steps, closing on "verified · kept" or "failed · rolled back",
      with each undo inside it;
    • what reeved found and what the drafter drafted while you were here appear as rows;
    • on a wide screen, each model round shows its cost and the session's running total. Tool calls and checks
      cost nothing, and a draft is marked as the drafter's own budget.
  • Tabs. Findings, orders, and memory are full screens now, and two screens are new:

    • F4 spend: a statement by day, week, or month, by role and model. e exports it to CSV, and $ opens
      it from an empty composer.
    • F6 system: vitals over 24 h, 7 d, or 30 d, disks, what changed, and headlines.

    Switch with F1…F6, tab / shift+tab, a click on the tab, or 1…6 on a tab. esc goes back to
    the ledger.

  • ctrl+k searches everything: drafted fixes, findings, orders, memory, receipts, tabs, and commands.
    tab asks Reeve instead.

  • Yes to the rest of the change. On an approval inside a verified change, a approves its remaining
    steps. It ends with the change, and T3 still asks every time.

  • ctrl+l redraws the screen.

Changed

  • The default theme is ink (warm charcoal). [ui] theme = "brass" in ~/.reeve/config.toml brings back
    the original navy and brass.
  • The right rail is gone, and ^b with it. Its live numbers are in the line above the tabs and on the
    system tab.

Heads up

  • The ledger shows this session only. On the spend tab, an earlier session points to its report.md.
  • In Konsole, ctrl+shift+k clears the terminal and Reeve can stay blank. ctrl+l brings it back.