<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Roo Code Blog]]></title><description><![CDATA[Product updates, real-world use cases, and best practices for Roo Code — the AI coding assistant for faster, automated software development — plus insights on agentic workflows and the future of AI-driven software development.]]></description><link>https://blog.roocode.com</link><image><url>https://substackcdn.com/image/fetch/$s_!ggxU!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6303b203-c56c-492d-ab9f-338c46a4febc_1000x1000.png</url><title>Roo Code Blog</title><link>https://blog.roocode.com</link></image><generator>Substack</generator><lastBuildDate>Tue, 12 May 2026 15:21:52 GMT</lastBuildDate><atom:link href="https://blog.roocode.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Matt Rubens]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[roocode@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[roocode@substack.com]]></itunes:email><itunes:name><![CDATA[Matt Rubens]]></itunes:name></itunes:owner><itunes:author><![CDATA[Matt Rubens]]></itunes:author><googleplay:owner><![CDATA[roocode@substack.com]]></googleplay:owner><googleplay:email><![CDATA[roocode@substack.com]]></googleplay:email><googleplay:author><![CDATA[Matt Rubens]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[@Roomote Just Joined Your Slack]]></title><description><![CDATA[Use Roo Code Directly From Slack]]></description><link>https://blog.roocode.com/p/roo-code-slack</link><guid isPermaLink="false">https://blog.roocode.com/p/roo-code-slack</guid><dc:creator><![CDATA[Michael Preuss]]></dc:creator><pubDate>Wed, 21 Jan 2026 23:46:57 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/fbb6e71d-d10b-4f0b-b8c6-fbfa553f7cbb_1120x1134.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Your team is mid-discussion. Requirements are emerging. Edge cases are being raised.</p><p>Someone says, &#8220;This is getting complex. We should write this down.&#8221;</p><p>No one wants to stop and create a doc.</p><p>Now there&#8217;s another option: mention <strong>@Roomote</strong> in the thread.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!p0c0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7751532-a77c-46e1-a180-bca7856bddb7_800x812.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!p0c0!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7751532-a77c-46e1-a180-bca7856bddb7_800x812.gif 424w, https://substackcdn.com/image/fetch/$s_!p0c0!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7751532-a77c-46e1-a180-bca7856bddb7_800x812.gif 848w, https://substackcdn.com/image/fetch/$s_!p0c0!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7751532-a77c-46e1-a180-bca7856bddb7_800x812.gif 1272w, https://substackcdn.com/image/fetch/$s_!p0c0!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7751532-a77c-46e1-a180-bca7856bddb7_800x812.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!p0c0!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7751532-a77c-46e1-a180-bca7856bddb7_800x812.gif" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f7751532-a77c-46e1-a180-bca7856bddb7_800x812.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:8029782,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.roocode.com/i/185339719?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7751532-a77c-46e1-a180-bca7856bddb7_800x812.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!p0c0!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7751532-a77c-46e1-a180-bca7856bddb7_800x812.gif 424w, https://substackcdn.com/image/fetch/$s_!p0c0!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7751532-a77c-46e1-a180-bca7856bddb7_800x812.gif 848w, https://substackcdn.com/image/fetch/$s_!p0c0!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7751532-a77c-46e1-a180-bca7856bddb7_800x812.gif 1272w, https://substackcdn.com/image/fetch/$s_!p0c0!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7751532-a77c-46e1-a180-bca7856bddb7_800x812.gif 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Roo Code&#8217;s agent reacts with &#128064;. You can pick an agent, or let Roo Code handle it for you. Then choose a repository. Roo Code reads your entire discussion and returns a structured spec, right in the thread. Your team refines it. Then you call @Roomote to build it. A branch gets pushed. A PR opens. Work gets shipped.</p><p></p><blockquote><p><strong>Discussion &#8594; plan &#8594; code. Without leaving Slack.</strong></p></blockquote><p></p><h2>What this actually looks like</h2><p>Here&#8217;s a real flow:</p><p>&gt; <strong>Designer:</strong> What if we add a dark mode toggle to the settings page?  </p><p>&gt; <strong>PM:</strong> Users have been asking for this. Should persist across sessions.  </p><p>&gt; <strong>Engineer:</strong> Need to think about system preferences too. Auto vs manual.  </p><p>&gt; <strong>PM:</strong> Good points. Let&#8217;s not lose this.</p><p>&gt; <strong>@Roomote</strong> plan out a dark mode feature based on our discussion. Include the toggle, persistence, and system preference detection.</p><p><em>The Planner agent reads the thread, understands what &#8220;this&#8221; means, and produces a spec. The team reviews it in Slack. When it looks good:</em></p><p>&gt; <strong>Engineer:</strong> This looks good. Let&#8217;s build it.  </p><p>&gt; <strong>@Roomote</strong> implement this plan in the frontend-web repo.</p><p><em>The Coder agent creates a branch and opens a PR. The engineer reviews and merges.</em></p><p></p><h2>The agents know your thread</h2><p>This is the part that&#8217;s incredibly powerful:</p><p>You can be mid-conversation with a colleague, debugging something confusing. After a few back-and-forth messages, you just type:</p><p>&gt; <strong>@Roomote</strong> why is this happening?</p><p>And it knows what &#8220;this&#8221; means. The agent reads the thread history before responding. No need to re-explain the context you just spent 20 messages establishing.</p><p></p><h2>Non-technical team members can use this too</h2><p>A CSM pastes an error in Slack:</p><p>&gt; &#8220;Customer is seeing `Error 403: Token validation failed` when trying to export. Anyone know what this is?&#8221;</p><p>Usually: silence. Engineers are heads-down. The CSM escalates urgently or waits.</p><p>With <strong>@Roomote</strong>, the CSM asks the agent to explain. The agent reads the codebase, explains what&#8217;s happening in plain language, and can even push a fix branch if needed. The CSM updates the customer without waiting for engineering.</p><p>PMs can investigate hypotheses. Support can triage issues. Engineering gets pulled in only when humans need to make decisions.</p><p></p><h2>Safe by design</h2><p>Agents never touch <code>main</code> or <code>master</code> directly. They push branches and open PRs. You review. You approve.</p><p>The boundary stays with you and your team.</p><p>This matters. Agents produce artifacts; humans decide what ships.</p><div><hr></div><h2>Check it out in action:</h2><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;41a4828f-7e49-43fc-9f23-baf1651b2ca8&quot;,&quot;duration&quot;:null}"></div><div><hr></div><p>Full video here: <strong><a href="https://lnkd.in/gaX9J2DT">https://lnkd.in/gaX9J2DT</a></strong></p><p>Get started here: <strong><a href="https://roocode.com/slack">https://roocode.com/slack</a></strong></p>]]></content:encoded></item><item><title><![CDATA[166 Commits. 1 Month.]]></title><description><![CDATA[The Cloud Just Got Real. &#9729;&#65039;]]></description><link>https://blog.roocode.com/p/monthly-roo-code-cloud-2025-12</link><guid isPermaLink="false">https://blog.roocode.com/p/monthly-roo-code-cloud-2025-12</guid><dc:creator><![CDATA[Michael Preuss]]></dc:creator><pubDate>Wed, 14 Jan 2026 12:25:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ggxU!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6303b203-c56c-492d-ab9f-338c46a4febc_1000x1000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>Roo Code Cloud: December 2025</strong></h2><p>While the world was wrapping gifts, we were wrapping infrastructure.</p><p>In December 2025, the Roo Code team pushed <strong>166 commits</strong> and added <strong>88,000+ lines of code</strong> to Roo Code Cloud. This was not just maintenance. It expanded where agents can run, what they can integrate with, and what kind of environments they can depend on.</p><p>We pushed on three concrete capabilities: deeper workflow integration (Linear), a second compute vendor (Vercel Sandbox), and on-demand services (so the agent environment matches your app).</p><p>Here is what we shipped to shrink the &#8220;works on my machine&#8221; gap.</p><h3>1) Linear integration: stop copy-pasting tickets</h3><p><em>(Landed Dec 28; PR #1945, #2000)</em></p><p><strong>The struggle:</strong> Your team&#8217;s work lives in Linear, but your code lives somewhere else. You become the human router (copy issue description, paste into prompt, recopy updates). It is pure toil.</p><p><strong>The fix:</strong> We built a full Linear integration. It connects via OAuth, carries issue context into the agent run, and syncs back useful artifacts (status, actions, plans).</p><p><strong>So you can:</strong> Start work from a Linear issue without rebuilding context by hand, and track progress where the team already lives.</p><h3>2) Vercel Sandbox: cloud tasks you can see</h3><p><em>(Dec 19&#8211;23; PR #1937, #1943)</em></p><p><strong>The struggle:</strong> Remote compute is great until it is opaque. If you cannot open what the agent is running, you either trust blindly or switch back to local just to see the localhost port.</p><p><strong>The fix:</strong> We added Vercel Sandbox execution alongside <a href="http://fly.io/">Fly.io</a> and surfaced task preview links. You can open what the job is serving while it runs.</p><p><strong>So you can:</strong> Stop guessing. Open the preview, watch the app change, and treat cloud tasks like something you can interact with.</p><h3>3) Services Manager: databases on demand</h3><p><em>(Dec 23; PR #1951, #1956)</em></p><p><strong>The struggle:</strong> A blank container is not a development environment. &#8220;It compiles&#8221; is not the same as &#8220;it runs.&#8221; If your feature needs Postgres but the agent has no database, the code fails the second it hits CI.</p><p><strong>The fix:</strong> We shipped the Services Manager. You can now configure <code>roomotes.yml</code> to request ephemeral services like Redis 7, Postgres 17, or ClickHouse.</p><p><strong>So you can:</strong> Give the agent a real environment to run migrations and integration checks. Catch the &#8220;it fails when it touches the database&#8221; class of bugs earlier.</p><p>Tradeoff: spinning up real services can add time to a run. That is the cost of catching the right failures early.</p><h3>4) The unified Fixer agent</h3><p><em>(Dec 10&#8211;12; PR #1872, #1894)</em></p><p><strong>The struggle:</strong> Separate fixers with different behaviors create a new kind of work. You end up learning which bot is safe to trust today.</p><p><strong>The fix:</strong> We unified the PR Fixer and Issue Fixer into a single Fixer agent and enforced approval requirements before implementing issue fixes.</p><p><strong>So you can:</strong> Stop guessing. Whether it starts from an issue, a PR comment, or a message, the control boundary stays predictable.</p><h3>The theme: Connection</h3><p>December was about connecting the parts that usually break a workflow.</p><ul><li><p><strong>Workflow connection:</strong> Linear issues to agent sessions.</p></li><li><p><strong>Compute connection:</strong> <a href="http://fly.io/">Fly.io</a> plus Vercel Sandbox as places work can run.</p></li><li><p><strong>Data connection:</strong> Services that match what your app expects.</p></li></ul><p>Roo Code Cloud is not a place to run scripts. It is a place where agents can do real product work, with visible execution and clear control boundaries.</p><p>If you want a quick way to try the new flow, start from a Linear issue, keep approvals on, and open the task preview while it runs.</p><p>Let&#8217;s ship.</p><p>Want to try Roo Code Cloud? <a href="https://roocode.com">Start here</a>.</p>]]></content:encoded></item><item><title><![CDATA[28 Releases. 31 Days.]]></title><description><![CDATA[December was... busy. &#128674;]]></description><link>https://blog.roocode.com/p/monthly-roo-code-2025-12</link><guid isPermaLink="false">https://blog.roocode.com/p/monthly-roo-code-2025-12</guid><dc:creator><![CDATA[Michael Preuss]]></dc:creator><pubDate>Tue, 13 Jan 2026 23:57:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ggxU!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6303b203-c56c-492d-ab9f-338c46a4febc_1000x1000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Roo Code: December 2025</h2><p>Most of the industry slows down in December. We accidentally (on purpose, because we are your mildly unhinged group of agent makers) did the opposite.</p><p>Between December 1st (<strong><a href="https://github.com/RooCodeInc/Roo-Code/releases/tag/v3.35.0">v3.35.0</a></strong>) and December 31st (<strong><a href="https://github.com/RooCodeInc/Roo-Code/releases/tag/v3.38.2">v3.38.2</a></strong>), we shipped <strong>28 releases</strong>. Why? Because we found a way to make your agents significantly smarter without waiting for the next model release (yes, including GPT-5.2-Codex).</p><p>We went after the unglamorous, critical plumbing: moving tool use onto native formats, tightening context architecture, and making debugging actionable. The goal was simple: <strong>remove friction so closing the loop feels straightforward</strong>.</p><p>We kept seeing the same opportunity: if we fix the plumbing, we unlock a new level of performance for every model you use.</p><p>Here is how we upgraded your engine.</p><h3>1) Agent Skills: Superpowers on Demand</h3><p><em>(Landed in <a href="https://github.com/RooCodeInc/Roo-Code/releases/tag/v3.38.0">v3.38.0</a>; aligned to spec in <a href="https://github.com/RooCodeInc/Roo-Code/releases/tag/v3.38.2">v3.38.2</a>)</em></p><p>The problem: if you stuff every tool and rule into the system prompt &#8220;just in case,&#8221; you burn tokens and distract the model.</p><p>The fix: we shipped <strong>Agent Skills</strong>. Think of these as modular superpowers. Instead of carrying the kitchen sink at all times, the agent can load specific capabilities (tools, prompts, resources) only when the task actually requires them.</p><p>So you can: build agents with deep expertise in specific domains without crushing their context window.</p><p>Tradeoff: skills add setup and coordination. The payoff is a cleaner context window and more predictable behavior.</p><h3>2) Native Tool Calling: A Massive Performance Unlock</h3><p><em>(Shipped continuously across December releases)</em></p><p>The problem: you think the model is &#8220;hallucinating.&#8221; A lot of the time it is just overstimulated. Asking an LLM to execute code by parsing brittle text formats is like trying to solve a LeetCode Hard during a fire drill (this is fine). It burns cognitive energy on the <em>formatting</em>, so it has less brainpower left to actually <em>solve the bug</em>.</p><p>The fix: we pushed tool use onto <strong>native tool calling</strong> across providers (Roo Code Router, Anthropic, OpenAI, OpenRouter, etc.). We deprecated XML tool protocol selection for new tasks. We stopped forcing models to act like 1990s text parsers.</p><p>The upside: the difference is not subtle. In one internal eval, <strong>Claude 4.5 Haiku went from ~27% to ~95% success</strong> after the shift. If we publish this number, we should add one sentence defining the eval and sample size.</p><p>So you can: get top-tier results from the &#8220;fast and cheap&#8221; models. And you still keep full control with <strong>approvals</strong>. Roo Code does not execute without you saying so.</p><h3>3) Fixing &#8220;Agent Amnesia&#8221; (Context Management)</h3><p><em>(<a href="https://github.com/RooCodeInc/Roo-Code/releases/tag/v3.36.1">v3.36.1</a> and <a href="https://github.com/RooCodeInc/Roo-Code/releases/tag/v3.36.3">v3.36.3</a>)</em></p><p>The problem: long tasks tend to rot. As the context window fills up, the agent gets confused. Suddenly you are re-explaining a file Roo Code read fifteen minutes ago. It&#8217;s exhausting.</p><p>The fix: we rewrote the <strong>MessageManager</strong> layer. History coordination and truncation are infrastructure now, not a coincidence.</p><p>So you can: spend tokens intentionally on results, not on reminding the agent what day it is.</p><h3>4) Debugging: Showing the Receipts</h3><p><em>(<a href="https://github.com/RooCodeInc/Roo-Code/releases/tag/v3.36.4">v3.36.4</a>, <a href="https://github.com/RooCodeInc/Roo-Code/releases/tag/v3.36.14">v3.36.14</a>, <a href="https://github.com/RooCodeInc/Roo-Code/releases/tag/v3.36.15">v3.36.15</a>)</em></p><p>The problem: the shift to native tool calling was a massive upgrade. It also exposed weird edge cases. APIs failed in creative ways we had not seen before, and &#8220;Something went wrong&#8221; does not cut it when you are debugging protocol mismatches.</p><p>The fix: we took the medicine. We stopped hiding the underlying error details and shipped an <strong>Error Details Modal</strong> and <strong>Downloadable Diagnostics</strong>. We also improved reliability for tool execution edge cases.</p><p>So you can: see why it crashed instead of guessing. Huge shoutout to the community for the patience and the detailed bug reports while we stabilized the plumbing.</p><h3>Ready for 2026?</h3><p>December was not just a shipping spree. It was an engine swap. We stripped friction, fixed plumbing, and handed brainpower back to the agent.</p><p>If you haven&#8217;t updated since November, you are running on an older, slower engine.</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://roocode.com&quot;,&quot;text&quot;:&quot;Get started with Roo Code&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://roocode.com"><span>Get started with Roo Code</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Sorry we didn’t listen sooner: Native Tool Calling]]></title><description><![CDATA[You told us so.]]></description><link>https://blog.roocode.com/p/sorry-we-didnt-listen-sooner-native</link><guid isPermaLink="false">https://blog.roocode.com/p/sorry-we-didnt-listen-sooner-native</guid><dc:creator><![CDATA[Hannes P. Rudolph]]></dc:creator><pubDate>Thu, 25 Dec 2025 04:16:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ggxU!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6303b203-c56c-492d-ab9f-338c46a4febc_1000x1000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Up until 3.36, Roo relied on XML-style tool calling. A number of users and contributors told us plainly that native tool calling was the future. You told us so. We did not move fast enough, and we did not give that feedback the time and seriousness it deserved. That one is on us.</p><p>In 3.36.0 we introduced native tool calling and started migrating through the 3.36.x releases. In 3.37.0 we made native tool calling the default and removed XML tool calling entirely.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.roocode.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Roo Code Blog! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This was not a knee-jerk move. New models now ship with first-class native tool calling support that goes far beyond anything we could realistically achieve with XML. Continuing to invest in XML would anchor Roo to an approach the ecosystem is already moving away from.</p><p>Some people have asked why we did not keep XML as an option. Keeping two tool calling architectures massively increases complexity. Every fix, every feature, every tool-related issue forces Roo to reason about two completely different execution paths. That slows development, increases bugs, and makes it harder to move Roo forward. It also guarantees that XML users would slowly get stuck with an increasingly outdated experience as improvements land only in the native path.</p><p>This transition has been a pain in the ass, and we know it. We chose to ship when we did based on live metrics, real usage, and incoming bug reports. We knew there would be collateral damage. We tried to minimize it, but this is the largest architectural change Roo has ever gone through.</p><p>Right now we are focused on debugging and buttoning up the native tool calling implementation, especially around edge cases. Telemetry shows it is working for the vast majority of users, but we are not pretending this is finished. With many providers, many models, and users constantly switching between them, there is real complexity here. The error reports people send in are incredibly valuable and directly drive fixes.</p><p>There is also a bigger reason for doing this now. Over the last two months we have been heavily reworking Roo&#8217;s foundation mid-stream. Context handling, task orchestration, and core execution paths are being rebuilt to support some very large features planned for early 2026. Native tool calling is required for that work. Staying on XML would have blocked it outright.</p><p>Merry Christmas. We have taken a short break for the holidays, and we are genuinely sorry if you are one of the people whose Roo issues did not get resolved in the final crunch before the break. If you need stability right now, you can roll back to 3.36.16 and select XML tool calling as your default in the advanced settings of your API profiles.</p><p>We know this has been frustrating. We are sorry for the pain in the ass this caused. We appreciate the patience, the blunt feedback, and the bug reports.</p><p>XML tool calling is retired. Native tool calling is how Roo moves forward.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.roocode.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Roo Code Blog! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Share Your Work-One Link at a Time]]></title><description><![CDATA[A single link that replays your AI conversation&#8212;perfect for quick help, cleaner PRs, and brag-worthy demos.]]></description><link>https://blog.roocode.com/p/share-your-work-one-link-at-a-time</link><guid isPermaLink="false">https://blog.roocode.com/p/share-your-work-one-link-at-a-time</guid><dc:creator><![CDATA[Danny Leffel]]></dc:creator><pubDate>Thu, 26 Jun 2025 21:51:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ggxU!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6303b203-c56c-492d-ab9f-338c46a4febc_1000x1000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today we&#8217;re giving every Roo Code user a brand-new super-power: <strong>Sharing</strong>.<br>Click the little <strong>Share &#128279;</strong> button on any task and you&#8217;ll instantly get a link you can post in Slack, drop into a pull request, or tweet to the world. Anyone with the link&#8212;inside or outside your org&#8212;can replay the full conversation you had with Roo&#8217;s AI (messages, agent moves, final result) and see whether the task nailed it or fizzled.</p><p></p><h4>Why you&#8217;ll love it</h4><p><strong>Instant collaboration</strong><br>Stuck on a gnarly prompt? Paste a share-link to a teammate and they can step through every move you made&#8212;no screen-share, no &#8220;can you scroll up?&#8221; With all the context in one place, the fix often appears in minutes.</p><p><strong>Smarter code reviews</strong><br>Add a share-link to your next PR description. Reviewers see <em>why</em> the code exists, not just <em>what</em> changed: fewer back-and-forth comments and faster merges.</p><p><strong>Team playbooks &amp; best practices</strong><br>When you discover a prompt that sings, turn it into a living example for the whole squad. A single link becomes an evergreen reference others can study, fork, and improve.</p><p><strong>Show-and-tell moments</strong><br>Built something wild (or hilariously unexpected)? Drop the link on Twitter, Reddit, or in our Discord and let the applause&#8212;or constructive roasting&#8212;roll in.</p><blockquote><p>&#128274; <strong>Heads-up on privacy:</strong> Share-links expose chat and task metadata only&#8212;<strong>not your raw source code</strong>&#8212;and are visible solely to anyone holding the link.</p></blockquote><h4>How it works</h4><ol><li><p><strong>Update Roo Code</strong> to the latest build (it&#8217;s live now).</p></li><li><p>Open any completed (or failed!) task in the sidebar.</p></li><li><p>Hit <strong>Share &#128279;</strong> &#8594; <strong>Copy link</strong>.</p></li><li><p>Paste the URL wherever you need a second pair of eyes&#8212;or a round of applause.</p></li></ol><p>If the viewer isn&#8217;t logged in, they&#8217;ll be prompted to create a free Roo Code Cloud account so they can watch the replay. No setup, no permissions dance.</p><h4>What&#8217;s next</h4><p>&#8220;Sharing&#8221; is the first tile in a much bigger Roo Code Cloud mosaic. Over the coming weeks we&#8217;ll drip out more tricks that build on the same link model. But for now, we just want to see what <strong>you</strong> create.</p><h3>Try it now</h3><p>Fire up Roo Code, share your most interesting task, and tag <strong>@roocode</strong> on X or LinkedIn. We&#8217;ll reshare our favorites and maybe toss in some swag for the most mind-bending examples.</p><p>Happy Roosharing!</p>]]></content:encoded></item><item><title><![CDATA[How Roo Code Used Roo Code to Internationalize Roo Code]]></title><description><![CDATA[Scaling to 15 languages without slowing down, thanks to AI orchestration.]]></description><link>https://blog.roocode.com/p/how-roo-code-used-roo-code-to-internationalize</link><guid isPermaLink="false">https://blog.roocode.com/p/how-roo-code-used-roo-code-to-internationalize</guid><dc:creator><![CDATA[Matt Rubens]]></dc:creator><pubDate>Tue, 22 Apr 2025 14:43:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ggxU!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6303b203-c56c-492d-ab9f-338c46a4febc_1000x1000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Back in February, we got a pull request from the community that caught my eye. It started internationalizing parts of <a href="https://roocode.com">Roo Code</a> and included a Simplified Chinese translation for some of the UI.</p><p>At first, I was a little skeptical:</p><blockquote><p>"Thanks for the PR! I&#8217;ll take a look at this soon. In general I haven&#8217;t thought a ton about the internationalization strategy&#8212;curious what people have seen work in the past. Just using internationalized strings when developing and letting the community translate as follow-ups?"</p></blockquote><p>The contributor responded with a thoughtful note:</p><blockquote><p>"Thanks for the response! I&#8217;m currently promoting the Roo Code plugin to my colleagues, and in order to help everyone better understand the meaning of the menu settings, I&#8217;ve implemented internationalization. I personally believe that using internationalized strings during development helps developers from different countries better understand the meaning of the menu settings."</p></blockquote><p>And honestly? They were right.</p><p>In the old world (a.k.a. 2024), it would have been unthinkable for a fast-moving project like Roo Code to pause and set up a full internationalization pipeline. That kind of thing was the domain of big, slow-moving companies with dedicated teams. But things have changed. LLMs are here, and Roo Code has... Roo Code.</p><p>We also started to notice something else: a large portion of our community contributions were coming from non-native English speakers. Roo Code is deeply community-driven, and if our users are global, our interface should be too.</p><p>So, we decided to go all-in on internationalization.</p><div><hr></div><h3>Step 1: Internationalize Everything</h3><p>At first, we thought we&#8217;d slowly internationalize the app, one screen at a time. But again, this is 2025. Why not just... do it all?</p><p>So we spun up a <a href="https://docs.roocode.com/features/custom-modes">custom mode</a> called "Internationalization Engineer" inside Roo. This agent specialized in extracting all the user-facing English strings from our codebase and organizing them into clean, well-named JSON files. If you&#8217;ve ever done this job manually, you know it&#8217;s a nightmare. But Roo didn&#8217;t complain - and it crushed it for single files.</p><p>The next challenge: scale.</p><p>You can&#8217;t just tell an LLM, &#8220;Internationalize the whole thing,&#8221; and expect it to get through the the entire application. That&#8217;s where our orchestration features came in.</p><p>We used Roo&#8217;s &#8220;<a href="https://docs.roocode.com/features/boomerang-tasks">Boomerang Mode</a>&#8221;, a high-level workflow that breaks down large tasks into subtasks and delegates them out without clogging up the context window. We pointed the orchestrator at the whole extension, and it got to work:</p><ul><li><p>It created a list of every file that needed internationalizing</p></li><li><p>It handed each one off to the Internationalization Engineer</p></li><li><p>It stitched everything back together, clean and fast</p></li></ul><p>I&#8217;d love to say I watched it work, but honestly, I went and played with my kids while Roo handled it. When I came back, it was done.</p><div><hr></div><h3>Step 2: Translate</h3><p>Next came translation.</p><p>LLMs have been good at translation for a while, but consistency is tricky. So I created a custom &#8220;Translate&#8221; mode filled with detailed instructions: voice, tone, how to handle pluralization, how to treat interpolated variables, etc.</p><p>We ran a few test translations and sent them to our original contributors for review. The feedback was great! A few small tweaks (like keeping &#8220;tokens&#8221; in English instead of translating) and we updated our instructions and re-ran everything. Total fix time: a few minutes.</p><p>We ended up translating Roo Code into 14 new languages in a little over a week of one developer&#8217;s time, plus a heavy assist from Roo (and a decent number of tokens). The results weren&#8217;t perfect, but they were a huge head start.</p><div><hr></div><h3>Step 3: Learn and Improve &#8212; Automatically</h3><p>As we expected, some native speakers from the community sent in pull requests with fixes and improvements to the initial translations. In the old world, this would be a constant tax: humans doing slow reviews, keeping documentation up to date, and hoping translators got the memo next time.</p><p>But this is Roo Code in 2025.</p><p>Instead of just merging the PRs and moving on, we pointed Roo Code at the feedback itself. Roo reviewed the pull requests, summarized the changes, and then updated its own <a href="https://docs.roocode.com/features/custom-instructions">custom instructions</a> - adding examples and new heuristics to handle similar edge cases in the future.</p><p>In other words: Roo learned.</p><p>This created a positive feedback loop. The more feedback the community gave, the better Roo got at translating the next thing. Suddenly our translation strategy wasn&#8217;t just &#8220;generate and fix,&#8221; it was &#8220;generate, fix, and get better automatically.&#8221;</p><p>2024 internationalization couldn&#8217;t do that.</p><div><hr></div><h3>The Takeaway</h3><p>This whole project has been one of the clearest examples of how Roo Code helps build Roo Code, and why we&#8217;re so excited about the future of AI-assisted software development.</p><p>Internationalization used to be a multi-quarter initiative. Now it&#8217;s just... a thing we did in a week.</p><p>We&#8217;re shipping faster than ever, with a more inclusive product, thanks to the power of LLMs <em>and</em> the amazing Roo community that pushes us to keep leveling up.</p><p>The world&#8217;s not waiting, and neither are we.</p><div><hr></div><p><strong>Roo Code</strong> is an open-source AI coding assistant that lives in your editor and helps you build faster with agent-based workflows. It&#8217;s available now as a <a href="https://marketplace.visualstudio.com/items?itemName=roovet.ruu-code">VS Code extension</a> and on <a href="https://github.com/RooVetGit/Roo-Code">GitHub</a>.</p>]]></content:encoded></item></channel></rss>