Repository navigation
Releases: zypher-systems/Reeve
Release list
Reeve v0.7.1
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 updateIf 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 reevedOn 0.4.0 or earlier, run the installer once more instead:
curl -fsSL https://raw.githubusercontent.com/zypher-systems/reeve/main/install.sh | shFixed
- 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
Debian and Ubuntu, and a fresh session without closing Reeve.
Update
reeve updateOn 0.4.0 or earlier, run the installer once more instead:
curl -fsSL https://raw.githubusercontent.com/zypher-systems/reeve/main/install.sh | shOn 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 oneapt-getthat 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 updatefirst and keep a config file you edited rather than
stopping at a prompt. An empty upgrade isapt-get upgrade --with-new-pkgs: nothing is removed, and
what would need a removal is held back and listed.pkg_removeisapt-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'slinux-image, kernel packages named by a pattern,install foo-as a removal,
--allow-remove-essential(as a flag or an-oconfig item), and dpkg's--force-depends/
--force-allwhen removing (as a flag, a comma list, aDpkg::Optionsvalue, orDPKG_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-requiredis 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.
- Undo. The receipt records what dpkg logged while the command ran (installed, upgraded, removed,
ctrl+n: a fresh session. The chat clears and Reeve forgets the conversation; receipts, memory,
findings, and the board stay./newdoes the same, now also before a model is connected. For leaving
Reeve open as a dashboard between tasks.
Changed
sys_inforeports AppArmor beside SELinux, and whether/var/run/reboot-requiredis set.- The shell's environment sets
APT_LISTCHANGES_FRONTEND=noneandNEEDRESTART_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, andadd-apt-repository;apt-cache,
apt-config,dpkg-query, anddebsumsare reads, andapt-get -smakes anything a read.
Heads up
- Undo on Debian needs the old packages in apt's cache.
apt-getkeeps them;apt(the friendly
command) deletes them after each install, andapt-get cleanempties 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
autoremovewon't
offer it later.pkg_list usershows it. pkg_list updatesis only as fresh as the lastapt-get update.pkg_upgradeandpkg_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
A fix for package undo on Arch.
Update
reeve updateOn 0.4.0 or earlier, run the installer once more instead:
curl -fsSL https://raw.githubusercontent.com/zypher-systems/reeve/main/install.sh | shFixed
- 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
Arch and Omarchy, and skills: jobs done your way, by name.
Update
reeve updateOn 0.4.0 or earlier, run the installer once more instead:
curl -fsSL https://raw.githubusercontent.com/zypher-systems/reeve/main/install.sh | shNew
- 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 rawparu -Soryaytyped through the shell is treated the same. - A system upgrade stays
pacman -Syu. AUR updates are listed apart, withaur:, and rebuilt by name.
- You're asked every time: YOLO and session yeses never cover an AUR build, and standing orders can't
- 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 fromarch-auditwhen it's installed. - Omarchy's theme. On Omarchy, Reeve takes the current theme and follows
omarchy-theme-setwhile it
runs, light themes included. A theme of your own goes in~/.reeve/themes/<name>.toml, with the keys of
Omarchy'scolors.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
non 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".
- Run one with
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 (
eon 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
paccacheorpacman -Scremoved 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
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 | shThis 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.
/updatesays 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 = falseinconfig.tomlturns 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 upgradeit 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.--checkonly says what's out,--version v0.5.0installs a particular release,
and--rollbackgoes back to the version the last update replaced, from its own release, checked the
same way. - With install.sh: it downloads the release, checks it against the release's
-
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 doctorsays 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. SHA256SUMScomes 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 updatesays so and stops.
Reeve v0.4.0
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 | shNew
- 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.
nin 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+ssaves, and points to anything missing first.eedits an order in the same form;Eopens
its file in$EDITOR.
- Start blank or from an example; pick a schedule from choices (every day, every week, every few hours
- Undo for orders. Saving, turning an order on or off, deleting one, and editing it in
$EDITOReach
leave a receipt with the file as it was.uin 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
secondctrl+skeeps 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 exampleswrites 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 withreeve daemon install. - An order's root commands still need a sudoers rule, since nobody's there to type a password.
sin F7
shows the exact lines. reeve undoof 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(oreon the same order) brings it back.
Reeve v0.3.2
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 | shChanged
- Reading never asks. Reeve reads a command the way the shell will run it:
if,for … do … done,case, functions, and builtins likecd,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 callssystem(), a sedw,e, or-i, and scripts Reeve can't see
(-f) still ask. tool --helpandtool --versionask nothing, and neither doreeve's own read-only commands or
udevadm infoandabrt-cli list.
- Scratch is free. Each session has its own folder,
~/.reeve/scratch/<session>($REEVE_SCRATCHin
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:
ais yes to the rest of this request: every other change to your files runs until Reeve finishes
answering you. (Inside a verified change,ais still yes to the rest of the change.)sallows this kind of change for the session: writes in~/Documents, deletes in~/Downloads,
or runsflatpak, 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 totruein~/.reeve/config.tomland 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 showstiered · ↶ auto.
Fixed
- A verified change's checks must only read; one that writes a new file in
/tmpor in scratch is
refused too. (0.3.1 was never published: its tests caught this.)
Heads up
aused to mean "allow for this session"; that'ssnow. Nothing changes for root, system files,
packages, or services: they ask every time, and the floor still needs a typedyes.- Standing orders and the drafter still treat scratch and
/tmpwrites as writes.
Reeve v0.3.1
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 | shChanged
- Reading never asks. Reeve reads a command the way the shell will run it:
if,for … do … done,case, functions, and builtins likecd,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 callssystem(), a sedw,e, or-i, and scripts Reeve can't see
(-f) still ask. tool --helpandtool --versionask nothing, and neither doreeve's own read-only commands or
udevadm infoandabrt-cli list.
- Scratch is free. Each session has its own folder,
~/.reeve/scratch/<session>($REEVE_SCRATCHin
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:
ais yes to the rest of this request: every other change to your files runs until Reeve finishes
answering you. (Inside a verified change,ais still yes to the rest of the change.)sallows this kind of change for the session: writes in~/Documents, deletes in~/Downloads,
or runsflatpak, 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 totruein~/.reeve/config.tomland 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 showstiered · ↶ auto.
Heads up
aused to mean "allow for this session"; that'ssnow. Nothing changes for root, system files,
packages, or services: they ask every time, and the floor still needs a typedyes.- Standing orders and the drafter still treat scratch and
/tmpwrites as writes.
Reeve v0.3.0
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 | shNew
- 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.
- F1 needs you: the approval asking now, with its keys, then the fixes the drafter wrote while you
- 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.
escgoes 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.uundoes it,vverifies the chain. - F6 changed lists what changed on the machine: package versions, the kernel,
/etcfiles (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
⏎ananswer 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.tomlbrings back 0.2.0's warm charcoal;"brass"is the original. - Keys:
F1…F8open the tiles (wasF1…F6for tabs).tab/shift+tabwalk the board and each
tile.^ropens 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
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 | shNew
-
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.
eexports 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, or1…6on a tab.escgoes back to
the ledger. - F4 spend: a statement by day, week, or month, by role and model.
-
ctrl+ksearches everything: drafted fixes, findings, orders, memory, receipts, tabs, and commands.
tabasks Reeve instead. -
Yes to the rest of the change. On an approval inside a verified change,
aapproves its remaining
steps. It ends with the change, and T3 still asks every time. -
ctrl+lredraws the screen.
Changed
- The default theme is ink (warm charcoal).
[ui] theme = "brass"in~/.reeve/config.tomlbrings back
the original navy and brass. - The right rail is gone, and
^bwith 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+kclears the terminal and Reeve can stay blank.ctrl+lbrings it back.