<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shambu Pujar</title>
    <description>The latest articles on DEV Community by Shambu Pujar (@shambu_pujar_8a082a0cf767).</description>
    <link>https://dev.to/shambu_pujar_8a082a0cf767</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2824537%2Ff29e79b2-ae74-4bde-873c-cdcade776aae.png</url>
      <title>DEV Community: Shambu Pujar</title>
      <link>https://dev.to/shambu_pujar_8a082a0cf767</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shambu_pujar_8a082a0cf767"/>
    <language>en</language>
    <item>
      <title>Open Source an AI Agent That Audits Your AWS Account</title>
      <dc:creator>Shambu Pujar</dc:creator>
      <pubDate>Sun, 21 Jun 2026 11:32:42 +0000</pubDate>
      <link>https://dev.to/shambu_pujar_8a082a0cf767/open-source-an-ai-agent-that-audits-your-aws-account-1clg</link>
      <guid>https://dev.to/shambu_pujar_8a082a0cf767/open-source-an-ai-agent-that-audits-your-aws-account-1clg</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;cloud-audit-agent&lt;/code&gt; is an open source CLI that uses Claude to reason over your live AWS data and produce a prioritized security and cost audit — no rule libraries to maintain, no agents to manage.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;AWS accounts drift. Access keys go unrotated. Security groups accumulate open ports. S3 buckets get misconfigured. Bills spike unexpectedly. None of this is surprising — it's the normal entropy of a live AWS account.&lt;/p&gt;

&lt;p&gt;The tools that exist to catch this have real limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rule-based scanners&lt;/strong&gt; (GuardDuty, Security Hub, Prowler) catch known patterns but miss cross-service context. They can't tell you that the misconfigured S3 bucket is the same one running up a $500/month storage bill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost tools and security tools are separate.&lt;/strong&gt; You need a different dashboard, a different workflow, and a different engineer to correlate them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintaining rule libraries is expensive.&lt;/strong&gt; Every new AWS service, every new attack pattern, every new compliance requirement means adding rules. The rules drift too.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Insight
&lt;/h2&gt;

&lt;p&gt;Instead of encoding rules, give raw AWS API responses to an LLM and let it reason.&lt;/p&gt;

&lt;p&gt;A senior engineer auditing an AWS account would run &lt;code&gt;aws iam list-users&lt;/code&gt;, &lt;code&gt;aws s3api get-bucket-policy&lt;/code&gt;, and &lt;code&gt;aws ce get-cost-and-usage&lt;/code&gt; — then read the results together and draw conclusions. &lt;code&gt;cloud-audit-agent&lt;/code&gt; does exactly that. It calls read-only AWS APIs across five domains, hands Claude all the raw data, and gets back a prioritized finding report with remediation steps.&lt;/p&gt;

&lt;p&gt;No rule engine. No maintenance burden. The reasoning improves as Claude improves.&lt;/p&gt;




&lt;h2&gt;
  
  
  What It Audits
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Tools&lt;/th&gt;
&lt;th&gt;What gets checked&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;iam&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Access key age (flags &amp;gt;90 days), MFA status per user, role trust policies, inline and attached policies, account authorization snapshot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;s3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;All four public access block settings, server-side encryption, bucket policies (detects wildcard &lt;code&gt;Principal: *&lt;/code&gt;), per-bucket storage cost by storage class&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ec2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Security groups open to &lt;code&gt;0.0.0.0/0&lt;/code&gt; or &lt;code&gt;::/0&lt;/code&gt; on 10 sensitive ports (SSH 22, RDP 3389, MySQL 3306, Postgres 5432, MongoDB 27017, Redis 6379, and others), VPC flow log status, network ACLs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cost&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Cost breakdown by service (daily/monthly granularity), 30-day forecast, top usage types per service, anomaly detection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;compliance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Active Security Hub findings (filterable by severity), AWS Config rule compliance, CIS AWS Foundations Benchmark findings&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

&lt;p&gt;No install required:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @trellisclad/cloud-audit-agent &lt;span class="nt"&gt;--scope&lt;/span&gt; all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Common patterns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Scoped audit — IAM and S3 only, runs in ~2 minutes&lt;/span&gt;
npx @trellisclad/cloud-audit-agent &lt;span class="nt"&gt;--scope&lt;/span&gt; iam s3 &lt;span class="nt"&gt;--region&lt;/span&gt; eu-west-1

&lt;span class="c"&gt;# Machine-parseable output for CI pipelines&lt;/span&gt;
npx @trellisclad/cloud-audit-agent &lt;span class="nt"&gt;--scope&lt;/span&gt; cost &lt;span class="nt"&gt;--format&lt;/span&gt; json | jq &lt;span class="s1"&gt;'.findings[]'&lt;/span&gt;

&lt;span class="c"&gt;# Self-contained HTML report&lt;/span&gt;
npx @trellisclad/cloud-audit-agent &lt;span class="nt"&gt;--scope&lt;/span&gt; all &lt;span class="nt"&gt;--format&lt;/span&gt; html &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; report.html

