Vivere

The vivere CLI

Wrap any command so its start, exit code, duration and output tail are reported.

vivere run wraps a command. It sends /start, runs the command with its output passed through, then sends /<exit-code> with the last 16 KB of stdout and stderr as the log. It exits with the command's own exit code, so cron and CI still see failures.

Install

Single static binaries, no dependencies. Download the one for your platform from https://vivere.dev/static/dl/:

# Linux x86-64
curl -fsSL -o /usr/local/bin/vivere https://vivere.dev/static/dl/vivere-linux-amd64 && chmod +x /usr/local/bin/vivere
# Linux arm64 (Raspberry Pi, Graviton)
curl -fsSL -o /usr/local/bin/vivere https://vivere.dev/static/dl/vivere-linux-arm64 && chmod +x /usr/local/bin/vivere
# macOS (Apple silicon / Intel)
curl -fsSL -o /usr/local/bin/vivere https://vivere.dev/static/dl/vivere-darwin-arm64 && chmod +x /usr/local/bin/vivere
curl -fsSL -o /usr/local/bin/vivere https://vivere.dev/static/dl/vivere-darwin-amd64 && chmod +x /usr/local/bin/vivere
# Windows (PowerShell)
Invoke-WebRequest https://vivere.dev/static/dl/vivere-windows-amd64.exe -OutFile vivere.exe

Use

vivere run --url https://vivere.dev/p/<monitor-id> -- ./backup.sh --full

# the URL can come from the environment instead
export VIVERE_PING_URL=https://vivere.dev/p/<monitor-id>
vivere run -- python etl.py

# kill runaway jobs and report them as failed
vivere run --timeout 30m -- ./slow-job.sh
FlagEffect
--urlPing URL; defaults to $VIVERE_PING_URL.
--timeoutKill the command after this long; it is reported as failed with a note in the log.
--no-startSkip the start ping (no duration will be recorded).
--quietDo not print vivere's own status lines to stderr.

Network problems never break your job: pings are retried three times and then given up on, and the command's exit code is still returned.