<?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: James O'Reilly</title>
    <description>The latest articles on DEV Community by James O'Reilly (@jamesor).</description>
    <link>https://dev.to/jamesor</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3880574%2F26f5fa5a-996c-4cc5-b66b-329c9d99eb13.jpeg</url>
      <title>DEV Community: James O'Reilly</title>
      <link>https://dev.to/jamesor</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jamesor"/>
    <language>en</language>
    <item>
      <title>Context bankruptcy: The case for strategic forgetting for AI Agents</title>
      <dc:creator>James O'Reilly</dc:creator>
      <pubDate>Fri, 10 Jul 2026 14:12:20 +0000</pubDate>
      <link>https://dev.to/googleai/context-bankruptcy-the-case-for-strategic-forgetting-for-ai-agents-3c5</link>
      <guid>https://dev.to/googleai/context-bankruptcy-the-case-for-strategic-forgetting-for-ai-agents-3c5</guid>
      <description>&lt;p&gt;Most of us have seen a coding agent fail to complete a task we know it can do. We just don't understand the inconsistency in quality and lazily chalk it up to the "non-deterministic" nature of AI. What you might not realize is that the agent isn't failing because of intelligence, it's failing because its context is cluttered with noise.&lt;/p&gt;

&lt;p&gt;To fix this, we need to shift from context maximizing to deterministic pruning. Here is what you will get out of this deep dive to help you build those boundaries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why feeding an agent your entire repository causes agent reasoning failures.
&lt;/li&gt;
&lt;li&gt;How to navigate brownfield codebases by isolating subsystems for agents.
&lt;/li&gt;
&lt;li&gt;How to dynamically mask dead code before launching an agent turn.
&lt;/li&gt;
&lt;li&gt;The essentials for a reliable pruning harness.
&lt;/li&gt;
&lt;li&gt;Why unconstrained context bloats PRs and burns out reviewers.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;In computer architecture, &lt;a href="https://en.wikipedia.org/wiki/Thrashing_(computer_science)" rel="noopener noreferrer"&gt;thrashing&lt;/a&gt; occurs when an executing process demands more memory than the caches can hold. The processor stops executing useful instructions and spends all its resources swapping pages of memory in and out of RAM.&lt;/p&gt;

&lt;p&gt;Coding agents have a similar bottleneck inside their prompt windows. With brownfield development, it might be tempting to dump the whole legacy codebase into context and prompt "refactor this to Next.js" (Read my article &lt;a href="https://javascript.plainenglish.io/migrating-express-to-next-js-using-ai-agents-antigravity-f48b4c206a8e" rel="noopener noreferrer"&gt;How to automate modernization with Antigravity and multi-agent orchestration&lt;/a&gt; to learn why this is a bad idea and what to do instead). However, if you do dump the whole codebase into context the agent is more likely to confuse dead code and old library usage as current intent.&lt;/p&gt;

&lt;p&gt;You've reached &lt;strong&gt;context bankruptcy&lt;/strong&gt; when the context actively degrades reasoning accuracy.&lt;/p&gt;

&lt;h2&gt;
  
  
  The visibility trap and why more context breaks reasoning
&lt;/h2&gt;

&lt;p&gt;Some developers treat complete repository ingestion as a headline feature of the large context windows of frontier models. They assume comprehensive visibility equals deep understanding. It doesn't.&lt;/p&gt;

&lt;p&gt;In clean greenfield projects, broad context ingestion works but in a multi-million-line legacy codebase, broad context ingestion adversely impacts an agent's ability to reason.&lt;/p&gt;

&lt;p&gt;Most of us don't work on greenfield apps and many work inside messy poorly documented legacy codebases they inherited. They typically contain gems like folders named "v1-alpha", temporary helper scripts that are no longer usable or reflect current code, and orphaned feature flags. When an agent sweeps this data into context via naive RAG sweeps or massive context windows, it treats outdated patterns as current engineering truth.&lt;/p&gt;

