Repository navigation
Releases: hk9890/revier
Release list
v0.24.0
- Action required: revier now needs kitty 0.42 or later. With an older
kitty, a workspace does not open: after 5 seconds, the error says that no
kitty answered and names 0.42. Update kitty. - Workspaces open in a kitty of revier's own. Before, a workspace opened
in the kitty you ran the command in, or, when no kitty answered, in one
revier started with your shell's environment. From the popup it opened in
the popup's kitty. Now revier starts one kitty for every workspace. It has
no window of its own and keeps running after you close the last workspace.
Where systemd runs your session, it runs as the user service
revier-kitty, with your desktop session's environment, so a shell's
activated virtualenv or credentials no longer reach every project. To make
that service read a changedkitty.conf, or use an updated kitty, run
systemctl --user stop revier-kitty. This closes every workspace in it. - The popup has no title bar, and of kitty's keys only copy and paste work
in it. Before, a kitty key in the popup could open a window or a tab
there. Now every other kitty key, revier's and your own included, does
nothing in the popup. - A target can run a command in place of opening a window. Use
[target.command]for a thing that shows in a window you share with other
projects, such as a browser tab group. Before, such a target held revier
for its wait on every press, and a second press did not go home. Now a
press runs the command and waits for it to end. When the command moved the
focus, the next press goes to the project's home while the focus is still
there. The TUI shows the target ascommand. A session, a restore and a
shutdown skip it. - A directory reached through a symlink is now in its project. Before, a
project saved under a path with a symlink, such as~/devlinked
elsewhere, was in no project from a directory with the link resolved, such
as a tmux window.revier agent newand
revier shell newwithout-pthen failed there. revier agent new --resume --paneloutside a workspace warns that it did
not resume. Before, it dropped--resumewithout a word.revier doctornames a terminal key whose agent cannot run outside a
workspace. Withoutside = "agent", in kitty, such a key opens a plain
tab and gives no reason. Now doctor names the key and the fix.
v0.23.0
- Action required:
revier agent newandrevier shell newwithout-p
now fail in a directory that is in no project. Before, the project came
from--dir, else the current directory. If neither was in a project,
revier used the focused window's project, else the last project. So an
agent could start in a project you did not mean. Now the project is the one
that--diris in. Without--dir, it is the one the current directory is
in. A--dirin no project fails, even when you run the command inside a
project. Such a directory is, for example, a worktree outside the project's
directory. The command exits with status 3. Where a script or alias does
this, add-p <project>, for example
revier agent new -p shop --dir ~/dev/shop-wt.--paneldoes not change. revier rename <old> <new>renames a closed project. Before, only the
project screen (alt+e) could rename a project. Now an agent or a script can
do it too. The file, the state and the saved sessions move to the new name.
The command refuses while any part of the project runs, including a launch
that still waits for its window. It also refuses while a window is attached
to the project, or while a host cannot say what runs. Do not move a project
file by hand: the saved sessions keep the old name, and revier no longer
finds the project's open windows.revier agent close <agent>ends one agent. Before, no command ended
one agent, so a script typed/exit, and that worked only for Claude Code.
Now the command closes the agent and returns when it is gone. It closes the
agent's tab, and the shell in that tab, when the agent is in a tab beside
the workspace's own tab. In the workspace's own tab, it closes only the
agent's panel. It refuses while an agent in what it closes isrunningor
inattention, unless you give--force. An opencode agent outside herdr
showsunknown, so the command does not refuse it in a turn. It saves no
session.revier list --agentsprints one row per agent, with its address. Each
row shows the address thatrevier agenttakes, the agent's name, status,
activity, harness and directory. With--json, each agent is one flat
object. Before, you had to build the address fromrevier list --json. An
agent that no target holds has no address, so its row names its project
and panel.revier list --match <word>lists only the projects that a word
finds. The word can be part of a project's name, the name of its
directory, its repository, its name on a link's host or an agent's
activity. Case does not matter. It can also be the full name the harness
gives an agent.--matchtakes no project names. When nothing matches,
the command fails.- A terminal agent key can now start an agent in a window of no
workspace. Before, no value of[terminal] outsidestarted an agent.
Withtab, the agent keys opened the same plain shell tab as the shell
key. Withnone, they did nothing. Nowoutside = "agent"opens a tab in
the window's directory that runs the agent the key asks for. A named
agent's key runs that agent.agent_keyruns the first[[agent]]of
config.toml, and with no[[agent]]it opens a plain tab. An agent whose
commanduses a template opens no tab there, and the error names it. The
shell key still opens a plain tab, andtabandnonedo not change. This
works in kitty and tmux. - In tmux and herdr, a tab opened beside a pane starts in that pane's
directory. Before,revier shell new --panel <id>without--dir, and
the plain tab ofoutside = "tab", did not start in the pane's directory.
In a workspace, the shell tab started in the project's directory. Outside a
workspace, the plain tab started where the runtime put it. Now they start
in the pane's directory, as in kitty. revier listwith an unknown name still lists the names it knows.
Before, one unknown name inrevier list a bstopped the command, and it
printed nothing. Now it lists the known projects. Each unknown name gets a
line on stderr, with "did you mean ...?" when a project name is near. The
exit status is still 1.revier agent waiton a panel with no agent yet waits for the agent to
start. Before, on such an address, for example the one that
revier agent new --no-focusprints,waitfailed at once with "not an
agent panel", and--timeouthad no effect. Now it waits for an agent to
start, within the same--timeout, then for the status. Without
--timeout,waiton a panel where no agent starts waits for good.- The tmux keys open their tab where kitty is also installed. Before,
revier agent new --panel "#{pane_id}"andrevier shell new --panel "#{pane_id}"failed with "no open target holds panel" when kitty was the
first runtime that worked. Now a tmux pane id makes these commands use
tmux, if[hosts] runtimenames tmux beforenoneor you set no list. - On a link, the project's address finds the default agent beside named
agents. Before,<project>and<project>:<target>were ambiguous on a
link when two or more agents ran there, even when all but one were named
agents. Now the address names the default agent, as it does on this
machine. The project's machine must run v0.23.0. This works only for
agents started after the upgrade. - A rename no longer refuses a project whose name is part of
jetbrains-idea, such as "a", "idea" or "jetbrains". Before, the
project screen refused to rename such a project whenrevier newhad
written its file. Now the editor's window class in that file does not block
the rename.
v0.22.0
- Action required: an agent address now has three parts,
<project>:<target>:<panel>, andrevier agent focus --refis removed.
Before,<project>:<panel>failed when two kitty processes held one
project's windows, and some agents had no address that worked. A script that uses<project>:<panel>must use the new form.
The agent pane,revier list --json,revier agent new --no-focusand
every "which agent?" error print it.<project>and<project>:<target>
still name the default agent, now on a link too. Where you used
agent focus --ref, give the address. - Action required: drop
--dirfrom the tmux agent key. If you copied
the tmux binding from the guide, change it to
bind-key A run-shell -b 'revier agent new --panel "#{pane_id}"'. With
--dir, the agent still starts in the worktree. - Action required: an
[[action]]on alt+l must move to another key.
alt+l now opens the logs screen, soconfig.tomlwith an action on it no
longer loads. - A terminal key's agent tab starts in the project. Before, ctrl+shift+z
in an agent that works in a worktree started the new agent in that
worktree, so it could enter no other worktree. A shell tab still starts in
the panel's directory. - A logs screen. alt+l, the new "logs" button in the top bar, or a click
on the footer's error opens a list of this machine's warnings and errors,
newest first. Enter shows a line in full. The footer now names only what
failed; the reason is on the logs screen. - The remote screen lists your machines. Before, alt+r and
revier link
listed every host of~/.ssh/config. Now they list the new[[machine]]
tables ofconfig.toml, so the list is empty until you add a machine:
alt+n on the remote screen adds a host of the ssh configuration, and alt+d
removes one. Both keep the comments inconfig.toml. Each row shows that
machine's revier version, "no revier" or "does not answer". A link to a
machine that is not on the list still works, andrevier doctornames it. - A link shows a link icon. In the project list and on the remote screen,
a link now has the link icon, not the server icon. A host's projects list
the linked ones first. - An agent row shows the agent's name. Under its age, a row in the agent
list and in the project pane shows the name the harness gives the agent,
for Claude Code the name its peer messages use. The pane also shows the
agent's address. An exec probe can report the name in a newnamefield. - revier no longer picks a herdr server it cannot drive. Before, a running
herdr server older than 0.9.5, or one that did not answer, was chosen, and
every key then failed. Now revier goes on to the next runtime of
[hosts] runtime. - herdr: revier finds a panel's program as herdr does. Before, revier
started from a desktop key refused a program that a herdr server started
from a login shell could run, and let through one that herdr could not
find. - A tab whose command exits at once says so. Before, a tab whose only
command exited right after it opened failed with "can't find pane", which
named neither the panel nor its command. - A failed clone says why git failed. Before, the error was only
"exit status 128". A clone onto a terminal now shows git's progress. - del on a project whose window another project holds names that project.
Before, the footer said "nothing of it is open here" while the row showed
the window open. - A config or state file is no longer left broken by a crash during a
write.
v0.21.0
- A restore no longer loses agents to a smaller save. Before, a plain
restore opened the newest save, so after you closed one project, or deleted
a few, it opened only what was left. Now a plain restore, the first entry of
the sessions screen and the start dialog take the newest save of the whole
set: one saved by hand, by a full shutdown, or after a crash. A save made
when you close a project is still listed, and you open it by its id.
revier session listends with the id a plain restore opens. - A crash no longer loses what was open. While the TUI runs, revier
remembers what it shows. When revier ended without a shutdown, for example
because kitty was killed, the next start offers what was open as a
last-seensession.revier session restoreoffers it too. - Named agents. An
[[agent]]inconfig.tomlnames a program that an
agent tab runs, such as a second agent beside Claude Code. Give it akey
for its own terminal key.revier agent new <name>opens one, and a
restore brings it back as that agent, not as the default one. A project
file can change an agent's command or add an agent of its own. revier term installwrites your terminal keys into kitty. It writes
revier.confin kitty's configuration directory and adds oneincludeat
the top ofkitty.conf, also through stow links. You no longer write the
maps by hand. The keys come from the new[terminal]table (shell_key,
agent_key) and from each agent'skey.revier term statusshows them,
andrevier term uninstallremoves them.- A terminal key in a window of no project opens a plain tab. Before,
revier refused the key there. Set[terminal] outside = "none"to make it
do nothing. - A terminal key works in a panel whose directory was removed. Before,
ctrl+shift+t and ctrl+shift+z did nothing in a panel of a deleted worktree,
in kitty and with the tmux keys of the guide. Now the tab opens in the
project. In a worktree that still exists, the new tab still opens in that
worktree. revier stateshows what revier had open at a moment.--at <time>
goes back in time, and--session <id>explains why a save differs from
what was open when it was saved. The record it reads is kept under
revier's state directory.- Shutdown says when it is safe to leave. While the TUI shuts down, it
says to wait, and how many of what it closed are still open. Then it says "Shutdown complete", and
revier shutdownprints "shutdown complete; safe to leave". Every restore in
the TUI now ends on the project list, with the TUI raised. What did not
open is named in the footer.
v0.20.0
- Action required: on GNOME, revier needs
wctl0.16.0 or later. revier
uses GNOME only whenwctlis 0.16.0 or later and a Window Control
extension runs. With an olderwctland no[hosts] window, revier now
runs with no window host and says nothing: no window targets, no raise, no
return home, noplaceand no popup. With[hosts] window = ["gnome"], commands stop with
no configured window host is usable: gnome: wctl X is older than 0.16.0, the oldest revier drives.
To fix it, update the Window Control extension andwctlto 0.16.0 or
later, then log out and in. Then check thatwctl version --jsonshows
wctl0.16.0 or later and anextensionversion. - Action required: a script that reads
revier session listby position
must read NAME from the third column. REASON is now the second column,
after ID, so NAME and every column after it move one place to the right. - herdr is a new runtime host. Before, revier ran workspaces in kitty or
tmux only. Now revier can open each workspace as a herdr workspace, its tabs
as herdr tabs and its panels as panes, and it reads every pane to find
agents. You need herdr 0.9.5 or later on your PATH. revier uses the server
thatherdrwould attach to, and starts it when none runs. The default
runtime order is now kitty, tmux, herdr: a machine with only herdr uses it.
When kitty or tmux is installed, set[hosts] runtime = ["herdr"].
revier open --attachand tab targets work with herdr, andrevier doctor
knows herdr. So thatrevier session restoreresumes the agents and herdr
does not, setresume_agents_on_restore = falseunder[session]in
herdr's ownconfig.toml. Some things do not work with herdr:- A focus moves every terminal that is attached to herdr. Attach one
terminal. - revier does not raise the desktop window that shows herdr, a second press
does not return home on GNOME, andplacedoes nothing. - While you scroll a pane up, the TUI and
revier agent read --screenshow
those lines, not the newest. - When the herdr server starts, for example at the first open after a
reboot, herdr brings its workspaces back as shells that revier does not
know. revier then opens a second workspace or tab. Runherdr, close
those workspaces, then runrevier session restore. - The popup is a kitty window. With herdr and no kitty, run
revierin a
terminal.
- A focus moves every terminal that is attached to herdr. Attach one
- In herdr, agents other than Claude Code show a state. Before, only
Claude Code and agents with a[[probe]]of your own showed a state, and
opencode was alwaysunknown. Now, in herdr, an agent such as Codex, Gemini
or opencode shows the state that herdr detects: working, needs you, idle, or
unknown. A[[probe]]that you declared for that agent still wins. Outside
herdr, opencode still shows no state. - The TUI and
revier shutdownshow each step of a shutdown or a restore
while it runs, and ctrl+c stops between steps. Before, a shutdown or a
restore could run for a minute and showed nothing until it ended: the TUI
showed one line, and the CLI printed one table at the end. A host that hung
on one step looked like a hung revier. Keys and clicks in the TUI still acted
on a half-changed desktop, and ctrl+c killedrevier shutdownor
revier session restorein the middle of a step. Now:- The TUI shows each step of a shutdown, a close or a restore, and its
result. No other key or click does anything until it ends. revier shutdownandrevier session restoreprint one line per step:
its name before the step, its result after it. A hung step is the last
line.- ctrl+c lets the running step finish, then stops. revier counts and lists
the steps it did not reach, and the TUI stays open to show the result. A
restore stopped after its last target saysreturn home cancelled. A save
stopped by ctrl+c writes no incomplete session. An alt+del stopped
during its last close still deletes the entry. - When a step hangs, a second ctrl+c quits at once and also stops the
command that the step waits for, such as kitten, tmux, ssh,wctlor
claude.
- The TUI shows each step of a shutdown, a close or a restore, and its
- After a full shutdown, the next start offers to restore it. Before,
the next start offered nothing, the restore was three keys deep on the
sessions screen, and the TUI stayed open after the shutdown. Now revier
remembers a shutdown of all of every project. The TUI and the popup show the
result for about 1.5 seconds, then quit; any key quits at once. The next
start of the TUI or the popup opens on a dialog, for example
revier was shut down at 18:30., with Restore this session, Pick another
session, and Start fresh (or Esc). A TUI that stays open, or a hidden popup,
whilerevier shutdownruns in another place shows the same dialog at its
next refresh or raise. The offer ends when you open something first, with a
desktop key,revier go,revier openorrevier run, and when
revier session restorestarts. revier does not remember the shutdown, and
the TUI stays open, when:- you shut down one project, or closed with del;
- the shutdown found nothing to close;
- revier could not write what it remembers;
- you opened something while the shutdown ran;
- you stopped it with ctrl+c before its last step. A ctrl+c after its last
step started keeps it.
revier session listshows why each session was saved. Before, a
session without a name showed a dash on the TUI sessions screen and a blank
NAME inrevier session list, and you could not tell the saves of a
shutdown, a project close and a save by hand apart. Now
revier session listhas a REASON column:shutdown,project closedor
saved by hand. The TUI sessions screen shows the reason where a name is
missing. A session that an older revier saved showsunknown. NAME is still
the value thatrevier session restoreaccepts.- The shutdown button moved to the sessions screen. Before, the top line
of the TUI had a shutdown button. Now the sessions screen (alt+s) has the
save and shutdown buttons on its top line, and alt+q there opens the
shutdown. alt+q in the project list still opens it, and Esc goes back to
where you opened it. - A restore no longer brings each window that it opens to the front, and
the TUI comes back to the front when the restore ends. Before, a restore
raised every window that it opened, so the desktop flipped through each
editor and browser, and the last window hid the result of the restore. Now
revier still finds and places each window, but does not raise it. GNOME
itself still shows most new windows over the TUI. A terminal that a restore
opens still gets the focus, so its tabs come up as saved. When the restore
ends (done, failed or cancelled), the TUI or the popup brings its own window
to the front once. A TUI in a terminal that revier does not list stays where
it is. A normal key press still raises the window that it opens. - A
[[probe]]namedopencodenow runs. Before, revier ran its own
opencode probe before your[[probe]]entries, so a[[probe]]named
opencodenever ran. Now the Claude Code probe runs first, then your
[[probe]]entries in file order, then the probes that come with revier. - A press that opens a window, and each step of a restore, end sooner.
Placing each window takes about 150 ms less, and revier finds a new window
sooner. - A new terminal window is placed also when another host does not
answer. Before, when one other host, such as tmux or herdr, could not
list what it runs, revier left the new terminal window where it opened. - A del or alt+del question from before the popup hid no longer answers
itself with your next key. Before, when you pressed del or alt+del in the
popup just before it hid, for example while the window that Enter opened
came up, the popup could hide with the question still open. The next raise
showed that question, and the first key answered it: Enter closed the
project, and after alt+del also deleted the project file. Now a raise drops
a question from before the hide. Press del or alt+del again. When you press
a key, click or turn the wheel before the window comes up, the popup now
stays on the screen. revier open --attachin a tmux pane no longer ends with an error.
Before, in a pane of the tmux server that holds the workspace, the command
switched the pane to the workspace and then printed
sessions should be nested with care, unset $TMUX to force. Now it switches
the pane, prints the workspace, and exits 0. A terminal that you started
from a tmux pane still attaches.
v0.19.0
-
A wrong
[ui]value or[[probe]]inconfig.tomlno longer stops every
command. Before, one such mistake stopped every command that reads the
projects: the TUI, the desktop chords andrevier popup.revier doctor
showed only that one error. The mistake could be a[[probe]]without
nameorexec, an unknownthemeorglyphs, or atrigger_keythat
revier cannot read. Now only the wrong value is affected:- An unknown
themeorglyphsuses its default. - A
[[probe]]withoutnameorexecdoes not run. - A
trigger_keythat revier cannot read stops onlyrevier keys status,
installanduninstall. They do not bind alt+space in its place, and
the TUI help shows no trigger key.
revier doctornames each mistake under theconfig.tomlheading and
exits 1. Correct the value. revier still stops every command when
config.tomlis not valid TOML, or when a value has the wrong type, such as
theme = 3. - An unknown
-
The config screen (alt+c) shows the problems of
config.toml. Before,
the TUI showed none of them. The one warning line on stderr disappeared when
the TUI started, and onlyrevier doctornamed the problems. Now each
problem shows above the rows of the screen, and a long problem wraps. A
problem can be an unknown theme or glyph set, a trigger key that revier
cannot read, an action, shared target or[[status]]that cannot be used,
or a[[probe]]withoutnameorexec. A theme name with a typo now
shows as the default theme, and this screen tells you why. Ifconfig.toml
stops being valid TOML while the TUI runs, the screen shows the path and the
reason the next time you open it. The screen reads the list again when it
opens, after each change you make on it, and when the TUI reads the files
again without an error. When you choose a valid theme on the screen, its
problem goes away. -
An agent whose Claude Code conversation is gone starts empty, and revier
tells you. Claude Code keeps no conversation for an agent that never got a
prompt. It also deletes conversations older thancleanupPeriodDays, which
is 30 days by default. Before, a restore resumed such an agent anyway.
Claude Code stopped at once withNo conversation found with session ID,
the window showed a failed command, and the restore counted the agent as
resumed. Now the agent starts empty in the directory where it worked. The
restore summary adds, for example,2 agents empty: conversation gone. The
sessions screen showsempty: its conversation is gone, also in the plan
before you restore.revier agent new --resume <id>does the same check,
and so does the agent of a linked project when its host runs this version.
Both printrevier: warning: <id> was not resumed (conversation gone)and
then tell you that the agent starts empty. For the agent of a linked
project, only that warning on the host tells you: the restore summary and
the sessions screen still count it as resumed. -
A double click in the TUI opens only the row that you clicked two times.
Before, a refresh between the two clicks could move another project or agent
into the place that you clicked. For example, a project that needs you moved
to the top, or an agent closed and the rows below it moved up. The second
click then opened that other row, which you had clicked only once. This was
also true for the agent and target rows of the pane and for the rows of a
screen. Now a double click counts only when the same project, agent or
target is still in the same place. If the row moves, the second click is a
new single click.
v0.18.0
- Action required: a target with a key cannot be named
popup. The
trigger key, the chord that opensrevier popup(alt+space by default), is
now namedrevier: popup, notrevier: picker. A target that has akey
and is namedpopuporpickeris refused at load, andrevier doctor
names it. Rename the target. Then runrevier keys installonce. It renames
the oldrevier: pickerentry in GNOME Settings and printsrenamedfor
that row.--dry-runshows the rename too. A shortcut that you bound to
revier by hand keeps your name.revier keys status,installand
uninstallname the rowpopup, also in--json("target": "popup",
before"picker"). Change a script that reads the old name. - Action required: a panel
kindmust beagent,shellortool.
Before, revier accepted any value without a message. A typo such as
kind = "agnet"made the panel atool, so a restore did not resume its
conversation, a link did not fill its command, andrevier agent newdid
not copy it. Now revier refuses only that target, andrevier doctor
showstarget "<name>": panel <n> has kind "<value>"; use agent, shell or tool. Correct the value. A panel with nokindis still atool. - Action required: an unknown name in
[hosts]makesrevier doctor
fail. An unknown name inhosts.runtimeorhosts.windowis reported
under theconfig.tomlheading, with the known names, and doctor exits 1.
This also applies to a name after a host that works, or afternone, which
no command reported before. Correct the name or remove it from the list.
Doctor does not check if a host works. - A user guide is on
GitHub. It
has pages for getting started, concepts, the TUI, projects, agents, links,
configuration, CLI commands, troubleshooting, statuses and agent probes. It
also has one page each for kitty, tmux, Ghostty, GNOME, Claude Code and
opencode.revier assist --referencenow prints the configuration, status
and probe pages of the guide, so the assistant also gets the status and
probe formats. - revier sees an agent in a tmux pane that an interpreter runs. Before,
revier showed no agent state for an agent that started as, for example,
node .../bin/claude, and an agent typed into a shell pane showed as
unknown. Now, in tmux as in kitty, the agent shows its state in the TUI,
the agent list and probes, and a session save records it. An external probe
gets the whole command line and the foreground pid of a tmux panel. revier <command> --helpprints that command's usage and exits 0.
-hand-helpdo the same. Before, most commands printed a different
usage text and exited 1, and some were refused or contacted the hosts.
Help opens no window and contacts no host.revier link helpand
revier <family> helpprint the usage.revier helpnow names every
command and flag.revier agent helpsays thatagent promptalso
refuses an agent whose state is unknown, as an opencode agent always is.
For such an agent, useagent send-keys. An unknown flag is reported
once. Each word after--is text, also a word that starts with a dash.- The agent mirror shows the whole screen. v0.17.0 cut Claude Code's
screen above its input box. When Claude Code drew something under the box
or in its place, such as the background-agent selector or the workflow
view, the cut was in the wrong place. Now the mirror shows the agent's
whole screen, the input box included. revier each logprints a command that you can paste into a shell.
Each word of the command and the filter is quoted as a shell reads it.
Before,sh -c 'echo a b; true'showed assh -c echo a b; true, and a
filter that held a single quote showed incorrect quotes.revier session listand the sessions screen count every saved
agent. Before, they counted only agents with a conversation, so a
session could show0 agentsand then restore three. Session files do
not change.- A restore starts a Claude Code agent in the directory where it
worked. Before, a restore started a Claude Code agent that had no
conversation yet in the project directory. An agent with a conversation
resumes it as before. - The tmux host names the command that does not start. Before,
revier openfailed with a raw tmux error such asno such session: $0.
Now alaunchor panel command whose program is not on PATH is refused
before tmux starts, withthe <kind> panel's command "<prog>" is not on PATH, orthe command "<prog>" is not on PATHfor a launch or a panel
with no kind. A command that exits at once gives... command "<cmd>" exited as soon as it started. A program given as a path is not checked in
advance. Install the command, put it on PATH, or correct the command. - A target that no host can open is named in the error.
revier go
printed onlyno host can realize this target. Now the message names the
target, its project and the kind of host that is missing, for example
target "editor" of project "myproj" has only a window realization, and no window host is configured or available. revier doctorgives better advice. In a link project, doctor tells a
target with no realization to add a[target.remote.window]or
[target.remote.runtime]table. Before, it told you to add a
[target.window]table, which a link project refuses. A value of the wrong
type is advised on its type, not on TOML syntax. A refusal such as
action "c" runs nothingprints once, under its name, not two times. A
doctor run that finds problems is no longer written to the log as an
error.
v0.17.0
- alt+a raises the config assistant beside the surface. Before, alt+a
handed the surface's terminal to Claude Code until it exited. Now it raises
revier-config-assistant, a project that revier builds in: Claude Code in a
workspace of its own, briefed to change the configuration and to find what
is wrong with it. Its row has a cog where other rows have a folder. Like any
other project, it shows in the agent list, a saved session restores its
conversation, and a second alt+a raises the same window. It continues the
conversation you held with it last, also the one from the old hand-over. A
second agent there, while the first one runs, starts a new one. It is not
told which project the cursor is on, so name the project. The surface reads the files again when it gets
the focus back. A project file with the same name replaces the built-in
project, and the built-in project comes back when that file goes. Another
machine's built-in project is not offered as a link. With no runtime, alt+a
hands the terminal over as before. When the assistant cannot start, its
window stays open and shows why until you press Enter. - A
[[status]]shows a command's output on the surface. A[[status]]
table inconfig.tomlruns a command and shows what it prints at one of
these places: an end of the rule under the top line, the end of the pane's
first line, or a section of the pane for the selected project. Examples are
an account's usage limits or a CI result. A project file adds its own status
to the pane, or changes a shared one. The command can mark its output as a
warning or as critical. When a run fails, the last answer stays, dimmed.
revier doctornames a table that it refuses.revier assist --reference
prints the format. - The pane shows each tab under the target it opens inside. Before, the
targets were listed in the configuration order, so a tab looked like a window
of its own. Now a tab is drawn on a branch line under its container, and a
glyph marks each window and each container. - The agent mirror is easier to read. A line that is wider than the pane
now continues on the next line at a word, not in the middle of a word, and
keeps the indent of its list item. A rule is shortened to fit the pane.
Claude Code's input box and status lines are left out, so the pane shows more
of the conversation.revier agent read --screenstill prints the whole
screen.
v0.16.0
- The surface no longer keeps a CPU core busy. A TUI or popup left on
the screen used 60 to 70 percent of a core all the time, with or without
the focus. With the focus it now uses about 10 percent. In a terminal
that reports the focus, such as kitty, or tmux withfocus-eventson, a
surface without the focus refreshes every ten seconds, the working
spinner stands still, and the hover does not follow the pointer. When
the focus comes back, it refreshes at once. A launch that is still coming
up keeps the one-second refresh until its window appears, for at most a
minute. - Enter in the popup hides the popup. A press that brings a target or an
agent to the front takes the popup off the screen; the popup key brings
it back with fresh rows. A press that fails leaves the popup on the screen
to show why. If you hide and raise the popup again before a slow launch
lands, the popup stays. - A linked host is no longer asked every second. Before, a linked host
spent a third of a core answering each surface. Now it is asked at most
once in five seconds, and a press, or the focus coming back, asks a host
that answers at once. A host that does not answer is asked less often
after each round it misses, up to once a minute, and a press or the
focus that comes back does not ask it again before then. A round to a
host that stops answering ends after about ten seconds, not after more
than a minute. - A link to the machine revier runs on is left out. The project files
are shared between machines, so a link that one machine writes to another
is read on that other machine too, where it names the machine itself.
There, revier asked itself over ssh every second for what it lists
already. Such a link is now left out of every command on that machine,
by the host's name or by the HostName in~/.ssh/config. Only the part
of a name before the first dot counts, so a link to a machine with the
same short name in another domain is left out too.revier doctornames
each file it skipped.revier linkand alt+r do not offer this machine,
and refuse it as a host. revier linkand alt+r list a host whose~/.ssh/configline uses a
tab. AHostorIncludeline that separated the keyword from its
value with a tab was not read.- A ctrl+shift target key works inside revier in kitty. In a terminal that
reports key disambiguation, such as kitty, pressing ctrl+shift+o in the
surface runs the target bound to it, as the desktop key does outside, and
ctrl+o keeps its own meaning. Before, the press arrived as ctrl+o, so a
target key whose ctrl key the surface used did nothing there. In other
terminals, keys work as before. The help screen and the footer name the
ctrl+shift keys that now work. - With
NO_COLORset, the selected row is bold and a text field shows its
cursor. Colour stays off, for any value ofNO_COLORthat is not empty.
Before, the surface drew no emphasis at all, and the cursor was invisible. - A session saved by v0.3.0 restores without its conversations. It
opens its projects as before but resumes no agent conversation. Renaming
a project that such a session holds rewrites the session, and its
conversations are then gone for good.
v0.15.0
-
Action required:
panelsare on a tab target only. A project file or a
config.tomlwith[[target.runtime.panels]]on a target that has no
insideis refused at load, andrevier doctornames each file with the
fix. Give the target the linetabs = ["agent"]in its[target.runtime],
and move the panels into a new target:[[target]] name = "agent" [target.runtime] inside = "home" # the name of the target the panels were on # the [[target.runtime.panels]] tables go here, as they were
A
diron the target moves with the panels: a tab starts in its owndir.
A machine that a link reaches must have this version and its project files
in this form too, and so must a link file whose home declarespanels. A
link home with a window part and a runtime part that has nolaunchis
refused as well: give the runtime part alaunch, or remove one of the two
parts. A session saved before the change restores after it.revier new
writes the new form, andrevier assist --referenceprints a whole file in
it. -
A workspace opens with a list of tabs.
tabs = ["tickets", "agent"]on
the runtime of the home target is the order, andactive = "agent"is the
tab that has the focus. Each name is a target withinside = "home", which
holdspanelsor alaunch. The key of a listed tab goes to that tab and
opens no second one, also after the first panel of the tab has ended. A
workspace that is open already keeps its tabs as they are.
revier agent new,revier shell new, a save and a restore take the agent
and the shell from the listed tabs, so the conversation in theagenttab
is resumed. A linked project opens with one tab,agent, which holds its
agent and its shell. -
The target form has
tabsandactive. The config screen and the
project screen can make the target that lists its tabs, and change the
order and the tab that has the focus. A target that lists a tab is saved
after the tab exists. -
A refusal on a linked project names a fix that works there. Panels on a
target of a link go into a tab of its home, and panels on the home go into
the tabagent. A link whose home has the nameagentis refused for the
name.revier newis refused beside a shared target namedagentthat is
no tab. The project screen refusestabsandactiveon a link, where it
dropped them with no message. -
The mouse works after an action or a clone. After a key ran an action,
or Enter cloned a missing project, a click did nothing, and a drag selected
text that was lost at once while an agent worked. -
Fast pointer motion no longer types into a filter. Text such as
<35;76;40Mappeared in the project filter with no key pressed, and the
list then matched nothing. -
A raised popup no longer shows the states of the moment it was hidden.
The list stopped refreshing when the pointer was over the popup at the
raise, so a closed project stayed listed as open until the next Esc and
raise. -
The log says how a surface ended when its terminal closed. The
commandline of the process hassignal, and the process exits with 128
plus the number of the signal. Before, a surface whose terminal closed
wrote no line. -
A desktop with no focused window is no error on GNOME.
revier attach
saysno window is focused, where it printed a JSON error, and the popup
key writes noresolve: focused windowwarning to the log. The
popup: launchedline has the id of the window the key was pressed over,
asover, and an empty one when no window had the focus. -
The pane beside the project list shows the terminal of one agent, as the
pane beside the agent list does. The section is headedScreen, follows
the agent each second in its own colours, and the wheel scrolls back
through it. It showed the agent's last message, set again from Markdown,
with the turn above it; both are gone. An agent of any harness is shown
now, and so is an agent of a linked project in a terminal here. -
The pane no longer puts an agent with a message before one without. It
shows the agent that needs you, else one at rest before one working, and
the last to speak among equals. It keeps that agent until another needs you
more, so an agent that speaks does not take the screen from its equal.