# Changelog
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and
this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [0.4.0] - 2026-09-21
### Added
- `lore find docker logs` searches the library from the command line, and
`-1` prints the best match's command alone for use in a pipeline. Words that
are not one of lore's own commands are searched for as well, so `lore docker
logs` works and a mistyped command searches rather than being refused. A
broad search stops after ten matches and says how many more there are;
`--all`, and piping into another program, print every one
- The picker opens on what you had already typed. Type `git branch`, press
`ctrl+g`, and it is searching for that, rather than making you type it a
second time. The same text is still what saving offers first
## [0.3.0] - 2026-09-20
### Added
- The picker mentions a newer release once there is one, naming the command
that fits how lore was installed. It looks the release up in the background
at most once a day, says nothing for a patch release, and never installs
anything: lore does not replace its own binary. `LORE_NO_UPDATE_CHECK=1`
turns it off
- `lore version` says which version you have, whether a newer one is out, and
the one command that upgrades your kind of install
- The README says how to upgrade
### Fixed
- A change saved while a sync was already running waited for the next save or
the picker's quarter hourly refresh to reach the repository. Syncs now queue
instead of standing each other down
## [0.2.2] - 2026-09-20
### Changed
- Sync commits are made by `lore` rather than by the user. One commit per
saved command, on the default branch of a repository they own, is what
GitHub counts as a contribution, and a profile graph filling up with saved
commands is not what anyone asked for. Setting `user.name` and `user.email`
on lore's own clone puts their name back on them
## [0.2.1] - 2026-09-20
### Fixed
- `lore sync init` chose the address the GitHub CLI prefers, which is https
unless told otherwise, and then failed with "could not read Username" for
everyone whose git talks to GitHub over ssh. Both addresses are now tried,
and when neither works the GitHub CLI is asked to give git the login it
already holds
- A saved command's id dropped the hyphens from the words it was made of, so
`echo from-a` became `user.echo-froma`
## [0.2.0] - 2026-09-19
### Added
- Sync across machines through a private git repository you own.
`lore sync init` connects a machine, creating the repository with the GitHub
CLI when it is available. After that every save, edit and removal syncs in
the background, and the picker fetches other machines' changes when it has
not for a while. lore merges by entry rather than by line, so two machines
saving at once never produce a merge conflict. `lore sync`, `lore sync
status` and `lore sync disconnect` do what they say, and
`LORE_NO_AUTO_SYNC` turns the automatic part off
### Changed
- Saving no longer opens a form. It asks for the command and then what it is
for, one line at a time, starting from whatever was typed at the prompt when
the picker opened. Up and down walk the shell history. Words written as
`#tag` become tags, and the program and its subcommands are added as tags
without being asked for
- `lore save` asks what the command is for when `--desc` is left out, and adds
tags from the command the same way
### Fixed
- Hiding a builtin and then saving a new command wrote the new entry into the
list of hidden builtins, after which every lore command failed until the
library was fixed by hand. New entries now always go into the commands list
## [0.1.2] - 2026-09-19
### Fixed
- `lore list | head`, or quitting `less` partway through the list, printed a
panic about a broken pipe. A reader that stops early now ends the listing
quietly, as it would for any other command line tool
- Search put `git add -A` first for "git st", because its description begins
with "Stage". A query spelled out in the command now outranks one borrowed
from the description, and a command that begins with the query as typed
comes first of all
### Changed
- Ties that usage cannot break yet, which is all of them on a fresh install,
go to the shorter command. The picker therefore opens on the basics, such as
`df -h`, `ls -lah` and `git diff`, rather than in alphabetical order by id
## [0.1.1] - 2026-09-18
### Fixed
- The picker never opened from zsh on macOS. zsh runs a widget's commands
with stdin on `/dev/null`, the terminal library fell back to `/dev/tty`,
and macOS refuses to poll that device, so the picker waited forever for the
cursor position it had asked for. The zsh snippet now hands the picker its
terminal by name, and on macOS the binary finds its own terminal when stdin
is not one, so bash, fish and any other caller are covered too. Upgrading
the binary is enough: the snippet is fetched from it on every shell start
- The shell installer exited with status 1 after a successful install when the
bin directory was not yet on PATH
- The crates.io job reported failure after a successful publish; it now checks
the index before deciding
### Changed
- The builtin library now leads with the everyday commands, two hundred and
forty of them across git, docker, kubernetes, ssh, networking, the file
system, processes, text, archives, node, python and rust, with the niche
security scanners dropped
## [0.1.0] - 2026-09-18
First release.
### Added
- A picker bound to `ctrl+g` that opens as a panel under the prompt rather than
taking over the screen, and puts the chosen command in the prompt without ever
running it
- Search across command text, description and tags, ranked by how often and how
recently an entry has been used, with pinning for the ones that matter anyway
- Shell integration for bash, zsh, fish and PowerShell, installed with
`lore setup` and removed with `lore uninstall`, both of which back up the
profile before touching it
- A configurable keybinding: `lore setup --key alt-r`, written as
`ctrl-<letter>` or `alt-<letter>`, with keys the terminal owns refused
- Saving from inside the picker with `ctrl+s`, offering the shell's recent
commands, and editing with `ctrl+e`. Both screens submit on `ctrl+s` from any
field
- Removal with `ctrl+x`, which deletes your own entry and hides a builtin
- A command line equivalent for everything but the picker: `save`, `edit`, `rm`
and `list`
- A library of around two hundred and forty everyday commands compiled into the
binary, across git, docker, kubernetes, ssh, networking, the file system,
processes, text processing, archives, node, python and rust, with anything
posix specific hidden on Windows
- A user library in one YAML file that saves, edits and removals splice entries
in and out of, leaving comments and ordering intact
- Placeholders written `<name>` or `<name:default>`. One placeholder goes to the
prompt with the cursor in the gap; two or more are prompted for and remembered
- `LORE_CONFIG_DIR` and `LORE_DATA_DIR` to relocate the library and the usage
statistics, for a portable install
[Unreleased]: https://github.com/alpcakin/lore/compare/v0.4.0...HEAD
[0.4.0]: https://github.com/alpcakin/lore/compare/v0.3.0...v0.4.0
[0.3.0]: https://github.com/alpcakin/lore/compare/v0.2.2...v0.3.0
[0.2.2]: https://github.com/alpcakin/lore/compare/v0.2.1...v0.2.2
[0.2.1]: https://github.com/alpcakin/lore/compare/v0.2.0...v0.2.1
[0.2.0]: https://github.com/alpcakin/lore/compare/v0.1.2...v0.2.0
[0.1.2]: https://github.com/alpcakin/lore/compare/v0.1.1...v0.1.2
[0.1.1]: https://github.com/alpcakin/lore/compare/v0.1.0...v0.1.1
[0.1.0]: https://github.com/alpcakin/lore/releases/tag/v0.1.0