Undo & History
Every xops run is recorded in a workspace journal under .xops/transactions/. If a run goes sideways, undo the exact local changes without guessing what got touched.
xops records every file it touches before making changes. Undo restores each file to its exact prior state — no guessing, no diffs to apply manually.
Works for: package.json edits, .gitignore / .npmignore updates, override cleanup, lockfile changes from installs.Every run gets a transaction ID and a readable manifest. You can answer "what did xops do?" in seconds — file-by-file diffs, command outputs, and a clear list of what can and cannot be reversed.
If you edited a file after the run, xops refuses to overwrite it. You opt in with --force — an explicit choice, not a silent default. Use --dry-run first to see every file that would be restored.
One transaction captures changes across all package roots in a single run: one ID, per-package file snapshots, and consistent undo order that restores packages in the correct reverse-dependency sequence.
Full CLI surface
xops historyList recent runs with outcome and undo statusxops history --jsonMachine-readable output for CI and scriptsxops history --limit NShow the last N runsxops show <txid>File-by-file changes and external effectsxops show <txid> --diffFull diff view of every changed filexops undoUndo the last runxops undo --lastExplicit last-run undoxops undo <txid>Undo a specific transaction by IDxops undo --dry-runPreview what would be restoredxops undo --forceOverride hash mismatch check (explicit foot-gun)xops install --txForce journaling on a single commandxops install --no-txDisable journaling (e.g. in CI)Undo for setup — in progress
When xops applies a recommendation (see Apply), it journals local changes the same way it journals release edits.
Can undo
Cannot automatically undo