&lt;span class="c"&gt;# Redacted version safe to share publicly&lt;/span&gt;
npx @trellisclad/cloud-audit-agent &lt;span class="nt"&gt;--scope&lt;/span&gt; all &lt;span class="nt"&gt;--redact&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; html &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; report-sanitized.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt; Node.js 18+, AWS credentials (ReadOnlyAccess managed policy or equivalent), Claude Max subscription or Anthropic API key.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Capabilities
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Cost + Security Correlation
&lt;/h3&gt;

&lt;p&gt;Most tools treat cost and security as separate domains. &lt;code&gt;cloud-audit-agent&lt;/code&gt; correlates them. When a bucket has security findings AND significant storage spend, the dollar amount appears directly in the finding description:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"S3 bucket &lt;code&gt;[BUCKET_A]&lt;/code&gt; has public read access enabled via bucket policy and no server-side encryption. Estimated storage cost: ~$340/month. Immediate remediation recommended."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This changes the business conversation. "This bucket is misconfigured" is easy to defer. "This misconfigured bucket costs $340/month and is publicly readable" is not.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dual Anomaly Detection
&lt;/h3&gt;

&lt;p&gt;The cost anomaly tool runs two independent detection algorithms simultaneously:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trend comparison&lt;/strong&gt; — Compares two consecutive 30-day windows. Flags services where BOTH the percentage change (default: &amp;gt;50%) AND the absolute change (default: &amp;gt;$10) exceed thresholds. The dual-gate prevents noise from small services with volatile-looking percentages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Statistical spike detection&lt;/strong&gt; — Fetches 60 days of daily cost data per service. Computes a baseline mean and standard deviation. Flags any day in the last 30 days that exceeds &lt;code&gt;mean + 2σ&lt;/code&gt;. Both algorithms are user-configurable.&lt;/p&gt;

&lt;p&gt;Running both simultaneously and combining results catches different failure modes: a service that gradually crept up 60% over a month (trend detection) vs. a service that had one anomalous day last Tuesday (spike detection).&lt;/p&gt;

&lt;h3&gt;
  
  
  Redact Mode
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;--redact&lt;/code&gt; replaces sensitive values throughout the entire report with stable placeholder tokens: 12-digit account IDs, ARNs, security group IDs (&lt;code&gt;sg-xxx&lt;/code&gt;), VPC IDs, subnet IDs, access key IDs, and real resource names. "babylon-mainnet-ledger-backups" becomes "web-assets-bucket" — consistently, everywhere it appears.&lt;/p&gt;

&lt;p&gt;This makes it safe to share findings with vendors, post them in Slack, or include them in tickets without leaking real infrastructure details.&lt;/p&gt;

&lt;h3&gt;
  
  
  Four Output Formats
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Use case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;markdown&lt;/code&gt; (default)&lt;/td&gt;
&lt;td&gt;Terminal output, piping to other tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;human&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Terminal display — groups by severity, strips raw JSON&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;html&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stakeholder reports — self-contained, color-coded severity badges&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;json&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CI integration — typed &lt;code&gt;AuditReport&lt;/code&gt; object with findings array and audit metadata&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Programmatic API
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;runAudit()&lt;/code&gt; function is the package's primary export for embedding audits in CI pipelines, Slack bots, or custom dashboards:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;runAudit&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@trellisclad/cloud-audit-agent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;runAudit&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;awsConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;region&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;us-east-1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;staging&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;scopes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;iam&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;s3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;anomalyThresholds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;minAbsoluteChange&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;percentChangeThreshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;analysisPeriodDays&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;drillDownMinSpend&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;includeCliCommands&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// include `aws` CLI fix commands in recommendations&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;markdown&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// result.costUsd, result.durationMs, result.numTurns, result.inputTokens, result.outputTokens&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  How It's Built
&lt;/h2&gt;

&lt;p&gt;This section is for developers who want to understand the architecture or adapt the pattern for their own Claude-powered tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CLI (commander) → runAudit() → Claude Agent SDK (query())
                                     ↓
                             In-process MCP servers
                    ┌─────────────────────────────────────┐
                    │  aws-iam  aws-s3  aws-ec2           │
                    │  aws-cost  aws-compliance           │
                    └─────────────────────────────────────┘
                                     ↓
                           AWS SDK v3 (read-only calls)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Claude Agent SDK + In-Process MCP Servers
&lt;/h3&gt;

&lt;p&gt;The agent uses &lt;code&gt;@anthropic-ai/claude-agent-sdk&lt;/code&gt; with a set of MCP tool servers — but unlike typical MCP setups, there are no external server processes. Each server (&lt;code&gt;createIamToolsServer()&lt;/code&gt;, &lt;code&gt;createS3ToolsServer()&lt;/code&gt;, etc.) is an in-process object created via &lt;code&gt;createSdkMcpServer()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Only servers for the requested &lt;code&gt;--scope&lt;/code&gt; flags are instantiated. If you run &lt;code&gt;--scope cost&lt;/code&gt;, Claude only sees the 4 cost tools — not the 20 total. This keeps the tool surface minimal and reduces unnecessary API calls.&lt;/p&gt;

