<?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>Forem: Shintaro Fukatsu</title>
    <description>The latest articles on Forem by Shintaro Fukatsu (@shintraro_fukatsu).</description>
    <link>https://forem.com/shintraro_fukatsu</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3228200%2F6ac8de68-98c2-4a7d-8f08-505e8ac76086.jpg</url>
      <title>Forem: Shintaro Fukatsu</title>
      <link>https://forem.com/shintraro_fukatsu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/shintraro_fukatsu"/>
    <language>en</language>
    <item>
      <title>I ran AWS Security Agent's full pipeline on my personal project: Design Review, Code Review, and Pentest</title>
      <dc:creator>Shintaro Fukatsu</dc:creator>
      <pubDate>Tue, 05 May 2026 15:56:40 +0000</pubDate>
      <link>https://forem.com/aws-builders/i-ran-aws-security-agents-full-pipeline-on-my-personal-project-design-review-code-review-and-1cp2</link>
      <guid>https://forem.com/aws-builders/i-ran-aws-security-agents-full-pipeline-on-my-personal-project-design-review-code-review-and-1cp2</guid>
      <description>&lt;p&gt;A quick note before you read: I'm still learning English. I rewrote sections I wasn't confident about, so there may be places that don't read naturally. Sorry about that. The Japanese version has full step-by-step setup instructions if you want the complete picture: &lt;a href="https://qiita.com/sh_fukatsu/items/104c8078532c272fb1f5" rel="noopener noreferrer"&gt;Japanese article on Qiita&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  After You Ship, Then What?
&lt;/h2&gt;

&lt;p&gt;A lot of energy goes into security before a release: threat modeling, code reviews, maybe a pentest if budget allows. Then the app ships, and that security energy quietly dissipates. The system keeps running. No one re-checks the design against updated policies. Code keeps getting merged without systematic security review. The pentest from launch day grows stale.&lt;/p&gt;

&lt;p&gt;This isn't negligence. It's just the reality of how operational security gets deprioritized once a product is live.&lt;/p&gt;

&lt;p&gt;AWS Security Agent caught my attention precisely because it covers all three security checkpoints, design review, code review, and penetration testing, and they're available anytime, not just at launch. That includes the operational phase after release, which is exactly where the security gap tends to open up. The penetration testing feature went GA on March 31, 2026, the first of the three to move beyond Preview. I decided to run the full pipeline on my own personal project and see what actually came out the other end.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is AWS Security Agent?
&lt;/h2&gt;

&lt;p&gt;AWS Security Agent is an AI-driven security tool that covers three distinct phases of the development lifecycle:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Status (as of April 2026)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Design Review&lt;/td&gt;
&lt;td&gt;Preview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code Review&lt;/td&gt;
&lt;td&gt;Preview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Penetration Test&lt;/td&gt;
&lt;td&gt;GA (March 31, 2026)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Design Review analyzes your architecture documents, requirements, and design specs against AWS security best practices. You can also define custom security requirements in natural language, which is useful for organizations with internal compliance policies that go beyond AWS defaults.&lt;/p&gt;

&lt;p&gt;Code Review integrates with GitHub and automatically posts security-focused review comments on pull requests.&lt;/p&gt;

&lt;p&gt;Penetration Test actively attacks your running application, combining static code analysis (SAST) with dynamic testing (DAST), and even generates fix PRs automatically for detected vulnerabilities.&lt;/p&gt;

&lt;p&gt;All three features live under a single "Agent Space," which is the container you set up once and then operate from.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: As of April 2026, Design Review and Code Review are still in Preview. Verify current status in the &lt;a href="https://docs.aws.amazon.com/securityagent/latest/userguide/what-is.html" rel="noopener noreferrer"&gt;official docs&lt;/a&gt; before using.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The App Under Test
&lt;/h2&gt;

&lt;p&gt;Rather than running this on a purpose-built vulnerable app like OWASP Juice Shop, I used a real side project: a Kahoot!-style real-time quiz app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ledtev7v8vt38a5avu7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ledtev7v8vt38a5avu7.png" alt="serverless application architecture" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The architecture is a standard serverless stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend: CloudFront + S3&lt;/li&gt;
&lt;li&gt;API: API Gateway (REST + WebSocket)&lt;/li&gt;
&lt;li&gt;Backend: Lambda (Python)&lt;/li&gt;
&lt;li&gt;Database: DynamoDB&lt;/li&gt;
&lt;li&gt;Auth: Cognito (admin), 6-digit access code (participants)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Scale: about 3,500 lines of code, 22 API endpoints. Participants join via a rotating 6-digit code and receive quiz results over WebSocket. Admins authenticate via Cognito to manage questions and control the flow.&lt;/p&gt;