&lt;p&gt;The rule driving this failure is &lt;a href="https://www.hyrumslaw.com/" rel="noopener noreferrer"&gt;Hyrum's Law&lt;/a&gt; applied to AI context windows: &lt;em&gt;with sufficient ingestion breadth, every observable historical implementation detail will eventually be depended upon by an autonomous model&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Give an agent access to 1,000 files and it will reason over your hackiest workarounds. It anchors on deprecated helper scripts and replicates tech debt into new modules.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F39ptx1bw5nlvsiro3qzz.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F39ptx1bw5nlvsiro3qzz.jpg" alt="Selective ignorance and how to enforce the boundary" width="799" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Selective ignorance and how to enforce the boundary
&lt;/h2&gt;

&lt;p&gt;When I review a legacy monolith I'm not familiar with, I don't read every file.&lt;/p&gt;

&lt;p&gt;I practice &lt;a href="https://martinfowler.com/articles/bliki/BoundedContext.html" rel="noopener noreferrer"&gt;selective ignorance&lt;/a&gt; and deliberately ignore most of the repository when building a mental model around the module I want to modify. I do this by treating the surrounding subsystems as if they were black boxes bounded by strict contracts.&lt;/p&gt;

&lt;p&gt;The agent execution environments should model this behavior.&lt;/p&gt;

&lt;p&gt;Addy Osmani recently documented &lt;a href="https://addyo.substack.com/p/context-engineering-bringing-engineering" rel="noopener noreferrer"&gt;context rot&lt;/a&gt; (the measurable performance dip models experienced as prompt windows fill) and &lt;a href="https://addyosmani.com/blog/agentic-engine-optimization/" rel="noopener noreferrer"&gt;agentic engine optimization (AEO)&lt;/a&gt; (formatting codebase documentation). Our industry remains obsessed with ingestion pipelines and larger token limits. Nobody is building harness infrastructure designed to force strategic forgetting.&lt;/p&gt;

&lt;p&gt;To protect agent reasoning we must shift our engineering effort from context maximization to deterministic pruning. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;If the agent sees the whole repository, you aren't scaling engineering velocity. You're scaling cognitive debt.&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fekpba7la5yzgdc3i6ypx.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fekpba7la5yzgdc3i6ypx.jpg" alt="Pruning harnesses versus context bankruptcy" width="799" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pruning harnesses versus context bankruptcy
&lt;/h2&gt;

&lt;p&gt;I treat context budget allocation as an architectural constraint because &lt;strong&gt;strategic forgetting&lt;/strong&gt; requires replacing broad ingestion with deterministic pruning.&lt;/p&gt;