&lt;h3&gt;
  
  
  3-Phase System Prompt
&lt;/h3&gt;

&lt;p&gt;The system prompt enforces a strict workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;DETECT&lt;/strong&gt; — Call ALL tools in the requested scopes in a single turn using parallel tool calls. Do not wait for one result before calling the next.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ANALYZE&lt;/strong&gt; — Reason over the collected data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RECOMMEND&lt;/strong&gt; — Produce prioritized findings.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The parallel-first constraint in DETECT keeps turn counts low: 10 turns for a single scope, up to 32 for a full audit (25 base + 5 for cost drill-down + 2 for S3 cost estimation). The turn budget is auto-computed — users don't need to tune &lt;code&gt;--max-turns&lt;/code&gt; manually.&lt;/p&gt;

&lt;h3&gt;
  
  
  Effect-TS Typed Error Handling
&lt;/h3&gt;

&lt;p&gt;Every AWS SDK call is wrapped with &lt;code&gt;awsCall()&lt;/code&gt;, which converts Promise rejections into a tagged error union:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AwsPermissionError | AwsThrottleError | AwsNotFoundError | AwsServiceError
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tool handlers use &lt;code&gt;Effect.catchTag("AwsNotFoundError", ...)&lt;/code&gt; to handle "no bucket policy exists" as a data case rather than a crash. The TypeScript compiler tracks which errors can escape each handler — a more rigorous approach than try/catch chains where missing branches are silent.&lt;/p&gt;

&lt;p&gt;Parallel AWS calls within a tool use &lt;code&gt;Effect.forEach&lt;/code&gt; with &lt;code&gt;{ concurrency: "unbounded" }&lt;/code&gt;. This means auditing 50 IAM users happens as 50 concurrent API calls, not a sequential loop.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenTelemetry Tracing
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;--trace&lt;/code&gt; integrates with &lt;strong&gt;Arize Phoenix&lt;/strong&gt; via &lt;code&gt;@arizeai/phoenix-otel&lt;/code&gt;. The span hierarchy:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Span&lt;/th&gt;
&lt;th&gt;Kind&lt;/th&gt;
&lt;th&gt;Covers&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;audit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;AGENT&lt;/td&gt;
&lt;td&gt;Entire audit run&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;turn_N&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CHAIN&lt;/td&gt;
&lt;td&gt;Each agent turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tool:name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;TOOL&lt;/td&gt;
&lt;td&gt;Each tool call (input/output attributes)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Uses &lt;strong&gt;OpenInference&lt;/strong&gt; semantic conventions (&lt;code&gt;openinference.span.kind&lt;/code&gt;, &lt;code&gt;input.value&lt;/code&gt;, &lt;code&gt;output.value&lt;/code&gt;) for compatibility with Phoenix's LLM observability UI. Tool calls are intercepted by &lt;code&gt;createTracedSdkMcpServer()&lt;/code&gt;, which wraps each handler transparently.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bedrock Routing
&lt;/h3&gt;

&lt;p&gt;Set &lt;code&gt;CLAUDE_CODE_USE_BEDROCK=1&lt;/code&gt; to route all LLM calls through AWS Bedrock. The agent queries &lt;code&gt;ListInferenceProfiles&lt;/code&gt; to discover which Anthropic models are enabled in your account, then auto-configures the model IDs — preferring &lt;code&gt;us.*&lt;/code&gt;-prefixed profiles and versioned IDs (containing a date string like &lt;code&gt;20250514&lt;/code&gt;) over unversioned aliases.&lt;/p&gt;

&lt;p&gt;This matters for organizations with data residency requirements or that want AWS-managed model access without exposing an Anthropic API key.&lt;/p&gt;




&lt;h2&gt;
  
  
  What It Doesn't Do
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Modify AWS resources.&lt;/strong&gt; Every tool is annotated &lt;code&gt;readOnlyHint: true, destructiveHint: false&lt;/code&gt;. The agent prompt says explicitly: "NEVER attempt to modify, create, or delete any AWS resources." This is safe to run in production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Replace dedicated compliance tooling.&lt;/strong&gt; For SOC 2, PCI, or HIPAA evidence collection, you need tools with audit trails and formal attestation workflows. &lt;code&gt;cloud-audit-agent&lt;/code&gt; surfaces findings; it doesn't produce compliance artifacts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor continuously.&lt;/strong&gt; This is an on-demand audit tool. Run it from CI on a schedule, from a Slack bot, or as a pre-release check — not as a real-time monitoring agent.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @trellisclad/cloud-audit-agent &lt;span class="nt"&gt;--scope&lt;/span&gt; all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Source and docs: &lt;a href="https://github.com/trellisclad/cloud-audit-agent" rel="noopener noreferrer"&gt;github.com/trellisclad/cloud-audit-agent&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you find it useful, star the repo. If there are AWS services you want covered (RDS, Lambda, EKS, CloudTrail), open an issue.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>mcp</category>
      <category>agents</category>
      <category>security</category>
    </item>
  </channel>
</rss>
