plugins/dev/skills/add-changelog-media/SKILL.md
Add screenshots, screencasts (GIFs), or other media to changelog entries. Supports both local files and externally-hosted assets on R2/CDN. Inserts markdown image references into CHANGELOG.md files so they render on the website.
npx skillsauth add coalesce-labs/catalyst add-changelog-mediaInstall 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.
Add screenshots, GIFs, or other visual media to changelog entries for the Catalyst website.
The website renders changelogs from plugins/*/CHANGELOG.md using the starlight-changelogs Astro
plugin. Images can be either:
website/public/ (for small PNGs if needed)Large assets (GIFs, screencasts) are hosted on Cloudflare R2 behind image optimization. The user uploads files to the R2 bucket and provides the URL.
Base URL: https://assets.coalescelabs.ai/changelog/
With Cloudflare image transforms (automatic format conversion + resizing):

The cdn-cgi/image/ path triggers Cloudflare's image optimization:
format=auto — serves WebP/AVIF to browsers that support itwidth=800 — constrains width for page layout (originals can be larger)quality=85 — optional, defaults to 85Without transforms (raw file, for GIFs where you want the animation preserved):

Naming convention: {plugin}-v{version}-{description}.{ext}
For small PNGs/screenshots under ~200KB:
website/public/changelog/
Reference with an absolute path from site root:

Do NOT use relative paths — they will not resolve correctly because starlight-changelogs
processes the markdown as an in-memory string with no filesystem anchor.
Edit the CHANGELOG.md to add the image reference after the AI-generated summary paragraph and
before the ### Features / ### Bug Fixes sections:
## [6.29.0](https://github.com/coalesce-labs/catalyst/compare/...) (2026-04-15)
<!-- ai-enhanced -->
### Worker Detail Drawer & Session Tracking
Click any worker row to open a detail panel with live metrics and activity feed.

### Features
...
To also update the GitHub release with the image:
# Get current release body
gh release view catalyst-dev-v6.29.0 --json body --jq .body > /tmp/release-body.md
# Add image reference (use the same R2 URL)
echo '' >> /tmp/release-body.md
# Update the release
gh release edit catalyst-dev-v6.29.0 --notes-file /tmp/release-body.md
# User provides an R2 URL for a GIF
/catalyst-dev:add-changelog-media dev v6.29.0 https://assets.coalescelabs.ai/changelog/dev-v6.29.0-worker-drawer.gif
# User provides a local screenshot
/catalyst-dev:add-changelog-media dev v6.34.0 ~/Desktop/session-filters.png
development
Migrate a single-harness repo to the dual-harness layout so both Claude Code and Codex load the same instructions and skills — AGENTS.md as the portable canonical doc, a thin CLAUDE.md `@AGENTS.md` bridge, and a `.agents/skills` dir with a `.claude/skills` symlink onto it. Use when asked to migrate to dual-harness, make this repo work in both Claude and Codex, or for agent metadata cleanup.
tools
Goal-driven senior-engineer pipeline-unstick sweep (CTL-1176 rung 3). Given the stuck/failed/needs-human set (or ONE ticket handed by the recovery router), its GOAL is to get the pipeline MOVING again — not to fix one ticket's review findings (that is phase-remediate). It runs AFTER the eyes (diagnostician evidence) and the hands (deterministic unstuck-sweep seams) have already tried, and it CONSUMES their output from a recovery-pass.json brief rather than re-diagnosing or redoing their narrow work. It acts like a senior engineer with full tool access — it resolves merge conflicts, rebases, force-pushes, merges green PRs, and re-dispatches stalled phases AUTONOMOUSLY — and escalates to the operator ONLY for a genuine value judgment / something that degrades other functionality / a real cost-benefit trade-off / a serious architecture change / an ADR conflict. On escalation it AUTHORS the operator inbox row + the push notification (executive-voiced). Dispatched as a `claude --bg` job by phase-agent-dispatch via slash command, AND invocable bare by the operator as a sweep — hence `user-invocable: true`. Ships behind CATALYST_RECOVERY_PASS (off by default — no live behavior change until shadow/enforce).
tools
Diagnose and fix Catalyst setup issues. Validates tools, database, config, OTel, direnv, and thoughts. Automatically fixes what it can — creates directories, initializes the database, sets WAL mode, runs migrations. Use for new installs, upgrades, or when something isn't working.
tools
--- name: phase-triage description: Phase agent that triages a Linear ticket — expands acronyms, classifies (feature/bug/docs/refactor/chore), identifies genuine blockers (a semantic second-pass over the backlog — NOT a prose scrape; CTL-838), estimates scope, writes triage.json, and posts a triage analysis comment to Linear. Triage completion is signaled by that comment plus the local triage.json — there is no `triaged` label. Emits phase.triage.complete.<TICKET> on success and phase.triage.fai