
AWS Security Agent
OfficialFreeRun comprehensive security scans on your codebase.
Free · Opens the source repo
What AWS Security Agent does
The AWS Security Agent skill enables developers to run thorough security scans on their code repositories by leveraging AWS's managed Security Agent service. This skill automates the process of uploading your code to AWS, where it is scanned for vulnerabilities, and returns detailed findings that include the locations of issues and suggested remediations. This tool is particularly valuable for teams looking to enhance their code security practices and ensure compliance with security standards.
To use the skill, users initiate a scan request through simple commands like "scan my code" or "find vulnerabilities." The skill manages the entire workflow, including the necessary setup of the security agent environment if it hasn't been configured yet. The results of the scan are tracked and stored, allowing users to easily access previous scan results and monitor the status of ongoing scans. This makes it easier for teams to maintain a secure codebase over time.
The AWS Security Agent skill is designed for developers and security professionals who need to ensure the security of their applications. It is particularly useful in CI/CD pipelines where automated security checks are essential. By integrating this skill into your development workflow, you can proactively identify and remediate security issues before they reach production.
While this skill is powerful, it is important to note that it is specifically tailored for full repository scans. For scenarios where only changes need to be scanned, users should consider using the diff-scanning-with-aws-security-agent skill instead. This ensures that the right tool is used for the right job, optimizing both time and resources.
When to use it
Use this skill when you need to perform a comprehensive security scan on your codebase to identify vulnerabilities and obtain remediation suggestions.
When not to use it
This skill is not suitable for scanning only modified code; for that purpose, use the `diff-scanning-with-aws-security-agent` skill instead.
What you can build with it
Performing a Security Audit
Use this skill to conduct a full security audit of your application code before a major release.
Integrating into CI/CD Pipeline
Incorporate this skill into your CI/CD pipeline to automate security checks during the build process.
Tracking Security Issues Over Time
Utilize the skill to keep a record of security scans and track the remediation of identified vulnerabilities.
How to install AWS Security Agent
View source1. Install with the skills CLI
npx skills add aws/agent-toolkit-for-aws/scanning-with-aws-security-agent --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by awsAWS Security Agent — Code Scans
This skill handles full repository scans. Setup (agent space, role, bucket) is handled by the setup-security-agent skill — if .security-agent/config.json is missing, the scan workflow auto-runs setup inline first.
Action mapping
| User intent | Workflow |
|---|---|
| Direct scan request ("scan my code", "find vulnerabilities") | Full Scan |
| Scan status check ("how's the scan", "progress") | Status workflow |
| View findings ("what did it find", "show results") | Findings workflow |
| List scans ("recent scans", "show my scans") | Read .security-agent/scans.json |
| Stop a scan | aws securityagent stop-code-review-job |
Rules for proactive suggestions
- Always ask before running — never auto-trigger scans
- Single-line suggestions, not multi-paragraph pitches
- If the user declines, do not bring it up again in the same session
Local state
Read .security-agent/config.json for agent_space_id and region. If config.json is missing, tell the user one line — "First scan in this workspace — running setup first." — and run the setup-security-agent workflow inline (steps from that skill's SKILL.md) before continuing. First-time scans should "just work."
Track scans in .security-agent/scans.json (keep last 50 entries). The per-workspace CodeReview ID is stored in config.json → code_reviews[<abs_path>] so subsequent scans reuse the same CodeReview.
Resolving the values you need
The CLI examples below use placeholders. Resolve them at the start of every scan:
| 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 (cache for the rest of the turn) |
<role-arn> | arn:aws:iam::<account>:role/SecurityAgentScanRole |
<bucket> | security-agent-scans-<account>-<region> |
<cr-id> | code_review_id from config.json → code_reviews[<abs_path>] |
<job_id> | codeReviewJobId returned by start-code-review-job |
<WORKSPACE_ID> | printf '%s' "$(pwd)" | md5sum | cut -c1-12 |
These are derived rather than stored in config so they can never drift out of sync with reality.
Pre-scan checks
-
Read
config.json. If missing → run thesetup-security-agentworkflow inline first, then continue. -
Verify agent space still exists:
aws securityagent batch-get-agent-spaces --agent-space-ids <id>If response shows it doesn't exist, clear
agent_space_idfromconfig.jsonand runsetup-security-agentagain. -
Resolve account, role ARN, and bucket name from the table above.
-
Generate workspace ID:
WORKSPACE_ID=$(printf '%s' "$(pwd)" | md5sum | cut -c1-12)
Workflow: Full Scan (~45 min)
For scanning only changed code, use the diff-scanning-with-aws-security-agent skill instead. For threat modeling specs, use threat-modeling-with-aws-security-agent.
-
Run pre-scan checks above.
-
Zip the workspace. Exclude common build/cache directories. Honor
.gitignore. Bail if zip > 2 GB.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 "Thumbs.db" \ -x "*.pyc" -x "*.pyo" ZIP_BYTES=$(stat -f%z /tmp/source.zip 2>/dev/null || stat -c%s /tmp/source.zip) if [ "$ZIP_BYTES" -gt 2147483648 ]; then echo "Zip too large (>2GB)"; exit 1; fi -
Upload to the per-workspace stable key (overwrites any prior upload):
aws s3 cp /tmp/source.zip s3://<bucket>/security-scans/source/<WORKSPACE_ID>/source.zip -
Get or create the per-workspace CodeReview. Look up
config.json → code_reviews[<abs_path>].-
If present, use that
code_review_id. -
If absent, create:
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}]Capture
codeReviewIdand persist toconfig.json → code_reviews[<abs_path>]. -
Title default:
pre-cr-<git-branch>(usegit rev-parse --abbrev-ref HEAD). Replace any spaces with hyphens.
-
-
Start the job:
aws securityagent start-code-review-job --agent-space-id <id> --code-review-id <cr-id>- If the response is
ResourceNotFoundException: the CodeReview was deleted externally. Recreate it (step 4) and retry.
- If the response is
-
Capture
codeReviewJobId. Generate a localscan_idlikescan-<8-hex>. Append toscans.json:{ "scan_id": "scan-...", "code_review_id": "cr-...", "job_id": "cj-...", "agent_space_id": "as-...", "scan_type": "FULL", "title": "pre-cr-main", "path": "/abs/path", "started_at": "2026-06-01T20:00:00Z", "status": "IN_PROGRESS" } -
Tell user: "Full scan started (scan_id: {id}). Takes ~45 minutes. I'll check every 5 minutes — say 'stop polling' to opt out."
-
Run the Polling Loop below with
sleep 300between checks.
Polling Loop
After starting a scan:
-
sleep 300(5 minutes). Do not poll faster than this. -
Call status:
aws securityagent batch-get-code-review-jobs --agent-space-id <id> --code-review-job-ids <job_id> -
Compare
statusto last seen status. Only respond to the user when status CHANGES (e.g.,IN_PROGRESS→COMPLETED) or on terminal state (COMPLETED,FAILED,STOPPED). -
Do not report "still in progress" multiple times — that's noise.
-
If user says "stop polling" or "check later" → stop the loop and tell them: "Say 'scan status' or 'show findings' anytime."
-
On
COMPLETED→ run the Findings workflow. -
On
FAILED→ fetch the job's error info (statusReasonif present), tell the user, write a brief failure note to.security-agent/findings-{scan_id}.md.
Workflow: Status check (ad-hoc)
User says "scan status" / "how's the scan":
- If user names a
scan_id, use it. Otherwise use the most recent entry inscans.json. - Call
batch-get-code-review-jobsonce. - Update
scans.jsonstatus field. - Report: status + elapsed time + current step (if any).
Workflow: Findings
After a scan completes (or on user request):
1. Fetch findings (paginate)
aws securityagent list-findings --agent-space-id <id> --code-review-job-id <job-id>
If nextToken is returned, call again with --next-token <token> until exhausted.
2. Enrich with full details
aws securityagent batch-get-findings --agent-space-id <id> --finding-ids <id1> <id2> ...
3. Filter (optional)
If the user asked for a minimum severity (e.g., "high and above"), filter to that level:
- Severity order: CRITICAL > HIGH > MEDIUM > LOW > INFORMATIONAL.
4. Concise summary in chat
Group by severity. File path + line for each:
🟣 CRITICAL: {name}
File: {filePath}:{lineStart}
{description}
🔴 HIGH: {name}
File: {filePath}:{lineStart}
{description}
🟡 MEDIUM: {name}
File: {filePath}:{lineStart}
{description}
🟢 LOW: {name}
File: {filePath}:{lineStart}
{description}
5. Detailed report file
Write to .security-agent/findings-{scan_id}.md. Include EVERY field returned (findingId, name, description, riskLevel, riskType, confidence, status, codeLocations with filePath/lineStart/lineEnd, and remediationCode if present).
# Security Scan Report — {scan_id}
**Scan type**: FULL
**Title**: {title}
**Started**: {started_at}
**Total findings**: {count}
## Summary
| Severity | Count |
|----------|-------|
| CRITICAL | N |
| HIGH | N |
| MEDIUM | N |
| LOW | N |
## Findings
### 🟣 CRITICAL: {name}
- **ID**: {findingId}
- **Risk type**: {riskType}
- **Confidence**: {confidence}
- **Status**: {status}
- **Location**: `{filePath}:{lineStart}-{lineEnd}`
**Description**: {description}
**Remediation**:
{remediationCode or remediation guidance from description}
(repeat for every finding)
Tell user: "Full details written to .security-agent/findings-{scan_id}.md"
6. Follow-ups
Ask:
- "Would you like to focus on the critical/high findings first?"
- "Should I explain any of these in more detail?"
- "Want me to fix these issues?"
For fixes: read the finding's description and code location, then synthesize and apply the fix via the Edit tool.
Workflow: Stop a scan
User says "stop the scan":
aws securityagent stop-code-review-job --agent-space-id <id> --code-review-job-id <job_id>
Update scans.json status to STOPPED.
Workflow: List recent scans
User asks "show my recent scans" / "list scans":
Read .security-agent/scans.json. Show in a compact table:
| scan_id | type | title | status | started |
|---|---|---|---|---|
| scan-abc | FULL | pre-cr-main | COMPLETED | 2h ago |
| scan-def | FULL | pre-cr-feature-x | FAILED | 1d ago |
Rules
- Always run pre-scan checks (config exists + agent space verified) before any scan
- Scan APIs return immediately — poll status every 5 minutes
- Use the most recent scan in
scans.jsonif the user doesn't name one - Title must not contain spaces — use hyphens. Default to git branch name.
- Don't dump raw JSON — format with severity icons + file locations
- On
ResourceNotFoundExceptionfromstart-code-review-job, recreate the CodeReview and retry once
Troubleshooting
- "Not configured" /
config.jsonmissing → runsetup-security-agentskill first AccessDeniedons3 cp→ bucket not registered on agent space, or trust policy wrong. Re-run setup.ResourceNotFoundExceptionon agent space → it was deleted. Re-run setup.- Scan stuck in PREFLIGHT for >10 min → backend issue, not client. Show
batch-get-code-review-jobsoutput and tell user to escalate. - Code too large (zip > 2 GB) → run on a subdirectory instead.
Frequently asked questions about AWS Security Agent
Similar skills
CodeQL Code Scanning
Streamline CodeQL setup and configuration for security analysis.
Security Review
AI-powered codebase security scanner for vulnerabilities.
Integrating SAST into GitHub Actions
Automate SAST scanning in GitHub Actions workflows.
Implementing Semgrep for Custom SAST Rules
Enhance code security with custom Semgrep rules.
Infrastructure as Code Security Scanning
Automate security checks for your IaC deployments.
Implementing GitHub Advanced Security
Automate code scanning and vulnerability detection at scale.
