Semantic commit assistant. Reads scopes from .claude/.prove.json, detects scope gaps and offers to register new ones, groups changes into logical units, and creates conventional commits.
From provenpx claudepluginhub mjmorales/claude-prove --plugin proveThis skill uses the workspace's default tool permissions.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Analyzes BMad project state from catalog CSV, configs, artifacts, and query to recommend next skills or answer questions. Useful for help requests, 'what next', or starting BMad.
.claude/.prove.json or directory structure.AskUserQuestion per references/interaction-patterns.md.Run in parallel:
.claude/.prove.json -- extract the "scopes" key if presentgit status, git diff, git diff --cachedIf no changes exist, inform the user and stop.
With configured scopes (.claude/.prove.json has "scopes"):
Match each changed file to the scope whose path prefix is the longest match.
{ "scopes": { "api": "src/api/", "auth": "src/auth/", "db": "src/models/" } }
Without configured scopes: derive from the most meaningful path segment (e.g., src/api/handler.go -> api).
Built-in scopes (always available, override nothing):
| Scope | Matches |
|---|---|
docs | README, LICENSE, top-level documentation |
repo | .gitignore, CI/CD, repo infrastructure |
config | .claude/.prove.json, project config files |
Skip if .claude/.prove.json has no "scopes" key.
If changed files fall outside ALL configured scope prefixes AND do not match a built-in scope:
~/.claude/projects/*/memory/ for declined_scope_<name>.md for this projectAskUserQuestion:AskUserQuestion:
question: "Files under `<path>` don't match any configured scope. Add `<name>: <prefix>` to .claude/.prove.json?"
header: "New Scope"
options:
- label: "Add Scope"
description: "Register in .claude/.prove.json and use it now"
- label: "Skip"
description: "Use directory-derived scope; never ask about this scope again"
Add Scope: add the entry to .claude/.prove.json "scopes" and use it for the current commit.
Skip: save a memory file at ~/.claude/projects/<project-dir>/memory/declined_scope_<name>.md:
---
name: declined-scope-<name>
description: User declined adding scope "<name>" (<prefix>) to .claude/.prove.json
type: feedback
---
Do not suggest adding scope "<name>" with prefix "<prefix>" to .claude/.prove.json. Declined on <date>.
Update MEMORY.md in the same directory to include the new entry.
Group changed files into logical commit units -- one per coherent change. Each group maps to one conventional commit type.
When grouping is ambiguous with 2-4 discrete options, use AskUserQuestion. Use free-form for ambiguity that needs open-ended discussion.
For each group:
git add <files> -- stage only files for that group<type>(<scope>): <description>
[optional body]
Co-Authored-By: Claude <noreply@anthropic.com>
git status -- verify before next groupTypes: feat, fix, refactor, docs, test, chore, style, perf, ci, migrate
After all commits: git log --oneline -n <count> and report any remaining uncommitted changes.