&lt;p&gt;The contrast between unbound ingestion and strategic forgetting is significant.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Architectural Dimension&lt;/th&gt;
&lt;th&gt;Unbound Ingestion (Context Bankruptcy)&lt;/th&gt;
&lt;th&gt;Strategic Forgetting (Pruning Harness)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ingestion Strategy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Global vector RAG sweeps or broad context dumping across &lt;code&gt;**/*&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Dynamic AST pruning scoped strictly to active dependency graphs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Legacy Conflict Resolution&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ingests competing API wrappers; model hallucinates hybrid syntax&lt;/td&gt;
&lt;td&gt;Hides deprecated subsystems; enforces single active contract&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Prompt Capacity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;85%+ context budget consumed by historical boilerplate and dead code&lt;/td&gt;
&lt;td&gt;&amp;lt;15% context budget consumed; working memory preserved for execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reasoning Stability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High susceptibility to context rot; attention allocation dilutes over noise&lt;/td&gt;
&lt;td&gt;High attention concentration; deterministic diff generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Verification Overhead&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High cognitive load; engineers scrutinize massive diffs for side effects&lt;/td&gt;
&lt;td&gt;Minimal cognitive load; diffs match expected five-line boundary&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Architectural context pruning is not an optimization step. It is a baseline reliability prerequisite. If an autonomous agent can read deprecated internal modules, it will eventually depend on them.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Models are probabilistic which makes them unreliable at deterministic access controls. Simply refining a prompt to instruct the model to ignore sections of a large codebase will fail under complex reasoning loads. This is because models will attend to tokens inside their prompt windows regardless if those tokens are no longer relevant to the project.&lt;/p&gt;

&lt;p&gt;To guarantee selective ignorance, implement &lt;strong&gt;a muted repo pattern&lt;/strong&gt; which dynamically manipulates repository visibility before launching an agent turn. Here's how it works…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Map active dependency graphs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Run a static Abstract Syntax Tree (AST) parse starting from the target entry file. Generate a strict allowlist containing only immediate upstream imports and downstream consumers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Dynamically create ignore masks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Write an ephemeral &lt;code&gt;.antigravityignore&lt;/code&gt;, &lt;code&gt;.geminiignore&lt;/code&gt;, &lt;code&gt;.claudesignore&lt;/code&gt; or &lt;code&gt;.cursorignore&lt;/code&gt; file before the agent turns. Mask out &lt;code&gt;archive/&lt;/code&gt;, deprecated helpers, and unrelated domain packages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Use interfaces as substitutes for implementation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Replace complex external database wrappers and legacy integrations with clean interfaces or OpenAPI stubs. Force the model to code against these interfaces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Launch scoped agent turns&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Execute the agent prompt inside the pruned sandbox. This enables the model to work with focused attention free of historical distraction.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7jy0r9amn9m4e8g24crn.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7jy0r9amn9m4e8g24crn.jpg" alt="Essential implementation components" width="799" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Essential implementation components
&lt;/h3&gt;

&lt;p&gt;Building a deterministic pruning harness relies on three core components.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Runtime CLI file gating&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Modern agentic IDEs maintain persistent workspace indexes so I avoid editing &lt;code&gt;.antigravityignore&lt;/code&gt;, &lt;code&gt;.geminiignore&lt;/code&gt;, &lt;code&gt;.claudesignore&lt;/code&gt; or &lt;code&gt;.cursorignore&lt;/code&gt; dynamically per agent turn because overwriting ignore manifests trigger file-watcher invalidation events. When that happens the machine rebuilds codebase indexes in a race condition against the model's first token.&lt;/p&gt;

&lt;p&gt;To avoid editing the ignored files each agent turn, one option is passing file allowlist flags directly into your terminal command when launching the agent (&lt;code&gt;agy --add-dir src/auth/dir&lt;/code&gt;). Or, if building a custom harness, pass allowed file arrays into your tool execution APIs in memory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# .claudesignore .cursorignore .geminiignore .antigravityignore
# Force strategic forgetting in brownfield repositories

**/node_modules/
**/dist/
**/build/