&lt;p&gt;Not a toy app, but not enterprise-scale either. A realistic target for a solo developer running a serious security check.&lt;/p&gt;




&lt;h2&gt;
  
  
  Design Review
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What You Upload
&lt;/h3&gt;

&lt;p&gt;Design Review accepts DOC, DOCX, JPEG, MD, PDF, PNG, and TXT files, up to 5 files per review (2 MB each, 6 MB total). I uploaded four Markdown documents:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1y3gzwx9byfypjvu3vf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1y3gzwx9byfypjvu3vf.png" alt="Documents subject to design review" width="800" height="573"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;architecture.md&lt;/code&gt;: system architecture&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;requirements.md&lt;/code&gt;: functional requirements&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;security-design.md&lt;/code&gt;: security design&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sequence-diagram.md&lt;/code&gt;: authentication and data flows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing that wasn't obvious: the agent reads across all uploaded files and synthesizes them together. I was half-expecting isolated per-file analysis, but it correctly interpreted relationships between documents.&lt;/p&gt;

&lt;h3&gt;
  
  
  Custom Rules in Plain Language
&lt;/h3&gt;

&lt;p&gt;Beyond AWS managed rules, you can add your own security requirements as free-form text. The agent evaluates uploaded documents against your custom rules just as it does against the managed ones.&lt;/p&gt;

&lt;p&gt;This is more useful than it sounds. In many organizations, security policies exist as internal documents written in plain language. Being able to paste those directly, without translation, reformatting, or mapping to a formal schema, lowers the barrier significantly for non-security-specialist teams.&lt;/p&gt;

&lt;p&gt;I added two custom rules: a log retention requirement (365 days minimum) and a data residency requirement (specific region only) in Japanese. Both worked as expected.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Probabilistic Finding
&lt;/h3&gt;

&lt;p&gt;Here's the part that surprised me most.&lt;/p&gt;

&lt;p&gt;My first design review came back clean with no non-compliant findings. On the second run after adding the custom rules, two things happened: the custom rules correctly flagged violations, but a third finding appeared that had nothing to do with my additions. "Secret Protection Best Practices" flipped from compliant to non-compliant, with the same documents.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6tqgensjb3h32iowvvwt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6tqgensjb3h32iowvvwt.png" alt="The 1st Review" width="800" height="650"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7dovvhf6q73xgksvsroz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7dovvhf6q73xgksvsroz.png" alt="The 2nd Review" width="800" height="642"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The agent missed something on the first pass and caught it on the second.&lt;/p&gt;

&lt;p&gt;This isn't a bug. It's a property of probabilistic AI systems. The practical takeaway: a single design review run giving you "all clear" doesn't mean you're clean. Multiple runs on important documents increase coverage. It's the same reason human security reviewers do multiple passes or pair reviews.&lt;/p&gt;

&lt;p&gt;The design also makes re-running easy: you can clone an existing review and modify only the rules, which fits naturally into an iterative workflow.&lt;/p&gt;




&lt;h2&gt;
  
  
  Code Review
&lt;/h2&gt;

&lt;h3&gt;
  
  
  GitHub Integration
&lt;/h3&gt;

&lt;p&gt;Code Review requires connecting a GitHub account to your Agent Space. One important constraint: a single AWS account can only be linked to one GitHub account. In multi-account AWS Organizations environments, you need to decide upfront which account owns the code review integration, as you can't spread it across accounts.&lt;/p&gt;

&lt;p&gt;Once connected, &lt;code&gt;aws-security-agent[bot]&lt;/code&gt; automatically posts review comments on pull requests. Comments arrive in two phases: an initial acknowledgment, followed by detailed findings. The experience feels similar to having a dedicated security reviewer on every PR.&lt;/p&gt;

