<?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: Armaan Jain</title>
    <description>The latest articles on DEV Community by Armaan Jain (@armaan_jain_936cbd5eda074).</description>
    <link>https://dev.to/armaan_jain_936cbd5eda074</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%2F3951896%2Fc43a5707-b0f6-4644-be0a-43b9289df208.jpeg</url>
      <title>DEV Community: Armaan Jain</title>
      <link>https://dev.to/armaan_jain_936cbd5eda074</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/armaan_jain_936cbd5eda074"/>
    <language>en</language>
    <item>
      <title>LocalityLens: Why Your AI Coding Agent Gets Lost in Your Codebase</title>
      <dc:creator>Armaan Jain</dc:creator>
      <pubDate>Tue, 16 Jun 2026 09:25:09 +0000</pubDate>
      <link>https://dev.to/armaan_jain_936cbd5eda074/localitylens-why-your-ai-coding-agent-gets-lost-in-your-codebase-4822</link>
      <guid>https://dev.to/armaan_jain_936cbd5eda074/localitylens-why-your-ai-coding-agent-gets-lost-in-your-codebase-4822</guid>
      <description>&lt;p&gt;You watch Claude Code analyze your repository. Files flash by. Symbols get resolved. It's working.&lt;/p&gt;

&lt;p&gt;But &lt;em&gt;how well&lt;/em&gt; is it working?&lt;/p&gt;

&lt;p&gt;Here's a thought: &lt;strong&gt;we measure AI coding agents on the wrong metric.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We ask: "Did it complete the task?" But the better question is: "Did it stay &lt;em&gt;focused&lt;/em&gt; while solving it?"&lt;/p&gt;

&lt;p&gt;An agent that bounces between unrelated files three times, re-reads the same code, and loses semantic context is inefficient—even if it eventually gets the answer right. And we have no way to measure that.&lt;/p&gt;

&lt;p&gt;Until now.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem: Semantic Thrashing
&lt;/h2&gt;

&lt;p&gt;Imagine reading a complex codebase. You open &lt;code&gt;auth.py&lt;/code&gt;, then &lt;code&gt;login.py&lt;/code&gt;, then back to &lt;code&gt;auth.py&lt;/code&gt;, then &lt;code&gt;validation.py&lt;/code&gt;, then &lt;code&gt;auth.py&lt;/code&gt; again.&lt;/p&gt;

&lt;p&gt;You can &lt;em&gt;feel&lt;/em&gt; your brain context-switching. The threads you were following get tangled.&lt;/p&gt;

&lt;p&gt;This happens to AI agents too. It matters because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Token waste&lt;/strong&gt; — Re-reading the same file consumes context budget&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decision degradation&lt;/strong&gt; — Reasoning quality drops without stable context&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inefficiency&lt;/strong&gt; — The agent takes 2-3x longer to reach correct answers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hallucinations&lt;/strong&gt; — Thrashing patterns correlate with errors and confusion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Existing tools measure &lt;em&gt;what&lt;/em&gt; agents do. LocalityLens measures &lt;em&gt;how well&lt;/em&gt; they navigate.&lt;/p&gt;




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

&lt;p&gt;An &lt;strong&gt;AST-aware observability tool&lt;/strong&gt; that analyzes agent traces and reveals how agents navigate your codebase.&lt;br&gt;
&lt;a href="https://armaanjain-byte.github.io/LocalityLens/" rel="noopener noreferrer"&gt;(Github)&lt;br&gt;
&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;The workflow:&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;Agent Trace (file access log)
    ↓
Parse files, extract imports &amp;amp; symbols via AST
    ↓
Compute 12 specialized metrics
    ↓
Visualize patterns: locality, thrashing, drift, entropy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It runs offline on your trace + your codebase. No external APIs, no LLM calls.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Core Metric: Locality Score
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; How often does the agent stay within semantic context?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The agent maintains a working set of related files (based on imports and calls)&lt;/li&gt;
&lt;li&gt;Each file transition is classified:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Local&lt;/strong&gt; — Next file is in the working set&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-local&lt;/strong&gt; — Jump to unrelated code&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Score = fraction of local transitions + context overlap + dependency continuity&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Interpretation:&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;0.75+  = Excellent focus (agent stays on task)
0.55–0.75 = Good (occasional context switches)
0.35–0.55 = Poor (frequent task-switching)
&amp;lt;0.35  = Critical (agent is lost)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Other Metrics That Matter
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;What It Detects&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Oscillation Thrashing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A→B→A→B loops (stuck patterns)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Semantic Drift&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Jumping between distant code regions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Context Entropy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Disorder in the context window (LLM simulation)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Churn Ratio&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Files re-accessed (context loss)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Retrieval Pressure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Over-reliance on search/lookup tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cognitive Load&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Symbol namespace complexity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Semantic Continuity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Does the agent respect the import graph?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;7 more...&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Anomalies, waste, concentration, etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Concrete Example
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Your codebase:&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;api/
  └─ routes.py
