Help create a well-formatted git commit message following Canvas LMS conventions.
Format Requirements
Title line (required):
Maximum 60 characters
Concise summary of the change
Imperative mood (e.g., "Fix bug" not "Fixed bug")
Body (required for non-trivial changes):
Each line maximum 60 characters
Explain WHY the change was made
Include technical details and context
Describe what was changed (if not obvious from title)
Keep it concise but detailed
Avoid redundant information
Ticket reference (required):
Use refs TICKET-ID for general work
Use Fixes TICKET-ID for bug fixes
Use closes TICKET-ID for completing features
If ticket is unknown, prompt user for it
Feature flag (required):
Use flag=flag_name if a feature flag is involved
Use flag=none if no flag is needed
Test plan (required):
Include manual testing steps for QA
Focus on user-facing verification steps
Be specific about expected results
Include different scenarios/edge cases
Don't mention automated tests (always implied)
Instructions for Claude
⚠️ CRITICAL: NEVER AUTOMATICALLY COMMIT ⚠️
This command ONLY generates the commit message
DO NOT run git commit or any commit commands
ONLY display the message to the user
ALWAYS ask for explicit confirmation before committing
Wait for user approval before taking any git actions
Each invocation requires NEW explicit approval — prior
approval in the same session does NOT carry over. Even if
the user approved a commit earlier in this conversation,
you MUST ask again for each new invocation of this command.
When the user invokes this command:
Gather information:
Review ONLY staged changes: git diff --staged
Check staged files: git status
DO NOT look at unstaged changes (git diff without
--staged) — only staged content is being committed
If nothing is staged, stop immediately and tell
the user there is nothing to commit
Identify what was changed and why
If ticket number or feature flag is unknown, ask
for BOTH in a single message (not separately)
Generate commit message:
Title: 60 chars max, imperative mood
Body: 60 chars per line, explain the "why"
Include technical details and context
Add ticket reference (refs/Fixes/closes)
Add flag reference (flag=name or flag=none)
Create detailed test plan with manual steps
Format:
Short title (max 50 chars)
Body paragraph explaining the change. Each line max
65 chars. Explain why this change was needed and what
it fixes or improves.
Additional context about the implementation if needed.
Break into multiple paragraphs for readability.
Changes:
- Bullet point summary of key changes (optional)
- Keep bullets concise but informative
- Focus on what, not how
refs TICKET-1234
flag=feature_flag_name
Test plan:
Setup:
- Setup step 1
- Setup step 2
Testing:
- Test step 1 with expected result
- Test step 2 with expected result
- Verify edge case X
- Verify edge case Y
Expected Results:
- Clear description of what should happen
Display message and get approval:
Show the complete generated commit message in a code block
DO NOT commit anything at this stage
Ask: "Would you like me to commit these changes with
this message?"
If user says yes, THEN run the git commit command
using a heredoc to preserve formatting:
git commit -m "$(cat <<'EOF'
Title here
Body here
EOF
)"
NEVER use --no-verify to skip hooks
If user requests changes, regenerate the message
NEVER commit without explicit user confirmation
Example (Generic)
Add validation for email input field
Email addresses were not being validated before submission,
allowing invalid formats to be saved to the database. This
caused downstream errors in notification systems.
Added client-side validation using regex pattern and
server-side validation in the controller. Invalid emails
now show an error message and prevent form submission.
Changes:
- Add email format validation to user form
- Add server-side validation in UsersController
- Display error message for invalid email format
- Add validation tests for edge cases
refs COURSE-1234
flag=none
Test plan:
Setup:
- Navigate to user profile edit page as any user role
Testing:
- Enter valid email (user@example.com) and verify it saves
- Enter invalid email (notanemail) and verify error appears
- Enter email without @ symbol and verify error appears
- Enter email without domain and verify error appears
- Try submitting form with invalid email via console
- Verify server rejects invalid email with proper error
- Test with very long email address (255+ chars)
- Verify email validation works for new user creation
Expected Results:
- Valid emails save successfully without errors
- Invalid emails show clear error message and block save
- Server validation prevents bypassing client validation
- Error messages are clear and actionable
Command Workflow
User invokes /create_commit_msg
Claude reviews ONLY staged changes (git diff --staged)
Claude asks for ticket number (if needed)
Claude asks about feature flags (if needed)
Claude generates and displays the commit message
Claude asks: "Would you like me to commit with this
message?"
User reviews and approves OR requests changes
Only after approval: Claude runs git commit command
Important: Steps 1-6 MUST complete before any git commit
command is executed. The user must explicitly approve.
Notes
Keep commit messages focused on one logical change
If changes are unrelated, create separate commits
Test plan should be thorough but realistic for QA
Include accessibility testing when UI changes are made
Specify browser/environment requirements if relevant
1---2name: create-commit-msg3description: Help create a well-formatted git commit message following Canvas LMS conventions4---56# Create Commit78Help create a well-formatted git commit message following Canvas LMS conventions.910## Format Requirements1112**Title line** (required):13- Maximum 60 characters14- Concise summary of the change15- Imperative mood (e.g., "Fix bug" not "Fixed bug")1617**Body** (required for non-trivial changes):18- Each line maximum 60 characters19- Explain WHY the change was made20- Include technical details and context21- Describe what was changed (if not obvious from title)22- Keep it concise but detailed23- Avoid redundant information2425**Ticket reference** (required):26- Use `refs TICKET-ID` for general work27- Use `Fixes TICKET-ID` for bug fixes28- Use `closes TICKET-ID` for completing features29- If ticket is unknown, prompt user for it3031**Feature flag** (required):32- Use `flag=flag_name` if a feature flag is involved33- Use `flag=none` if no flag is needed3435**Test plan** (required):36- Include manual testing steps for QA37- Focus on user-facing verification steps38- Be specific about expected results39- Include different scenarios/edge cases40- Don't mention automated tests (always implied)4142## Instructions for Claude4344⚠️ **CRITICAL: NEVER AUTOMATICALLY COMMIT** ⚠️45- This command ONLY generates the commit message46- DO NOT run `git commit` or any commit commands47- ONLY display the message to the user48- ALWAYS ask for explicit confirmation before committing49- Wait for user approval before taking any git actions50- **Each invocation requires NEW explicit approval** — prior51 approval in the same session does NOT carry over. Even if52 the user approved a commit earlier in this conversation,53 you MUST ask again for each new invocation of this command.5455When the user invokes this command:56571. **Gather information**:58 - Review ONLY staged changes: `git diff --staged`59 - Check staged files: `git status`60 - DO NOT look at unstaged changes (`git diff` without61 `--staged`) — only staged content is being committed62 - **If nothing is staged, stop immediately** and tell63 the user there is nothing to commit64 - Identify what was changed and why65 - If ticket number or feature flag is unknown, ask66 for BOTH in a single message (not separately)67682. **Generate commit message**:69 - Title: 60 chars max, imperative mood70 - Body: 60 chars per line, explain the "why"71 - Include technical details and context72 - Add ticket reference (refs/Fixes/closes)73 - Add flag reference (flag=name or flag=none)74 - Create detailed test plan with manual steps75763. **Format**:77 ```78 Short title (max 50 chars)7980 Body paragraph explaining the change. Each line max81 65 chars. Explain why this change was needed and what82 it fixes or improves.8384 Additional context about the implementation if needed.85 Break into multiple paragraphs for readability.8687 Changes:88 - Bullet point summary of key changes (optional)89 - Keep bullets concise but informative90 - Focus on what, not how9192 refs TICKET-123493 flag=feature_flag_name9495 Test plan:96 Setup:97 - Setup step 198 - Setup step 299100 Testing:101 - Test step 1 with expected result102 - Test step 2 with expected result103 - Verify edge case X104 - Verify edge case Y105106 Expected Results:107 - Clear description of what should happen108 ```1091104. **Display message and get approval**:111 - Show the complete generated commit message in a code block112 - DO NOT commit anything at this stage113 - Ask: "Would you like me to commit these changes with114 this message?"115 - If user says yes, THEN run the git commit command116 using a heredoc to preserve formatting:117 ```118 git commit -m "$(cat <<'EOF'119 Title here120121 Body here122 EOF123 )"124 ```125 - NEVER use `--no-verify` to skip hooks126 - If user requests changes, regenerate the message127 - NEVER commit without explicit user confirmation128129## Example (Generic)130131```132Add validation for email input field133134Email addresses were not being validated before submission,135allowing invalid formats to be saved to the database. This136caused downstream errors in notification systems.137138Added client-side validation using regex pattern and139server-side validation in the controller. Invalid emails140now show an error message and prevent form submission.141142Changes:143- Add email format validation to user form144- Add server-side validation in UsersController145- Display error message for invalid email format146- Add validation tests for edge cases147148refs COURSE-1234149flag=none150151Test plan:152Setup:153- Navigate to user profile edit page as any user role154155Testing:156- Enter valid email (user@example.com) and verify it saves157- Enter invalid email (notanemail) and verify error appears158- Enter email without @ symbol and verify error appears159- Enter email without domain and verify error appears160- Try submitting form with invalid email via console161- Verify server rejects invalid email with proper error162- Test with very long email address (255+ chars)163- Verify email validation works for new user creation164165Expected Results:166- Valid emails save successfully without errors167- Invalid emails show clear error message and block save168- Server validation prevents bypassing client validation169- Error messages are clear and actionable170```171172## Command Workflow1731741. User invokes `/create_commit_msg`1752. Claude reviews ONLY staged changes (`git diff --staged`)1763. Claude asks for ticket number (if needed)1774. Claude asks about feature flags (if needed)1785. Claude generates and displays the commit message1796. **Claude asks: "Would you like me to commit with this180 message?"**1817. User reviews and approves OR requests changes1828. Only after approval: Claude runs git commit command183184**Important**: Steps 1-6 MUST complete before any git commit185command is executed. The user must explicitly approve.186187## Notes188189- Keep commit messages focused on one logical change190- If changes are unrelated, create separate commits191- Test plan should be thorough but realistic for QA192- Include accessibility testing when UI changes are made193- Specify browser/environment requirements if relevant
Run npx skillmds@latest add instructure/create-commit-msg in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Help create a well-formatted git commit message following Canvas LMS conventions It is listed under Coding & Dev Tools on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
instructure (@instructure) published this skill. Their other Agent Skills are listed on their SkillMD profile.