plugins/dev/skills/commit/SKILL.md
Automatically analyzes code changes and creates git commits with conventional commit messages when the user indicates they want to save their work, commit changes, or says 'commit this', 'save my changes', 'let's commit'. Auto-detects commit type, scope, and ticket reference from branch name.
npx skillsauth add coalesce-labs/catalyst commitInstall 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.
You are tasked with creating git commits using conventional commit format for the changes made during this session.
Analyze what changed:
git status to see current changesgit diff --cached to see staged changes (if any)git diff to see unstaged changesgit diff --name-only and git diff --cached --name-onlyAuto-detect conventional commit components:
Type detection (suggest to user):
*.md files in docs/: suggest docs*test*, *spec*): suggest testpackage.json, *.lock files: suggest build.github/workflows/: suggest cifeat or fix based on contextfeat, fix, refactor, chore, docs, style,
perf, test, build, ciScope detection (suggest to user):
agents/*.md → agentscommands/*.md → commandsscripts/* → scriptsdocs/*.md → docs.claude/ → claudeExtract ticket reference:
git branch --show-current{PREFIX}-{NUMBER} (e.g., ENG-123, PROJ-456)Generate conventional commit message:
Format:
<type>(<scope>): <short summary>
<body - optional but recommended>
<footer - ticket reference>
Rules:
Refs: TICKET-123 if ticket in branch nameExample:
feat(commands): add conventional commit support to /commit
Updates the commit command to automatically detect commit type
and scope from changed files, following conventional commits spec.
Extracts ticket references from branch names for traceability.
Refs: ENG-123
Present plan to user:
<type>(<scope>): <summary>"Execute commit:
git add <specific-files> (NEVER use -A or .)git log --oneline -n 1git show --stat HEADReads from .catalyst/config.json:
{
"catalyst": {
"commit": {
"useConventional": true,
"scopes": ["agents", "commands", "scripts", "docs", "config"],
"autoDetectType": true,
"autoDetectScope": true,
"requireBody": false
},
"project": {
"ticketPrefix": "PROJ"
}
}
}
Types that appear in CHANGELOG:
feat - New featurefix - Bug fixperf - Performance improvementrevert - Revert previous commitInternal types:
docs - Documentation onlystyle - Formatting, no code changerefactor - Code restructuring, no behavior changetest - Adding/updating testsbuild - Build system or dependenciesci - CI/CD configurationchore - Maintenance tasksFeature:
feat(agents): add codebase-pattern-finder agent
Implements new agent for finding similar code patterns across
the codebase with concrete examples and file references.
Refs: ENG-456
Fix:
fix(commands): handle missing PR template gracefully
Previously crashed when thoughts/shared/pr_description.md was
missing. Now provides clear error with setup instructions.
Refs: ENG-789
Documentation:
docs(scripts): add README for setup scripts
Documents all scripts in scripts/ directory with usage examples
and explains when to use each setup method.
Refs: ENG-012
Chore (no ticket):
chore(config): update conventional commit scopes
Adds new scopes for agents and commands directories.
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