/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".4argument-hint: "[--full|<version>]"5metadata:6 category: workflow7---89# /changelog1011## Usage1213```bash14/changelog # Summarize the last upgrade's changelog slice15/changelog --full # Show the raw CHANGELOG slice without summarization16/changelog <version> # Show a specific version's section (e.g. /changelog 2.1.99)17```1819## Description2021Replays the Claude Code CHANGELOG entries captured the last time the CLI was22upgraded, so the user can revisit "what's new" on demand. Complementary to the23SessionStart version-check hook: the hook shows the greeting once at startup,24this skill lets the user ask for it again at any point in the session.2526## Behavior2728### Default (`/changelog`)29301. **Read the persisted slice** at `$HOME/.claude/cache/last_upgrade.md`.31 This file is written by `~/.claude/session_start_version_check.sh` whenever32 a real upgrade is detected. Format:3334 ```text35 ---36 from: <prev version>37 to: <current version>38 detected_at: <timestamp>39 ---4041 ## <current version>42 ... raw CHANGELOG entries ...43 ```44452. **If the file exists**, parse the YAML header (`from`, `to`, `detected_at`)46 and the body (the raw changelog slice), then present:4748 - A one-line header: `Claude Code <from> → <to> (upgraded <detected_at>)`49 - A themed summary: **Features**, **Improvements**, **Fixes**. 5–8 bullets50 total. Prioritize user-facing changes over internal fixes — match the51 style the session-start greeting uses.52 - A one-line footer: `Reply '/changelog --full' to see the raw entries.`53543. **If the file does NOT exist**, no upgrade has been observed on this55 machine since the hook was installed. Report that plainly. Do not fabricate56 entries. Offer: "Run `claude --version` and I can look up that version's57 changelog section directly if you'd like."5859### `--full` mode6061Print the raw body of `$HOME/.claude/cache/last_upgrade.md` verbatim (strip the62YAML header, keep the changelog markdown). No summarization. Useful when the63user wants to see every bullet.6465### Specific version (`/changelog 2.1.99`)66671. Skip `last_upgrade.md` entirely.682. Read the cached full changelog at `$HOME/.claude/cache/claude-code-changelog.md`69 (maintained by the hook).703. **Do not fetch.** This skill is read-only with respect to the cache —71 the hook owns network I/O so TLS hardening, sanity checks, and error72 handling live in one place. If the cache file does not exist, tell73 the user: *"The cached CHANGELOG is missing. Start a new Claude Code74 session to refresh it — the SessionStart hook will refetch — then75 re-run `/changelog <version>`."* Do not run `curl`. The hook refreshes76 the cache on session start when the file is more than 24h old, so77 "start a new session" is the user-visible refresh mechanism. The78 skill itself has no way to inspect the cache's age (Read gives79 contents, not mtime), so it must not make freshness claims.804. Extract the section for the requested version. Scan `##` headings81 and pull the first semver found in each (so `## 2.1.99`,82 `## [2.1.99]`, and `## 2.1.99 (2026-04-10)` all match version83 `2.1.99` — matching the hook's own slicer). Take everything from the84 matching heading up to the next `##` heading and summarize it with85 the same Features/Improvements/Fixes structure as the default mode.865. If the requested version is not present in the CHANGELOG, say so — do not87 invent content.8889## Implementation notes for the model9091- Use the **Read** tool for `~/.claude/cache/last_upgrade.md` and92 `~/.claude/cache/claude-code-changelog.md`. Both are plain text.93- **Never run `curl` or any other network fetch from this skill.** The94 SessionStart version-check hook owns the cache and all network I/O —95 TLS hardening, timeouts, content sanity checks, and error logging all96 live there. Duplicating fetch logic here would drift from the hook's97 hardening and split the attack surface across two places.98- Never write to `~/.claude/cache/last_upgrade.md` or99 `~/.claude/cache/claude-code-changelog.md`. This skill is strictly100 read-only with respect to hook state. The hook owns those files.101- When summarizing, group bullets by theme and cap at 8 bullets. If the slice102 contains many fixes, collapse similar ones into a single bullet103 (e.g. "Several `/resume` picker fixes" rather than listing each).104- Be faithful: only summarize entries that appear in the source. Do not105 extrapolate from version numbers.106107## Expected Output108109### Default mode — slice exists110111```text112User: /changelog113114Claude Code 2.1.100 → 2.1.101 (upgraded 2026-04-10 09:14:22 -0700)115116Features117 - /team-onboarding generates a teammate ramp-up guide from local usage118 - OS CA certificate store trusted by default for enterprise TLS proxies119120Improvements121 - Tool-not-available, rate-limit, and refusal errors now explain what122 happened and how to proceed123 - /context free-space accounting now matches the header percentage124125Fixes126 - --resume/--continue no longer loses context on large sessions127 - Hardcoded 5-minute request timeout removed; API_TIMEOUT_MS is honored128 - permissions.deny now overrides PreToolUse hook "ask" decisions (security)129130Reply '/changelog --full' to see the raw entries.131```132133### Default mode — no upgrade recorded yet134135```text136User: /changelog137138No upgrade has been recorded on this machine yet. The session-start139version-check hook writes ~/.claude/cache/last_upgrade.md the first time140it sees a version change after install.141142If you want a specific version's changelog, try /changelog <version>143(e.g. /changelog 2.1.101).144```145146### Specific version mode147148```text149User: /changelog 2.1.99150151Claude Code 2.1.99 (from cached CHANGELOG)152153Features154 - ...155156(summarized from anthropics/claude-code CHANGELOG.md)157```158159## Notes160161- The cache and slice files live under `~/.claude/cache/` and are owned by162 `session_start_version_check.sh`.163- Slice is updated only when the hook detects a true upgrade (not on164 downgrades, not on equal-version boots).165- This skill does no network work on the default path — it is safe to run166 offline as long as an upgrade has been observed at least once.