monkeys

Commands

commandwhat it does
monkeys set <NAME>read a value and store it
monkeys listprint every stored name
monkeys preview [NAME...]print each value masked, with its length
monkeys remove <NAME>delete one value
monkeys run <NAME>[,<NAME>] <command>run a command with those values in its environment
monkeys run --all <command>the same, with every stored value
monkeys run --no-redact <command>the same, output untouched
monkeys run <command>the same, with the names a .monkeys file lists
monkeys export [NAME...]keyring lookup lines, to paste into a startup file
monkeys pack [name] [--only ...]the profiles as one encrypted name.monkeys
monkeys unpack <name> [directory]store its values, write its .monkeys
monkeys fill @a --with @bgive @a the names it lacks, from @b
monkeys doctorwhat each profile has and lacks
monkeys doctor --shortone missing @profile: A,B line per gap, for a script or an agent

monkeys takes no value as an argument, so storing one never types it: your shell history and the process table both see monkeys set GITHUB_TOKEN and nothing more. When standard input is not a terminal, set reads the value from there:

pbpaste | monkeys set GITHUB_TOKEN        # macOS
wl-paste | monkeys set GITHUB_TOKEN       # Linux, Wayland

Naming no name means every name for preview and export, or the project's names inside a project. run asks to be told, since the names are how it knows what to check for and what to leave out; --all is there for when you would rather not say. Any command takes a leading @profile, which is covered below.

Output is coloured only when it is going to a terminal, and never for list or export, whose output a script or a shell reads. NO_COLOR turns colour off, CLICOLOR_FORCE turns it on for a pipe, and an empty value for either counts as unset.