diff-scanning-with-aws-security-agent — Claude Code skill: diff scan
Runs a fast AWS Security Agent scan over only the code changed since a git ref. Handy before a commit or a pull request.
npx skills add aws/agent-toolkit-for-aws --skill diff-scanning-with-aws-security-agent -a claude-codeWhat diff-scanning-with-aws-security-agent does
The skill builds a diff of your working tree or branch and sends just the changed files to AWS Security Agent. No prior full scan is required, so findings stay focused on the delta and the run finishes sooner.
It starts by reading .security-agent/config.json for agent_space_id and region. Without that file the setup-security-agent workflow runs first. Then the agent asks what to compare against: uncommitted changes (BASE_REF=HEAD), a branch against main, or a ref you supply. The diff and a zip of the workspace go to S3, a CodeReview is created, and the job starts with --diff-source. Reports land in .security-agent/findings-{scan_id}.md, scan history in scans.json.
You need working AWS access: the SecurityAgentScanRole role, a security-agent-scans-<account>-<region> bucket, and the AWS CLI. The workspace archive is capped at 2 GB. An empty diff stops the run before any scan starts — worth checking your ref if that happens. Polling runs every 2 minutes, and going faster buys nothing.
What it helps with
- scan only changed code before committing
- check a branch for security issues before opening a PR
- get diff findings without a full repository scan
- keep a per-workspace scan history in one file
- stop early when there is nothing to scan
Example prompts for the agent
- scan my changes before I commit
- run a diff scan of this branch against main
- check what changed for security issues
How to install diff-scanning-with-aws-security-agent
1Skills CLI (Vercel)
npx skills add aws/agent-toolkit-for-aws --skill diff-scanning-with-aws-security-agent -a claude-code2Manually: put the files in place
~/.claude/skills/diff-scanning-with-aws-security-agent/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/diff-scanning-with-aws-security-agent/
1Skills CLI (Vercel)
npx skills add aws/agent-toolkit-for-aws --skill diff-scanning-with-aws-security-agent -a codex2Manually: put the files in place
.agents/skills/diff-scanning-with-aws-security-agent/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add aws/agent-toolkit-for-aws --skill diff-scanning-with-aws-security-agent -a cursor2Manually: put the files in place
.cursor/skills/diff-scanning-with-aws-security-agent/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install aws/agent-toolkit-for-aws diff-scanning-with-aws-security-agent2Manually: put the files in place
.github/skills/diff-scanning-with-aws-security-agent/SKILL.md1Skills CLI (Vercel)
npx skills add aws/agent-toolkit-for-aws --skill diff-scanning-with-aws-security-agent -a gemini-cli2Platform CLI
gemini skills install https://github.com/aws/agent-toolkit-for-aws --path plugins/aws-agents-for-devsecops/skills/diff-scanning-with-aws-security-agentManually: put the files in place
.devin/skills/diff-scanning-with-aws-security-agent/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add aws/agent-toolkit-for-aws --skill diff-scanning-with-aws-security-agent -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about diff-scanning-with-aws-security-agent
How do I install diff-scanning-with-aws-security-agent in Claude?
Run npx skills add aws/agent-toolkit-for-aws --skill diff-scanning-with-aws-security-agent -a claude-code. The skill lands at ~/.claude/skills/diff-scanning-with-aws-security-agent/SKILL.md.
What does diff-scanning-with-aws-security-agent do?
It runs an AWS Security Agent scan over only the code changed since a given git ref. Findings are grouped by severity and written to .security-agent/findings-{scan_id}.md.
What do I need before running it?
A .security-agent/config.json with agent_space_id and region, the SecurityAgentScanRole role, and a security-agent-scans-<account>-<region> bucket. If the config is missing, setup-security-agent runs first.
Source text
SKILL.md · Apache-2.0
---
name: diff-scanning-with-aws-security-agent
description: Run a fast AWS Security Agent diff scan on only the changed code since a git ref. Use when the user asks to scan changes, run a diff scan, check what changed for security issues, scan before committing, scan before PR, or any pre-commit/pre-push security check.
---
# AWS Security Agent — Diff Scan
Scan only the code that changed since a git ref. Faster than a full scan — focuses findings on the diff. No prior full scan needed.
## Local state
Read `.security-agent/config.json` for `agent_space_id` and `region`. If missing, run the `setup-security-agent` workflow inline first.
Track scans in `.security-agent/scans.json`.
### Resolving the values you need
| Placeholder | How to resolve |
|-------------|----------------|
| `<id>` (agent space) | `config.agent_space_id` |
| `<region>` | `config.region` (default `us-east-1`) |
| `<account>` | `aws sts get-caller-identity --query Account --output text` |
| `<role-arn>` | `arn:aws:iam::<account>:role/SecurityAgentScanRole` |
| `<bucket>` | `security-agent-scans-<account>-<region>` |
| `<WORKSPACE_ID>` | `printf '%s' "$(pwd)" \| md5sum \| cut -c1-12` |
---
## Workflow
1. **Pre-scan checks.** Same as full scan — read config, verify agent space, resolve values, generate workspace ID.
2. **Ask what to scan against:**
- Uncommitted changes → `BASE_REF=HEAD` (default)
- Branch vs main → `BASE_REF=main`
- Custom ref → user provides
3. **Generate diff (fail fast if empty):**
```bash
cd <absolute-workspace-path>
if [ "$BASE_REF" = "HEAD" ]; then
git diff HEAD > /tmp/diff.patch
else
git diff "$BASE_REF..HEAD" > /tmp/diff.patch
fi
[ -s /tmp/diff.patch ] || { echo "No changes vs $BASE_REF"; exit 1; }
```
4. **Zip the workspace** (same exclusions as full scan, 2 GB limit):
```bash
cd <absolute-workspace-path>
zip -r /tmp/source.zip . \
-x ".git/*" -x ".security-agent/*" -x "node_modules/*" \
-x "__pycache__/*" -x ".venv/*" -x "venv/*" \
-x "dist/*" -x "build/*" -x "target/*" \
-x ".mypy_cache/*" -x ".pytest_cache/*" -x ".tox/*" \
-x ".next/*" -x "cdk.out/*" -x ".DS_Store" -x "*.pyc"
```
5. **Upload both source zip and diff patch:**
```bash
SCAN_ID="diff-$(date +%s)-$(openssl rand -hex 3)"
aws s3 cp /tmp/source.zip s3://<bucket>/security-scans/source/<WORKSPACE_ID>/source.zip --expected-bucket-owner <account>
aws s3 cp /tmp/diff.patch s3://<bucket>/security-scans/diffs/${SCAN_ID}/diff.patch --expected-bucket-owner <account>
```
6. **Get or create per-workspace CodeReview** (same logic as full scan — lookup `config.json → code_reviews[<abs_path>]`, create if absent):
```bash
aws securityagent create-code-review --agent-space-id <id> --title <title> \
--service-role <role-arn> \
--assets sourceCode=[{s3Location=s3://<bucket>/security-scans/source/<WORKSPACE_ID>/source.zip}]
```
7. **Start the diff job:**
```bash
aws securityagent start-code-review-job --agent-space-id <id> --code-review-id <cr-id> \
--diff-source s3Uri=s3://<bucket>/security-scans/diffs/${SCAN_ID}/diff.patch
```
If `ResourceNotFoundException`: recreate CodeReview and retry.
8. Capture `codeReviewJobId`. Persist to `scans.json` with `scan_type: "DIFF"` and `base_ref`.
9. Tell user: "Diff scan started. Takes a few minutes. I'll check every 2 minutes — say 'stop polling' to opt out."
10. **Poll** every 2 minutes:
```bash
aws securityagent batch-get-code-review-jobs --agent-space-id <id> --code-review-job-ids <job_id>
```
Only respond when status changes. On COMPLETED → fetch findings.
11. **Findings:** same presentation as full scan — grouped by severity, report written to `.security-agent/findings-{scan_id}.md`.
---
## Rules
- Diff scans are standalone — no prior full scan needed
- Poll every 2 minutes, not faster
- Default to `BASE_REF=HEAD` if user doesn't specify
- Title: `diff-<git-branch>-<timestamp>` (no spaces)
- If diff is empty, tell user and stop — don't start a scan
© aws · Apache-2.0 · aws/agent-toolkit-for-aws