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.
npx claudepluginhub get-real-xr/agent-plugins --plugin active-descriptionsThis skill is limited to using the following tools:
Write change descriptions as a **joint artifact**, co-authored by human and
Enables AI agents to execute x402 payments with per-task budgets, spending controls, and non-custodial wallets via MCP tools. Use when agents pay for APIs, services, or other agents.
Provides patterns for autonomous Claude Code loops: sequential pipelines, agentic REPLs, PR cycles, de-sloppify cleanups, and RFC-driven multi-agent DAGs. For continuous dev workflows without intervention.
Applies NestJS patterns for modules, controllers, providers, DTO validation, guards, interceptors, config, and production TypeScript backends with project structure and bootstrap examples.
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.