Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Smart commit — detect affected services, run validation, commit with proper format
.claude/skills/nudgebee-smart-commit/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-13 | ✗→✓ | ▲ Improved | 81% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 67% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 150% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 50% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 97% | 0% |
Create a validated commit with proper service-scoped message format. Optional argument: $ARGUMENTS (commit message override).
bash# Staged changes git diff --cached --name-only # Unstaged changes (for reference) git diff --name-only # Untracked files git ls-files --others --exclude-standard
If nothing is staged, show the user what's unstaged/untracked and ask what to stage.
Map every changed file to its service:
| Path prefix | Service | Type | Validation | Working directory | |---|---|---|---|---| | api-server/services/ | api-server | Go | make validate | api-server/services/ | | ticket-server/ | ticket-server | Go | make validate | ticket-server/ | | collector-server/cloud-collector/ | cloud-collector | Go | make validate | collector-server/cloud-collector/ | | collector-server/k8s-collector/relay-server/ | relay-server | Go | make validate | collector-server/k8s-collector/relay-server/ | | collector-server/k8s-collector/app/ | k8s-collector-app | Python | make lint && make test | collector-server/k8s-collector/app/ | | llm/code-analysis/ | code-analysis | Go | make check | llm/code-analysis/ | | llm/llm-server/ | llm-server | Go | make validate | llm/llm-server/ | | llm/rag-server/ | rag-server | Python | make lint && make test | llm/rag-server/ | | llm/benchmark/ | benchmark | Python | poetry run pytest | llm/benchmark/ | | ml-k8s-server/ | ml-k8s-server | Python | make lint && make test | ml-k8s-server/ | | auto-pilot/ | auto-pilot | Python | poetry run black --check . && poetry run flake8 . | auto-pilot/ | | auto-pilot/sidecar/ | auto-pilot-sidecar | Python | poetry run black --check . && poetry run flake8 . | auto-pilot/sidecar/ | | notifications-server/ | notifications-server | Python | poetry run black --check . && poetry run flake8 . | notifications-server/ | | app/ | frontend | TypeScript | npm run lint2 | app/ | | deploy/ | infrastructure | — | — | — | | .github/ | ci | — | — | — |
For each affected service, run its validation command. Report results as a table:
| Service | Validation | Status |
|---------|-----------|--------|
| api-server | make validate | PASS/FAIL |If any validation fails:
If $ARGUMENTS is provided, use it as the commit subject but still prepend the semantic type and scope.
Format: type(scope): subject (per .github/semantic.yml)
Allowed types: | Type | Use when | |---|---| | feat | New feature or functionality | | fix | Bug fix | | docs | Documentation only | | style | Formatting, whitespace, no code change | | refactor | Code restructure, no behavior change | | perf | Performance improvement | | test | Adding or updating tests only | | chore | Maintenance, deps, config | | revert | Reverting a previous commit | | ci | CI/CD workflow changes | | infra | Infrastructure, Helm, K8s changes | | release | Release-related changes |
Allowed scopes (required): | Scope | Services / paths | |---|---| | ui | app/ (frontend) | | autopilot | auto-pilot/, auto-pilot/sidecar/ | | ml | ml-k8s-server/ | | llm | ml-k8s-server/, llm/code-analysis/, llm/llm-server/, llm/rag-server/, llm/benchmark/ | | workflow | workflow-server/ | | notifications | notifications-server/ | | tickets | ticket-server/ | | relay | collector-server/k8s-collector/relay-server/ | | collector | collector-server/cloud-collector/, collector-server/k8s-collector/app/ | | deps | Dependency updates | | NB-xxx | Ticket number — use for api-server/services/, api-server/migrations/, deploy/, .github/, or any cross-service change |
Rules:
fix(ui): handle null pointer in settings pagefeat(NB-1234): add Azure onboarding flowNB-xxx or nb-xxxIf no $ARGUMENTS, analyze the diff to generate an appropriate message. Present the proposed message to the user for confirmation before committing.
IMPORTANT — Single commit per PR policy (main branch only): PRs targeting main MUST have exactly one commit. This does NOT apply to branches targeting test or prod (cherry-picks / promotions) — those can have multiple commits.
NEVER use git add -A or git add . — always add specific files:
bashgit add <specific files>
Then determine the base branch and commit count:
bash# Detect base branch (default: main) BASE_BRANCH="main" COMMIT_COUNT=$(git log origin/${BASE_BRANCH}..HEAD --oneline 2>/dev/null | wc -l | tr -d ' ')
For branches targeting main, enforce single commit:
bashif [ "$COMMIT_COUNT" -eq 0 ]; then # First commit on this branch git commit -m "type(scope): subject" elif [ "$COMMIT_COUNT" -eq 1 ]; then # Amend the existing single commit git commit --amend --no-edit # or with -m "..." to update the message else # Multiple commits exist — squash all into one git reset --soft origin/${BASE_BRANCH} git commit -m "type(scope): subject" fi
--force-with-lease push will be needed (handled by the create-pr skill).For branches targeting test or prod, just commit normally — no amend/squash.
Committed: type(scope): subject
{N} files changed, {A} insertions(+), {D} deletions(-)
Services: {list}
Validation: all passed| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 13,796 | 4,114 | -70% | 1 | 1 | 0% | 1,732 | 1,994 | +15% | 0 | 0 | — |
case-02 | fail→fail | 4,653 | 4,336 | -7% | 1 | 1 | 0% | 228 | 1,955 | +757% | 0 | 0 | — |
case-03 | fail→fail | 3,874 | 4,815 | +24% | 1 | 1 | 0% | 292 | 2,023 | +593% | 0 | 0 | — |
case-04 | pass→fail | 5,798 | 5,533 | -5% | 1 | 1 | 0% | 971 | 1,981 | +104% | 0 | 0 | — |
case-05 | pass→fail | 7,837 | 4,997 | -36% | 1 | 1 | 0% | 1,554 | 1,973 | +27% | 0 | 0 | — |
case-06 | pass→fail | 3,242 | 5,230 | +61% | 1 | 1 | 0% | 510 | 1,982 | +289% | 0 | 0 | — |
case-07 | fail→fail | 5,988 | 4,531 | -24% | 1 | 1 | 0% | 320 | 1,993 | +523% | 0 | 0 | — |
case-08 | fail→fail | 5,399 | 4,542 | -16% | 1 | 1 | 0% | 278 | 1,956 | +604% | 0 | 0 | — |
case-09 | fail→fail | 5,475 | 14,115 | +158% | 1 | 1 | 0% | 991 | 3,310 | +234% | 0 | 0 | — |
case-18 | pass→fail | 3,454 | 4,883 | +41% | 1 | 1 | 0% | 374 | 1,933 | +417% | 0 | 0 | — |
case-10 | fail→fail | 6,363 | 4,384 | -31% | 1 | 1 | 0% | 998 | 1,970 | +97% | 0 | 0 | — |
case-11 | fail→fail | 3,904 | 4,604 | +18% | 1 | 1 | 0% | 568 | 2,192 | +286% | 0 | 0 | — |
case-12 | fail→fail | 6,499 | 4,189 | -36% | 1 | 1 | 0% | 990 | 2,001 | +102% | 0 | 0 | — |
case-13 | fail→pass | 7,914 | 3,221 | -59% | 1 | 1 | 0% | 1,351 | 2,440 | +81% | 0 | 0 | — |
case-14 | fail→pass | 8,612 | 3,801 | -56% | 1 | 1 | 0% | 1,473 | 2,458 | +67% | 0 | 0 | — |
case-15 | fail→pass | 6,226 | 4,795 | -23% | 1 | 1 | 0% | 1,062 | 2,660 | +150% | 0 | 0 | — |
case-16 | pass→pass | 6,968 | 3,422 | -51% | 1 | 1 | 0% | 1,182 | 2,332 | +97% | 0 | 0 | — |
case-17 | pass→fail | 10,035 | 4,179 | -58% | 1 | 1 | 0% | 1,651 | 1,959 | +19% | 0 | 0 | — |
case-19 | pass→pass | 11,040 | 1,692 | -85% | 1 | 1 | 0% | 1,893 | 2,080 | +10% | 0 | 0 | — |
case-20 | fail→pass | 8,891 | 6,063 | -32% | 1 | 1 | 0% | 1,531 | 2,292 | +50% | 0 | 0 | — |
case-21 | pass→pass | 9,514 | 2,642 | -72% | 1 | 1 | 0% | 1,589 | 2,225 | +40% | 0 | 0 | — |
case-22 | fail→pass | 6,961 | 3,069 | -56% | 1 | 1 | 0% | 1,179 | 2,321 | +97% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 8 counted toward the lift figure. The other 14 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of 0 percentage points is the difference between those two pass rates over the 8 comparable cases. 5 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.