/changelog
Usage
/changelog # Summarize the last upgrade's changelog slice
/changelog --full # Show the raw CHANGELOG slice without summarization
/changelog <version> # Show a specific version's section (e.g. /changelog 2.1.99)
Description
Replays the Claude Code CHANGELOG entries captured the last time the CLI was
upgraded, so the user can revisit "what's new" on demand. Complementary to the
SessionStart version-check hook: the hook shows the greeting once at startup,
this skill lets the user ask for it again at any point in the session.
Behavior
Default (/changelog)
Read the persisted slice at $HOME/.claude/cache/last_upgrade.md.
This file is written by ~/.claude/session_start_version_check.sh whenever
a real upgrade is detected. Format:
---
from: <prev version>
to: <current version>
detected_at: <timestamp>
---
## <current version>
... raw CHANGELOG entries ...
If the file exists, parse the YAML header (from, to, detected_at)
and the body (the raw changelog slice), then present:
- A one-line header:
Claude Code <from> → <to> (upgraded <detected_at>)
- A themed summary: Features, Improvements, Fixes. 5–8 bullets
total. Prioritize user-facing changes over internal fixes — match the
style the session-start greeting uses.
- A one-line footer:
Reply '/changelog --full' to see the raw entries.
If the file does NOT exist, no upgrade has been observed on this
machine since the hook was installed. Report that plainly. Do not fabricate
entries. Offer: "Run claude --version and I can look up that version's
changelog section directly if you'd like."
--full mode
Print the raw body of $HOME/.claude/cache/last_upgrade.md verbatim (strip the
YAML header, keep the changelog markdown). No summarization. Useful when the
user wants to see every bullet.
Specific version (/changelog 2.1.99)
- Skip
last_upgrade.md entirely.
- Read the cached full changelog at
$HOME/.claude/cache/claude-code-changelog.md
(maintained by the hook).
- Do not fetch. This skill is read-only with respect to the cache —
the hook owns network I/O so TLS hardening, sanity checks, and error
handling live in one place. If the cache file does not exist, tell
the user: "The cached CHANGELOG is missing. Start a new Claude Code
session to refresh it — the SessionStart hook will refetch — then
re-run
/changelog <version>." Do not run curl. The hook refreshes
the cache on session start when the file is more than 24h old, so
"start a new session" is the user-visible refresh mechanism. The
skill itself has no way to inspect the cache's age (Read gives
contents, not mtime), so it must not make freshness claims.
- Extract the section for the requested version. Scan
## headings
and pull the first semver found in each (so ## 2.1.99,
## [2.1.99], and ## 2.1.99 (2026-04-10) all match version
2.1.99 — matching the hook's own slicer). Take everything from the
matching heading up to the next ## heading and summarize it with
the same Features/Improvements/Fixes structure as the default mode.
- If the requested version is not present in the CHANGELOG, say so — do not
invent content.
Implementation notes for the model
- Use the Read tool for
~/.claude/cache/last_upgrade.md and
~/.claude/cache/claude-code-changelog.md. Both are plain text.
- Never run
curl or any other network fetch from this skill. The
SessionStart version-check hook owns the cache and all network I/O —
TLS hardening, timeouts, content sanity checks, and error logging all
live there. Duplicating fetch logic here would drift from the hook's
hardening and split the attack surface across two places.
- Never write to
~/.claude/cache/last_upgrade.md or
~/.claude/cache/claude-code-changelog.md. This skill is strictly
read-only with respect to hook state. The hook owns those files.
- When summarizing, group bullets by theme and cap at 8 bullets. If the slice
contains many fixes, collapse similar ones into a single bullet
(e.g. "Several
/resume picker fixes" rather than listing each).
- Be faithful: only summarize entries that appear in the source. Do not
extrapolate from version numbers.
Expected Output
Default mode — slice exists
User: /changelog
Claude Code 2.1.100 → 2.1.101 (upgraded 2026-04-10 09:14:22 -0700)
Features
- /team-onboarding generates a teammate ramp-up guide from local usage
- OS CA certificate store trusted by default for enterprise TLS proxies
Improvements
- Tool-not-available, rate-limit, and refusal errors now explain what
happened and how to proceed
- /context free-space accounting now matches the header percentage
Fixes
- --resume/--continue no longer loses context on large sessions
- Hardcoded 5-minute request timeout removed; API_TIMEOUT_MS is honored
- permissions.deny now overrides PreToolUse hook "ask" decisions (security)
Reply '/changelog --full' to see the raw entries.
Default mode — no upgrade recorded yet
User: /changelog
No upgrade has been recorded on this machine yet. The session-start
version-check hook writes ~/.claude/cache/last_upgrade.md the first time
it sees a version change after install.
If you want a specific version's changelog, try /changelog <version>
(e.g. /changelog 2.1.101).
Specific version mode
User: /changelog 2.1.99
Claude Code 2.1.99 (from cached CHANGELOG)
Features
- ...
(summarized from anthropics/claude-code CHANGELOG.md)
Notes
- The cache and slice files live under
~/.claude/cache/ and are owned by
session_start_version_check.sh.
- Slice is updated only when the hook detects a true upgrade (not on
downgrades, not on equal-version boots).
- This skill does no network work on the default path — it is safe to run
offline as long as an upgrade has been observed at least once.
1---2name: changelog3description: Replay the Claude Code CHANGELOG entries from the most recent CLI upgrade. Use when the user wants to revisit "what's new" after the session-start greeting has scrolled away, or asks things like "what changed in the last upgrade", "show me the changelog", "what did I just upgrade into".4---56# /changelog78## Usage910```bash11/changelog # Summarize the last upgrade's changelog slice12/changelog --full # Show the raw CHANGELOG slice without summarization13/changelog <version> # Show a specific version's section (e.g. /changelog 2.1.99)14```1516## Description1718Replays the Claude Code CHANGELOG entries captured the last time the CLI was19upgraded, so the user can revisit "what's new" on demand. Complementary to the20SessionStart version-check hook: the hook shows the greeting once at startup,21this skill lets the user ask for it again at any point in the session.2223## Behavior2425### Default (`/changelog`)26271. **Read the persisted slice** at `$HOME/.claude/cache/last_upgrade.md`.28 This file is written by `~/.claude/session_start_version_check.sh` whenever29 a real upgrade is detected. Format:3031 ```text32 ---33 from: <prev version>34 to: <current version>35 detected_at: <timestamp>36 ---3738 ## <current version>39 ... raw CHANGELOG entries ...40 ```41422. **If the file exists**, parse the YAML header (`from`, `to`, `detected_at`)43 and the body (the raw changelog slice), then present:4445 - A one-line header: `Claude Code <from> → <to> (upgraded <detected_at>)`46 - A themed summary: **Features**, **Improvements**, **Fixes**. 5–8 bullets47 total. Prioritize user-facing changes over internal fixes — match the48 style the session-start greeting uses.49 - A one-line footer: `Reply '/changelog --full' to see the raw entries.`50513. **If the file does NOT exist**, no upgrade has been observed on this52 machine since the hook was installed. Report that plainly. Do not fabricate53 entries. Offer: "Run `claude --version` and I can look up that version's54 changelog section directly if you'd like."5556### `--full` mode5758Print the raw body of `$HOME/.claude/cache/last_upgrade.md` verbatim (strip the59YAML header, keep the changelog markdown). No summarization. Useful when the60user wants to see every bullet.6162### Specific version (`/changelog 2.1.99`)63641. Skip `last_upgrade.md` entirely.652. Read the cached full changelog at `$HOME/.claude/cache/claude-code-changelog.md`66 (maintained by the hook).673. **Do not fetch.** This skill is read-only with respect to the cache —68 the hook owns network I/O so TLS hardening, sanity checks, and error69 handling live in one place. If the cache file does not exist, tell70 the user: *"The cached CHANGELOG is missing. Start a new Claude Code71 session to refresh it — the SessionStart hook will refetch — then72 re-run `/changelog <version>`."* Do not run `curl`. The hook refreshes73 the cache on session start when the file is more than 24h old, so74 "start a new session" is the user-visible refresh mechanism. The75 skill itself has no way to inspect the cache's age (Read gives76 contents, not mtime), so it must not make freshness claims.774. Extract the section for the requested version. Scan `##` headings78 and pull the first semver found in each (so `## 2.1.99`,79 `## [2.1.99]`, and `## 2.1.99 (2026-04-10)` all match version80 `2.1.99` — matching the hook's own slicer). Take everything from the81 matching heading up to the next `##` heading and summarize it with82 the same Features/Improvements/Fixes structure as the default mode.835. If the requested version is not present in the CHANGELOG, say so — do not84 invent content.8586## Implementation notes for the model8788- Use the **Read** tool for `~/.claude/cache/last_upgrade.md` and89 `~/.claude/cache/claude-code-changelog.md`. Both are plain text.90- **Never run `curl` or any other network fetch from this skill.** The91 SessionStart version-check hook owns the cache and all network I/O —92 TLS hardening, timeouts, content sanity checks, and error logging all93 live there. Duplicating fetch logic here would drift from the hook's94 hardening and split the attack surface across two places.95- Never write to `~/.claude/cache/last_upgrade.md` or96 `~/.claude/cache/claude-code-changelog.md`. This skill is strictly97 read-only with respect to hook state. The hook owns those files.98- When summarizing, group bullets by theme and cap at 8 bullets. If the slice99 contains many fixes, collapse similar ones into a single bullet100 (e.g. "Several `/resume` picker fixes" rather than listing each).101- Be faithful: only summarize entries that appear in the source. Do not102 extrapolate from version numbers.103104## Expected Output105106### Default mode — slice exists107108```text109User: /changelog110111Claude Code 2.1.100 → 2.1.101 (upgraded 2026-04-10 09:14:22 -0700)112113Features114 - /team-onboarding generates a teammate ramp-up guide from local usage115 - OS CA certificate store trusted by default for enterprise TLS proxies116117Improvements118 - Tool-not-available, rate-limit, and refusal errors now explain what119 happened and how to proceed120 - /context free-space accounting now matches the header percentage121122Fixes123 - --resume/--continue no longer loses context on large sessions124 - Hardcoded 5-minute request timeout removed; API_TIMEOUT_MS is honored125 - permissions.deny now overrides PreToolUse hook "ask" decisions (security)126127Reply '/changelog --full' to see the raw entries.128```129130### Default mode — no upgrade recorded yet131132```text133User: /changelog134135No upgrade has been recorded on this machine yet. The session-start136version-check hook writes ~/.claude/cache/last_upgrade.md the first time137it sees a version change after install.138139If you want a specific version's changelog, try /changelog <version>140(e.g. /changelog 2.1.101).141```142143### Specific version mode144145```text146User: /changelog 2.1.99147148Claude Code 2.1.99 (from cached CHANGELOG)149150Features151 - ...152153(summarized from anthropics/claude-code CHANGELOG.md)154```155156## Notes157158- The cache and slice files live under `~/.claude/cache/` and are owned by159 `session_start_version_check.sh`.160- Slice is updated only when the hook detects a true upgrade (not on161 downgrades, not on equal-version boots).162- This skill does no network work on the default path — it is safe to run163 offline as long as an upgrade has been observed at least once.