3.4 KiB
3.4 KiB
description, model, allowed-tools
| description | model | allowed-tools |
|---|---|---|
| Generate a commit description for the current session's jj change | claude-haiku-4-5 | Bash(jjagent:*), Bash(jj:*) |
jj-describe
Generate a commit description for a Claude session's jj change
instructions
You must follow these steps to create a proper commit message:
-
Determine session ID:
- Use the session ID from the system reminder (current session)
- Store the session ID for use in subsequent steps
-
Check if a change exists for the session:
- Run:
jjagent change-id <session-id>to check if a change exists - IMPORTANT: If the command fails or returns an error, immediately stop and inform the user: "No jj change exists for this session yet. There's nothing to describe."
- Do NOT proceed to the next steps if no change ID is found
- Run:
-
Gather context:
- Run:
jj diff -r "$(jjagent change-id <session-id>)"to see ONLY the diff - Review the diff to understand what was actually changed
- Review the conversation/context to understand why a change was made
- Do NOT read the existing commit message - it will be replaced entirely
- Run:
-
Generate a NEW commit message:
- First line (subject):
- 50 characters or less
- Capitalize the first letter
- Use imperative mood (e.g., "Add feature" not "Added feature" or "Adds feature")
- No period at the end
- Concise summary of the change, not just "jjagent: session "
- Second line: Blank
- Body (if needed):
- Wrap at 72 characters
- Provide more detailed explanatory text with technical details, but stay concise
- Explain what and why, not how the code works
- Use bullet points for multiple items if appropriate
- Blank lines separate paragraphs
- First line (subject):
-
Update the description:
- Run:
jjagent describe <session-id> -m "your commit message here" - Do NOT include any trailers (Claude-session-id, etc.) - they are preserved automatically
- Only include the subject line and body
- Use a heredoc or proper quoting to preserve formatting
- Note: This is the Rust CLI tool command, not the slash command
- Run:
-
Show the final change
- Run:
jj show "$(jjagent change-id <session-id>) -sand show the user direct output formatted as a code block
- Run:
Example commit message (what you pass to jjagent describe):
Add SessionStart and UserPromptSubmit hooks
Implement hook handlers that inject the session ID into Claude's
context at the start of a session and re-inject it when it's been
lost from the recent transcript.
- Add HookSpecificOutput structure for passing context to Claude
- Implement handle_session_start_hook to inject session ID
- Implement handle_user_prompt_submit_hook to re-inject when needed
- Add comprehensive tests for both hook handlers
Note: Do NOT include the Claude-session-id trailer - it's preserved automatically.
Important notes:
- Do NOT use the generic "jjagent: session " format for the subject line
- DO write a concise summary in the subject, with technical details in the body
- DO analyze the actual changes and write a meaningful, specific subject
- DO use imperative mood ("Add", "Fix", "Refactor", not "Added", "Fixed", "Refactored")
- DO keep the subject line to 50 characters or less
- DO wrap body lines at 72 characters
- Do NOT include trailers - they are preserved automatically by
jjagent describe - Do NOT look at the existing commit message - generate a fresh one from the diff