Vilice is a proof of concept. Run it on a box you can afford to lose.

Commands

Every verb this binary dispatches, in the order vilice help shows them. Each page opens with that command's real --help output.

The three root commands change the machine, and no scoped key can reach them. Everything else runs as the unprivileged vilice user, over SSH, and is recorded before it runs.

Run as root

Box commands (root)

harden Optional OS / sshd hardening (first, before prepare)
prepare Say what this box is for and lay the accountability floor
uninstall Remove the gate and the scribe (apps keep running)

Run as _vilice

Authorize

authorize Admit a named actor at a scope
revoke Remove a named actor's authorized_keys line

Operate

apply-updates Apply machine OS package updates
deploy Deploy an app from a digest-pinned image
rollback Re-deploy the last-good image
update Deploy a new image, keeping everything else
start Start an app
stop Stop an app
restart Restart an app
remove Take an app off the box
route Front other boxes: replace the routing table
backup Snapshot an app (or --all, or --machine)
restore Restore an app from its latest snapshot (or --machine)
registry-login Log the box into a private image registry
registry-logout Remove the box's login for a registry

Observe

verify Check the record's hash chain is intact
record Dump the accountable record (entries + chain check)
actors List who may act on this box, at what scope
status Machine summary plus installed apps and their state
logs Tail an app's logs
doctor Check prerequisites and surface problems

Run by systemd

Run by systemd

snapshot Write one record point (systemd-timer invoked)
run-update Carry out an update (started by update)