Command line
The menu-bar app does everything most people need. The keychord command is for setup,
passwords, checking your config, and your AI agent. Add it once (see
Install, step 8); after that, run keychord --help for the list.
Passwords and secrets
Section titled “Passwords and secrets”Passwords never go in your YAML. They go in the encrypted vault (secrets.kcv, next to your
config), and a chord uses them by name as ${secret:NAME}.
keychord password set WORK_PW # asks for the value (hidden), saves it in the vaultkeychord password ls # lists the NAMES only, never the valueskeychord password rm WORK_PW # removes one secret from the vault# `keychord secret set|ls|rm` does the samekeychord unlock # asks for the vault passphrase, keeps this Mac unlockedkeychord lock # forgets the key on this Mac; the next use asks againThe first password set creates the vault: it asks for a new passphrase (8+ characters,
typed twice) and prints a recovery key. Write the recovery key down and keep it offline.
Nobody can recover the secrets without the passphrase or that key.
Use the secret in a chord:
chords: - keys: lg text: "${work_email}{tab}${secret:WORK_PW}{enter}"Check and explore your config
Section titled “Check and explore your config”keychord check # validates the config and every include; errors show file:linekeychord check --json # the same, as JSON (for scripts and agents)keychord list # every chord: keys, kind, where it is definedkeychord explain lg # what a chord does and where it fireskeychord vars # every var and its value (secrets are not vars; they stay in the vault)Set, rename and remove chords
Section titled “Set, rename and remove chords”keychord set em --text '${work_email}' # add or update one chord, comments keptkeychord set sig --file snippets/sig.md # a chord whose text lives in a filekeychord set lg --text '${me}{tab}${secret:WORK_PW}{enter}' --when chromekeychord set ps --text 'docker ps{enter}' --in packs/dev.ymlkeychord rename em mail # change a chord's keyskeychord rm mail # comments it out with "# removed <date>"keychord var set work_email ada@example.com # add or update a varkeychord var rm work_email # comments it outEvery change is checked by loading your whole config. If it breaks something, the file is put back as it was and you get the error.
History: every change, and time travel
Section titled “History: every change, and time travel”Every change to your config files is recorded in <config folder>/.history: changes from these
commands, from the app (save chord, packs, super key), and edits you make by hand in an
editor. Nothing is ever deleted.
keychord history # newest first: id, time, file, what changed, and where fromkeychord history --file packs/dev.yml -n 20keychord show 42 # the diff of change 42keychord restore 42 # writes that version back, as a NEW changekeychord undo # goes back to the version before the last changePassword values never enter history: it records “password set WORK_PW”, not the value.
Snapshots are capped at 50 MB (set KEYCHORD_HISTORY_MAX_MB to change it). Only the oldest
hand-edit snapshots are thinned; the log lines are kept forever.
Add and import chords (append only)
Section titled “Add and import chords (append only)”keychord add --keys em --text '${work_email}' # appends a chord; never rewrites your lineskeychord import csv prompts.csv # format first: csv, json, md or espansokeychord pack new team # starts packs/team.yml and includes itadd checks the config after writing. If the check fails, it puts the file back as it was.
It refuses secret values: use keychord password set for those. Run keychord help for the full list.
Health and startup
Section titled “Health and startup”keychord doctor # permissions, config, vault, aos, start at login, speedkeychord doctor --json # the same, as JSONkeychord doctor --fix # opens the right Settings pane for each missing permissionkeychord autostart on # start at login (safe to run twice)keychord autostart statuskeychord autostart offkeychord --versionFor troubleshooting
Section titled “For troubleshooting”keychord bench 100 # measures chord → first character on this Mackeychord chord tt # fires chord tt as if you pressed it (into the front window)