28 Unix tools. One binary. Zero dependencies.·the missing coreutils for the agent era·try vrk in your browser at vrk.sh/play·curl vrk.sh/install.sh | sh - ready in 5 seconds·

vrk moniker

Try it in your browser

vrk, compiled to WebAssembly

# Makes five readable names. The same seed gives the same names.

Enter runs, Shift+Enter adds a line
    output
    Press RUN. Nothing leaves your browser.

    files you can cat:

    Edit the command and press RUN. Open the full playground for more recipes, or install vrk to run it on your own files.

    vrk moniker generates memorable adjective-noun names for run IDs, job labels, and temp directories.

    The problem

    Timestamp labels like run-20260330-174856 collide when three runs start in the same minute. UUIDs are unique but nobody can say “check run 98d06ca5” in an incident call. You need identifiers that are both unique and pronounceable.

    The solution

    vrk moniker generates memorable adjective-noun names from embedded wordlists. Use --seed to get the same names on every run. Use --count to make a batch and --words to make longer names. A single batch has no duplicates.

    Before and after

    Before

    echo "run-$(date +%Y%m%d-%H%M%S)"
    # Identical for concurrent runs, not human-memorable
    

    After

    vrk moniker
    

    Example

    vrk moniker --count 5 --seed 42
    

    Exit codes

    CodeMeaning
    0Success
    1Word pool exhausted for requested count
    2–count less than 1, –words less than 2

    Flags

    FlagShortTypeDescription
    --count-nintNumber of names to generate
    --separatorstringWord separator
    --wordsintWords per name (minimum 2)
    --seedint64Random seed for deterministic output
    --json-jboolEmit JSON per name: {name, words}
    --quiet-qboolSuppress stderr output

    How it works

    vrk moniker generates short, readable names like distant-shore that you can use as run IDs, labels or directory names.

    $ vrk moniker --seed 42
    distant-shore
    

    Deterministic output (–seed)

    $ vrk moniker --count 3 --seed 42
    distant-shore
    slate-contour
    northern-brine
    

    The same seed always gives the same names. Use a seed in tests or when you need names you can reproduce.

    Custom separator

    $ vrk moniker --separator _ --seed 42
    distant_shore
    

    Longer names (–words)

    More words give more unique names. Use --words 3 when two-word names are not enough:

    $ vrk moniker --words 3 --seed 42
    foggy-hazy-furrow
    

    JSON output

    $ vrk moniker --json --seed 42
    {"name":"distant-shore","words":["distant","shore"]}
    

    Pipeline integration

    Label pipeline runs

    RUN_NAME=$(vrk moniker)
    vrk kv set --ns pipeline current_run "$RUN_NAME"
    echo "Starting run: $RUN_NAME" | vrk emit --tag pipeline
    # ... pipeline stages ...
    echo "Completed run: $RUN_NAME" | vrk emit --tag pipeline
    

    Create labeled temp directories

    WORKDIR="/tmp/$(vrk moniker)"
    mkdir -p "$WORKDIR"
    # Process files in $WORKDIR
    

    Tag batch jobs with memorable names

    # Each batch gets a human-readable name for incident response
    BATCH=$(vrk moniker)
    vrk kv set --ns batch "$BATCH" "$(vrk epoch --now)" --ttl 168h
    echo "Batch $BATCH started" | vrk emit --tag batch --level info
    

    When it fails

    If you ask for more names than the word lists can make, moniker exits 1:

    $ vrk moniker --count 100000
    error: moniker: requested 100000 names but only 87024 unique 2-word combinations exist
    $ echo $?
    1
    

    If the count is below 1, moniker exits 2:

    $ vrk moniker --count 0
    usage error: moniker: --count must be >= 1, got 0
    $ echo $?
    2