Maintenance CLI
These commands inspect, upgrade, repair, clean up, and remove RimZ. Which ones write, and what they reach:
These commands inspect, upgrade, repair, clean up, and remove RimZ. Which ones write, and what they reach:
| Command | Reaches | Writes | Asks first |
|---|---|---|---|
coverage | Nothing: static adapter declarations | Nothing | No |
workspace resolve | One path | Nothing | No |
workspace migrate | One workspace store | Moves and rewrites the store | No |
workspace rotate-events | The current workspace | Archives the event log, prunes old archives | No |
update | The installed binary | Replaces the binary, then reloads | No |
reload | Every live room on the machine | Publishes the new build to each room | No |
sidebar repair | Every live room on the machine | Adds, closes, or replaces sidebar panes | No |
reset | The current workspace's room | Tears the room down, archives its records, rebuilds | Yes |
gc | The current room; --all adds the machine | Removes stale state and landed worktrees; --all also prunes dead stores | No |
uninstall | The whole machine | Removes hooks, rooms, state, binaries | Yes |
ping | Nothing | Nothing | No |
"The current workspace" is the one the current directory resolves to, or --root; gc also follows the running room's identity (room resolution). All of these take the global flags. Configuring the machine is rimz config, and the workflows for a stuck room, a stale pane, and full removal are in the troubleshooting guide.
Check adapter coverage
rimz coverage [--wiring] [--json]rimz coverage prints what RimZ can observe for each agent, read from the adapters' own declarations. It needs no room and writes nothing. The default report is one grid, WHAT EACH AGENT GIVES YOU, with an agent per row and the six user capabilities as columns:
$ rimz coverage
RimZ coverage
WHAT EACH AGENT GIVES YOU
AGENT state live history account ask subagents
claude ✓ ✓ ✓ ✓ ✓ ✓
codex ✓ ✓ ✓ ✓ ✓ ✓
amp ✓ ! ! ! ✓ ✗
…
legend ✓ full ! partial ✗ unsupported
DETAIL
CAPABILITY DETAIL
claude
state ✓ the card opens at session start, follows every turn, and clears when Claude exits
…Under each grid, DETAIL repeats every cell for every agent with its reason: what a full cell covers, what a partial cell shows and where it stops, and why an unsupported cell is empty. Valid agent plugins appear after the built-in agents. What each capability and mark means for your work is in agent support.
| Flag | Effect |
|---|---|
--wiring | Add two mechanism grids after the capability grid, each with its own DETAIL: WIRING — INTEGRATION CONCERNS (legend ✓ wired, ! partial, ✗ unsupported) and WIRING — LIFECYCLE HOOKS (legend ✓ native, ! derived, ✗ absent). |
--json | Print one JSON document instead. capabilities is always present; coverage (concerns) and hooks_matrix (lifecycle hooks) appear only with --wiring. |
Each JSON matrix is {"agents": [...], "rows": [...]}. A row is one capability, concern, or signal: {"label", "cells"}, with one cell per entry in agents, in the same order. A cell is {"state", "detail"}, where state is ok, partial, or absent.
Resolve a workspace
rimz workspace resolve [PATH]resolve prints, as JSON, the workspace that PATH (default .) belongs to. It writes nothing, so a script can call it to learn which room a directory maps to before running other tools.
$ rimz workspace resolve
{
"workspace_id": "ws_f89e49906df0621ad2765112",
"project_root": "/home/me/code/query-engine",
"cwd_project_root": "/home/me/code/query-engine",
"root_class": "repo",
"worktree_root": "/home/me/code/query-engine-worktrees/docs",
"worktree_branch": "docs",
"session_name": "query-engine-f89e",
"mux_hint": null
}| Field | Meaning |
|---|---|
workspace_id | The workspace's stable ID, derived from project_root. |
project_root | The root the room belongs to. Every worktree of a repository shares its main checkout's root. |
cwd_project_root | The main repository root of PATH's own checkout, or the --root repository. null when neither is a Git repository. |
root_class | repo (a Git repository), marker (a directory with a project marker), or directory (any other directory). |
worktree_root | The checkout PATH sits in: the main checkout or a linked worktree. |
worktree_branch | The branch checked out there, or null. |
session_name | The Zellij or tmux session name the room uses. |
mux_hint | Always null from this command. |
Move a store after the project moves
rimz workspace migrate <OLD_ROOT> <NEW_ROOT>The workspace ID is derived from the project root, so a project moved on disk resolves to a new, empty workspace. migrate carries the old store over: it moves the store directory to the new ID and rewrites the workspace identity in its events, queued messages, and workspace record. OLD_ROOT may be a path that no longer exists. Run it before starting a room in the new location.
$ rimz workspace migrate ~/code/query-engine ~/src/query-engine
migrated ws_f89e49906df0621ad2765112 -> ws_0b7d3c1e5a9f2468ace13579
old root: /home/me/code/query-engine
new root: /home/me/src/query-engine
messages: 12
events: 4810It refuses, and changes nothing, when:
| Condition | Error |
|---|---|
NEW_ROOT does not exist | new workspace root does not exist: PATH |
No store exists for OLD_ROOT | workspace store ID not found at PATH |
A store already exists for NEW_ROOT | destination workspace store ID already exists at PATH |
Rotate the event log
rimz workspace rotate-events [--max-bytes <SIZE>] [--archive-older-than <DURATION>]rotate-events archives the current workspace's active event log once it reaches --max-bytes, and a fresh log starts with the next event. Rotation keeps the prior-agent carryover, so the sidebar and a later rebirth still know the room's agents. The command then deletes archives older than --archive-older-than. RimZ also rotates on its own when the log reaches 64 MiB, so you rarely need this by hand.
| Flag | Default | Effect |
|---|---|---|
--max-bytes <SIZE> | 64MiB | Rotate only when the active log is at least this big. 0 rotates any non-empty log; an empty log never rotates. |
--archive-older-than <DURATION> | 14d | Delete archives older than this. Units: s, m, h, d (durations). |
SIZE is an integer with an optional unit and no space: none or B for bytes, K or KB, M or MB, G or GB for powers of 1000, and KiB, MiB, GiB for powers of 1024.
The output opens with event-log rotated (then the bytes rotated, the archive path, and the carryover agent count) or event-log rotation skipped (then the current size and the threshold). Both end with the number of archives and bytes pruned. How rotation and carryover work is in store internals.
Update RimZ
rimz update [--version <TAG>]update upgrades RimZ through the method that installed the running binary:
| Installed with | What update runs |
|---|---|
Homebrew (the binary lives under a Cellar directory) | brew update, then brew upgrade rimio-ai/rimz/rimz. |
| Cargo (the binary is in Cargo's bin directory) | cargo install --locked rimz. A source build (a version containing +g) prints a warning that the crates.io release will replace it. |
| The install script or a downloaded binary | Resolves the latest release, downloads the archive for this platform, verifies it against the release's SHA256SUMS, runs the extracted binary's --version, and atomically replaces the running binary in place. If the running version already matches, it prints rimz VERSION is up to date. and stops. |
When the binary changed, update runs the new build's rimz reload, so live sidebars and dashboards move to it. If that reload fails, update exits 1 with RimZ updated, but `PATH` reload exited with STATUS; rerun `rimz reload` .
--version <TAG> picks the release:
| Install | Accepted tags |
|---|---|
| Script or download | Any release tag, such as v0.3.1 or an older tag to roll back, or the rolling latest-main build. |
| Cargo | Numbered tags only. v0.3 becomes 0.3.0; latest-main is refused with Cargo cannot install release tag `latest-main`; use a version tag such as `v0.3.1` . |
| Homebrew | None. --version fails with Homebrew cannot pin RimZ to `TAG`; reinstall the standalone build with `RIMZ_VERSION=TAG` or let `brew upgrade rimio-ai/rimz/rimz` select the release. |
A script or downloaded install stops with a fix in these cases:
| Condition | Error |
|---|---|
| No prebuilt archive for this platform (prebuilts cover Linux x86_64 with glibc and macOS on Apple silicon and Intel) | no prebuilt RimZ release exists for this target; install with: cargo install --locked rimz |
| The binary's directory is not writable | RimZ install directory DIR is not writable; rerun with: sudo rimz update |
| The checksum does not match | checksum verification failed for `ARCHIVE`; delete any proxy cache and retry |
Installing and choosing a method is covered in the installation guide.
Reload running sidebars
rimz reload [--repair]reload moves every running RimZ surface on the machine to the binary you invoke, without changing any pane. It runs from any directory, inside or outside a room. One run:
- publishes the invoking build as the target of every live room, so each room's sidebars restart onto it in place;
- stops each live room's running hook drainer after its current frame, then nudges a replacement on the recorded build; a room with no running drainer starts none;
- upgrades a room's Zellij presence plugin when its build or configuration differs, and leaves a current one alone;
- restarts held
rimz stats --refreshdashboards on the new build; - reaps sidebar processes whose pane is gone, and sweeps leftover processes and runtime files from stopped sessions;
- restarts the shared web daemon if it is running. A stopped daemon stays stopped, and a failed restart prints a warning without failing the reload.
It never starts a stopped session, creates or closes a pane, or touches an agent process. If the new build fails to start, each sidebar keeps running on its old build.
A drainer that cannot stop within the bounded wait keeps its old build until it goes idle or a later reload succeeds. Reload reports it and continues with the other surfaces and rooms. Pending hooks stay queued across a restart.
A room whose sidebar pane was closed has nothing to reload, so the report counts it and names the verb that fixes it: 1 room with no sidebar reporting in; mount or replace it with `rimz reload --repair`. That room still counts as a live session, so No running sidebars to reload. never covers this case. The same line covers a sidebar running a protocol this build cannot signal, which repair replaces rather than mounts. --repair, or rimz sidebar repair on its own, is what does it; with --repair already passed the line is left out, since the repair runs next.
The report prints a line per non-zero count:
| Line | Meaning |
|---|---|
Reloaded N sidebars across N sessions. | Sidebars that moved to the new build. |
N sidebars already on the current build. | Nothing to do there. |
N sidebars still converging; their supervisors will retry from the recorded build automatically. | These sidebars did not confirm within the report window. They keep retrying on their own; no repair is needed. |
N sidebars could not be build-verified. | RimZ could not read which build these sidebars run. |
Upgraded N presence plugins., Reconciled N presence plugins., N presence plugins already current. | The Zellij presence plugin in each room. |
Reloaded N stats dashboards. | Held dashboards restarted. |
Restarted N hook drainers onto the current build. | Running drainers stopped at a frame boundary; their successors use the room's recorded build. |
N hook drainers did not stop in time; they keep their old build until they go idle or the next reload. | Stops that failed; reload continued. |
Reaped N orphaned sidebar processes., Swept N leftover processes from stopped sessions. | Cleanup. |
N rooms with no sidebar reporting in; mount or replace it with `rimz reload --repair`. | Live rooms with no fresh, protocol-current sidebar heartbeat: the pane is gone, or its renderer is one this build cannot signal. Suppressed under --repair, which runs that repair next. |
Restarted the shared web daemon. | The web daemon was running and restarted. |
No running sidebars to reload. | No live room, no stopped session to sweep, and no dashboard. A second line suggests rimz start or rimz attach. |
--repair runs rimz sidebar repair after the reload finishes, as a separate step: a repair that cannot run does not undo the reload. How a sidebar hands over to a new build is in sidebar internals.
Repair sidebars
rimz sidebar repairsidebar repair fixes the sidebar panes themselves, in every live room: it adds a missing sidebar, closes duplicate or unresponsive ones, and restores a sidebar's docking and width. A replacement pane must start and report on the current build before the old one closes. It publishes no build; use reload for that.
| Line | Meaning |
|---|---|
Recovered N sidebars in place. | Sidebars added to a view that had none, or whose only sidebar was unresponsive. |
Closed N duplicate or unresponsive sidebars. | Extra or dead sidebar panes removed. |
Repaired N sidebars geometry. | Kept sidebars moved back to the full-height left dock. |
N sidebars still working but not docked. | Running, but still outside the left dock after repair. |
N sidebars could not be repaired; attach and re-run `rimz sidebar repair`. | The add or repair did not complete this pass. |
No live presence channel for N sessions; repair skipped. Reattach or restart the session. | On Zellij, repair needs the presence plugin; these sessions were left untouched. |
Deferred N sidebar repairs (no attached client); attach and re-run `rimz sidebar repair`. | A detached Zellij session cannot take a new pane or geometry change until a client attaches. |
Sidebar structure is healthy across N sessions. | Nothing needed repair. |
No running sidebars to repair. | No live room. |
The repair rules are in sidebar internals.
Reset a wedged room
rimz reset [--yes] [--no-start] [--hard] [--account <KIND@NAME>]... [PATH]reset tears down the room for PATH (default .) and rebuilds it empty. Use it when a room is stuck, or came back wrong after a reboot. In order, it:
- deletes the room's multiplexer session and purges the multiplexer's resurrection cache for it;
- signals the room's orphaned processes and clears disposable runtime classes, keeping lock inodes;
- cancels the room's active supervised runs, which report
canceledto anyone waiting on them, and drops every pendingstop --when-idlerequest; - archives the active event log, clears rebuildable caches and its recorded provider accounts;
- starts the room again and attaches, with no prior agents recovered.
Your agents' own session files and the room's archived records stay on disk. A plain reset keeps the prior-agent carryover as history; the reborn room still starts with no agents. A plain reset run with no terminal (--yes from a script) ends none of the top-level agents: the ones the old room lost stay parked, and rimz agents resume <lane> brings a lane back. Their subagents are closed (rimz.child-not-resumed), because a resumed parent relaunches any children it still needs. With --hard, the prior-agent carryover is deleted: those agents are no longer offered for recovery, even if their identities remain in the pending record.
On a room with sandbox isolation, a process an agent left running in the background can still be inside the agent's sandbox view, using the /tmp that --hard deletes. After step 2, reset --hard ends every such process and reports Sandbox views: ended N processes still inside the room's sandbox views. If one cannot be ended, reset stops before step 3 with each remaining pid and command line: stop them, then run rimz reset --hard again. Processes outside a sandbox view are left alone, and a plain reset ends none (temp units).
| Flag | Effect |
|---|---|
--yes | Skip the [y/N] prompt. Required when stdin is not a terminal. |
--no-start | Stop after step 4 and print Room torn down. Run `rimz start` to rebuild it. |
--hard | Also delete prior-agent carryover, audit history (transcripts, messages, diagnostics), owned state except run records, and room tmp. Canceled run records and the rotated log archive remain. |
--account <KIND@NAME> | Rebuild the room under this provider account, with no agents. Repeatable. Cannot be combined with --no-start. |
rimz accounts use moves a running room's launch default in place; reset --account rebuilds the room under a different account instead.
Reset refuses before prompting or changing anything when --mux names a backend other than the one the room runs on. A listed session without its own live sidebar also refuses if another room holds the workspace: close that leftover session from its multiplexer instead. Without --yes and without a terminal it fails with `rimz reset` deletes the session and sweeps its processes; pass --yes to confirm without a terminal. Answering anything but y prints Reset aborted; nothing changed. and exits 0.
The report goes to stderr before the rebuild:
The report names the session deletion, process sweep, preserved temporary files, archive path, canceled runs, removed cache entries, and whether the prior-agent rollup was kept. Hard reset additionally removes audit, owned state, tmp/, shared/, and out/.
For a room written by an older RimZ, reset instead removes the whole room and its runtime tree, without carrying over history. If a running room holds that workspace, reset refuses with the held-room error before prompting or changing anything; close that session from its multiplexer first. For other rooms, soft reset keeps transcripts, message history, run records, agent scratch and handled skill copies, agent temp files, the room's shared/ and out/ directories, and standing fleet budget choices. Both resets clear handleless skill copies in cache/skills/. --hard deletes audit/, owned/ except owned/runs/, tmp/, shared/, out/, the active log and carryover; the rotated log archive remains. Run waiters can read Canceled after reset; terminal run records are reclaimed after the owned GC grace. Neither reset of a current room removes state locks/.
What reset does to the store is in store internals.
Sweep stale state
rimz gc [--older-than <DURATION>] [--dry-run] [--json] [--all]gc removes state that has outlived its use and keeps anything dirty, unlanded, or unknown. By default it sweeps only the current room: --root overrides the running room's identity, which otherwise takes precedence over directory resolution. --all adds every room and shared machine state, while store maintenance and worktrees remain current-room only. Resolution failure exits non-zero and asks you to run inside a room or pass --root.
| Area | Room scope (default) | Machine scope (--all) |
|---|---|---|
| Room class blocks | The current room's lifetime classes. | Every remaining room, after dead workspace pruning. |
worktrees | Removes current-repository RimZ-owned worktrees that are clean, landed, and unoccupied, as in rimz worktree sweep. | Same. |
workspaces | Skipped; run with --all. | Deletes rooms written by an older RimZ, stores whose project folder is gone, and setups abandoned before any history, along with their runtime trees. Sweeps empty working directories of rooms removed now or earlier, keeping agent directories within the seven-day grace. Unreadable records with history are kept and reported. A dead workspace that cannot be removed is reported; any surviving workspace directory is retried by the next sweep. |
runtime | The current room's runtime root only; no shared provider probe markers. Live files use --older-than, sockets a connect probe, locks a try-lock. Also the machine's account budget ledgers that no history pool reads, counted as account budget ledgers. | Every runtime root, stale shared provider probe markers, and the same account budget ledgers. |
temp files | Removes orphan atomic-write temps (*.tmp.<pid>.<nonce>) older than --older-than under the room's state and runtime roots. | Sweeps both whole roots. |
messages | Archives open messages whose receiver has ended, and requeues or times out messages stuck as sent. | Same current-room maintenance. |
event log | Cuts a corrupt tail off the event log. | Same current-room maintenance. |
agent cache | Prunes prior-agent carryover older than 14 days. | Same current-room maintenance. |
loop schedules | Reaps this room's dead or invalid instance rows, prunes its orphan schedule overlays, and removes unclaimed wait outputs older than 7 days. Machine loop.toml is untouched. | Reaps machine delivery tasks and every root's instance rows; sweeps all rooms' wait outputs. Overlay cleanup still uses the current root's known scopes. |
With either scope, a current room written by an older RimZ refuses the command with a layout error; run rimz start or rimz reset there to replace it with a fresh room.
| Flag | Default | Effect |
|---|---|---|
--older-than <DURATION> | the gc.older_than setting, 7d | The age cutoff for runtime and temp files. Units: s, m, h, d (durations). Must be greater than zero. |
--dry-run | off | Report what would be removed and remove nothing. messages, event log, agent cache, and loop schedules show as skipped. |
--json | off | Print the report as JSON instead. |
--all | off | Sweep every room and shared machine state. |
GC never creates a store. Without one, messages, event log, agent cache, and repository worktrees show skipped — no rimz store here; outside a repository, worktrees shows skipped — not inside a git repo. An absent room state root produces no room class block.
The worktrees area is the one that reaches past RimZ's own files: removing a tree deletes that checkout and its files, and deletes the branch behind it. A dirty, occupied, or unmerged tree is kept and reported rather than forced. The branch is the exception: when git branch -d refuses it as unmerged, RimZ compares its content against the base and deletes it with git branch -D once that comparison says the work already landed. A branch it cannot prove landed is kept.
Automatic sweeps
Every open room runs gc on its own once a day, with the gc.older_than cutoff. The first sweep waits until the room has been up for 5 minutes, so a room coming back from a reboot finishes restoring its panes before the worktree area judges them. The last sweep time is kept per workspace, so a reboot does not reset the day. Each run, failed or not, appears in rimz stats --assists as a ♻ line. Set gc.auto = false (configuration) to sweep only by hand. While a machine config file fails to load (rimz config get names the error), automatic sweeps pause rather than fall back to the defaults.
One of those helpers is elected for a machine sweep when the last automatic machine attempt is at least 24 hours old, or none is recorded. It runs the same scope as --all, including its own room; the other helpers sweep only their rooms. Failed machine attempts also wait a day before retrying. Closed rooms wait for that elected sweep or a manual --all; they do not start helpers themselves.
The report
gc shows progress while it runs, then prints a line per area with its verdict: ✓ healthy, ✦ acted, ⚠ warning, ✗ failed, – skipped. Each kept, removed, or failed worktree gets its own line under worktrees. Kept lines name every reason (in use, uncommitted changes, unlanded work, unknown) and the holders when present; removed lines say landed, with the branch-deletion outcome.
The header gives total reclaimed bytes and the area count/cutoff, ending in · room <workspace-dir> or · machine. It then lists the selected rooms with one class · file count · bytes row per lifetime class, followed by the eight area verdicts and any kept/removed worktree reasons.
The second line counts the areas that ran: normally checked 7 of 8 areas for a room, with workspaces skipped and a hint to use --all. Dry runs skip another four store and schedule areas. The header adds a problem count (· 1 problem) when a worktree removal failed, a dead workspace could not be removed, a workspace record was unreadable, or the event log needed repair. Problems do not change the exit code: gc exits 0 whenever the sweep completes. Automatic-sweep assist records carry scope (room or machine) and class_bytes, reclaimed bytes by class for the helper's own room only, even in a machine sweep. Other assist totals cover the run's full scope.
Owned state has a seven-day grace; audit files expire after 30 days or oldest-first above 64 MiB. The empty class keeps an agent's empty working directory while any retained session records it, then removes it once its directory mtime is older than seven days. The room-level directory stays while its store exists. Once the store is gone, a machine sweep removes agent directories past the same grace and removes the room-level directory when empty. Unknown entries and symlink targets stay untouched. The workspaces area reports both the files removed and the agent directories still within the grace. --older-than does not change those policies. Rooms written by an older RimZ are removed along with their runtime trees.
JSON output
| Field | Content |
|---|---|
scope | room or machine. |
rooms | Per-room name, classes (class, files_removed, bytes_removed, locks_would_check). Room scope lists only the current room, or none when its state root is absent. |
dry_run | true under --dry-run. |
older_than_secs | The cutoff in seconds. |
reclaimed_bytes | Bytes removed, or that would be removed, across all areas. |
worktrees | removed (name, branch, path, bytes, branch_deleted, archive_error), failed (path, error), kept (name, path, reasons: an array of in_use, uncommitted_changes, unlanded, unknown; holders: agents and panes), and skipped (null, not_a_repo, no_store, roster_unavailable, list_failed). The domain records match worktree sweep --json. |
workspaces | removed (workspace_id, dir_name, reason: project_root_gone, abandoned_scaffold, or incompatible_layout, project_root, bytes), failed (dir_name, error), empty_dirs (dir_name, files_removed, bytes, agent_dirs_kept), retained_unreadable (workspace_id, error), kept (a count), and skipped (room_scope for a room sweep, otherwise null). failed is [] when no removals failed, including dry runs and room scope. empty_dirs lists every orphan tree visited, even when only recent agent directories remain, and is [] at room scope. Its bytes count toward reclaimed_bytes. Rooms written by an older RimZ are removed as incompatible_layout. |
runtime | roots_scanned, heartbeats_removed, sidecars_removed, sockets_removed, probe_markers_removed, dirs_removed, bytes_removed. |
temps | files_removed, bytes_removed. |
messages | archived, reconciled. |
carryover_pruned | Carryover entries pruned. |
schedules_reaped | Loop delivery tasks removed because their target is gone, plus RimZ-owned instance rows removed because they no longer compile to an action. |
wait_logs_pruned | Wait output files pruned. |
budget_ledgers_removed | Account budget ledgers no history pool reads, removed or, under --dry-run, that would be removed; their bytes count in reclaimed_bytes. |
repair | bytes_truncated and frames_kept, or null when store maintenance was skipped. |
store_maintenance | done, skipped_dry_run, or skipped_no_store. |
What each sweep removes on disk is in store internals.
Uninstall RimZ
rimz uninstall [--state] [--config] [--all] [--keep-binary] [--yes]uninstall removes RimZ from the machine. It prints a preview of every root, room, hook, skill-link root, timer, and binary it will touch, plus the account homes it keeps, asks [y/N], and then reports each removal. Preview and report go to stderr.
| What | Default | Flag to change it |
|---|---|---|
| RimZ hooks, in each provider's own home and every declared account home | Removed | |
| RimZ skill links in each provider's skill root, including declared account homes | Removed; your own entries are kept | |
| Running rooms, on both backends | Torn down | |
| The external loop timer | Removed | |
The runtime tree and ~/.rimz/cache/, including the provider caches under cache/providers/ | Removed | |
Provider account homes under ~/.rimz/accounts/ | Kept: their credentials and history belong to the provider; the preview names each existing declared home and the rm -rf command to clear it by hand | |
Durable stores and spend history (ws/, logs/, loops/, web/, builds/ under ~/.rimz) | Kept | --state removes them |
Per-machine config, themes, trust grants, plugins, and remote aliases (config.toml, theme.toml, loop.toml, remote.toml, trust/, agents.d/ under ~/.rimz) | Kept | --config removes them |
Agent library (agents/, subagents/, teams/, traits/, skills/, profiles/, and accounts/) and handoffs/ | Always kept | |
rimz binaries at the running executable, Cargo's bin directory, and /usr/local/bin | Removed | --keep-binary keeps them; RIMZ_SYSTEM_BIN_DIR replaces /usr/local/bin |
Project .rimz/ directories and RimZ-owned worktrees | Always kept: they can hold project config and unlanded work |
--all is --state plus --config. --yes skips the prompt and is required when stdin is not a terminal. The paths above are the defaults; RIMZ_HOME moves them. Anything else under the home, such as cache/ and the run link, is removed.
Run it from outside any RimZ room: inside one it fails with detach and rerun from outside the RimZ room. A Homebrew install also needs brew uninstall rimz. When any step fails, the rest still run, and uninstall exits 1 with uninstall incomplete: and one line per failure. A binary it had no permission to delete gets a sudo rm PATH line to run.
Check that the binary runs
rimz ping
test "$(rimz ping)" = okping prints ok and exits 0 when the binary starts and its global flags parse. It touches no room, so it is the cheapest liveness probe for a script or health check.
Config CLI
rimz config reads and edits the per-machine config: three commented TOML files under the RimZ home, ~/.rimz/, that you own and can edit by hand.
Paths CLI
rimz paths prints where RimZ keeps every file for the room the current directory resolves to: the machine-wide home, the room's state and runtime directories, and the…