&lt;p&gt;I received an XSS finding on a feature PR, fixed it with the help of Claude, opened a new PR, and ran the review again. The cycle was smooth.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Scope Gap (and How It Matters)
&lt;/h3&gt;

&lt;p&gt;Code Review operates on PR diffs, meaning the delta between the head branch and the base branch. It does not scan your entire repository.&lt;/p&gt;

&lt;p&gt;This became important later. I had intentionally left dummy credentials in the repo (admin email, password, Cognito User Pool ID, Client ID) to see if the system would catch them. The code review never flagged them, because those files weren't part of any PR diff.&lt;/p&gt;

&lt;p&gt;More on this in the pentest section. The short version: code review and penetration testing have complementary, non-overlapping coverage. You need both.&lt;/p&gt;

&lt;p&gt;You can reduce false positives by adding a &lt;code&gt;filtering.md&lt;/code&gt; file to your repository. The agent's own comment explains it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Customize which findings are reported by adding a filtering.md file to your repository. Use it to exclude files from analysis and provide context hints that reduce false positives."&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Penetration Test
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Setup: Domain Verification
&lt;/h3&gt;

&lt;p&gt;Before the agent can attack your app, it needs to verify you own the target domain. You register your domain in the Agent Space console, get a DNS TXT record token, add it to your DNS configuration, and then hit "Verify." Standard domain verification with no surprises.&lt;/p&gt;

