Claude Skill

claude-docs-changelog

Generate a self-contained HTML changelog report showing recent documentation changes with interactive course generation buttons. Use this skill when the user asks for a docs changelog, documentation report, what changed recently, recent doc updates as a report, or runs `/docs --r

LLM Mart · 0 points · 7 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download costiash-claude-code-docs-plugin_skills_claude-docs-changelog-e613f7b.zip · 5 KB
Part of costiash/claude-code-docs — 5 skills

Install

skills CLI npx skills add https://github.com/costiash/claude-code-docs/tree/main/plugin/skills/claude-docs-changelog
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install costiash-claude-code-docs@llmmart
Git git clone https://github.com/costiash/claude-code-docs.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole costiash/claude-code-docs collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

Documentation Changelog Report

Generate a self-contained HTML report showing recent documentation changes. The report groups changes by category, summarizes what's new or updated, and includes a "Create Course" button on each card so the user can instantly generate an interactive course for any topic that caught their eye.

When to Trigger

  • User says "docs changelog", "docs report", "what changed in the docs", "recent doc updates report"
  • User runs /docs --report, /docs changelog, or /docs --report <timeframe>
  • User asks for a visual summary of documentation changes

The Process (3 Phases)

Phase 1: Discover Changes

Find what changed, from the manifest's git history:

~/.claude-code-docs/plugin/scripts/manifest-diff.sh --since <timeframe> --json

Default timeframe: Last 7 days. The user can specify a different window:

  • /docs --report → --since 7d
  • /docs --report 24h → --since 24h
  • /docs --report 30d → --since 30d
  • /docs --report 2026-03-20 → --since 2026-03-20

Parse the JSON — three arrays, each element a full page entry:

  • added = new pages
  • changed = content changed (keyed off sha256 deltas, so it catches every real update)
  • removed = pages dropped from the manifest

Each entry already carries .category, .title, .url, .filename — no filename-pattern categorization needed. Map category to a label via manifest-reference.md.

If all three arrays are empty, tell the user and suggest a wider window.

Limit scope: If there are more than 30 changed pages total, focus on the most recent/notable 30 and note how many were omitted.

Phase 2: Analyze Changes

For each changed page (or the most significant ones if there are many):

  1. Read the page to understand its current content — it's cached at ~/.claude-code-docs/cache/<filename>; if missing, fetch it first with ~/.claude-code-docs/plugin/scripts/fetch-docs.sh get "<filename>".
  2. v2 commits no prose history, so there is no line-level git diff — describe the page's current content and why it matters (it appeared in added/changed for this window).
  3. Extract key points: What's new? What was updated? What are the highlights?
  4. Write a 1-2 sentence summary of the change
  5. Extract 3-6 bullet points describing specific additions or updates

For added entries: Read the full page and summarize what it covers. For changed entries: The sha256 delta says the content changed but not where — read the current page and highlight the sections most likely to be new or updated. For removed entries: The page is gone from the manifest (no content to read) — note what was removed with a one-line description built from its title and category.

Group related changes (e.g., if 6 SDK language docs were all updated the same way, combine them into one card).

Phase 3: Generate the HTML Report

Generate a single self-contained HTML file using the Obsidian & Amber design system. Save to:

mkdir -p ~/.claude-code-docs/courses

Name the file: ~/.claude-code-docs/courses/changelog-<date>.html (e.g., changelog-2026-03-28.html)

HTML structure:

├── Header (title, date range, sync status badge)
├── Stats bar (count per category with colored numbers)
├── Key Highlights box (3-6 most notable changes)
├── Section per category
│   ├── Section heading (icon, label, count)
│   └── Cards per changed doc
│       ├── Title + tag (New/Updated/Removed)
│       ├── Summary paragraph
│       ├── Bullet list of key changes
│       ├── Source link → official docs URL
│       └── "Create Course" button
└── Footer (generated from, doc count, date)

Design rules (Obsidian & Amber):

Use these exact CSS variables from the course design system:

:root {
  --bg: #0D0D16;
  --surface: #161624;
  --surface-hover: #1C1A28;
  --border: #2A2840;
  --text: #E8E0D4;
  --text-muted: #5C5852;
  --accent: #F0A050;
  --accent-dim: rgba(240, 160, 80, 0.08);
  --blue: #60A0E0;
  --blue-dim: rgba(96, 160, 224, 0.08);
  --green: #50C8A0;
  --green-dim: rgba(80, 200, 160, 0.08);
  --purple: #C080E0;
  --purple-dim: rgba(192, 128, 224, 0.08);
  --red: #F06060;
  --red-dim: rgba(240, 96, 96, 0.06);
  --radius: 10px;
}

Typography: Use the same fonts as the course skill:

<link href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Outfit:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
  • Instrument Serif for h1/h2 headings
  • Outfit for body text
  • JetBrains Mono for code and badges

Include the grain overlay (same as course design system):

body::after {
  content: '';
  position: fixed; top: 0; left: 0;
  width: 100%; height: 100%;
  pointer-events: none; z-index: 9999; opacity: 0.035;
  background-image: url("data:image/svg+xml,...");  /* same noise SVG */
}

Card styling:

  • Background: --surface with --border border
  • Hover: border shifts to --accent muted, subtle glow
  • Inner shadow highlight: inset 0 1px 0 rgba(255,255,255,0.04)

Tags:

  • New → green badge (--green-dim bg, --green text)
  • Updated → blue badge (--blue-dim bg, --blue text)
  • Removed → red badge (--red-dim bg, --red text)
  • Beta → purple badge (--purple-dim bg, --purple text)

Category icons:

  • CLI: >_ (terminal prompt)
  • SDK: {} (code braces)
  • API: ⟡ (diamond)
  • Platform: ◈ (nested diamond)
  • Prompt Library: ✎ (pen)
  • Other: ● (dot)

The "Create Course" Button

Each card gets a button in its footer area that lets the user generate a course for that topic.

Button behavior (JavaScript):

  1. On click, copy the command /docs --course <topic> to the clipboard
  2. Show a toast notification: "Copied! Paste in Claude Code to generate a course."
  3. The toast auto-dismisses after 3 seconds

Button HTML pattern:

<button class="course-btn" data-topic="hooks" onclick="copyCourseCmd(this)">
  <span class="course-btn-icon">▶</span>
  Create Course
</button>

Button CSS:

.course-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 14px;
  border-radius: 999px;
  border: 1px solid var(--accent);
  background: var(--accent-dim);
  color: var(--accent);
  font-family: 'Outfit', sans-serif;
  font-size: 0.78rem;
  font-weight: 600;
  cursor: pointer;
  transition: all 0.2s;
}
.course-btn:hover {
  background: var(--accent);
  color: var(--bg);
  box-shadow: 0 0 20px rgba(240, 160, 80, 0.25);
}
.course-btn-icon {
  font-size: 0.65rem;
}

Toast notification:

.toast {
  position: fixed;
  bottom: 2rem;
  left: 50%;
  transform: translateX(-50%) translateY(20px);
  background: var(--surface);
  border: 1px solid var(--accent);
  color: var(--accent);
  padding: 0.75rem 1.5rem;
  border-radius: var(--radius);
  font-family: 'Outfit', sans-serif;
  font-size: 0.88rem;
  font-weight: 500;
  box-shadow: 0 8px 32px rgba(0,0,8,0.5), 0 0 20px rgba(240,160,80,0.15);
  opacity: 0;
  transition: opacity 0.3s, transform 0.3s;
  z-index: 10000;
}
.toast.show {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
}

JavaScript:

function copyCourseCmd(btn) {
  const topic = btn.dataset.topic;
  const cmd = '/docs --course ' + topic;
  navigator.clipboard.writeText(cmd).then(() => {
    showToast('Copied! Paste in Claude Code: ' + cmd);
  }).catch(() => {
    // Fallback for older browsers
    const ta = document.createElement('textarea');
    ta.value = cmd; document.body.appendChild(ta);
    ta.select(); document.execCommand('copy');
    document.body.removeChild(ta);
    showToast('Copied! Paste in Claude Code: ' + cmd);
  });
}

function showToast(msg) {
  let toast = document.getElementById('toast');
  if (!toast) {
    toast = document.createElement('div');
    toast.id = 'toast';
    toast.className = 'toast';
    document.body.appendChild(toast);
  }
  toast.textContent = msg;
  toast.classList.add('show');
  clearTimeout(toast._timeout);
  toast._timeout = setTimeout(() => toast.classList.remove('show'), 3000);
}

Phase 4: Open and Present

After generating the HTML:

  1. Open it in the browser
  2. Tell the user where it's saved: ~/.claude-code-docs/courses/changelog-<date>.html
  3. Summarize the key findings: "Found X changes across Y categories in the last Z days."
  4. Mention they can click "Create Course" on any card to copy the course generation command

URL Generation

Each manifest-diff.sh entry already includes the exact .url field — use it directly. (If you need a URL for a filename not in the diff output, look it up: jq -r '.pages[] | select(.filename=="<filename>") | .url' ~/.claude-code-docs/paths_manifest.json.)

Topic Extraction for Course Buttons

The data-topic attribute on each course button should be the human-readable topic name extracted from the filename:

  • claude-code__hooks.md → hooks
  • claude-code__hooks-guide.md → hooks guide
  • docs__en__agent-sdk__python.md → Agent SDK Python
  • docs__en__build-with-claude__prompt-caching.md → prompt caching
  • docs__en__agents-and-tools__tool-use__overview.md → tool use

Strip the category prefix, replace __ and - with spaces, and capitalize naturally.

Files (claude-code-docs)
  • examples
    • changelog-report.md 3 KB
      # Example: Documentation Changelog Report
      
      ## User Query
      > /docs --report
      
      ## Skill Reasoning
      - User requests a docs changelog report
      - Default timeframe: last 7 days
      - Strategy: manifest-diff → categorize → analyze → generate HTML
      
      ## Actions
      
      ### Phase 1: Discover Changes
      1. Run: `~/.claude-code-docs/plugin/scripts/manifest-diff.sh --since 7d --json`
      2. Parse the JSON — three arrays of full page entries: `added`, `changed` (sha256 delta
         between manifest revisions), `removed`. Found 12 changes:
         - `added` (1): `claude-code__agent-sdk__tool-search.md` — "Scale to many tools with tool search" (SDK, new)
         - `changed` (11):
           - 5 CLI pages: `claude-code__desktop.md`, `claude-code__sandboxing.md`,
             `claude-code__plugin-marketplaces.md`, `claude-code__common-workflows.md`, `claude-code__settings.md`
           - 6 SDK pages: `claude-code__agent-sdk__custom-tools.md`, `claude-code__agent-sdk__mcp.md`,
             `claude-code__agent-sdk__python.md`, `claude-code__agent-sdk__typescript.md`,
             `claude-code__agent-sdk__user-input.md`, `claude-code__agent-sdk__sessions.md`
         - `removed` (0): empty
      3. Each entry already carries `.category`, `.title`, `.url`, `.filename` — map `category`
         to a section label via `manifest-reference.md` (`claude_code` → CLI, `agent_sdk` → SDK)
      
      ### Phase 2: Analyze Changes
      1. For each `added`/`changed` entry, read the current page at `~/.claude-code-docs/cache/<filename>`
         (if missing: `~/.claude-code-docs/plugin/scripts/fetch-docs.sh get "<filename>"` first).
         v2 keeps no prose history, so there is no line-level diff — summarize the page's current content
      2. Group related changes (e.g., 6 SDK pages updated together → 1 card)
      3. Extract highlights:
         - New: Tool Search feature in Agent SDK
         - Updated: Desktop app, Sandboxing, Plugin Marketplaces, Common Workflows
         - Updated: Custom Tools, MCP, Python/TypeScript SDKs, User Input
      
      ### Phase 3: Generate HTML
      1. Create `~/.claude-code-docs/courses/changelog-2026-08-02.html`
      2. Structure: header → stats bar → highlights → CLI section (5 cards) → SDK section (grouped cards)
      3. Each card's source link is the entry's `.url` verbatim (e.g.
         `https://code.claude.com/docs/en/agent-sdk/tool-search`) — never reconstructed from the filename
      4. Each card gets a "Create Course" button with `data-topic` extracted from filename;
         the button copies `/docs --course <topic>` to clipboard on click
      
      ### Phase 4: Open and Present
      - Open in browser
      - "Found 12 changes across 2 categories in the last 7 days. Saved to `~/.claude-code-docs/courses/changelog-2026-08-02.html`"
      
      ## Output
      Self-contained HTML file with:
      - Obsidian & Amber dark theme (matching course design system)
      - Stats bar: 5 CLI, 7 SDK (1 new)
      - Key highlights box with top 6 changes
      - Grouped cards with summaries, bullet lists, source links
      - Tags from diff semantics: `added` → New, `changed` → Updated, `removed` → Removed
      - Each card has a "Create Course" button → copies clipboard command
      - Toast notification on button click
      
  • SKILL.md 9.8 KB
    ---
    name: claude-docs-changelog
    description: >
      Generate a self-contained HTML changelog report showing recent documentation
      changes with interactive course generation buttons. Use this skill when the
      user asks for a docs changelog, documentation report, what changed recently,
      recent doc updates as a report, or runs `/docs --report`. Discovers changes
      via git history, categorizes them, summarizes what's new, and produces a
      stunning Obsidian & Amber themed HTML report where each entry has a
      "Create Course" button that copies the course command to clipboard.
    ---
    
    # Documentation Changelog Report
    
    Generate a self-contained HTML report showing recent documentation changes. The report groups changes by category, summarizes what's new or updated, and includes a "Create Course" button on each card so the user can instantly generate an interactive course for any topic that caught their eye.
    
    ## When to Trigger
    
    - User says "docs changelog", "docs report", "what changed in the docs", "recent doc updates report"
    - User runs `/docs --report`, `/docs changelog`, or `/docs --report <timeframe>`
    - User asks for a visual summary of documentation changes
    
    ## The Process (3 Phases)
    
    ### Phase 1: Discover Changes
    
    **Find what changed, from the manifest's git history:**
    
    ```bash
    ~/.claude-code-docs/plugin/scripts/manifest-diff.sh --since <timeframe> --json
    ```
    
    **Default timeframe:** Last 7 days. The user can specify a different window:
    - `/docs --report` → `--since 7d`
    - `/docs --report 24h` → `--since 24h`
    - `/docs --report 30d` → `--since 30d`
    - `/docs --report 2026-03-20` → `--since 2026-03-20`
    
    **Parse the JSON** — three arrays, each element a full page entry:
    - `added` = new pages
    - `changed` = content changed (keyed off `sha256` deltas, so it catches every real update)
    - `removed` = pages dropped from the manifest
    
    Each entry already carries `.category`, `.title`, `.url`, `.filename` — no filename-pattern
    categorization needed. Map `category` to a label via `manifest-reference.md`.
    
    If all three arrays are empty, tell the user and suggest a wider window.
    
    **Limit scope:** If there are more than 30 changed pages total, focus on the most recent/notable 30 and note how many were omitted.
    
    ### Phase 2: Analyze Changes
    
    For each changed page (or the most significant ones if there are many):
    
    1. **Read the page** to understand its current content — it's cached at
       `~/.claude-code-docs/cache/<filename>`; if missing, fetch it first with
       `~/.claude-code-docs/plugin/scripts/fetch-docs.sh get "<filename>"`.
    2. v2 commits no prose history, so there is no line-level `git diff` — describe the page's
       **current** content and why it matters (it appeared in `added`/`changed` for this window).
    3. **Extract key points:** What's new? What was updated? What are the highlights?
    4. **Write a 1-2 sentence summary** of the change
    5. **Extract 3-6 bullet points** describing specific additions or updates
    
    **For `added` entries:** Read the full page and summarize what it covers.
    **For `changed` entries:** The sha256 delta says the content changed but not where — read the current page and highlight the sections most likely to be new or updated.
    **For `removed` entries:** The page is gone from the manifest (no content to read) — note what was removed with a one-line description built from its `title` and `category`.
    
    Group related changes (e.g., if 6 SDK language docs were all updated the same way, combine them into one card).
    
    ### Phase 3: Generate the HTML Report
    
    Generate a single self-contained HTML file using the **Obsidian & Amber** design system. Save to:
    
    ```bash
    mkdir -p ~/.claude-code-docs/courses
    ```
    
    Name the file: `~/.claude-code-docs/courses/changelog-<date>.html` (e.g., `changelog-2026-03-28.html`)
    
    **HTML structure:**
    
    ```
    ├── Header (title, date range, sync status badge)
    ├── Stats bar (count per category with colored numbers)
    ├── Key Highlights box (3-6 most notable changes)
    ├── Section per category
    │   ├── Section heading (icon, label, count)
    │   └── Cards per changed doc
    │       ├── Title + tag (New/Updated/Removed)
    │       ├── Summary paragraph
    │       ├── Bullet list of key changes
    │       ├── Source link → official docs URL
    │       └── "Create Course" button
    └── Footer (generated from, doc count, date)
    ```
    
    **Design rules (Obsidian & Amber):**
    
    Use these exact CSS variables from the course design system:
    
    ```css
    :root {
      --bg: #0D0D16;
      --surface: #161624;
      --surface-hover: #1C1A28;
      --border: #2A2840;
      --text: #E8E0D4;
      --text-muted: #5C5852;
      --accent: #F0A050;
      --accent-dim: rgba(240, 160, 80, 0.08);
      --blue: #60A0E0;
      --blue-dim: rgba(96, 160, 224, 0.08);
      --green: #50C8A0;
      --green-dim: rgba(80, 200, 160, 0.08);
      --purple: #C080E0;
      --purple-dim: rgba(192, 128, 224, 0.08);
      --red: #F06060;
      --red-dim: rgba(240, 96, 96, 0.06);
      --radius: 10px;
    }
    ```
    
    **Typography:** Use the same fonts as the course skill:
    ```html
    <link href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Outfit:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
    ```
    - `Instrument Serif` for h1/h2 headings
    - `Outfit` for body text
    - `JetBrains Mono` for code and badges
    
    **Include the grain overlay** (same as course design system):
    ```css
    body::after {
      content: '';
      position: fixed; top: 0; left: 0;
      width: 100%; height: 100%;
      pointer-events: none; z-index: 9999; opacity: 0.035;
      background-image: url("data:image/svg+xml,...");  /* same noise SVG */
    }
    ```
    
    **Card styling:**
    - Background: `--surface` with `--border` border
    - Hover: border shifts to `--accent` muted, subtle glow
    - Inner shadow highlight: `inset 0 1px 0 rgba(255,255,255,0.04)`
    
    **Tags:**
    - `New` → green badge (`--green-dim` bg, `--green` text)
    - `Updated` → blue badge (`--blue-dim` bg, `--blue` text)
    - `Removed` → red badge (`--red-dim` bg, `--red` text)
    - `Beta` → purple badge (`--purple-dim` bg, `--purple` text)
    
    **Category icons:**
    - CLI: `>_` (terminal prompt)
    - SDK: `{}` (code braces)
    - API: `⟡` (diamond)
    - Platform: `◈` (nested diamond)
    - Prompt Library: `✎` (pen)
    - Other: `●` (dot)
    
    ### The "Create Course" Button
    
    Each card gets a button in its footer area that lets the user generate a course for that topic.
    
    **Button behavior (JavaScript):**
    1. On click, copy the command `/docs --course <topic>` to the clipboard
    2. Show a toast notification: "Copied! Paste in Claude Code to generate a course."
    3. The toast auto-dismisses after 3 seconds
    
    **Button HTML pattern:**
    ```html
    <button class="course-btn" data-topic="hooks" onclick="copyCourseCmd(this)">
      <span class="course-btn-icon">▶</span>
      Create Course
    </button>
    ```
    
    **Button CSS:**
    ```css
    .course-btn {
      display: inline-flex;
      align-items: center;
      gap: 6px;
      padding: 6px 14px;
      border-radius: 999px;
      border: 1px solid var(--accent);
      background: var(--accent-dim);
      color: var(--accent);
      font-family: 'Outfit', sans-serif;
      font-size: 0.78rem;
      font-weight: 600;
      cursor: pointer;
      transition: all 0.2s;
    }
    .course-btn:hover {
      background: var(--accent);
      color: var(--bg);
      box-shadow: 0 0 20px rgba(240, 160, 80, 0.25);
    }
    .course-btn-icon {
      font-size: 0.65rem;
    }
    ```
    
    **Toast notification:**
    ```css
    .toast {
      position: fixed;
      bottom: 2rem;
      left: 50%;
      transform: translateX(-50%) translateY(20px);
      background: var(--surface);
      border: 1px solid var(--accent);
      color: var(--accent);
      padding: 0.75rem 1.5rem;
      border-radius: var(--radius);
      font-family: 'Outfit', sans-serif;
      font-size: 0.88rem;
      font-weight: 500;
      box-shadow: 0 8px 32px rgba(0,0,8,0.5), 0 0 20px rgba(240,160,80,0.15);
      opacity: 0;
      transition: opacity 0.3s, transform 0.3s;
      z-index: 10000;
    }
    .toast.show {
      opacity: 1;
      transform: translateX(-50%) translateY(0);
    }
    ```
    
    **JavaScript:**
    ```javascript
    function copyCourseCmd(btn) {
      const topic = btn.dataset.topic;
      const cmd = '/docs --course ' + topic;
      navigator.clipboard.writeText(cmd).then(() => {
        showToast('Copied! Paste in Claude Code: ' + cmd);
      }).catch(() => {
        // Fallback for older browsers
        const ta = document.createElement('textarea');
        ta.value = cmd; document.body.appendChild(ta);
        ta.select(); document.execCommand('copy');
        document.body.removeChild(ta);
        showToast('Copied! Paste in Claude Code: ' + cmd);
      });
    }
    
    function showToast(msg) {
      let toast = document.getElementById('toast');
      if (!toast) {
        toast = document.createElement('div');
        toast.id = 'toast';
        toast.className = 'toast';
        document.body.appendChild(toast);
      }
      toast.textContent = msg;
      toast.classList.add('show');
      clearTimeout(toast._timeout);
      toast._timeout = setTimeout(() => toast.classList.remove('show'), 3000);
    }
    ```
    
    ### Phase 4: Open and Present
    
    After generating the HTML:
    1. Open it in the browser
    2. Tell the user where it's saved: `~/.claude-code-docs/courses/changelog-<date>.html`
    3. Summarize the key findings: "Found X changes across Y categories in the last Z days."
    4. Mention they can click "Create Course" on any card to copy the course generation command
    
    ## URL Generation
    
    Each `manifest-diff.sh` entry already includes the exact `.url` field — use it directly.
    (If you need a URL for a filename not in the diff output, look it up:
    `jq -r '.pages[] | select(.filename=="<filename>") | .url' ~/.claude-code-docs/paths_manifest.json`.)
    
    ## Topic Extraction for Course Buttons
    
    The `data-topic` attribute on each course button should be the human-readable topic name extracted from the filename:
    - `claude-code__hooks.md` → `hooks`
    - `claude-code__hooks-guide.md` → `hooks guide`
    - `docs__en__agent-sdk__python.md` → `Agent SDK Python`
    - `docs__en__build-with-claude__prompt-caching.md` → `prompt caching`
    - `docs__en__agents-and-tools__tool-use__overview.md` → `tool use`
    
    Strip the category prefix, replace `__` and `-` with spaces, and capitalize naturally.
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related