models/
  └─ user.py (imports api.routes)
auth/
  ├─ login.py
  └─ utils.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Agent trace:&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;routes.py → user.py → utils.py → login.py → login.py 
→ routes.py → unrelated_file.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What LocalityLens sees:&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;⚠️  Locality Score: 0.62 (LOW)
    └─ Decent focus, but faltering

🔄 Thrashing Detected
    └─ login.py accessed twice (context loss)

📊 Semantic Drift
    └─ Sudden jump to unrelated_file.py
    └─ Suggests: Agent lost understanding

💾 Churn Ratio: 29%
    └─ ~1 in 3 files re-accessed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Actionable insight:&lt;/strong&gt; The agent forgot earlier analysis midway through. Try prompting it with the import graph upfront.&lt;/p&gt;




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

&lt;h3&gt;
  
  
  1. Debug Agent Failures
&lt;/h3&gt;

&lt;p&gt;When an agent produces wrong code, check the trace:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High thrashing? Agent lost context.&lt;/li&gt;
&lt;li&gt;High drift? Agent jumped between unrelated files.&lt;/li&gt;
&lt;li&gt;Usually, you see context loss &lt;em&gt;before&lt;/em&gt; the error.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Improve Prompts
&lt;/h3&gt;

&lt;p&gt;Experiment with what helps locality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Here's the import graph" → Higher locality ✅&lt;/li&gt;
&lt;li&gt;"Start at the entry point" → Less oscillation ✅&lt;/li&gt;
&lt;li&gt;Measure before and after.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Compare Agent Behaviors
&lt;/h3&gt;

&lt;p&gt;Different prompts = different profiles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Exploratory&lt;/strong&gt; agents have high drift (intentional)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Focused&lt;/strong&gt; agents have high locality (efficient)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lost&lt;/strong&gt; agents have high thrashing (bad)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Real Results
&lt;/h2&gt;

&lt;p&gt;I ran LocalityLens on three agents solving the same task:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Agent&lt;/th&gt;
&lt;th&gt;Locality&lt;/th&gt;
&lt;th&gt;Thrashing&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Agent A&lt;/td&gt;
&lt;td&gt;0.78&lt;/td&gt;
&lt;td&gt;0.02&lt;/td&gt;
&lt;td&gt;45s ✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent B&lt;/td&gt;
&lt;td&gt;0.54&lt;/td&gt;
&lt;td&gt;0.18&lt;/td&gt;
&lt;td&gt;72s ⚠️&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent C&lt;/td&gt;
&lt;td&gt;0.31&lt;/td&gt;
&lt;td&gt;0.41&lt;/td&gt;
&lt;td&gt;120s ❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Observation:&lt;/strong&gt; Locality score correlates strongly with speed and correctness.&lt;/p&gt;




&lt;h2&gt;
  
  
  How It Works (Technically)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tree-sitter&lt;/strong&gt; — Multi-language AST parsing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NetworkX&lt;/strong&gt; — Import graph + BFS distance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dataclasses + Protocol&lt;/strong&gt; — Type-safe, extensible analyzers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pure Python&lt;/strong&gt; — Offline, no external APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why this approach:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No vendor lock-in (runs locally)&lt;/li&gt;
&lt;li&gt;Fast (semantic map built once, queried by 12 analyzers)&lt;/li&gt;
&lt;li&gt;Extensible (new metrics as simple plugins)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Using LocalityLens
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Collect a trace from your agent&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"kind"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FILE_READ"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"auth.py"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"kind"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FILE_READ"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"login.py"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Point LocalityLens at your trace + codebase&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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;localitylens.pipeline&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;run_pipeline&lt;/span&gt;

&lt;span class="n"&gt;report&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;run_pipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;trace_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;agent_trace.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;repo_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# Your codebase
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Get results&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="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;metric&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&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;metric&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;metric&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;metric&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;severity&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output: Metrics, dashboard, anomalies, transition graph.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;LocalityLens started as research into how AI agents navigate code. It's now a tool for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI researchers&lt;/strong&gt; — Understanding agent behavior&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt engineers&lt;/strong&gt; — Tuning agent focus&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teams building agents&lt;/strong&gt; — Debugging and optimization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Currently in development. Track progress on the project for updates.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Takeaway
&lt;/h2&gt;

&lt;p&gt;As AI agents become more capable, we need better observability. Metrics like "task completion" are baseline. Metrics like &lt;strong&gt;semantic locality&lt;/strong&gt; reveal &lt;em&gt;how well&lt;/em&gt; agents think.&lt;/p&gt;

&lt;p&gt;LocalityLens gives you the lens to see that.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;How are you debugging your agents today? Drop a comment—I'd love to hear.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>agents</category>
      <category>software</category>
    </item>
  </channel>
</rss>