# Gated Legacy Systems - Block the agent from historical noise
/legacy/v1-alpha/
/deprecated-soap-wrappers/
**/*.deprecated.ts

# Large static assets that trigger context thrashing
**/*.json
**/*.csv
package-lock.json
pnpm-lock.yaml

# Block the agent from analyzing un-verifiable dark matter code
/e2e/stale-tests-2022/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Hybrid semantic dependency mapping&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Do not rely on naive vector embeddings to select codebase context. Vector similarity retrieves semantically similar code which can pick up unwanted legacy code.&lt;/p&gt;

&lt;p&gt;Pure static AST tree-shaking would likely fail in brownfield monoliths because legacy systems lie at compile time. I'm thinking about systems that run on Java reflection, dependency injection containers, and runtime module loaders. For example, a shallow AST transversal would miss dynamically injected resources leading to dependency pruning causing runtime exceptions.&lt;/p&gt;

&lt;p&gt;Instead, combine shallow AST parsing with recent observability outputs or runtime error logs to discover dynamic runtime dependencies before gating context windows. If runtime telemetry proves &lt;code&gt;verify.ts&lt;/code&gt; calls &lt;code&gt;legacy-sql-pool.js&lt;/code&gt; via DI reflection, include &lt;code&gt;legacy-sql-pool.js&lt;/code&gt; in the allowlist. If static analysis and runtime traces both show zero execution paths to &lt;code&gt;deprecated-auth.ts&lt;/code&gt;, keep it out of the allowlist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Differential verification gating&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Brownfield architecture is typically handled by isolating complexity behind interfaces. For example, modifying a billing service doesn't require you to read connection pool source code.&lt;/p&gt;

&lt;p&gt;We can apply this thinking to agent prompt windows. By replacing deep internal library code with lightweight interface definitions, the model receives the correct contract specifications without ingesting implementation noise.&lt;/p&gt;

&lt;p&gt;I do want to point out however, that in legacy systems interfaces may lie. It's the runtime side effects that are the real source of truth. If you do decide to stub code to save tokens during generation, be sure to enforce a &lt;a href="https://en.wikipedia.org/wiki/Differential_testing" rel="noopener noreferrer"&gt;differential verification gate&lt;/a&gt;. That way, success can be measured by passing tests against the legacy runtime, not the contract stubs.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Antigravity implements pruning
&lt;/h3&gt;

&lt;p&gt;Since I work at Google on Antigravity, I wanted to share my knowledge of how Antigravity implements isolation natively:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Subagent context isolation:&lt;/strong&gt; Antigravity separates exploration from execution. The main agent has the ability to dynamically generate subagents which will have their own isolated context buffers and instructions from the main agent. The main agent may decide to delegate token-heavy or codebase-wide operations to subagents and keep the primary execution memory clean.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Planning mode checkpoints:&lt;/strong&gt; Enforce explicit planning artifacts (&lt;code&gt;/plan&lt;/code&gt;) so reviewers verify implementation design decisions and verification strategy before code generation.&lt;/p&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff9ooryie85sbhnkq2o6g.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff9ooryie85sbhnkq2o6g.jpg" alt="Vigilance fatigue" width="799" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Vigilance fatigue&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Unconstrained context ingestion doesn't just degrade model reasoning, it also has a toll on people. I know when I review lengthy and broad, machine-generated diffs it triggers vigilance fatigue.&lt;/p&gt;

&lt;p&gt;Reviewing code submitted by one of my colleagues is different from reviewing AI-generated code because I have less trust that basic architectural boundaries have been honored. I end up scrutinizing every line of code to verify the edit represents intentional business logic and not accidental side effects caused by historical noise.&lt;/p&gt;

&lt;p&gt;As reviews grow in size and number, my attention struggles. It becomes increasingly difficult to avoid rubber-stamping bloated pull requests. Strategic forgetting helps protect reviewers by limiting the agent's reach.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxscm4fz1xson0twnlgio.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxscm4fz1xson0twnlgio.jpg" alt="Tuesday morning checklist" width="799" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tuesday morning checklist
&lt;/h2&gt;

&lt;p&gt;Most engineering organizations measure AI maturity by &lt;strong&gt;counting deployed subagents&lt;/strong&gt; or &lt;strong&gt;tracking token consumption volume&lt;/strong&gt;. In my opinion, both are vanity indicators.&lt;/p&gt;

&lt;p&gt;True agentic scaling requires shifting focus from ingestion maxing to isolation discipline. Audit your agent workflows against three deterministic pruning heuristics:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enforce small diff boundaries:&lt;/strong&gt; If a localized bug fix generates PRs touching more than two files, halt execution. Your agent isn't being thorough, it's probably distracted by unrelated legacy code..&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Treat ignore manifests as dynamic build artifacts:&lt;/strong&gt; Don't maintain &lt;code&gt;.antigravityignore&lt;/code&gt; files manually. Compile ignore manifests dynamically before agent turns combining AST import traversal with runtime trace telemetry (observability/error logs) so dynamic dependency injection paths stay unmasked.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sandbox dependencies behind contract stubs:&lt;/strong&gt; If an agent can read implementation source code for external SDKs or shared database wrappers, hide it. Use interface definitions or OpenAPI contract stubs instead.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your agent headcount matters less than your isolation boundaries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional resources
&lt;/h2&gt;

&lt;p&gt;Here are a few other agentic brownfield development resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Article&lt;/strong&gt;: &lt;a href="https://javascript.plainenglish.io/migrating-express-to-next-js-using-ai-agents-antigravity-f48b4c206a8e" rel="noopener noreferrer"&gt;How to automate modernization with Antigravity and multi-agent orchestration&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codelab&lt;/strong&gt;: &lt;a href="https://codelabs.developers.google.com/automating-modernization-with-antigravity" rel="noopener noreferrer"&gt;Automating legacy modernization at scale using agentic pipelines and Antigravity&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Help others find this post.&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Share this post with your friends on socials.
&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://www.linkedin.com/in/jamesor/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or &lt;a href="https://x.com/JamesOR" rel="noopener noreferrer"&gt;X&lt;/a&gt; for more content like this.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>agentskills</category>
    </item>
    <item>
      <title>10 Indispensable Prompts Our Team Refuses to Build Without</title>
      <dc:creator>James O'Reilly</dc:creator>
      <pubDate>Tue, 16 Jun 2026 17:10:21 +0000</pubDate>
      <link>https://dev.to/googleai/10-indispensable-prompts-our-team-refuses-to-build-without-46bj</link>
      <guid>https://dev.to/googleai/10-indispensable-prompts-our-team-refuses-to-build-without-46bj</guid>
      <description>&lt;p&gt;Look at any builder's prompt history and you'll see a collection of highly specific, chaotic, one-off prompts.  We use AI to debug a single error message, refactor a messy email, or generate a quick boilerplate.&lt;/p&gt;

&lt;p&gt;If you sit down with people who consistently ship high-quality work, you'll find something interesting. They aren't just improvising. They have a set of go-to prompts they have tweaked and improved over time and used on nearly every project.&lt;/p&gt;

&lt;p&gt;I asked some of my peers and leaders a simple question: "What prompt do you use most often, and why?"&lt;/p&gt;

&lt;p&gt;What they shared wasn't just a list of arbitrary commands. Here's the unfiltered look at the prompts our team refuses to ship without, and more importantly why they use them.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Listed in alphabetical order.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Build a spec
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Maja Bilić&lt;/strong&gt;&lt;br&gt;
Senior Outbound Product Manager • Engineering&lt;br&gt;
Follow on &lt;a href="https://www.linkedin.com/in/mbilic/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The prompt:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Act as a cynical Principal Architect and Technical PM. I want to
build a [product] that allows [user] to do [action]. Do not write
code. Analyze this concept and list the top 5 technical, UX and 
architectural considerations. Then ask me key questions for each of 
the 5 considerations so we can work together on building the spec. 
Once you have all the answers, create a PRD doc and implementation 
plan. Don't over engineer or over simplify the design or 
implementation plan.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; I have written bad PRDs and I have read many bad PRDs. This prompt ensures I use the persona of a cynical Architect / PM who helps distill the idea, critique the approach and concept, and collaborate on defining the most important pieces. This way I make sure I work through the plan with an agent's help while also developing the product design idea further. I also love the guardrail of not over engineering or over simplifying things - AI tends to do that sometimes, especially when writing product design docs. &lt;/p&gt;




&lt;h2&gt;
  
  
  Widget tests
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Andrew Brogdon&lt;/strong&gt;&lt;br&gt;
Staff Developer Relations Engineer • Engineering&lt;br&gt;
Follow on &lt;a href="https://x.com/redbrogdon" rel="noopener noreferrer"&gt;X&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/redbrogdon/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The prompt:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I'd like to partner with you on increasing the robustness of this 
project by creating widget tests. If you haven't already, please 
read the Flutter team's skill for creating widget tests 
(https://github.com/flutter/skills/tree/main/skills/flutter-add-
widget-test).

Then, let's do these things:
*  Examine my application's codebase to identify areas of the UI/UX  
   that are not being tested properly.
*  Determine if the existing code is written in a testable way (are 
   dependencies injected? Are domains loosely or tightly coupled?  
   Etc.).
*  Determine which domains require more rigor than others.
*  Create an overall testing plan for the application.
*  Determine which areas of functionality are already aligned with 
   that plan, and which are missing tests.
*  Create a plan to implement those tests.* Execute that plan.Do 
   not proceed from one step to another unless you are completely 
   confident about your reasoning. 

You are encouraged to as many questions as needed.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; My favorite use of agentic coding tools is to actually &lt;em&gt;do&lt;/em&gt; all the things I used to feel guilty about not doing in my projects. Proper testing is definitely on that list. The official skills from the Dart/Flutter team do a great job of instructing agents on what good widget tests look like, so combining it with this prompt (which essentially just fits those steps into my own coding workflow) helps me reduce the toil required to maintain reliable, guilt-free codebases.&lt;/p&gt;




&lt;h2&gt;
  
  
  Find all the tests / Clean-up commit
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Aja Hammerly&lt;/strong&gt;&lt;br&gt;
Director of Builder Relations • Engineering&lt;br&gt;
Follow on &lt;a href="https://x.com/the_thagomizer" rel="noopener noreferrer"&gt;X&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/ajahammerly/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The prompt:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Run all the tests and identify any missing tests and write them. 
Pay special attention to edge cases and race conditions.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Find any unused code, embarrassing comments, comment to code 
inconsistencies, unresolved TODOs, or other things in this commit 
that shouldn't be in there.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
I find that when I'm working on code I'll often get extremely focused on the "happy path", the main path I want a user to take through the code. While I'm focused on that I'll put in TODO or FIX comments on edge cases I don't want to think about yet. I'll also forget to update comments and leave debugging comments in sometimes. And while I try to follow test driven development, I don't always get tests in on all the edge cases. I run these two prompts, usually in a new conversation without the development context as a first round of code review before submitting to an AI or human reviewer for the next step. This ensures that what I've built is in good shape for others to review and use. &lt;/p&gt;


&lt;h2&gt;
  
  
  Check for correct and compliant permissions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Rich Hyndman&lt;/strong&gt;&lt;br&gt;
Head of Antigravity Developer Relations • Engineering &lt;br&gt;
Follow on &lt;a href="https://x.com/geekyouup" rel="noopener noreferrer"&gt;X&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/richardhyndman/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The prompt:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Run a comprehensive check on this Android project to ensure all 
permissions are correct and compliant. Perform the following steps:
&lt;span class="p"&gt;
1.&lt;/span&gt;  Locate and analyze all 'AndroidManifest.xml' files (including 
    main, debug, and flavor-specific manifests), extract a master 
    list of declared '&lt;span class="nt"&gt;&amp;lt;uses-permission&amp;gt;&lt;/span&gt;' tags. 
&lt;span class="p"&gt;2.&lt;/span&gt;  Cross-reference these declared permissions against the codebase 
    to verify where they are actually used. Identify any bloatware 
    or unused permissions that can be safely removed.
&lt;span class="p"&gt;3.&lt;/span&gt;  Check the Kotlin/Java source files to ensure that all runtime 
    permissions implement the dynamic runtime permission request 
    flow 'checkSelfPermission','onRequestPermissionsResult' or the 
    Activity Result API.
&lt;span class="p"&gt;4.&lt;/span&gt;  Verify that any hardware features associated with the 
    permissions (like android.hardware.camera) are correctly 
    declared. Output your findings as a Markdown report. Provide 
    file paths and suggested code diffs for any fixes. Do not make 
    any file edits until I approve the plan.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; Antigravity, with Gemini 3.5 Flash and the Android plugin is an excellent Android development partner! Checking for the correct permissions can keep your app running smoothly and help avoid delays when uploading to the Play Store.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conduct code review
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Shir Meir Lador&lt;/strong&gt;&lt;br&gt;
Head of AI, Developer Relations • Engineering&lt;br&gt;
Follow on &lt;a href="https://x.com/shirmeir86" rel="noopener noreferrer"&gt;X&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/shirmeirlador/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The prompt:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Act as a strict, highly analytical Principal Engineer conducting a 
pre-production code review. You have incredibly high standards and 
zero tolerance for fragile, "happy-path" code. Your goal is to 
guide me to write bulletproof, production-ready systems.

Grade my uncommitted changes on an A-to-F scale for production 
readiness. 

Do not award an "A" unless my code is exceptionally robust. 

Specifically, analyze the changes for:

1.  Efficiency: Redundant API calls, wasteful database queries, or 
    un-cached resource leaks.
2.  Resilience: Silent failure points, lack of explicit error 
    boundaries, and missing rate-limit fallbacks.
3.  Architecture: Tight coupling and lack of clear separation of 
    concerns.

For every issue, explain pragmatically where the code is vulnerable 
to real-world production failures. Then, provide the exact git 
diffs needed to upgrade my code and earn that "A."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you ask an LLM to review your code, it almost always defaults to being polite. It tells you your naming is clean, suggests a few docstrings, and hands you a green checkmark. But polite reviews don't prevent production outages. I like this prompt because it completely cuts through that AI fluff. By forcing the model to grade your work on a harsh scale and demanding a working git diff to fix it, you turn it into a real partner. It stops guessing and starts actually reading your network calls and database queries to find where the code is going to break. It’s like having an uncompromising senior dev sitting over your shoulder, pointing out exactly where you got lazy, and then handing you the exact code to fix it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Explain trade-offs to aid decision-making
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;James O'Reilly&lt;/strong&gt;&lt;br&gt;
Staff Developer Relations Engineer • Engineering&lt;br&gt;
Follow on &lt;a href="https://x.com/JamesOR" rel="noopener noreferrer"&gt;X&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/jamesor" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The prompt:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Explain the pros and cons of executing your suggested 
Implementation Plan. Be specific about the trade-offs we're making 
related to performance, cost, security and maintainability so I can 
make an informed decision on how to proceed.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; I force AI to stress-test its own logic. By asking it about the trade-offs being made, I find the AI will rethink its strategy, stay hyper-focused on our specific implementation and avoid giving vague, hand-wavy responses. I also find this approach prevents AI from acting like the final authority and keeps me in control of the decision making.&lt;/p&gt;




&lt;h2&gt;
  
  
  Improve AI-generated code through research
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Emma Twersky&lt;/strong&gt;&lt;br&gt;
Head of Flutter &amp;amp; Dart Developer Relations  • Engineering&lt;br&gt;
Follow on &lt;a href="https://x.com/twerske" rel="noopener noreferrer"&gt;X&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/emmatwersky/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The prompt:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Research online, focusing on X threads, StackOverflow, GitHub 
issues and tech blogs for common security pitfalls, architectural 
misalignments, and subtle logic errors found in AI-generated 
&lt;span class="nt"&gt;&amp;lt;INSERT&lt;/span&gt; &lt;span class="na"&gt;TECH&lt;/span&gt; &lt;span class="na"&gt;YOU&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="na"&gt;RE&lt;/span&gt; &lt;span class="na"&gt;USING&lt;/span&gt; &lt;span class="na"&gt;HERE&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; code. Based on these findings, 
generate a manual review checklist specifically for auditing high-
risk areas like platform channel validation, deep link routing, and 
sensitive data logging in crash reports.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; While AI can write code 10x faster, it often produces slop—code that is rational but conceptually buggy because it makes incorrect assumptions about unspecified details. Research shows that up to 40% of AI-generated code contains vulnerabilities, and developers often trust it more than their own, which creates a dangerous mismatch. I use this prompt to generate a targeted checklist that protects against 'rubber-stamping' verbose AI changes and ensures my human judgment focuses on the high-risk 'seams' where models typically fail. Use AI to generate the tasks, but still keep a human in the loop where it matters most.&lt;/p&gt;




&lt;h2&gt;
  
  
  Find problems through iteration
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Fred Sauer&lt;/strong&gt;&lt;br&gt;
Head of Frameworks &amp;amp; Languages Developer Relations  • Engineering&lt;br&gt;
Follow on &lt;a href="https://x.com/fredsa" rel="noopener noreferrer"&gt;X&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/fredsa/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The prompt:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Simplified, my "last" (series of) prompt(s) looks something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-  Code review the uncommitted changes.

I prefer being less specific has oversteering can lead to blind spots.
I prefer a new chat session for a fresh set of "eyes".
I iterate until the results returned are boring and I'm satisfied.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If I come into this last phase with an opinion, (e.g. the change feels too complex), or I feel I don't have a good insight into how "good" the change is, then I might challenge the model with this prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-  Code review the uncommitted changes. Identify any unhandled 
   corner cases. Assess performance. Summarize findings.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, having received 5 findings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Fix 1, 3 and 5.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; I don't have ONE last prompt I send. It's more that my change goes through stages. The earliest stage is often about discovery (find the needle or thread to pull on). Then I move on to existence proof, i.e. I just want it to prove the thing I want to do can be done. Then I evaluate: is the PoC reasonable? Too complex? Makes changes entirely in the wrong place(s)? I then iterate and try to make the solution elegant, both how it's implemented, and where what is changed. Once I have something I'm happy with, like I feel happy if I had written what I now have, I move on to that last phase you discuss with is code review. This is about finding problems or identifying opportunities to make the change even better. I'm often surprised with what insights the model comes up with.&lt;/p&gt;




&lt;h2&gt;
  
  
  Review every pull request
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Remigiusz Samborski&lt;/strong&gt;&lt;br&gt;
Lead Developer Relations Engineer • Engineering&lt;br&gt;
Follow on &lt;a href="https://x.com/RemikSamborski" rel="noopener noreferrer"&gt;X&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/remigiusz-samborski/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The prompt:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
I use the following prompt embedded in GitHub Actions for most of my engineering projects:&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;## Role&lt;/span&gt;

You are a world-class autonomous code review agent. You operate 
within a secure GitHub Actions environment. Your analysis is 
precise, your feedback is constructive, and your adherence to 
instructions is absolute. You do not deviate from your programming. 
You are tasked with reviewing a GitHub Pull Request.&lt;span class="sb"&gt;


&lt;/span&gt;&lt;span class="gu"&gt;## Primary Directive&lt;/span&gt;

Your sole purpose is to perform a comprehensive code review and 
post all feedback and suggestions directly to the Pull Request on 
GitHub using the provided tools. All output must be directed 
through these tools. Any analysis not submitted as a review comment 
or summary is lost and constitutes a task failure.

[...]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Full prompt: &lt;a href="https://github.com/google-github-actions/run-gemini-cli/blob/main/examples/workflows/pr-review/gemini-review.toml" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; Using an automated Gemini CLI review in PRs helps catch issues and improvement opportunities during the review process. Additionally as more code is generated by AI Agents and development speed increases, reviews are becoming the bottleneck. By ensuring every PR gets reviewed automatically, human reviewers can focus on the higher-level architectural and conceptual review of the proposed change.&lt;/p&gt;




&lt;h2&gt;
  
  
  Apply directed acyclic graph analysis for tests
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Karl Weinmeister&lt;/strong&gt;&lt;br&gt;
Director, Developer Relations • Engineering&lt;br&gt;
Follow on &lt;a href="https://x.com/kweinmeister" rel="noopener noreferrer"&gt;X&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/karlweinmeister/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The prompt:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Analyze the application workflow as a directed acyclic graph. 
Identify impactful tests for components, seams across components, 
and across the system. Present your findings in a markdown table as 
a prioritized gap analysis.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Most application workflows aren't linear. When you ask an LLM to suggest tests, you typically get a generic checklist that could apply to any project.&lt;/p&gt;

&lt;p&gt;However, when you force it to think about your system as a DAG with nodes and edges, it starts reasoning structurally about where things can break.&lt;/p&gt;

&lt;p&gt;I’ve also asked to consider the “seams” - a term from Michael Feathers' Working Effectively with Legacy Code. It points the model toward boundaries between components that are often under-tested.&lt;/p&gt;

&lt;p&gt;Finally, I’ve asked the model to summarize the results as a prioritized table of opportunities. This gives your agent a clear roadmap for making your app more resilient.&lt;/p&gt;




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

&lt;p&gt;The thread connecting all of these prompts is about &lt;strong&gt;de-risking human assumptions&lt;/strong&gt;. Whether it's hunting for obscure edge cases, translating developer speak for end-users, or stress testing an architecture before code is written. Our team uses AI as an adversarial thinker designed to ask the hard questions we might overlook when we're deep in the weeds.&lt;br&gt;&lt;br&gt;
By building these "must-run" prompts into our daily workflows, we don't just ship faster, we ship with a level of confidence that used to require entire committees to achieve.&lt;/p&gt;

&lt;h3&gt;
  
  
  Now it's your turn
&lt;/h3&gt;

&lt;p&gt;A great prompt is meant to be shared. We've shown ours, now show us yours!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; What is the one prompt you run on every project without fail?
&lt;/li&gt;
&lt;li&gt; What is the worst disaster an AI prompt has ever saved you from?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drop your go-to prompt in the comments below and let's build a valuable resource together.&lt;/p&gt;

</description>
      <category>promptengineering</category>
    </item>
  </channel>
</rss>