&lt;p&gt;One configuration detail that matters: if your app uses Cognito for authentication, you need to explicitly add the Cognito endpoint (&lt;code&gt;https://cognito-idp.&amp;lt;region&amp;gt;.amazonaws.com&lt;/code&gt;) to the "accessible URLs" list. The agent needs to reach it during authentication flows. I missed this on my first run.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjf9ick5d8mczel27aw9h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjf9ick5d8mczel27aw9h.png" alt="if your app uses Cognito for authentication, you need to explicitly add the Cognito endpoint" width="800" height="766"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The First Run Failed
&lt;/h3&gt;

&lt;p&gt;First run: 2.33 task hours, $116.50 in cost (about $50 per task-hour), and a failure after 2.5 hours.&lt;/p&gt;

&lt;p&gt;The agent repeatedly failed to log in because the Cognito endpoint wasn't in the allowed list. It kept retrying, burned through task time, and eventually timed out. I came back from stepping away to find it had already failed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5seavhftw9u0tsdugpsd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5seavhftw9u0tsdugpsd.png" alt="The 1st Pentest result" width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After digging through the logs, I found the issue, updated the config, and ran it again.&lt;/p&gt;

&lt;h3&gt;
  
  
  78 Actions, 7 Hours, 44 Minutes
&lt;/h3&gt;

&lt;p&gt;The second run succeeded. 7 hours 44 minutes of wall time, 34.41 task hours (the agent runs parallel workers, so task time accumulates faster than wall time), at $1,720.50 total.&lt;/p&gt;

&lt;p&gt;The agent ran 78 distinct actions across multiple attack categories:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdrydk5w5mh9qwid6rt3p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdrydk5w5mh9qwid6rt3p.png" alt="78 distinct actions" width="522" height="706"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A few observations worth noting:&lt;/p&gt;

&lt;p&gt;Code scanner (16 actions) is the largest category. Penetration testing typically evokes images of active exploits against a running system. But Security Agent starts with static analysis, reading the source code before touching the app. The sequence appears to be: network scan to understand structure, static code analysis to find attack surface, then dynamic testing to exploit.&lt;/p&gt;

&lt;p&gt;IDOR (10 actions) gets serious coverage. Insecure Direct Object Reference is about changing &lt;code&gt;/api/user/123&lt;/code&gt; to &lt;code&gt;/api/user/124&lt;/code&gt; and seeing if you get someone else's data. It's notoriously difficult for automated scanners because it requires understanding authorization logic. Running 10 variations suggests the agent is trying multiple approaches: sequential IDs, predictable patterns, and authorization boundary probing.&lt;/p&gt;

&lt;p&gt;Privilege escalation (9 actions) suggests chained attack simulation, not just finding one vulnerability, but testing whether that vulnerability can be compounded into escalated access across multiple steps.&lt;/p&gt;

&lt;p&gt;Cleanup (5 actions) is worth mentioning. AWS Security Agent recommends running the pentest against a non-production environment, and these actions restore that environment after testing is complete.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Was Found
&lt;/h3&gt;

&lt;p&gt;After 7 hours 44 minutes, the results:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiukv1wm1g98stpb7gbsj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiukv1wm1g98stpb7gbsj.png" alt="The 2nd Pentest result" width="800" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Severity&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Info&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Risk types included: Business Logic Vulnerabilities, Server Error 500, Information Disclosure, Security Misconfiguration, Insecure Direct Object Reference, Default Credentials, Authentication Bypass, Unrestricted Resource Consumption, and Privilege Escalation.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Critical Finding: What Code Review Missed
&lt;/h3&gt;

&lt;p&gt;The most significant finding was also the most instructive about how these tools complement each other.&lt;/p&gt;

&lt;p&gt;The finding was: "Plaintext Admin Credentials and Live Infrastructure Identifiers Committed to Repository"&lt;/p&gt;

&lt;p&gt;Those dummy credentials I mentioned (admin email, password, Cognito User Pool ID, Client ID) had been sitting in the repository the whole time. Code review never caught them because they were never part of a PR diff. The pentest's static analysis scanned the entire repository, found them immediately, and flagged them as Critical.&lt;/p&gt;

&lt;p&gt;What happened next was also noteworthy. The agent automatically created a PR titled "Security Fix: Remove Hardcoded Credentials and Enable MFA (CWE-798, CWE-312)". The code review bot then reviewed that PR and returned "No issues identified." The full loop of detect, remediate, and verify ran without any human intervention. That said, I reviewed the PR contents myself and did the final merge manually.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6tgvbtney5msf1g86t4f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6tgvbtney5msf1g86t4f.png" alt="The Critical Finding" width="784" height="1327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This made the boundary between code review and penetration testing concrete: code review covers what changed, and pentest covers what exists. Neither replaces the other.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Report
&lt;/h3&gt;

&lt;p&gt;Results are exportable as a PDF pentest report in the same format you'd receive from a security consulting firm: Executive Summary, per-finding Descriptions, Steps to Reproduce, CVSS v3.1 vectors, and recommended remediation. The information density is high.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmmhax8vf9wzpav79gsk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmmhax8vf9wzpav79gsk.png" alt="The Report Executive Summary" width="800" height="1033"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8bes1hpdm9tzw6l1svfb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8bes1hpdm9tzw6l1svfb.png" alt="per-finding Descriptions" width="800" height="1036"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The report is currently English-only. Output in local languages would make the tool more accessible to a broader range of organizations, and I hope that's something that comes in a future update.&lt;/p&gt;




&lt;h2&gt;
  
  
  Operational and Organizational Considerations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Agent's Output Is Not a Final Verdict
&lt;/h3&gt;

&lt;p&gt;This is the most important thing to understand before deploying this in an organization. When the agent says "compliant" or "no issues," that's input to a human decision, not the decision itself. The workflow needs to include human review of findings before any conclusions are acted on. "AWS Security Agent said it was fine" is not a sufficient audit trail.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cost Planning Is Genuinely Hard
&lt;/h3&gt;

&lt;p&gt;Pentest cost is usage-based at $50 per task-hour. The problem: you can't accurately predict task hours before running the test. It depends on application complexity, endpoint count, authentication flows, and how many vulnerabilities the agent finds to pursue.&lt;/p&gt;

&lt;p&gt;My 22-endpoint, 3.5K-line app consumed 34.41 task hours. That number shouldn't be extrapolated to other apps. It's just a data point.&lt;/p&gt;

&lt;p&gt;There's a free trial of up to 200 task hours, valid for 2 months from your first pentest run. The practical advice: run a test on a smaller surface during the trial period to develop a cost baseline before committing to a budget line item. Annual IT budget planning doesn't pair well with "we'll know what it costs after we run it."&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Is Broad, Humans Go Deep
&lt;/h3&gt;

&lt;p&gt;AWS Security Agent doesn't replace professional penetration testing. For regulatory compliance in financial services, healthcare, or other regulated industries, certified vendor pentests remain necessary.&lt;/p&gt;

&lt;p&gt;What it does replace is the gap: the period after release when continuous security validation isn't happening because it's expensive and slow. The framing that makes sense organizationally is that Security Agent covers ongoing monitoring while human experts cover compliance certifications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-Account Organizations
&lt;/h3&gt;

&lt;p&gt;If you're running AWS Organizations with multiple accounts, design the Security Agent topology upfront. Custom security requirements are managed per Agent Space, so decide early which account centralizes them. Otherwise you'll be updating the same policies across every account every time your security policy changes.&lt;/p&gt;

&lt;p&gt;Code review has an additional constraint: one AWS account per GitHub account. This affects where you anchor the integration in a multi-account setup.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Running all three features in sequence on the same application made one thing clear: they're not independent tools. They're stages in a pipeline, and each stage catches different things.&lt;/p&gt;

&lt;p&gt;Design Review found documentation gaps and policy violations. Code Review caught issues in active development. Penetration Test surfaced what neither had found, because it operates on a different scope, covering the full repository and the running application together.&lt;/p&gt;

&lt;p&gt;The thing I took away most is that this pipeline addresses a real operational gap, not just a launch-time checklist. Security requirements change. Code accumulates. Operations staff turn over. Legacy systems that have been running for years without a formal security review are perhaps the clearest example of this gap. The cost of bringing in specialists often makes regular assessments impractical for those systems, and this kind of tooling changes that equation. Running this periodically on live systems, on a regular cadence rather than just at deployment, is exactly the use case it was built for.&lt;/p&gt;

&lt;p&gt;Shipping an app isn't the end of your security work. It's closer to the beginning of the next cycle.&lt;/p&gt;




&lt;p&gt;I also did a lightning talk on this topic in Japanese at Ops-JAWS Meetup 40. The slides and recording are available if you are interested.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slides: &lt;a href="https://speakerdeck.com/sh_fk2/opsjaws-40-ririsusitarazhong-wari-siyanakatuta-sekiyuriteikong-bai-qi-jian-woaws-security-agenttemai-meru" rel="noopener noreferrer"&gt;SpeakerDeck&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Recording (Japanese): &lt;a href="https://www.youtube.com/live/4qViUw5gQEI?si=mzY7TpOEVuOMLyyi&amp;amp;t=5432" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>security</category>
      <category>operations</category>
      <category>ai</category>
    </item>
    <item>
      <title>Connect My Local Kiro to the World - Setting Up Tavily Remote MCP Server</title>
      <dc:creator>Shintaro Fukatsu</dc:creator>
      <pubDate>Tue, 12 Aug 2025 15:08:47 +0000</pubDate>
      <link>https://forem.com/shintraro_fukatsu/connect-my-local-kiro-to-the-world-setting-up-tavily-remote-mcp-server-3leo</link>
      <guid>https://forem.com/shintraro_fukatsu/connect-my-local-kiro-to-the-world-setting-up-tavily-remote-mcp-server-3leo</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;We have a new member of the family: Kiro! My daughter made Kiro for a summer homework project(Our Kiro is made with UV resin). My daughter gave it to me as a gift! So, I'm going to turn it into a keychain and take it with me to re:Invent 2025!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy1pgf3bvpfunf9gwx450.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy1pgf3bvpfunf9gwx450.JPG" alt="finished version Kiro" width="283" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's get to the main topic. While using Kiro, I recently wanted to check for update information. When I asked via chat, I realized that web search functionality wasn’t available (I'm not an AI engineer, so I'm catching up very slowly). &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozuqzzhg8u18plc8cama.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozuqzzhg8u18plc8cama.png" alt="tavily001.png" width="800" height="219"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Previously, I had the opportunity to use "Tavily" during &lt;a href="https://qiita.com/minorun365/items/1f4dbf5842a47bd175cc" rel="noopener noreferrer"&gt;a hands-on session hosted by Minorun&lt;/a&gt;. This time, I decided to set it up myself and document the process for future reference.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Tavily?
&lt;/h2&gt;

&lt;p&gt;Tavily is an API service designed to allow AI agents and app developers to perform external information searches. Since queries can be made using natural language, it's a valuable tool for chatbots when processing prompts with external data. (This is how I understand it, at least.) &lt;br&gt;
You can start using it for free.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3t82cwbuzkul0xo5phj3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3t82cwbuzkul0xo5phj3.png" alt="tavily006.png" width="800" height="561"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Sign Up on the Tavily Website
&lt;/h3&gt;

&lt;p&gt;Visit the &lt;a href="https://www.tavily.com/" rel="noopener noreferrer"&gt;Tavily website&lt;/a&gt; and click the "Sign Up" button at the top right. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz8kreaeqc5ss1zq6rays.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz8kreaeqc5ss1zq6rays.png" alt="tavily007.png" width="800" height="680"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I registered using my Google account. &lt;/p&gt;

&lt;p&gt;After registration, you’ll see the screen where you can obtain the API key. Make a copy to local for late use.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdfv12h0pzsjmz4m0zw53.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdfv12h0pzsjmz4m0zw53.png" alt="tavily008.png" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Configure MCP Server in Kiro
&lt;/h3&gt;

&lt;p&gt;I performed the setup on an M4 Mac mini.&lt;/p&gt;

&lt;p&gt;In the Kiro interface, click “Open MCP Config” under MCP SERVERS in the lower-left corner.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnzwmi00eqdnvn3ldioak.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnzwmi00eqdnvn3ldioak.png" alt="tavily003.png" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the following content to the mcp.json file:&lt;br&gt;
Set the API key obtained earlier after &lt;code&gt;tavilyApiKey=&lt;/code&gt; and save.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"tavily-remote-mcp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"mcp-remote"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"https://mcp.tavily.com/mcp/?tavilyApiKey=`Tavily API Key`"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"disabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"autoApprove"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"tavily_search"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since I wanted Tavily available for all projects, I set it in User Config. If you only need it for specific projects, it’s better to configure it in Workspace Config.&lt;/p&gt;

&lt;p&gt;If “tavily-remote-mcp” shows as Connected under MCP SERVERS in the lower-left corner, the setup was successful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting my Kiro to the World
&lt;/h2&gt;

&lt;p&gt;Finally, it’s time to search. When I made a search request, the Documentation MCP Server was used instead. Communicate can be tricky sometimes...&lt;/p&gt;

&lt;p&gt;This time, I tried phrasing it as "Web search".&lt;/p&gt;

&lt;p&gt;And then, the results came up beautifully. This was the moment my Kiro connected to the world. Also, I learned that AWS signed a wind power contract in India, showcasing its investment in renewable energy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This is a simple guide to setting up the Tavily Remote MCP Server. Most other MCP Servers can be set up similarly. If you’re unsure about the configuration details (what to write in the mcp.json), asking Kiro might be the quickest way.&lt;/p&gt;

&lt;p&gt;Although I wrote this for my own reference, I hope it will help anyone else starting out.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>kiro</category>
      <category>mcp</category>
      <category>tavily</category>
    </item>
    <item>
      <title>Kiro</title>
      <dc:creator>Shintaro Fukatsu</dc:creator>
      <pubDate>Tue, 12 Aug 2025 15:06:29 +0000</pubDate>
      <link>https://forem.com/shintraro_fukatsu/kiro-42el</link>
      <guid>https://forem.com/shintraro_fukatsu/kiro-42el</guid>
      <description></description>
    </item>
    <item>
      <title>Which is your favorite logo? Creating JAWS-UG games with Amazon Q CLI.</title>
      <dc:creator>Shintaro Fukatsu</dc:creator>
      <pubDate>Mon, 09 Jun 2025 17:05:06 +0000</pubDate>
      <link>https://forem.com/aws-builders/which-is-your-favorite-logo-creating-jaws-ug-games-with-amazon-q-cli-9d</link>
      <guid>https://forem.com/aws-builders/which-is-your-favorite-logo-creating-jaws-ug-games-with-amazon-q-cli-9d</guid>
      <description>&lt;h2&gt;
  
  
  💡Introduction
&lt;/h2&gt;

&lt;p&gt;There are nearly 600 AWS community groups in the world. There is a community group called JAWS-UG in Japan. There are more than 60 of them. They account for 10% of the community groups in the world. In addition to chapters in specialized fields such as networks and AI/ML, there are also regional chapters.&lt;/p&gt;

&lt;p&gt;In order to contribute to regional revitalization, regional chapters are making efforts such as holding study sessions in conjunction with local events. I am involved in the management of one of the regional chapters.&lt;/p&gt;

&lt;p&gt;Each branch creates a logo with its own unique characteristics, so there are many logos. I wanted to make it known more, so I decided to make it into a game with Amazon Q CLI.&lt;/p&gt;

&lt;p&gt;I hope that you will be interested in JAWS-UG and participate in it.&lt;/p&gt;

&lt;h2&gt;
  
  
  🦈About JAWS-UG
&lt;/h2&gt;

&lt;p&gt;The event is generally held in Japanese. There are also multinational events hosted by members who are fluent in English.&lt;br&gt;
We also stream live using Zoom, MS Teams, etc., and record the events on YouTube.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/@awsjcommunitymeetups" rel="noopener noreferrer"&gt;AWS User Group Japan JAWS-UG&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you can't attend online or offline, how about YouTube?Prefer asynchronous viewing? Cath past sessions on Youtube.&lt;br&gt;
If you're an engineer who wants to learn Japanese while learning AWS, please join JAWS-UG.&lt;/p&gt;
&lt;h2&gt;
  
  
  Let's coding with Amazon Q CLI
&lt;/h2&gt;

&lt;p&gt;Now, let's move on to the main topic of game creation. I iteratively developed it using Amazon Q CLI. The first instruction is as follows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt;Please create a game in the folder "jaws-ug-slot-games-web".
This is a slot game that uses a logo.
Press the space bar to stop one lane at a time.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;※The actual instructions were given in Japanese&lt;/p&gt;

&lt;p&gt;And here is the first screen that was completed.&lt;br&gt;
It came out in a different form than expected. It can't be helped since the instructions were vague.&lt;br&gt;
I asked for corrections one by one and improved it.&lt;br&gt;
Then, I was able to import the image into the game.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfc7zp0imckx22277j2k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfc7zp0imckx22277j2k.png" alt="Image 001" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Points of ingenuity
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Give specific instructions
&lt;/h3&gt;

&lt;p&gt;In order to use the JAWS-UG logo, I asked Amazon Q CLI to use the image file on JAWS-UG's Github. I specified the URL of the relevant repository and instructed it to download and use it, and Amazon Q CLI cloned it locally using the git command and extracted the file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3yvdh58g0dxybveg8i0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3yvdh58g0dxybveg8i0.png" alt="Image 002" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Fix the small details later
&lt;/h3&gt;

&lt;p&gt;While adding features, there were times when unintended changes were made to the small details, which required further corrections. Therefore, we prioritized the implementation of the main features over the small details.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwkol2s7kx0czha5fpcfg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwkol2s7kx0czha5fpcfg.png" alt="Image 003" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Branch experimental features to preserve a clean main build.
&lt;/h3&gt;

&lt;p&gt;A vertical loop would have been fine, but I suddenly thought of a reel that slides horizontally. Since you can't know until you try it, I instructed Amazon Q CLI to make changes after making a backup and creating a situation where you can revert to it.&lt;/p&gt;

&lt;p&gt;For example, I asked them to create a pattern where the reels flow vertically and one where they flow horizontally.&lt;br&gt;
The result of making the reels flow horizontally is as follows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2opo0j8h3480u55hjqs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2opo0j8h3480u55hjqs.png" alt="Image 004" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to play the game
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftiw01ti26t21nnqp46ak.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftiw01ti26t21nnqp46ak.png" alt="Image 005" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the game: &lt;a href="https://sh-fk2.github.io/jaws-ug-slot-games/" rel="noopener noreferrer"&gt;https://sh-fk2.github.io/jaws-ug-slot-games/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Press Space to start the reels.&lt;/li&gt;
&lt;li&gt;Press Space again—timed right—to stop each reel.&lt;/li&gt;
&lt;li&gt;Land three matching strips to win!&lt;/li&gt;
&lt;li&gt;Hit R to reshuffle logos.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Code is on GitHub too: &lt;a href="https://github.com/sh-fk2/jaws-ug-slot-games" rel="noopener noreferrer"&gt;https://github.com/sh-fk2/jaws-ug-slot-games&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;By using Amazon Q CLI, I was able to create a game with a screen that utilizes HTML and CSS.&lt;/p&gt;

&lt;p&gt;Please try playing the game. Did you find your favorite logo? I would be happy if you found a logo you like. Please join the JAWS-UG of your favorite logo.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>ai</category>
      <category>community</category>
      <category>amazonqcli</category>
    </item>
  </channel>
</rss>
