Changelog
View as markdownA project's Changelog is the record of what has shipped: one entry per
merged piece of work, newest first, each with a reader-facing title, the date,
a short description, and links to the issue, the pull request, and any other
page that matters. It answers "what landed this week?" for you on the
Changelog page of the TUI and the desktop app, and for agents through
shelbi changelog.
Open it with Changelog in the sidebar (or the palette). n / p step to
the next and previous entry, / searches, and Tab steps through an entry's
links; Enter follows one.
Open it with Changelog in the sidebar (⌘L). j / k step to the next and
previous entry, ⌘F or / searches, and each entry's link chips open the
issue on the board or the pull request in your browser.
Entries are markdown files in the project's Shelbi state directory, outside your repository. The CLI reference covers the file format, links, the template, and every command.
Who writes it
The orchestrator keeps the Changelog current.
After every successful merge it runs shelbi changelog add:
shelbi changelog add --author orchestrator \
--title "Board columns scroll smoothly" \
--date 2026-10-28 \
--issue dt-board-perf --pr 1900 \
-d "Long board columns are a virtualized list, so scrolling a busy column stays smooth."That covers every way work lands:
- a
review -> donemove the orchestrator makes, - a Zen Mode merge,
- a merge you ask for ("merge it"),
- a merge the orchestrator didn't run: you moving a card to
done, or the poller reconciling a pull request someone merged on GitHub.
Each of those writes a to_category=done line to the
events log, and the orchestrator reacts to those
lines, so a merge is never missed. Before adding, it searches the Changelog
for an entry that already links the issue, so a replayed event never writes a
second one.
You can add entries yourself too. shelbi changelog add from your own shell
records user as the author.
What an entry says
The orchestrator writes each entry for people and agents reading it later:
- Title: what shipped, in a reader's words, not the branch name.
- Date: the day it merged.
- Description: what changed and why it matters, in a short paragraph or a few bullets. Not a diff or a list of commits.
- Links: the issue (
--issue), the pull request (--pr) when there is one, and any other relevant page (--link).
Features and subtasks
A feature split into subtasks ships once. Each subtask merges into the feature's branch, not your primary branch, so it gets no entry of its own. When the feature itself merges, the orchestrator writes one entry for the whole feature, linking its issue and pull request.
Changing the policy
By default the orchestrator writes an entry for every merge, including ones
with nothing user-visible, such as a CI fix or a refactor. The rule lives in
the ## Changelog section of the orchestrator's instructions.md, which your
project owns:
<config-root>/agents/orchestrator/instructions.mdThe config root is ~/.shelbi/projects/<project>/ in global mode and
<repo>/.shelbi/ in in-repo mode. Or run
shelbi agent edit orchestrator to open it in $EDITOR.
Edit that section to change what gets an entry, for example "skip merges that
only touch CI or tests", or to change how entries are written. Keep the
## Changelog heading. Projects created before the Changelog existed get the
section on their next start: the config upgrade
pass appends it to orchestrator instructions that have no ## Changelog
heading and never mention shelbi changelog add, without changing anything
else in the file. Instructions that already carry the rule, edited or not, are
left alone.
To change how each entry's description is laid out, edit the project's changelog template.
See also
shelbi changelog: adding, listing, searching and showing entries, and the entry file format.- Orchestrator: the agent that writes the entries.
- Zen Mode: merges the orchestrator makes on its own.
- Config upgrade: how existing projects pick up the Changelog rule.