skills/golem-powers/whats-new/SKILL.md
Cross-reference Claude Code, Codex CLI, Cursor CLI, and Wispr Flow changelogs against your setup (hooks, skills, MCP, repoGolem launchers, model configs). Reports what affects you, new capabilities, VoiceBar competitive intel. Triggers: 'whats new', 'changelog', 'release notes', 'any updates'.
npx skillsauth add etanhey/golems whats-newInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Inspired by Brad Feld's whats-new plugin. Our version tracks FOUR products and cross-references against the full golems ecosystem.
Fetches the latest release notes for tools you depend on, diffs them against your actual configuration, and produces a structured report of:
NEVER fetch a full changelog page via crawling_exa with maxCharacters > 3000. The Anthropic changelog alone is 200K+ characters. Fetching it causes "result exceeds maximum" errors and the skill fails. Always use: GitHub API (preferred), freshness-scoped search, OR crawling with maxCharacters: 3000 (gets only the most recent entries at the top of the page). This applies to ALL products — Claude Code, Codex CLI, Cursor CLI, and Wispr Flow release pages all grow over time.
Changelog source: GitHub Releases API (primary), Anthropic docs (fallback)
How to fetch (tiered approach):
# Step 0: Check installed version
claude --version
# Step 1 (PRIMARY — GitHub API): Last 5 releases with full release notes
curl -s "https://api.github.com/repos/anthropics/claude-code/releases?per_page=5"
This returns structured JSON with tag_name, body (release notes), and published_at. Most reliable for recent releases.
# Step 2 (FALLBACK — exa search with freshness cascade):
# Try last week first:
mcp__exa__web_search_exa(query: "Claude Code changelog [INSTALLED_VERSION]", freshness: "week", includeDomains: ["docs.anthropic.com", "github.com/anthropics"])
# If no results, expand to last month:
mcp__exa__web_search_exa(query: "Claude Code changelog latest release", freshness: "month", includeDomains: ["docs.anthropic.com", "github.com/anthropics"])
# Step 3 (LAST RESORT — crawl only the top of the page):
# maxCharacters: 3000 gets only the most recent entries at the top
mcp__exa__crawling_exa(urls: ["https://docs.anthropic.com/en/docs/claude-code/changelog"], maxCharacters: 3000)
Changelog source: https://releasebot.io/updates/wispr-flow or https://wisprflow.ai/changelog
How to fetch:
mcp__exa__crawling_exa(urls: ["https://releasebot.io/updates/wispr-flow"], maxCharacters: 3000)
Alternative:
mcp__exa__web_search_exa(query: "Wispr Flow changelog release notes latest", freshness: "month", includeDomains: ["wisprflow.ai", "releasebot.io"])
Changelog source: https://developers.openai.com/codex/changelog
How to fetch (tiered approach):
# Check installed version
codex --version 2>/dev/null || npx @openai/codex --version
# Step 1 (PRIMARY — exa search with freshness cascade):
# Try last week first:
mcp__exa__web_search_exa(query: "OpenAI Codex CLI changelog latest release", freshness: "week", includeDomains: ["developers.openai.com", "github.com/openai"])
# If no results, expand to last month:
mcp__exa__web_search_exa(query: "OpenAI Codex CLI changelog latest release", freshness: "month", includeDomains: ["developers.openai.com", "github.com/openai"])
# Step 2 (FALLBACK — crawl only the top of the page):
mcp__exa__crawling_exa(urls: ["https://developers.openai.com/codex/changelog"], maxCharacters: 3000)
Changelog source: https://cursor.sh/changelog or https://www.cursor.com/changelog
How to fetch (tiered approach):
# Check installed version
cursor --version 2>/dev/null
# Step 1 (PRIMARY — exa search with freshness cascade):
# Try last week first:
mcp__exa__web_search_exa(query: "Cursor IDE CLI changelog latest release agent mode", freshness: "week", includeDomains: ["cursor.com", "cursor.sh"])
# If no results, expand to last month:
mcp__exa__web_search_exa(query: "Cursor IDE CLI changelog latest release agent mode", freshness: "month", includeDomains: ["cursor.com", "cursor.sh"])
# Step 2 (FALLBACK — crawl only the top of the page):
mcp__exa__crawling_exa(urls: ["https://www.cursor.com/changelog"], maxCharacters: 3000)
For each changelog entry, check it against these configuration surfaces:
~/.claude/settings.json)cat ~/.claude/settings.json
Cross-reference against:
~/.claude/commands/)ls ~/.claude/commands/
Cross-reference against:
~/.claude/hooks/)ls ~/.claude/hooks/
Cross-reference against:
if conditional field, updatedInput in PreToolUse)# Global MCP config
cat ~/.claude/.mcp.json 2>/dev/null || echo "No global .mcp.json"
# Find all repo-level MCP configs
find ~/Gits -maxdepth 2 -name ".mcp.json" -type f 2>/dev/null
Cross-reference against:
~/Gits/voicelayer/)For Wispr Flow changes specifically:
cat ~/.golems/config.yaml 2>/dev/null | head -50
# Or check registry
cat ~/Gits/orchestrator/repoGolem/registry.json 2>/dev/null | python3 -c "import json,sys; [print(k) for k in json.load(sys.stdin).keys()]"
Cross-reference against:
--model, --approval-mode, --quiet, --full-auto. Any new flags = update launchers.--model, --output-format text, --trust. Any new flags = update audit scripts.gpt-5.5 / gpt-5.5-codex rolling out from 2026-04-23, claude-opus-4-7, etc.) affect routing in standards/agents.md and /agent-routing SKILL.md. Refresh stale model-name strings when a new tier becomes the recommended default.enabledPlugins in settings.json)cat ~/.claude/settings.json | python3 -c "import json,sys; d=json.load(sys.stdin); [print(k) for k in d.get('enabledPlugins', {}).keys()]"
Cross-reference against:
Save a snapshot of the current Claude Code CLI surface and diff against the previous version:
# Save current snapshot
ver=$(claude --version | head -1 | awk '{print $1}')
snapshot_dir=~/.claude/schema-snapshots
mkdir -p "${snapshot_dir}"
version_sort() {
if command -v gsort >/dev/null 2>&1; then
gsort -V
else
python3 -c 'import re, sys
def key(value):
return [int(part) if part.isdigit() else part.lower() for part in re.split(r"([0-9]+)", value.rstrip())]
for line in sorted((line.rstrip("\n") for line in sys.stdin if line.strip()), key=key):
print(line)'
fi
}
find_previous_snapshot() {
pattern="$1"
current_file="$2"
find "${snapshot_dir}" -maxdepth 1 -name "${pattern}" -type f 2>/dev/null \
| version_sort \
| grep -F -v "${current_file}" \
| tail -1
}
# CLI help (all flags)
claude --help > "${snapshot_dir}/help-${ver}.txt" 2>&1
# Environment variables (from installed package)
pkg_path=""
if npm_root=$(npm root -g); then
candidate="${npm_root}/@anthropic-ai/claude-code"
if [ -f "${candidate}/cli.mjs" ]; then
pkg_path="${candidate}"
fi
fi
if [ -z "${pkg_path}" ]; then
claude_bin=$(command -v claude)
claude_real=$(python3 -c 'import os, sys; print(os.path.realpath(sys.argv[1]))' "${claude_bin}")
if candidate=$(cd "$(dirname "${claude_real}")/../lib/node_modules/@anthropic-ai/claude-code" 2>/dev/null && pwd); then
if [ -f "${candidate}/cli.mjs" ]; then
pkg_path="${candidate}"
fi
fi
fi
if [ -z "${pkg_path}" ]; then
echo "Error: could not locate @anthropic-ai/claude-code via npm root -g or the claude binary layout" >&2
exit 1
fi
grep -rohE "CLAUDE_CODE_[A-Z_]+" "${pkg_path}/cli.mjs" | sort -u > "${snapshot_dir}/envvars-${ver}.txt"
# Find previous snapshot
prev=$(find_previous_snapshot "help-[0-9]*.txt" "${snapshot_dir}/help-${ver}.txt")
# Codex CLI snapshot
prev_codex=""
if command -v codex >/dev/null 2>&1; then
codex_bin=$(command -v codex)
codex_ver=$(codex --version 2>/dev/null || echo unknown)
codex --help > "${snapshot_dir}/help-codex-${codex_ver}.txt" 2>&1
if [ -n "${codex_bin}" ]; then
grep -aohE "CODEX_[A-Z_]+" "${codex_bin}" 2>/dev/null | sort -u > "${snapshot_dir}/envvars-codex-${codex_ver}.txt"
fi
prev_codex=$(find_previous_snapshot "help-codex-*.txt" "${snapshot_dir}/help-codex-${codex_ver}.txt")
fi
# Gemini CLI snapshot
prev_gemini=""
if command -v gemini >/dev/null 2>&1; then
gemini_bin=$(command -v gemini)
gemini_ver=$(gemini --version 2>/dev/null | head -1)
[ -n "${gemini_ver}" ] || gemini_ver=unknown
gemini --help > "${snapshot_dir}/help-gemini-${gemini_ver}.txt" 2>&1
if [ -n "${gemini_bin}" ]; then
grep -aohE "GEMINI_[A-Z_]+" "${gemini_bin}" 2>/dev/null | sort -u > "${snapshot_dir}/envvars-gemini-${gemini_ver}.txt"
fi
prev_gemini=$(find_previous_snapshot "help-gemini-*.txt" "${snapshot_dir}/help-gemini-${gemini_ver}.txt")
fi
# Cursor CLI snapshot
prev_cursor=""
if command -v cursor >/dev/null 2>&1; then
cursor_bin=$(command -v cursor)
cursor_ver=$(cursor --version 2>/dev/null || echo unknown)
cursor --help > "${snapshot_dir}/help-cursor-${cursor_ver}.txt" 2>&1
if [ -n "${cursor_bin}" ]; then
grep -aohE "CURSOR_[A-Z_]+" "${cursor_bin}" 2>/dev/null | sort -u > "${snapshot_dir}/envvars-cursor-${cursor_ver}.txt"
fi
prev_cursor=$(find_previous_snapshot "help-cursor-*.txt" "${snapshot_dir}/help-cursor-${cursor_ver}.txt")
fi
If a previous snapshot exists, diff:
if [ -n "$prev" ]; then
prev_ver=$(basename "$prev" | sed 's/help-//;s/.txt//')
echo "=== Diffing v${prev_ver} \u2192 v${ver} ==="
# New CLI flags
diff <(grep '^\s*--' "${snapshot_dir}/help-${prev_ver}.txt" | sort) \
<(grep '^\s*--' "${snapshot_dir}/help-${ver}.txt" | sort) | grep '^>'
# New env vars
diff "${snapshot_dir}/envvars-${prev_ver}.txt" \
"${snapshot_dir}/envvars-${ver}.txt" | grep '^>'
fi
if [ -n "$prev_codex" ] && [ -n "${codex_ver:-}" ]; then
prev_codex_ver=$(basename "$prev_codex" | sed 's/help-codex-//;s/.txt//')
echo "=== Diffing Codex ${prev_codex_ver} -> ${codex_ver} ==="
diff <(grep '^\s*--' "${snapshot_dir}/help-codex-${prev_codex_ver}.txt" | sort) \
<(grep '^\s*--' "${snapshot_dir}/help-codex-${codex_ver}.txt" | sort) | grep '^>'
diff "${snapshot_dir}/envvars-codex-${prev_codex_ver}.txt" \
"${snapshot_dir}/envvars-codex-${codex_ver}.txt" | grep '^>'
fi
if [ -n "$prev_gemini" ] && [ -n "${gemini_ver:-}" ]; then
prev_gemini_ver=$(basename "$prev_gemini" | sed 's/help-gemini-//;s/.txt//')
echo "=== Diffing Gemini ${prev_gemini_ver} -> ${gemini_ver} ==="
diff <(grep '^\s*--' "${snapshot_dir}/help-gemini-${prev_gemini_ver}.txt" | sort) \
<(grep '^\s*--' "${snapshot_dir}/help-gemini-${gemini_ver}.txt" | sort) | grep '^>'
diff "${snapshot_dir}/envvars-gemini-${prev_gemini_ver}.txt" \
"${snapshot_dir}/envvars-gemini-${gemini_ver}.txt" | grep '^>'
fi
if [ -n "$prev_cursor" ] && [ -n "${cursor_ver:-}" ]; then
prev_cursor_ver=$(basename "$prev_cursor" | sed 's/help-cursor-//;s/.txt//')
echo "=== Diffing Cursor ${prev_cursor_ver} -> ${cursor_ver} ==="
diff <(grep '^\s*--' "${snapshot_dir}/help-cursor-${prev_cursor_ver}.txt" | sort) \
<(grep '^\s*--' "${snapshot_dir}/help-cursor-${cursor_ver}.txt" | sort) | grep '^>'
diff "${snapshot_dir}/envvars-cursor-${prev_cursor_ver}.txt" \
"${snapshot_dir}/envvars-cursor-${cursor_ver}.txt" | grep '^>'
fi
Any new flags or env vars found = classify as "AFFECTS YOU" automatically, even if no changelog mentions them. These are undocumented changes that the changelog fetch in Step 3 might miss.
Why this matters: Claude Code publishes to npm faster than changelogs update. Versions 2.1.102-104 had zero release notes but contained actual new flags (--bare, --tmux, --brief, CLAUDE_CODE_AGENT_COST_STEER, CLAUDE_CODE_AUTO_COMPACT_WINDOW) discoverable only through binary introspection.
Run ALL of these in parallel (independent data gathering):
# Current versions
claude --version
codex --version 2>/dev/null || echo "codex: check npx @openai/codex --version"
cursor --version 2>/dev/null || echo "cursor: not installed or not in PATH"
# Settings
cat ~/.claude/settings.json
# Skills count
ls ~/.claude/commands/ | wc -l
# Hooks
ls ~/.claude/hooks/
# Plugins list
cat ~/.claude/settings.json | python3 -c "import json,sys; d=json.load(sys.stdin); [print(k) for k in d.get('enabledPlugins', {}).keys()]"
# repoGolem registry (launcher configs)
cat ~/Gits/orchestrator/repoGolem/registry.json 2>/dev/null | python3 -c "import json,sys; d=json.load(sys.stdin); print(f'{len(d)} launchers registered')"
brain_search("whats-new changelog review last version")
If a prior review exists, note the last-reviewed versions. Only analyze entries AFTER those versions.
Use the last-reviewed version from Step 2 (BrainLayer) to scope what you fetch. For each product, follow the tiered fetch strategy — try each step in order, stop when you get useful results.
Claude Code (3-tier):
# Tier 1 (PRIMARY): GitHub Releases API — structured, reliable, always current
curl -s "https://api.github.com/repos/anthropics/claude-code/releases?per_page=5"
# Tier 2 (FALLBACK): exa search with freshness cascade
mcp__exa__web_search_exa(query: "Claude Code changelog [INSTALLED_VERSION]", freshness: "week", includeDomains: ["docs.anthropic.com", "github.com/anthropics"])
# If empty, try freshness: "month"
mcp__exa__web_search_exa(query: "Claude Code changelog latest release", freshness: "month", includeDomains: ["docs.anthropic.com", "github.com/anthropics"])
# Tier 3 (LAST RESORT): Crawl only the top of the changelog page
mcp__exa__crawling_exa(urls: ["https://docs.anthropic.com/en/docs/claude-code/changelog"], maxCharacters: 3000)
Wispr Flow:
mcp__exa__crawling_exa(urls: ["https://releasebot.io/updates/wispr-flow"], maxCharacters: 3000)
Codex CLI (2-tier):
# Tier 1: exa search with freshness cascade
mcp__exa__web_search_exa(query: "OpenAI Codex CLI changelog latest release", freshness: "week", includeDomains: ["developers.openai.com", "github.com/openai"])
# If empty, try freshness: "month"
mcp__exa__web_search_exa(query: "OpenAI Codex CLI changelog latest release", freshness: "month", includeDomains: ["developers.openai.com", "github.com/openai"])
# Tier 2: Crawl only the top of the changelog page
mcp__exa__crawling_exa(urls: ["https://developers.openai.com/codex/changelog"], maxCharacters: 3000)
Cursor CLI (2-tier):
# Tier 1: exa search with freshness cascade
mcp__exa__web_search_exa(query: "Cursor IDE CLI changelog latest release agent mode", freshness: "week", includeDomains: ["cursor.com", "cursor.sh"])
# If empty, try freshness: "month"
mcp__exa__web_search_exa(query: "Cursor IDE CLI changelog latest release agent mode", freshness: "month", includeDomains: ["cursor.com", "cursor.sh"])
# Tier 2: Crawl only the top of the changelog page
mcp__exa__crawling_exa(urls: ["https://www.cursor.com/changelog"], maxCharacters: 3000)
Step 0 schema diffs are pre-classified as AFFECTS YOU. Merge them with changelog findings -- if a flag appears in BOTH the schema diff AND the changelog, prefer the changelog description.
For EACH changelog entry, classify into exactly one category:
AFFECTS YOU (priority: critical) The change touches a specific config you have. Examples:
NEW CAPABILITY (priority: medium) The change adds something you don't use yet but should consider. Examples:
if field for hooks" -- you could optimize your PreToolUse hooksFYI (priority: low) Everything else. Windows fixes, VSCode-only changes, features for plans you don't have, etc.
Use this exact format:
# What's New -- YYYY-MM-DD
## Versions Checked
- **Claude Code:** vX.Y.Z (installed) | changelog up to vA.B.C
- **Codex CLI:** vX.Y.Z (installed) | changelog up to vA.B.C
- **Cursor CLI:** vX.Y.Z (installed) | changelog up to vA.B.C
- **Wispr Flow:** latest release (YYYY-MM-DD)
- **Last reviewed:** vX.Y.Z (Claude Code) / YYYY-MM-DD (others)
---
## AFFECTS YOU
### [Claude Code / Wispr Flow] -- Short description
**What changed:** One-line summary
**Your config:** Which specific file/setting is affected
**Action needed:** What to check, change, or test
**Risk:** HIGH / MEDIUM / LOW
---
## NEW CAPABILITIES
### [Claude Code / Wispr Flow] -- Short description
**What's new:** One-line summary
**Why it matters for you:** How this intersects with your current setup
**Adoption effort:** TRIVIAL / SMALL / MEDIUM
**Suggested action:** Concrete next step
---
## FYI
- [CC] Fixed VSCode extension showing "Not responding" during long ops
- [CC] Improved PowerShell dangerous command detection
- [WF] Android early access launched
- ...
---
## VoiceBar Competitive Notes
_(Only if Wispr Flow had relevant updates)_
- **Feature gap:** [what Wispr added that VoiceBar lacks]
- **Differentiation opportunity:** [where VoiceBar is ahead or different]
- **No action needed:** [parity features or irrelevant platform updates]
brain_store(
content: "whats-new review YYYY-MM-DD: Claude Code vX.Y.Z, Codex vX.Y.Z, Cursor vX.Y.Z, Wispr Flow latest. AFFECTS: [count] items ([summary]). NEW CAPABILITIES: [count] items ([summary]). Key actions: [list]. VoiceBar notes: [summary].",
tags: ["whats-new", "changelog", "claude-code", "codex-cli", "cursor-cli", "wispr-flow", "<YYYY-MM-DD>"],
importance: 7
)
If any AFFECTS YOU item has risk HIGH:
notify "Whats New" "HIGH risk change in [product]: [summary]. Check [config file]."
/whats-new
/whats-new 2.1.85
(Shows only changes from that version onward)
/whats-new --quick
(Only AFFECTS YOU items, skip FYI)
/whats-new --wispr
claude --version shows a new version -- mandatoryWebSearch or WebFetch for changelog URLs. Report that live data was unavailable.--version flag doesn't match any changelog entry, show the closest match and note the gap.development
Create, edit, and verify golem-powers skills using the standard SKILL.md structure, workflow files, adapters, templates, and eval fixtures. Use for new skills, structural edits, workflows/adapters, and pre-deploy validation. NOT for invoking existing skills, superpowers skills, or skill-creator agent workflows.
testing
Extract structured knowledge from any video source — YouTube URLs or local screen recordings. YouTube → gems workflow (yt-dlp transcript → keyword hotspots → frame extract → brain_digest → structured gems). Screen recordings → QA workflow (reuses /qa-video stalker pipeline). Use when user shares a YouTube link wanting deep extraction with frames, shares a .mov/.mp4 for QA processing, says "extract from video", "video gems", "process this recording", or mentions gem extraction from video content.
testing
Use when running or reviewing any recurring monitor loop for merge queues, worker queues, collab tails, or agent completion. Enforces drive-to-completion ticks: every tick must query live state with `!`, classify whether real progress happened, and then dispatch, verify-and-decrement, or escalate-park. Triggers on: monitor loop, /loop, recurring tick, keep monitoring, silent autonomous, merge gate, blocked review, no-progress loop.
tools
MeHayom freelance client management — daily updates, decision tracking, time logging. Use when drafting Yuval updates, logging scope changes, tracking hours, or any MeHayom client communication. Triggers: 'draft Yuval update', 'client update', 'daily update', 'log decision', 'track time', 'mehayom'.