From active-descriptions
Collaborative jj change description workflow. Use when writing, drafting, or reviewing a jj change description, or when stale descriptions are flagged by the staleness hooks. Analyzes the diff and conversation history, then applies the description via jj describe.
How this skill is triggered — by the user, by Claude, or both
Slash command
/active-descriptions:describeThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Write change descriptions as a **joint artifact**, co-authored by human and
Write change descriptions as a joint artifact, co-authored by human and agent. Each contributes what they're uniquely positioned to know, at the moment when that knowledge is freshest.
Audience: the next reader who lacks today's context — whether human investigator or AI agent bootstrapping into the codebase. Immediate reviewers benefit too, but the durable value is in the historical record. Tooling (changelogs, release-notes generators) is a secondary consumer; serve it through structural consistency, not by writing for machines.
Format: Conventional Commits. VCS reference: jj cheatsheet.
The commit step is not just documentation. It is a natural pause for reflection on the work itself. Legitimate outcomes include:
Treat description-writing as a moment to evaluate the work, not just record it.
This plugin includes a Stop hook that blocks the session from ending when changes have diverged from their description. When the stop hook fires, treat each flagged change as a describe target:
jj diff -r <change> to get the full current diff.Handle multiple flagged changes sequentially.
Before engaging the human, analyze internally:
jj diff (or jj diff -r <change>) and
account for everything that actually changed, not just what was intended.
The description may not contradict or omit from the diff.This gives you a rich but incomplete picture. The gaps are what the human knows but never said aloud.
Write the full description using everything available: the diff, the
conversation history, and your mechanical analysis. Apply it directly
via jj describe.
Match depth to the change. Not every commit warrants a lengthy body. Reason about proportionality for each specific change in its specific context rather than following fixed categories.
Title: The effect, not the implementation. What changed for the user or system. The "how" goes in the body.
fix: add mutex to guard database handlefix: prevent database corruption during simultaneous sign-upsBody: Inverted pyramid. Most important information first. The reader should be able to stop at any depth and have gotten maximum value.
When a body warrants headings, use this canonical vocabulary so that
readers — human and automated — can navigate predictably. Format
headings as ## Heading (Markdown ATX-style), never with underlines
or bold text as a heading substitute.
| Heading | Use when... |
|---|---|
| Motivation | The "why" isn't obvious from the title alone |
| Background | Context the reader needs but can't get from the diff |
| Approach | The "how" involves non-obvious design choices |
| Alternatives considered | Other approaches were seriously considered or attempted |
| Findings | Implementation revealed surprising behavior or constraints |
| Testing | Verification goes beyond "tests pass" |
| References | Issues, docs, related changes |
Not every description needs headings. Not every headed description needs all of these. But when you reach for a heading, reach for one from this table — don't invent synonyms. Consistency across the history makes the entire commit log more navigable.
Content to include — a menu, not a checklist. Exercise judgment about which items each specific change warrants:
Fixes #1234, related changes. Summarize linked
issues.Content to leave out:
Self-contained. The next reader will have zero access to the original conversation — whether they are a human investigator or a fresh agent session. The description + diff must be sufficient on their own. The commit log is the closest thing to persistent memory across sessions; treat every description as a cache entry. If context would otherwise live only in chat, PR comments, or the conversation history, it belongs in the description.
No noise. Every sentence must survive: "Would this help someone reading this at 2 AM while debugging production?" Say exactly what the diff can't say; omit what the diff already says. Color and context that wouldn't survive this filter can still be included — at the end, clearly separated — so it doesn't bury actionable information.
Prose quality. Prefer active voice, strong verbs, and positive phrasing. Cut every word that doesn't earn its place.
npx claudepluginhub get-real-xr/agent-plugins --plugin active-descriptionsCreates bite-sized, testable implementation plans from specs or requirements, with file structure and task decomposition. Activates before coding multi-step tasks.