26 Unix tools. One binary. Zero dependencies. · the missing coreutils for AI pipelines · vrk mcp - expose all 26 tools to any AI agent · brew install vrk - ready in 5 seconds · 26 Unix tools. One binary. Zero dependencies. · the missing coreutils for AI pipelines · vrk mcp - expose all 26 tools to any AI agent · brew install vrk - ready in 5 seconds

vrk coax

About

Wraps any command with automatic retries and backoff. If the command fails, coax re-runs it - buffering stdin so each attempt gets the same input. You control how many times to retry, how long to wait between attempts, and which exit codes count as retriable.

The problem

You call an external API in a script and it fails once out of fifty times. You add a retry loop with sleep, but you hardcode the delay, forget to cap retries, and the stdin is consumed on the first attempt so retries send empty input.

Before and after

Before

for i in 1 2 3 4 5; do
  curl -sf https://api.example.com && break
  sleep $((i * 2))
done

After

vrk coax --times 5 --backoff exp:200ms -- curl -sf https://api.example.com

Example

vrk coax --times 5 --backoff exp:200ms -- curl -sf https://api.example.com

Exit codes

CodeMeaning
0Command succeeded (first attempt or a retry)
1All retries exhausted (last exit code from wrapped command)
2Missing command after –, invalid –backoff spec

Flags

FlagShortTypeDescription
--timesintNumber of retries (total attempts = N+1)
--backoffstringDelay between retries: 500ms for fixed, exp:100ms for exponential
--backoff-maxdurationCap for exponential backoff; 0 means uncapped
--on[]intRetry only on these exit codes; repeatable
--untilstringShell condition; retry while this exits non-zero
--quiet-qboolSuppress retry progress lines
--json-jboolEmit errors as JSON