Skip to content
Back to skills

Analyze Changes

ASecurity

Analyze uncommitted changes for categorization and risk assessment

  • 3 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 10, 2026
toolsgobashgit

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned September 10, 2026

npx -y skills add kapilvirenahuja/garura --skill analyze-changes --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Analyze Changes?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Analyze Changes
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kapilvirenahuja-analyze-changes/badge)](https://www.skillsdirectory.com/skills/kapilvirenahuja-analyze-changes)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: analyze-changes
description: Analyze uncommitted changes for categorization and risk assessment
user-invocable: false
model: sonnet
allowed-tools: Bash, Read
---

# analyze-changes

Model-invocable skill for analyzing uncommitted changes.

## Purpose

Analyze uncommitted changes and produce structured analysis for the calling agent.

You DO the analysis work. You do NOT make decisions about what to do with it.

## Input

Receive from agent:
- Request to analyze current uncommitted changes

## Process

1. **Read State**
   ```bash
   git status --porcelain
   git diff --name-only
   git diff --stat
   git diff
   git branch --show-current
   ```

2. **Categorize Each File**

   Load categories from: `~/.garura/core/memory/standards/rules/commits.md`

3. **Detect Risks**

   Load patterns from: `reference/risks.md`

4. **Group by Issue**

   The primary grouping dimension is ISSUE, not component or file location.

   **Grouping rules (in priority order):**
   1. **Branch signal first** — extract issue number from branch name (e.g., `feature/95-foo` → #95). All changes on a single-issue branch default to ONE group for that issue.
   2. **Split only when multiple issues are present** — if the working tree contains changes for different issues (e.g., a hotfix mixed with feature work), split into one group per issue.
   3. **Within an issue group, pick the dominant commit type** — if an issue group has mostly `feat` files with a few `docs` files, the type is `feat`. Only split by type within an issue if the types are genuinely unrelated (e.g., a `fix` for issue #78 and a `feat` for issue #95).
   4. **Never split a single issue into multiple groups by component** — agents, skills, plays, and memory changes for the same issue are ONE commit, not separate commits per directory.

   **When to split within a single issue (rare):**
   - Changes include a genuinely unrelated `chore` (e.g., dependency bump) alongside feature work
   - STM/evidence artifacts that are operational, not part of the feature itself

## Output

Write the grouped analysis to the contract's `outputs.analysis` path as **YAML in the
executor's schema** — `commit-change/scripts/execute_commits.py` consumes this file
mechanically, so the schema is a hard contract, not a style. The exact shape (with field
notes) is in `templates/analysis-output.md`:

```yaml
needs_judgment: false          # always false on output — the judgment is now done
change_groups:
  - id: <kebab-slug>           # `id`, NOT `name`
    issue: <n>                 # bare number, no '#'
    commit_type: <type>        # `commit_type`, NOT `type` — feat|fix|refactor|docs|chore|test
    scope: <area>
    subject: "<imperative subject>"   # no issue suffix — the executor appends (#issue)
    files:                     # PLAIN repo-relative paths only.
      - <path>                 # a rename lists BOTH sides as separate entries
      - <old-path>             #   (never "old -> new" in one string)
      - <new-path>
exclusions:                    # carry the scan's exclusions through unchanged
  - path: "<path>"
    reason: "<why>"
    blocking: false
risks:
  sensitive_files: []          # paths that must block the run, [] when clean
```

Every changed file from the scan lands in exactly one group's `files` or in `exclusions`.
Any extra keys (notes, eval evidence, confidence) are tolerated but ignored by the
executor — never rename or omit the contract keys above.

**IMPORTANT**: This skill produces analysis data. The calling agent receives this output and decides what to do next. Do NOT instruct the agent to return or stop — the agent continues its workflow after receiving this analysis.

## Version

| Field | Value |
|-------|-------|
| Version | 1.0.0 |
| Category | analysis |

Files in this skill

  • SKILL.md3.7 KB
  • reference/risks.md749 B
  • templates/analysis-output.md2.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…