<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fh="http://purl.org/syndication/history/1.0"><channel><title>RobotCode | News</title><description>Robot Framework for Visual Studio Code and more</description><link>https://robotcode.io/</link><language>en</language><fh:complete/><atom:link rel="self" href="https://robotcode.io/news/rss.xml"/><item><title>What&apos;s New in v2.8.0</title><link>https://robotcode.io/news/v2-8-0/</link><guid isPermaLink="true">https://robotcode.io/news/v2-8-0/</guid><description>RobotCode v2.8.0 is a big release. It supports Robot Framework 7.5, gives the PyCharm plugin its biggest update yet, with nearly everything the VS Code extension offers, adds a Documentation Viewer to VS Code, and moves the website to a new platform with a new structure, a polished design and new guides, along with much more.</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;RobotCode&lt;/strong&gt; v2.8.0 is a big release. It supports Robot Framework 7.5 and is the biggest update yet for PyCharm, where &lt;strong&gt;RobotCode&lt;/strong&gt; now offers nearly everything it offers in VS Code, from run configurations and debugging to test results and settings. VS Code gets a Documentation Viewer and follows your Python environment by itself, and the website has moved to a new platform with a new structure, a polished design and new guides, along with much more.&lt;/p&gt;
&lt;p&gt;Not everything is perfect yet, and there is still quite a bit of work ahead, but we are working on it. I look forward to feedback, reviews and suggestions for improvement from the community.&lt;/p&gt;

&lt;div&gt;&lt;h2 id=&quot;highlights&quot;&gt;Highlights&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#robot-framework-75-support&quot;&gt;Robot Framework 7.5 support&lt;/a&gt;: See the argument descriptions that libraries document while you type, and run, list or inspect only the tests with certain metadata.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#documentation-viewer&quot;&gt;Documentation Viewer&lt;/a&gt;: Read the documentation of any library or resource file in a VS Code editor tab, right next to your code, one click away from a hover, and bookmark what you look up often.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#pycharm&quot;&gt;PyCharm&lt;/a&gt;: The plugin&apos;s biggest update yet brings nearly everything the VS Code extension offers: run and debug your tests with run configurations and &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt; profiles, see in the results where a test failed, use breakpoints with conditions and hit counts and the new Robot Debug Console, and set almost everything you can set in VS Code.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-python-environment&quot;&gt;Python environments in VS Code&lt;/a&gt;: &lt;strong&gt;RobotCode&lt;/strong&gt; uses the environment of the new Python Environments extension and picks up another environment or a fresh Robot Framework installation by itself, without restarting VS Code.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#a-new-website&quot;&gt;A new website&lt;/a&gt;: robotcode.io has moved to Astro with Starlight, is reorganized, has a polished design and new guides for VS Code, PyCharm and &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;breaking-changes&quot;&gt;Breaking Changes&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The VS Code extension needs VS Code 1.127 or newer.&lt;/strong&gt; Older VS Code versions keep the newest &lt;strong&gt;RobotCode&lt;/strong&gt; release they can install.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The PyCharm plugin needs PyCharm or IntelliJ IDEA 2026.1 or newer.&lt;/strong&gt; Older IDE versions no longer receive plugin updates.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;--tags&lt;/code&gt; is now &lt;code dir=&quot;auto&quot;&gt;--show-tags&lt;/code&gt;.&lt;/strong&gt; In &lt;code dir=&quot;auto&quot;&gt;robotcode discover&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;robotcode results show&lt;/code&gt;, the switch that prints the tags of each test is renamed to &lt;code dir=&quot;auto&quot;&gt;--show-tags / --no-show-tags&lt;/code&gt;, to match the new &lt;code dir=&quot;auto&quot;&gt;--show-metadata&lt;/code&gt;. The old name is no longer accepted, so update any scripts that use it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A profile name that selects no profile now stops the command.&lt;/strong&gt; If a name or pattern from &lt;code dir=&quot;auto&quot;&gt;-p&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;ROBOTCODE_PROFILES&lt;/code&gt;, the editor&apos;s selection or &lt;code dir=&quot;auto&quot;&gt;inherits&lt;/code&gt; matches no profile, the command ends with exit code 252 before anything runs, instead of running with a different configuration. &lt;a href=&quot;https://robotcode.io/guides/robot-toml/troubleshooting/#no-profile-matches&quot;&gt;&quot;No profile matches&quot;&lt;/a&gt; explains what to do.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;robot-framework-75-support&quot;&gt;Robot Framework 7.5 Support&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;RobotCode&lt;/strong&gt; now supports Robot Framework 7.5 and brings its new features into your editor and onto the command line. What is new in Robot Framework 7.5 itself is described in the Robot Framework documentation; here is what you get in &lt;strong&gt;RobotCode&lt;/strong&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;richer-keyword-documentation&quot;&gt;Richer Keyword Documentation&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;With Robot Framework 7.5, keywords can describe their arguments, return values and exceptions in Google style, with &lt;code dir=&quot;auto&quot;&gt;Args:&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;Returns:&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;Raises:&lt;/code&gt; sections. &lt;strong&gt;RobotCode&lt;/strong&gt; shows these descriptions where you need them. The hover of a keyword lists its arguments with their descriptions, followed by the return value and the exceptions:&lt;/p&gt;
&lt;figure&gt;&lt;div&gt;&lt;img src=&quot;https://robotcode.io/_astro/writing-hover-arguments-light.DW5xCpd8_1MxKfc.webp&quot; srcset=&quot;/_astro/writing-hover-arguments-light.DW5xCpd8_1MxKfc.webp 1x, /_astro/writing-hover-arguments-light.DW5xCpd8_Z2jkiim.webp 2x&quot; alt=&quot;The hover of the keyword Get From List from the Collections library: its arguments list_ and index with their types and descriptions, the return type with the description of the returned value, and IndexError under Raises.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;978&quot; height=&quot;313&quot;&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://robotcode.io/_astro/writing-hover-arguments-dark.COd7Aoyx_1pVbag.webp&quot; srcset=&quot;/_astro/writing-hover-arguments-dark.COd7Aoyx_1pVbag.webp 1x, /_astro/writing-hover-arguments-dark.COd7Aoyx_Z23PHUX.webp 2x&quot; alt=&quot;The hover of the keyword Get From List from the Collections library: its arguments list_ and index with their types and descriptions, the return type with the description of the returned value, and IndexError under Raises.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;978&quot; height=&quot;313&quot;&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;While you type the arguments of a keyword call, the signature help now also shows the description of the argument at the cursor, right below the signature:&lt;/p&gt;
&lt;figure&gt;&lt;div&gt;&lt;img src=&quot;https://robotcode.io/_astro/writing-signature-help-arguments-light.J6eXAgpA_T9UmE.webp&quot; srcset=&quot;/_astro/writing-signature-help-arguments-light.J6eXAgpA_T9UmE.webp 1x, /_astro/writing-signature-help-arguments-light.J6eXAgpA_6XfmC.webp 2x&quot; alt=&quot;The signature help of the keyword Get From List below its call, with the argument index highlighted and, below the signature, its description from the documentation: Index of the value to get.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;978&quot; height=&quot;163&quot;&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://robotcode.io/_astro/writing-signature-help-arguments-dark.Cgx1yq6t_Z25Pqyj.webp&quot; srcset=&quot;/_astro/writing-signature-help-arguments-dark.Cgx1yq6t_Z25Pqyj.webp 1x, /_astro/writing-signature-help-arguments-dark.Cgx1yq6t_tscie.webp 2x&quot; alt=&quot;The signature help of the keyword Get From List below its call, with the argument index highlighted and, below the signature, its description from the documentation: Index of the value to get.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;978&quot; height=&quot;163&quot;&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Libraries can now also write their documentation in Markdown, as the standard libraries do, and &lt;strong&gt;RobotCode&lt;/strong&gt; renders it.&lt;/p&gt;
&lt;aside aria-label=&quot;Libdoc HTML needs the markdown package&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Libdoc HTML needs the &lt;code dir=&quot;auto&quot;&gt;markdown&lt;/code&gt; package&lt;/p&gt;&lt;div&gt;&lt;p&gt;Because the standard libraries are now documented in Markdown, the deprecated &lt;em&gt;Open Documentation&lt;/em&gt; and &lt;code dir=&quot;auto&quot;&gt;robotcode libdoc&lt;/code&gt; need the optional Python package &lt;a href=&quot;https://pypi.org/project/Markdown/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;markdown&lt;/code&gt;&lt;/a&gt;, which &lt;strong&gt;RobotCode&lt;/strong&gt; does not ship. Install it into your project&apos;s Python environment if you use them. Hover, completion, the &lt;a href=&quot;#documentation-viewer&quot;&gt;Documentation Viewer&lt;/a&gt; and &lt;code dir=&quot;auto&quot;&gt;robotcode doc&lt;/code&gt; work without it; &lt;a href=&quot;https://robotcode.io/getting-started/#optional-python-packages&quot;&gt;Optional Python Packages&lt;/a&gt; has the details.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h3 id=&quot;test-and-task-metadata&quot;&gt;Test and Task Metadata&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Robot Framework 7.5 lets tests and tasks carry their own &lt;code dir=&quot;auto&quot;&gt;[Metadata]&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;*** Test Cases ***&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Login Works&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[Metadata]&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Issue&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;4409&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Open Login Page&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;RobotCode&lt;/strong&gt; shows this metadata in the hover of a test and offers the new &lt;code dir=&quot;auto&quot;&gt;${TEST_METADATA}&lt;/code&gt; variable in completion.&lt;/p&gt;
&lt;p&gt;You can also run, list and inspect only the tests with certain metadata. &lt;code dir=&quot;auto&quot;&gt;-btm/--by-test-metadata&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;-ebtm/--exclude-by-test-metadata&lt;/code&gt; take patterns like tag patterns and work with &lt;code dir=&quot;auto&quot;&gt;robotcode robot&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;discover&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;results&lt;/code&gt;. &lt;code dir=&quot;auto&quot;&gt;robotcode discover metadata&lt;/code&gt; lists the metadata in use.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;robot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;smoke&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-btm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Issue:4409&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;# run the smoke tests for issue 4409&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;discover&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;metadata&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--values&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;# the metadata names and values in use&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;With the pre-run modifiers of the &lt;code dir=&quot;auto&quot;&gt;robotcode-modifiers&lt;/code&gt; package, the selection also works with plain &lt;code dir=&quot;auto&quot;&gt;robot&lt;/code&gt; and in &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt; profiles. &lt;a href=&quot;https://robotcode.io/guides/discovering-tests/#selecting-by-test-metadata&quot;&gt;Selecting by test metadata&lt;/a&gt; describes the patterns and how to use them.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;also-on-robot-framework-75&quot;&gt;Also on Robot Framework 7.5&lt;/h3&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Markdown files:&lt;/strong&gt; &lt;code dir=&quot;auto&quot;&gt;Resource&lt;/code&gt; imports accept Markdown files (&lt;code dir=&quot;auto&quot;&gt;.md&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;.markdown&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;.robot.md&lt;/code&gt;). &lt;strong&gt;RobotCode&lt;/strong&gt; also finds the tests in &lt;code dir=&quot;auto&quot;&gt;.robot.md&lt;/code&gt; files, but Robot Framework 7.5 reports their line numbers relative to the code blocks instead of the file, so their run buttons appear at the wrong lines. The bug is reported (&lt;a href=&quot;https://github.com/robotframework/robotframework/issues/5801&quot;&gt;robotframework#5801&lt;/a&gt;) and its fix is planned for Robot Framework 7.5.1; once that release includes it, the buttons will appear in the right place.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt;:&lt;/strong&gt; &lt;code dir=&quot;auto&quot;&gt;console&lt;/code&gt; takes a custom console class or module, the &lt;code dir=&quot;auto&quot;&gt;libdoc&lt;/code&gt; formats accept &lt;code dir=&quot;auto&quot;&gt;MARKDOWN&lt;/code&gt;, and the &lt;code dir=&quot;auto&quot;&gt;[rebot]&lt;/code&gt; section takes the new &lt;code dir=&quot;auto&quot;&gt;console&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;quiet&lt;/code&gt; options.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deprecation:&lt;/strong&gt; A &lt;code dir=&quot;auto&quot;&gt;Tags:&lt;/code&gt; section in keyword documentation without an empty row before it gets a warning, as Robot Framework 7.5 deprecates the missing empty row.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;vs-code&quot;&gt;VS Code&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;documentation-viewer&quot;&gt;Documentation Viewer&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The VS Code extension has a new &lt;strong&gt;Documentation Viewer&lt;/strong&gt;. It shows the documentation of any library, resource file or suite file in an editor tab, and it matches your project, because it is generated with the installed library versions and your project&apos;s settings. You open it with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A click on a link in a &lt;strong&gt;hover&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Show in Documentation Viewer&lt;/strong&gt; in the &lt;em&gt;Source Action…&lt;/em&gt; menu of a &lt;code dir=&quot;auto&quot;&gt;Library&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;Resource&lt;/code&gt; import, a keyword call or a keyword definition.&lt;/li&gt;
&lt;li&gt;The book button in the &lt;strong&gt;Keywords&lt;/strong&gt; view.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RobotCode: New Documentation Viewer&lt;/strong&gt; in the command palette or the button at the end of a viewer&apos;s toolbar, for any library or file.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;&lt;div&gt;&lt;a href=&quot;https://robotcode.io/_astro/viewer-window-light.BkEEbR1-.png&quot; title=&quot;Open in full size&quot;&gt;&lt;img src=&quot;https://robotcode.io/_astro/viewer-window-light.BkEEbR1-_Xzj1q.webp&quot; srcset=&quot;/_astro/viewer-window-light.BkEEbR1-_Xzj1q.webp 1x, /_astro/viewer-window-light.BkEEbR1-_Z1TOkE6.webp 2x&quot; alt=&quot;The Documentation Viewer with ShopLibrary: the toolbar with the target field, the outline with the keywords and data types on the left and the page of the library on the right.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1036&quot; height=&quot;591&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://robotcode.io/_astro/viewer-window-dark.BuLiHOmq.png&quot; title=&quot;Open in full size&quot;&gt;&lt;img src=&quot;https://robotcode.io/_astro/viewer-window-dark.BuLiHOmq_Zzuetc.webp&quot; srcset=&quot;/_astro/viewer-window-dark.BuLiHOmq_Zzuetc.webp 1x, /_astro/viewer-window-dark.BuLiHOmq_ijV2O.webp 2x&quot; alt=&quot;The Documentation Viewer with ShopLibrary: the toolbar with the target field, the outline with the keywords and data types on the left and the page of the library on the right.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1036&quot; height=&quot;591&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;You can open several viewers at the same time, each with its own library or file, and arrange them like any other editor: side by side, in other editor groups or in a window of their own. &lt;em&gt;Show in New Documentation Viewer&lt;/em&gt;, offered next to &lt;em&gt;Show in Documentation Viewer&lt;/em&gt;, opens another one, and the pin in a viewer&apos;s toolbar decides which viewer the next action uses.&lt;/p&gt;
&lt;figure&gt;&lt;div&gt;&lt;a href=&quot;https://robotcode.io/_astro/viewer-side-by-side-light.Crb5ppMk.png&quot; title=&quot;Open in full size&quot;&gt;&lt;img src=&quot;https://robotcode.io/_astro/viewer-side-by-side-light.Crb5ppMk_Zqpsaj.webp&quot; srcset=&quot;/_astro/viewer-side-by-side-light.Crb5ppMk_Zqpsaj.webp 1x, /_astro/viewer-side-by-side-light.Crb5ppMk_1xpgGv.webp 2x&quot; alt=&quot;Two Documentation Viewers side by side: ShopLibrary on the left, the Collections library on the right.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1036&quot; height=&quot;591&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://robotcode.io/_astro/viewer-side-by-side-dark.DyqkJ-U0.png&quot; title=&quot;Open in full size&quot;&gt;&lt;img src=&quot;https://robotcode.io/_astro/viewer-side-by-side-dark.DyqkJ-U0_Z7IT4v.webp&quot; srcset=&quot;/_astro/viewer-side-by-side-dark.DyqkJ-U0_Z7IT4v.webp 1x, /_astro/viewer-side-by-side-dark.DyqkJ-U0_1yGHUF.webp 2x&quot; alt=&quot;Two Documentation Viewers side by side: ShopLibrary on the left, the Collections library on the right.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1036&quot; height=&quot;591&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Bookmarks take you back to the documentation you look up often. The star after the target field bookmarks the place a viewer shows, such as a library or a keyword in it, and the new &lt;strong&gt;Documentation Bookmarks&lt;/strong&gt; view in the Explorer lists your bookmarks: a click shows one in the viewer, and buttons in its title bring the viewer to the front or open a new one. A bookmark holds for its workspace folder until you move it to &lt;em&gt;All Workspaces&lt;/em&gt;, where it holds in all your workspaces and reaches your other machines with Settings Sync. On its first start, &lt;strong&gt;RobotCode&lt;/strong&gt; bookmarks the standard libraries in &lt;em&gt;All Workspaces&lt;/em&gt;.&lt;/p&gt;
&lt;figure&gt;&lt;div&gt;&lt;a href=&quot;https://robotcode.io/_astro/viewer-bookmarks-light.B4lik-JE.png&quot; title=&quot;Open in full size&quot;&gt;&lt;img src=&quot;https://robotcode.io/_astro/viewer-bookmarks-light.B4lik-JE_Zv8yOD.webp&quot; srcset=&quot;/_astro/viewer-bookmarks-light.B4lik-JE_Zv8yOD.webp 1x, /_astro/viewer-bookmarks-light.B4lik-JE_Z2wy0Gq.webp 2x&quot; alt=&quot;The Documentation Bookmarks view in the Explorer, with the standard libraries from BuiltIn to XML under All Workspaces and, under the workspace folder robotcode-demo, the bookmarks Collections › Get From Dictionary and ShopLibrary. On the right, the Documentation Viewer shows the selected bookmark, the keyword Get From Dictionary, with a filled star after the target field.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1036&quot; height=&quot;591&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://robotcode.io/_astro/viewer-bookmarks-dark.BGIZ7yiF.png&quot; title=&quot;Open in full size&quot;&gt;&lt;img src=&quot;https://robotcode.io/_astro/viewer-bookmarks-dark.BGIZ7yiF_ZOxq0S.webp&quot; srcset=&quot;/_astro/viewer-bookmarks-dark.BGIZ7yiF_ZOxq0S.webp 1x, /_astro/viewer-bookmarks-dark.BGIZ7yiF_4Y0EB.webp 2x&quot; alt=&quot;The Documentation Bookmarks view in the Explorer, with the standard libraries from BuiltIn to XML under All Workspaces and, under the workspace folder robotcode-demo, the bookmarks Collections › Get From Dictionary and ShopLibrary. On the right, the Documentation Viewer shows the selected bookmark, the keyword Get From Dictionary, with a filled star after the target field.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1036&quot; height=&quot;591&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;While you type a target, the field offers your bookmarks and completes the names of libraries, resource files and suite files, and the context menu of the outline opens the file that defines a keyword, also the Python file of a library such as &lt;code dir=&quot;auto&quot;&gt;Collections.py&lt;/code&gt;. &lt;a href=&quot;https://robotcode.io/guides/vscode/documentation-viewer/&quot;&gt;Documentation Viewer&lt;/a&gt; in the VS Code guide has the details.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Open Documentation&lt;/em&gt;, which shows Robot Framework&apos;s Libdoc HTML, is now marked as deprecated in favor of the viewer, as is &lt;em&gt;Show Documentation&lt;/em&gt; in the context menu of the &lt;strong&gt;Keywords&lt;/strong&gt; view. Both keep working.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;the-python-environment&quot;&gt;The Python Environment&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;RobotCode&lt;/strong&gt; now works with the new Python Environments extension and uses the environment it selects for a folder. Select another environment or install Robot Framework, and &lt;strong&gt;RobotCode&lt;/strong&gt; picks up the change by itself: it restarts the language server, without a restart of VS Code. If something is missing, a message tells you what, instead of a dialog that waits for an answer. &lt;a href=&quot;https://robotcode.io/guides/vscode/configuration/#the-python-environment&quot;&gt;The Python environment&lt;/a&gt; has the details.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;test-runs-in-robotcodes-own-terminal&quot;&gt;Test Runs in RobotCode&apos;s Own Terminal&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Tests now run in a terminal of RobotCode&apos;s own, whether you start them from the Test Explorer, the editor or a launch configuration. Robot Framework runs there without a shell, so every run gets the same environment, the interpreter of its workspace folder, and no activation command of the Python extensions lands in the middle of a run. Before each run, the terminal shows the run&apos;s command line as you would type it, with its profiles and options; VS Code&apos;s command decoration copies the command or the output, and the terminal is reused for the next run. &lt;a href=&quot;https://robotcode.io/guides/vscode/running-and-debugging/#the-output-of-a-run&quot;&gt;The output of a run&lt;/a&gt; has the details. Set &lt;a href=&quot;https://robotcode.io/reference/vscode-settings/#robotcode.debug.defaultConsole&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;robotcode.debug.defaultConsole&lt;/code&gt;&lt;/a&gt; to &lt;code dir=&quot;auto&quot;&gt;integratedTerminal&lt;/code&gt; to run in a shell of VS Code&apos;s integrated terminal as before.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;see-where-a-test-failed&quot;&gt;See Where a Test Failed&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;A failed test now shows each of its failures in the editor, at the step of the test that led to it. A click on its marker opens a peek below the step with the whole message and the calls from the step to the line that failed, each with a few lines of its code, so you see at once where the test went wrong. Failures that the test caught, for example with &lt;code dir=&quot;auto&quot;&gt;TRY&lt;/code&gt;/&lt;code dir=&quot;auto&quot;&gt;EXCEPT&lt;/code&gt;, are listed too, marked as caught.&lt;/p&gt;
&lt;figure&gt;&lt;div&gt;&lt;a href=&quot;https://robotcode.io/_astro/test-explorer-window-light.CvzJcyuN.png&quot; title=&quot;Open in full size&quot;&gt;&lt;img src=&quot;https://robotcode.io/_astro/test-explorer-window-light.CvzJcyuN_1GuVno.webp&quot; srcset=&quot;/_astro/test-explorer-window-light.CvzJcyuN_1GuVno.webp 1x, /_astro/test-explorer-window-light.CvzJcyuN_2lbRma.webp 2x&quot; alt=&quot;The Testing view with the suites and tests of the demo project after a run, all passed except Login Works; in the editor, a peek below the step of Login Works that failed shows the failure message and the call of Should Be Equal in shop.resource.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1036&quot; height=&quot;591&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://robotcode.io/_astro/test-explorer-window-dark.BxbRMfrV.png&quot; title=&quot;Open in full size&quot;&gt;&lt;img src=&quot;https://robotcode.io/_astro/test-explorer-window-dark.BxbRMfrV_ZI2Lcd.webp&quot; srcset=&quot;/_astro/test-explorer-window-dark.BxbRMfrV_ZI2Lcd.webp 1x, /_astro/test-explorer-window-dark.BxbRMfrV_1fLWEB.webp 2x&quot; alt=&quot;The Testing view with the suites and tests of the demo project after a run, all passed except Login Works; in the editor, a peek below the step of Login Works that failed shows the failure message and the call of Should Be Equal in shop.resource.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1036&quot; height=&quot;591&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;When a debug run stops at a failure, the editor shows the failed keyword and its message below the line and lists the same calls, with links to their lines. &lt;a href=&quot;https://robotcode.io/guides/vscode/test-explorer/#running-and-debugging&quot;&gt;Running and debugging&lt;/a&gt; in the Test Explorer guide and &lt;a href=&quot;https://robotcode.io/guides/vscode/running-and-debugging/#stopping-at-failures&quot;&gt;Stopping at failures&lt;/a&gt; have the details.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;also-in-vs-code&quot;&gt;Also in VS Code&lt;/h3&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;The language server starts as soon as you open a folder with Robot Framework files, not only when you open one of them.&lt;/li&gt;
&lt;li&gt;When VS Code restores an open Robot Framework file at startup, the Keywords view shows its keywords as soon as the language server runs, and canceled requests of the view no longer show up as errors in the output. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/644&quot;&gt;#644&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The Test Explorer follows every change of suite files and folders, also changes made outside VS Code, for example by &lt;code dir=&quot;auto&quot;&gt;git&lt;/code&gt; or in a terminal, keeps its results in projects with several paths in &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt;, and &lt;em&gt;Run Tests&lt;/em&gt; runs every workspace folder. &lt;a href=&quot;https://robotcode.io/guides/vscode/test-explorer/#where-the-tests-come-from&quot;&gt;Where the tests come from&lt;/a&gt; describes when it updates.&lt;/li&gt;
&lt;li&gt;An empty Test Explorer says why and offers what helps: without a Python environment with Robot Framework, for example, it offers &lt;em&gt;Select Python Environment&lt;/em&gt;; see &lt;a href=&quot;https://robotcode.io/guides/vscode/test-explorer/#problems-while-finding-the-tests&quot;&gt;Problems while finding the tests&lt;/a&gt;. A failed discovery no longer leaves the suites of the last discovery next to its error.&lt;/li&gt;
&lt;li&gt;The language status marks only the item with the problem: when the environment has no Robot Framework, only the Robot Framework item shows an error, not the Python item.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;RobotCode: Copy Environment Info&lt;/em&gt;, also in the RobotCode menu of the language status, copies the versions of VS Code, &lt;strong&gt;RobotCode&lt;/strong&gt;, the operating system, Python, Robot Framework and Robocop for an issue, a forum post or a chat. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/260&quot;&gt;#260&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;RobotCode: Start Terminal REPL&lt;/em&gt; runs the &lt;a href=&quot;https://robotcode.io/guides/vscode/repl/&quot;&gt;REPL&lt;/a&gt; with the folder&apos;s Python environment, not with the first &lt;code dir=&quot;auto&quot;&gt;robotcode&lt;/code&gt; on the &lt;code dir=&quot;auto&quot;&gt;PATH&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Code blocks marked &lt;code dir=&quot;auto&quot;&gt;robotframework&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;robot&lt;/code&gt; in Markdown get Robot Framework colors in the Markdown preview and in the Documentation Viewer.&lt;/li&gt;
&lt;li&gt;Breakpoints with a hit count stop at that hit, and hit counts such as &lt;code dir=&quot;auto&quot;&gt;&gt;= 3&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;% 2&lt;/code&gt; work; &lt;a href=&quot;https://robotcode.io/guides/vscode/running-and-debugging/#debugging&quot;&gt;Debugging&lt;/a&gt; lists the forms.&lt;/li&gt;
&lt;li&gt;After Stop, a breakpoint in a teardown no longer pauses the run again.&lt;/li&gt;
&lt;li&gt;The &lt;code dir=&quot;auto&quot;&gt;robotcode&lt;/code&gt; command in VS Code&apos;s terminals also works on systems without bash and when the extension&apos;s path contains a space, for example from a Windows user name.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;pycharm&quot;&gt;PyCharm&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;For PyCharm and IntelliJ IDEA, this release is the biggest step since the plugin&apos;s first version. Up to v2.7.0, the plugin brought the language features of &lt;strong&gt;RobotCode&lt;/strong&gt;, such as completion, hover, diagnostics and navigation, while running, debugging and the settings offered much less than in VS Code. Now it offers nearly everything the VS Code extension does: you configure &lt;strong&gt;RobotCode&lt;/strong&gt; on settings pages with the names you know from VS Code, run and debug your tests with run configurations and profiles, and see right in the results where a test failed. That makes it one of the most complete Robot Framework plugins for PyCharm. A few things are still missing, such as the Test Explorer and the Documentation Viewer, and we are working on them; &lt;a href=&quot;https://robotcode.io/guides/pycharm/compared-with-vscode/&quot;&gt;RobotCode in PyCharm and VS Code&lt;/a&gt; compares both, and the new &lt;a href=&quot;https://robotcode.io/guides/pycharm/&quot;&gt;PyCharm guide&lt;/a&gt; shows how to work with the plugin.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Run configurations as in VS Code.&lt;/strong&gt; Robot Framework run configurations now keep what they run, files and folders or tests and suites, across restarts, can be stored with the project and are edited in the IDE&apos;s run configuration editor, with the interpreter, environment variables, the Robot Framework options and the run and debug options of VS Code&apos;s launch configurations, such as a launch wrapper like &lt;code dir=&quot;auto&quot;&gt;xvfb-run&lt;/code&gt;. A run configuration can use the &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt; profiles selected for the project or its own, and &lt;em&gt;Run with Profile…&lt;/em&gt; in the gutter runs a test or suite once with another profile. Runs from the gutter reuse their configuration instead of creating copies, and the editor of a run configuration shows when its interpreter lacks Robot Framework, a target path is missing or a selected test is gone. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/418&quot;&gt;#418&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://robotcode.io/_astro/pycharm-run-configuration.BJKnyifp_2mMPGk.webp&quot; alt=&quot;The Run/Debug Configurations dialog of PyCharm with a Robot Framework run configuration: the interpreter, files and folders or tests and suites to run, Robot arguments, include tags and the configuration profiles of robot.toml.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2072&quot; height=&quot;1400&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Run tests from every context.&lt;/strong&gt; Ctrl+Shift+F10 (Ctrl+Shift+R on macOS) runs the test at the cursor or the suite of the file, several selected files or folders run together, and suites in the results tree can be run again. With Robot Framework 6.1 and newer, a run of a single test or suite parses only the files it needs, and the tasks of RPA suites get run markers too. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/631&quot;&gt;#631&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Test results that show where a test failed.&lt;/strong&gt; A failed test lists each of its failures with the calls that led to it, from the call in the test inward, with links to their lines, and a double-click opens the call in the test that led to the first failure. Selecting a test shows the log messages it wrote, and the output of the run has a &lt;em&gt;Terminal&lt;/em&gt; tab of its own. &lt;em&gt;Rerun Failed Tests&lt;/em&gt; runs exactly the tests that failed, and report and log open in a preview tab whose toolbar switches between them. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/528&quot;&gt;#528&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://robotcode.io/_astro/pycharm-test-results.CHnSLgx5_q6aMn.webp&quot; alt=&quot;PyCharm after a run: the log of the failed test Login Works in the preview tab above, below it the results tree with the failed test selected, its failure message and the calls that led to it, with links to their lines.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2072&quot; height=&quot;1400&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Almost everything you can set in VS Code, you can now set here too.&lt;/strong&gt; Settings pages under &lt;em&gt;Languages &amp;#x26; Frameworks › Robot Framework&lt;/em&gt; cover Robot Framework options such as the Python path and variables, editing and completion, analysis and diagnostics, Robocop, running and debugging, the language server and the command line, with the names VS Code uses. You can select the configuration profiles of your &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt; and switch RobotCode off for a project, and the status bar shows the Robot Framework version and the selected profiles. The analysis cache no longer lands in the project folder, where the IDE indexed it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://robotcode.io/_astro/pycharm-settings.DmyngxCM_2wGnpW.webp&quot; alt=&quot;The Analysis page of the Robot Framework settings in PyCharm, with the diagnostic mode, the progress mode, the file check interval and the settings of the analysis cache; the other Robot Framework pages are listed in the tree on the left.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2072&quot; height=&quot;1400&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Content and source roots are on the Python path.&lt;/strong&gt; The analysis, test discovery and runs find libraries and resource files in the project&apos;s content roots and in folders marked as Sources or Test Sources, as PyCharm&apos;s Python run configurations do; two switches on the Robot settings page turn this off. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/430&quot;&gt;#430&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Completion in &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt;.&lt;/strong&gt; PyCharm completes the settings of &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;.robot.toml&lt;/code&gt; from &lt;strong&gt;RobotCode&lt;/strong&gt;&apos;s schema, without a schema mapping by hand, and Markdown code blocks marked &lt;code dir=&quot;auto&quot;&gt;robot&lt;/code&gt; are highlighted as Robot Framework code, like those marked &lt;code dir=&quot;auto&quot;&gt;robotframework&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints with conditions, log messages and hit counts.&lt;/strong&gt; Line breakpoints get a condition, a log message and a hit count, and the IDE applies their suspend policy and options such as &lt;em&gt;Remove once hit&lt;/em&gt;. Changes to breakpoints take effect at once in a running debug session, Run to Cursor always reaches its line, and the &lt;em&gt;Any Exception&lt;/em&gt; breakpoint, which never reached the debugger, is replaced by Robot Framework exception breakpoints for failed keywords, tests and suites.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A Robot Debug Console and values on hover.&lt;/strong&gt; While a run is paused, the new Robot Debug Console, Evaluate Expression and watches complete the keywords and variables of the paused run, hovering a variable shows its value, lists expand into their items, and Set Value changes variables. Watches work as in VS Code, and running, stepping and evaluating no longer freeze the IDE. Stop ends a run gracefully, also while it is paused, so the run still writes its output, log and report.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://robotcode.io/_astro/pycharm-debugger.B-GltHzG_8tEQb.webp&quot; alt=&quot;PyCharm paused at a breakpoint in a Robot Framework keyword: the value of a list variable shown in the editor, and the same list expanded into its items under Variables.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2072&quot; height=&quot;1400&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Colors come from the active color scheme.&lt;/strong&gt; Variables, keyword calls, operators and numbers get colors from your scheme instead of plain text, and the plugin no longer ships its own colors for Darcula, Dark and Light. Colors you set on the Robot Framework color settings page are kept, and type hints and parameters have color settings of their own. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/655&quot;&gt;#655&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Test case and keyword names are highlighted right away.&lt;/strong&gt; Their colors no longer wait for the language server.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Show Usages finds more and names what it searches for.&lt;/strong&gt; In Robot Framework files, Show Usages and Find Usages search for the name at the cursor, as VS Code does, and name its kind and name, such as &quot;Keyword Open Shop As&quot;, instead of &quot;LSP Usage Triggered Psi Element&quot;. They find the usages of a keyword called with a library prefix, such as &lt;code dir=&quot;auto&quot;&gt;BuiltIn.Log&lt;/code&gt;, and on a resource import they list where the file is imported and where its keywords are called with its name in front. LSP Reference(s) now also works on library keywords and on variables from Python variable files.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The Python environment is checked in the background.&lt;/strong&gt; The check no longer blocks the editor and says what is wrong, such as an old Python or Robot Framework version or a missing Robot Framework; a banner offers to choose another interpreter, to check again or to switch RobotCode off for the project. RobotCode starts only in projects with Robot Framework files or a &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A sturdier language server.&lt;/strong&gt; Its output no longer shows up as IDE errors, a start that fails ends with a message instead of hanging, and the IDE no longer freezes when Robot Framework files are deleted, created or renamed. It restarts only when its settings change, and Restart picks up an interpreter you fixed outside the IDE.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Updates ask for a restart and say what&apos;s new.&lt;/strong&gt; Installing or updating the plugin asks for a restart of the IDE instead of leaving it without RobotCode&apos;s features, and after an update a notification offers &lt;em&gt;What&apos;s New?&lt;/em&gt;, which opens these news, as in VS Code.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Your own templates for &lt;code dir=&quot;auto&quot;&gt;.resource&lt;/code&gt; files appear in the New Robot Framework File dialog.&lt;/strong&gt; Thanks to Pāvels Koržs.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;language-server-and-analysis&quot;&gt;Language Server and Analysis&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;more-robust-library-loading&quot;&gt;More Robust Library Loading&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;A library that hangs or exits while it loads no longer holds up the editor or &lt;code dir=&quot;auto&quot;&gt;robotcode analyze code&lt;/code&gt;: &lt;strong&gt;RobotCode&lt;/strong&gt; stops it after the load timeout and shows the problem at the import. Changed arguments of a library import now take effect right away, and if a library can&apos;t be set up with the given arguments, the import tells you so.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;cleaner-keyword-completion&quot;&gt;Cleaner Keyword Completion&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Keyword completion no longer offers keywords tagged &lt;code dir=&quot;auto&quot;&gt;robot:private&lt;/code&gt; from other files; the setting &lt;code dir=&quot;auto&quot;&gt;robotcode.completion.hidePrivateKeywords&lt;/code&gt; brings them back. Calls of private library keywords are now reported too, and the new setting &lt;code dir=&quot;auto&quot;&gt;robotcode.completion.hideDeprecatedKeywords&lt;/code&gt; leaves deprecated keywords out of the list. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/495&quot;&gt;#495&lt;/a&gt;, &lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/652&quot;&gt;#652&lt;/a&gt;)&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;also-in-the-language-server-and-analysis&quot;&gt;Also in the language server and analysis&lt;/h3&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Find References, Rename and the unused hints keep up with the files on disk, also with files created, changed or deleted outside the editor and with all files that import a changed resource file; a check every five minutes, set by &lt;code dir=&quot;auto&quot;&gt;robotcode.analysis.fileCheckInterval&lt;/code&gt;, finds the changes the editor doesn&apos;t report.&lt;/li&gt;
&lt;li&gt;Find References also works on the library or resource name in front of a keyword call, such as &lt;code dir=&quot;auto&quot;&gt;BuiltIn&lt;/code&gt; in &lt;code dir=&quot;auto&quot;&gt;BuiltIn.Log&lt;/code&gt;, and lists &lt;code dir=&quot;auto&quot;&gt;EXCEPT AS&lt;/code&gt; and item assignments such as &lt;code dir=&quot;auto&quot;&gt;${items}[0]=&lt;/code&gt; with the variable they set, so Rename renames them too.&lt;/li&gt;
&lt;li&gt;The language server now also starts when &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt; can&apos;t be loaded or a profile name selects no profile, and reports the problem as an error message instead of only in its log. VS Code and PyCharm report a selected profile that &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt; doesn&apos;t define and offer to remove it from the selection.&lt;/li&gt;
&lt;li&gt;A library import that Robot Framework 7.4 and newer ignores, because an earlier import already uses its name, is now reported.&lt;/li&gt;
&lt;li&gt;A file that you edited, saved and closed is no longer analyzed with the text from before your edit.&lt;/li&gt;
&lt;li&gt;After a change of the Python path or of an environment variable, files whose imports or variables it affects are analyzed again instead of keeping their old diagnostics, also closed ones.&lt;/li&gt;
&lt;li&gt;After the &lt;code dir=&quot;auto&quot;&gt;languages&lt;/code&gt; setting changed, files from the analysis cache are read again, so a resource file with section headers in another language no longer stays empty.&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;# robotcode:&lt;/code&gt; comments that change diagnostics work as documented: &lt;code dir=&quot;auto&quot;&gt;warning[…]&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;information[…]&lt;/code&gt; change only the listed codes, a comment after a nested block takes effect, and the nearest comment wins.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;ai-agents&quot;&gt;AI Agents&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;RobotCode&lt;/strong&gt; comes with a chat plugin for AI agents: the VS Code extension ships it for GitHub Copilot Chat, switched on by default, and Claude Code, Codex, GitHub Copilot CLI and other agents install the same plugin from its marketplace. Its skill tells the agent how to use &lt;code dir=&quot;auto&quot;&gt;robotcode&lt;/code&gt; on your project and is up to date with this release: the agent now looks up keywords and libraries with &lt;code dir=&quot;auto&quot;&gt;robotcode doc&lt;/code&gt;, so it sees the keywords of the libraries you actually have installed, and it knows the other new commands and options, such as the selection by test metadata and the exit codes of the REPL.&lt;/p&gt;
&lt;p&gt;The plugin now carries the version of the &lt;strong&gt;RobotCode&lt;/strong&gt; release it belongs to. The copy in the VS Code extension always matches the extension, and every release is now tagged in the marketplace, so other agents can pin the plugin to the version of &lt;strong&gt;RobotCode&lt;/strong&gt; that a project uses. &lt;a href=&quot;https://robotcode.io/guides/ai-agents/&quot;&gt;Working with AI Agents&lt;/a&gt; shows how to set it up and &lt;a href=&quot;https://robotcode.io/guides/ai-agents/#matching-your-robotcode-version&quot;&gt;how to pin it&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The language model tools of the VS Code extension are now deprecated: the chat plugin replaces them, and VS Code marks the setting &lt;code dir=&quot;auto&quot;&gt;robotcode.ai.enableLanguageModelTools&lt;/code&gt; as deprecated. The tools keep working until a later release removes them.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;command-line-and-repl&quot;&gt;Command Line and REPL&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;robotcode-doc&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;robotcode doc&lt;/code&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The Documentation Viewer is built on the new &lt;code dir=&quot;auto&quot;&gt;robotcode doc&lt;/code&gt; command, which you can also use on its own in the terminal. It shows the documentation of a library, resource file or suite file the way your project sees it, with the installed library versions and your &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt; profiles.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;doc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keywords&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Collections&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dictionary&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;# the keywords of Collections that match &quot;dictionary&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;robotcode doc&lt;/code&gt; comes with the optional &lt;code dir=&quot;auto&quot;&gt;repl&lt;/code&gt; package (&lt;code dir=&quot;auto&quot;&gt;pip install &quot;robotcode[repl]&quot;&lt;/code&gt;); &lt;a href=&quot;https://robotcode.io/guides/browsing-documentation/&quot;&gt;Browsing Library Documentation&lt;/a&gt; has the details.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;a-more-dependable-repl&quot;&gt;A More Dependable REPL&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;A statement that fails without being handled now fails the REPL session, and a non-interactive session exits with 1, so scripts, CI and agents can tell success from failure. You can also choose the exit code yourself; see the &lt;a href=&quot;https://robotcode.io/guides/repl/#exit-code-and-session-status&quot;&gt;REPL reference&lt;/a&gt;. Several fixes make &lt;code dir=&quot;auto&quot;&gt;robotcode repl&lt;/code&gt; and the notebook kernel more reliable: &lt;code dir=&quot;auto&quot;&gt;.save&lt;/code&gt; leaves out inputs that failed, so the saved file runs, and settings such as &lt;code dir=&quot;auto&quot;&gt;[Tags]&lt;/code&gt; typed at the prompt are reported instead of silently ignored. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/663&quot;&gt;#663&lt;/a&gt;, &lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/667&quot;&gt;#667&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Ctrl-C now works as in Python&apos;s REPL and in pdb: at the prompts of &lt;code dir=&quot;auto&quot;&gt;repl&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;robot-debug&lt;/code&gt; it drops what you typed instead of ending the session or resuming the run, and while a run executes under the debugger it pauses at the next keyword.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;also-on-the-command-line&quot;&gt;Also on the command line&lt;/h3&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;On Windows, &lt;code dir=&quot;auto&quot;&gt;robotcode&lt;/code&gt; commands no longer fail when a given path is on another drive than the working directory.&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;robotcode discover&lt;/code&gt; no longer fails when a custom parser or a pre-run modifier creates a test without a line number, so VS Code and PyCharm show the tests of such a project too.&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;robotcode results log --extract&lt;/code&gt; finds screenshots whose names are URL-encoded, follows the &lt;code dir=&quot;auto&quot;&gt;file:&lt;/code&gt; links of the OperatingSystem library and extracts the videos the Browser library records.&lt;/li&gt;
&lt;li&gt;Keyword breakpoints of &lt;code dir=&quot;auto&quot;&gt;robot-debug&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;.break&lt;/code&gt; match names like Robot Framework, also with glob patterns such as &lt;code dir=&quot;auto&quot;&gt;BuiltIn.*&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;robotcode analyze code&lt;/code&gt; keeps its cache in the &lt;code dir=&quot;auto&quot;&gt;cache-dir&lt;/code&gt; set in &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;discover files&lt;/code&gt; takes relative paths from the folder it is started in.&lt;/li&gt;
&lt;li&gt;In &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt;, an &lt;code dir=&quot;auto&quot;&gt;extend-&lt;/code&gt; setting such as &lt;code dir=&quot;auto&quot;&gt;extend-variables&lt;/code&gt; now adds to its setting also when both are in the same profile or file, and in &lt;code dir=&quot;auto&quot;&gt;[extend-profiles.&amp;#x3C;name&gt;]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;In &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt;, a setting in &lt;code dir=&quot;auto&quot;&gt;[rebot]&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;[libdoc]&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;[testdoc]&lt;/code&gt; now wins over the same setting outside the table, and &lt;code dir=&quot;auto&quot;&gt;[extend-rebot]&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;[extend-libdoc]&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;[extend-testdoc]&lt;/code&gt; change these tables from a later file or a profile.&lt;/li&gt;
&lt;li&gt;In &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt;, selecting a disabled profile no longer applies the profiles two or more levels up its inheritance chain.&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;repl&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;repl-server&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;robot-debug&lt;/code&gt; end on SIGTERM, as sent by &lt;code dir=&quot;auto&quot;&gt;kill&lt;/code&gt; or a process manager, also while they wait for input.&lt;/li&gt;
&lt;li&gt;Colored output of &lt;code dir=&quot;auto&quot;&gt;discover&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;results&lt;/code&gt; paged through bat no longer shows an empty line after each line.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;a-new-website&quot;&gt;A New Website&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;robotcode.io has moved from VitePress to &lt;a href=&quot;https://astro.build/&quot;&gt;Astro&lt;/a&gt; with &lt;a href=&quot;https://starlight.astro.build/&quot;&gt;Starlight&lt;/a&gt;. Its pages were carried over, the design is polished, and the documentation is reorganized by what you come to do: &lt;strong&gt;Getting Started&lt;/strong&gt; helps you install and configure &lt;strong&gt;RobotCode&lt;/strong&gt;, &lt;strong&gt;Guides&lt;/strong&gt; show how to work with it, and &lt;strong&gt;Reference&lt;/strong&gt; lists the commands, the &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt; and VS Code settings and the diagnostics modifiers. New guides to &lt;a href=&quot;https://robotcode.io/guides/vscode/&quot;&gt;VS Code&lt;/a&gt; and &lt;a href=&quot;https://robotcode.io/guides/pycharm/&quot;&gt;PyCharm&lt;/a&gt; show how to write, navigate, run, debug and configure Robot Framework projects there, and &lt;a href=&quot;https://robotcode.io/guides/robot-toml/&quot;&gt;Configuring Projects with robot.toml&lt;/a&gt; explains what &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt; can do. The new &lt;a href=&quot;https://robotcode.io/&quot;&gt;home page&lt;/a&gt; shows &lt;strong&gt;RobotCode&lt;/strong&gt; at work in short demos: editing in VS Code, PyCharm and Neovim, running and debugging tests, the configuration, the command line and the REPL, and an AI agent that writes, finds and fixes tests with the &lt;strong&gt;RobotCode&lt;/strong&gt; skill. The &lt;a href=&quot;https://robotcode.io/news/&quot;&gt;news&lt;/a&gt; section has tags and an &lt;a href=&quot;https://robotcode.io/news/rss.xml&quot;&gt;RSS feed&lt;/a&gt;, and after an update the What&apos;s New notification of the VS Code extension opens the newest release notes.&lt;/p&gt;
&lt;p&gt;The reason for the move: VitePress 1 gets no further releases, and VitePress 2 has been in alpha since January 2025, without a guide for moving from version 1. VitePress 1 also depends on old versions of Vite and esbuild with known security vulnerabilities, one of them rated high, which get no fix on the 1.x line. They affected only the tools that build the site, not the published pages. Starlight, in contrast, is actively developed.&lt;/p&gt;
&lt;p&gt;All pages have new addresses, and the old addresses are not redirected, so update your bookmarks.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;python-315&quot;&gt;Python 3.15&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;RobotCode&lt;/strong&gt; now also runs on Python 3.15, which Robot Framework supports from version 7.5. The CI no longer tests every Robot Framework version with every Python version, only with the Python versions that Robot Framework itself officially supports, because there would be too many combinations otherwise. This changes only what the CI tests, not which combinations &lt;strong&gt;RobotCode&lt;/strong&gt; runs with.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;nightly-builds&quot;&gt;Nightly Builds&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Every night, the newest build of &lt;code dir=&quot;auto&quot;&gt;main&lt;/code&gt; is published as a pre-release, so you can try new features and fixes before the next release. In VS Code, choose &lt;em&gt;Switch to Pre-Release Version&lt;/em&gt; on the page of the RobotCode extension. In PyCharm, add &lt;code dir=&quot;auto&quot;&gt;https://plugins.jetbrains.com/plugins/dev/26216&lt;/code&gt; as a custom plugin repository. The Python packages are on PyPI as dev versions such as &lt;code dir=&quot;auto&quot;&gt;2.8.0.dev527&lt;/code&gt;: &lt;code dir=&quot;auto&quot;&gt;pip install robotcode&lt;/code&gt; keeps installing the latest release, and a dev version is installed only when you pin it. &lt;a href=&quot;https://robotcode.io/getting-started/dev-builds/&quot;&gt;Try the Dev Builds&lt;/a&gt; shows how to switch to them and how to go back to a release.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;bug-fixes&quot;&gt;Bug Fixes&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;In VS Code, a run from the Test Explorer now ends as Robot Framework ends it: it keeps Robot Framework&apos;s exit code, and the Browser library closes its Playwright process and its browsers at the end. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/635&quot;&gt;#635&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;An environment variable with an empty default, such as &lt;code dir=&quot;auto&quot;&gt;%{NAME=}&lt;/code&gt;, is no longer reported as not found when &lt;code dir=&quot;auto&quot;&gt;NAME&lt;/code&gt; is not set. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/653&quot;&gt;#653&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;In VS Code, the exception breakpoint for failed tests stops again, and keywords you run at such a stop work, also at a failed-test stop of &lt;code dir=&quot;auto&quot;&gt;robot-debug&lt;/code&gt;. The exception breakpoints are now called &lt;em&gt;Failed Tests&lt;/em&gt; and &lt;em&gt;Failed Suites&lt;/em&gt;; if you had switched one of them on, switch it on again once after the update. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/664&quot;&gt;#664&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A breakpoint condition that raises an error now shows the error, in VS Code&apos;s Debug Console and in &lt;code dir=&quot;auto&quot;&gt;robot-debug&lt;/code&gt;, instead of counting as true or false. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/669&quot;&gt;#669&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;In JetBrains IDEs, breakpoints in files of other languages, such as C# in Rider, are no longer turned into Robot Framework breakpoints. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/658&quot;&gt;#658&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;In a PyCharm project with several modules, &lt;strong&gt;RobotCode&lt;/strong&gt; uses the interpreter and the roots of the module that holds the Robot Framework project, not the first module with an interpreter, and asks when several modules qualify; the General settings page can change the module. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/489&quot;&gt;#489&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;In PyCharm, Go to Declaration on a variable jumps to its definition again. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/660&quot;&gt;#660&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;In PyCharm, Go to Declaration on a keyword called with a library or resource prefix lands on the keyword every time, not only the first time. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/464&quot;&gt;#464&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Closing a project or quitting PyCharm while the language server is still starting no longer reports an error. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/630&quot;&gt;#630&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;In PyCharm, tests whose suite teardown fails show as failed, and the run console keeps the output in the order Robot Framework wrote it. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/458&quot;&gt;#458&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;--dry&lt;/code&gt; no longer starts the &lt;code dir=&quot;auto&quot;&gt;wrapper&lt;/code&gt; configured in &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;debug&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;repl-server&lt;/code&gt; no longer hang with &lt;code dir=&quot;auto&quot;&gt;--dry&lt;/code&gt;. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/665&quot;&gt;#665&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Commands that run Robot Framework exit with 252 when &lt;strong&gt;RobotCode&lt;/strong&gt; itself reports an error, such as an invalid &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt; or a wrapper that doesn&apos;t start, so a CI job can tell a broken setup from failed tests. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/666&quot;&gt;#666&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The help of the REPL&apos;s &lt;code dir=&quot;auto&quot;&gt;.set&lt;/code&gt; and the command-line debugging guide now say that &lt;code dir=&quot;auto&quot;&gt;.set&lt;/code&gt; only changes existing variables and always stores a string. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/670&quot;&gt;#670&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The configuration guide now names the correct location of the global user configuration: a &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt; in the platform&apos;s user configuration directory (for example &lt;code dir=&quot;auto&quot;&gt;~/.config/robotcode/robot.toml&lt;/code&gt; on Linux), not &lt;code dir=&quot;auto&quot;&gt;~/.robot.toml&lt;/code&gt;. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/637&quot;&gt;#637&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;under-the-hood&quot;&gt;Under the Hood&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The experimental SemanticModel introduced in v2.6.0 has made good progress: with &lt;code dir=&quot;auto&quot;&gt;semantic-model = true&lt;/code&gt;, semantic highlighting, selection ranges and the debugger&apos;s inline values now run on the model and behave as without it. It is still off by default; the &lt;a href=&quot;https://robotcode.io/news/v2-6-0/#experimental-semanticmodel-preview&quot;&gt;v2.6.0 post&lt;/a&gt; shows how to try it.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;thank-you&quot;&gt;Thank You&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Thanks to everyone who reported issues, contributed ideas and code, and tested pre-release builds. Your feedback drives every release.&lt;/p&gt;
&lt;p&gt;If you like &lt;strong&gt;RobotCode&lt;/strong&gt;, please help others find it: we need more reviews in the &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=d-biehl.robotcode&quot;&gt;VS Code Marketplace&lt;/a&gt; and the &lt;a href=&quot;https://plugins.jetbrains.com/plugin/26216&quot;&gt;JetBrains Marketplace&lt;/a&gt;, and more stars on &lt;a href=&quot;https://github.com/robotcodedev/robotcode&quot;&gt;GitHub&lt;/a&gt;. Donations through &lt;a href=&quot;https://github.com/sponsors/robotcodedev&quot;&gt;GitHub Sponsors&lt;/a&gt; or &lt;a href=&quot;https://opencollective.com/robotcode&quot;&gt;Open Collective&lt;/a&gt; are very welcome too and help keep the project sustainable.&lt;/p&gt;
&lt;p&gt;For the full list of changes, see the &lt;a href=&quot;https://github.com/robotcodedev/robotcode/blob/main/CHANGELOG.md&quot;&gt;Changelog&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues&quot;&gt;Report issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/robotcodedev/robotcode/discussions&quot;&gt;Discussions &amp;#x26; Q&amp;#x26;A&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>release</category><category>editor</category><category>cli</category><category>vscode</category><category>analysis</category><category>intellij</category><category>ai-agents</category></item><item><title>What&apos;s New in v2.7.0</title><link>https://robotcode.io/news/v2-7-0/</link><guid isPermaLink="true">https://robotcode.io/news/v2-7-0/</guid><description>RobotCode 2.7.0 adds a wrapper option to run tests inside a prepared environment, makes the analysis cache reliable, and fixes Test Explorer subset runs.</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;RobotCode&lt;/strong&gt; v2.7.0 is about running tests in the environment they actually need. The new &lt;code dir=&quot;auto&quot;&gt;wrapper&lt;/code&gt; option lets a command of your choosing bring up that environment — services, mocks, a graphical session — run the tests inside it, and tear it down again, from the command line and from your editor alike. Alongside it, the analysis cache is now trustworthy under rapid file changes, so stale errors no longer stick around in the editor or the CLI. And running a subset of tests from the VS Code Test Explorer works cleanly again on Robot Framework 6.1+.&lt;/p&gt;

&lt;div&gt;&lt;h2 id=&quot;run-tests-through-a-wrapper&quot;&gt;Run Tests Through a Wrapper&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Some test runs need more than the tests themselves: a database, a mock server, a &lt;code dir=&quot;auto&quot;&gt;docker compose&lt;/code&gt; stack, or a virtual display for UI tests. The new &lt;code dir=&quot;auto&quot;&gt;wrapper&lt;/code&gt; option tells &lt;strong&gt;RobotCode&lt;/strong&gt; to run its actual command &lt;em&gt;through&lt;/em&gt; a command of your choosing — the wrapper prepares the environment, runs the appended &lt;code dir=&quot;auto&quot;&gt;robotcode&lt;/code&gt; command in it, and cleans up afterwards.&lt;/p&gt;
&lt;p&gt;Configure it per profile in &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# A ready-made tool — here a virtual X server for headless UI tests&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;profiles&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headless&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrapper &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;xvfb-run&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;-a&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Your own script — bring the test environment up, then tear it down again&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;profiles&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;integration&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrapper &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;./with-test-services.sh&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Or set it ad hoc for a single run:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--wrapper&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;xvfb-run -a&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tests/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;integration&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--no-wrapper&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tests/&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;# ignore the profile&apos;s wrapper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The wrapper applies to every command that executes Robot Framework — &lt;code dir=&quot;auto&quot;&gt;run&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;robot&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;debug&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;repl&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;run-debug&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;repl-server&lt;/code&gt; — and never to commands that don&apos;t run tests, like the language server, &lt;code dir=&quot;auto&quot;&gt;discover&lt;/code&gt;, or &lt;code dir=&quot;auto&quot;&gt;libdoc&lt;/code&gt;. It can also be set through the &lt;code dir=&quot;auto&quot;&gt;ROBOTCODE_WRAPPER&lt;/code&gt; environment variable.&lt;/p&gt;
&lt;p&gt;Editors pick it up automatically, because they run &lt;code dir=&quot;auto&quot;&gt;robotcode&lt;/code&gt; for you: a &lt;code dir=&quot;auto&quot;&gt;wrapper&lt;/code&gt; in your selected profile already wraps the tests you run or debug from the VS Code Test Explorer. If you want an editor-only override without touching &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt;, set &lt;code dir=&quot;auto&quot;&gt;robotcode.debug.launchWrapper&lt;/code&gt; — it takes precedence over the profile&apos;s &lt;code dir=&quot;auto&quot;&gt;wrapper&lt;/code&gt; and has no effect on the command line.&lt;/p&gt;
&lt;p&gt;If your run only needs environment variables, you still don&apos;t need a wrapper — keep using &lt;code dir=&quot;auto&quot;&gt;[env]&lt;/code&gt; in &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt;. Reach for a &lt;code dir=&quot;auto&quot;&gt;wrapper&lt;/code&gt; when something has to &lt;em&gt;run&lt;/em&gt; around the tests.&lt;/p&gt;
&lt;p&gt;The wrapper works on Linux, macOS, and Windows — on POSIX systems &lt;strong&gt;RobotCode&lt;/strong&gt; replaces itself with the wrapper command, on Windows it spawns it and forwards the exit code, and the contract for your script is the same everywhere. The new &lt;a href=&quot;https://robotcode.io/guides/wrapper/&quot;&gt;Running Tests Through a Wrapper&lt;/a&gt; reference explains the details and includes complete, copy-ready Bash and PowerShell wrapper scripts.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;a-trustworthy-analysis-cache&quot;&gt;A Trustworthy Analysis Cache&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Fast consecutive changes to several files could previously poison the analysis cache: the editor and the CLI then reported errors that did not exist — missing keywords, unresolvable variables — until the affected files were touched again.&lt;/p&gt;
&lt;p&gt;In v2.7.0, cached analysis results are bound to exactly the file state they were computed from, and unsaved editor content is analyzed but never cached. Stale results can no longer stick, so what the editor and &lt;code dir=&quot;auto&quot;&gt;robotcode analyze code&lt;/code&gt; report reflects your files as they actually are — even while you are editing quickly across resource files, branches, or generated code.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;bug-fixes&quot;&gt;Bug Fixes&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Running a subset of tests from the Test Explorer works again on Robot Framework 6.1+.&lt;/strong&gt; Since 2.6.0, running a single test, a file, or any subset from the VS Code Test Explorer no longer passed Robot Framework&apos;s parse-include (&lt;code dir=&quot;auto&quot;&gt;-I&lt;/code&gt;) and top-level suite name (&lt;code dir=&quot;auto&quot;&gt;-N&lt;/code&gt;) options, so the run parsed the whole workspace and surfaced parse errors from unrelated files. Both options are passed again. For scripts and agents consuming &lt;code dir=&quot;auto&quot;&gt;robotcode discover -f json&lt;/code&gt;: Robot Framework&apos;s &lt;code dir=&quot;auto&quot;&gt;--parseinclude&lt;/code&gt; support is now reported once as a &lt;code dir=&quot;auto&quot;&gt;supportsParseInclude&lt;/code&gt; key on the result, replacing the previous per-item &lt;code dir=&quot;auto&quot;&gt;needsParseInclude&lt;/code&gt; key. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/624&quot;&gt;#624&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is also a small fix for JSON output: the compact JSON mode now actually emits compact separators instead of the pretty-printed spacing.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;thank-you&quot;&gt;Thank You&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Thanks to everyone who reported issues, contributed ideas, and tested pre-release builds. Your feedback drives every release.&lt;/p&gt;
&lt;p&gt;For the full list of changes, see the &lt;a href=&quot;https://github.com/robotcodedev/robotcode/blob/main/CHANGELOG.md&quot;&gt;Changelog&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues&quot;&gt;Report issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/robotcodedev/robotcode/discussions&quot;&gt;Discussions &amp;#x26; Q&amp;#x26;A&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/robotcode&quot;&gt;Sponsor RobotCode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>release</category><category>configuration</category><category>cli</category><category>analysis</category><category>vscode</category></item><item><title>What&apos;s New in v2.6.2</title><link>https://robotcode.io/news/v2-6-2/</link><guid isPermaLink="true">https://robotcode.io/news/v2-6-2/</guid><description>Bug fixes in 2.6.1 and 2.6.2: the Test Explorer recovers after server restarts, corrupt caches rebuild, and stale profiles no longer block test runs.</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Two patch releases landed today on top of &lt;a href=&quot;https://robotcode.io/news/v2-6-0/&quot;&gt;v2.6.0&lt;/a&gt; — &lt;strong&gt;v2.6.1&lt;/strong&gt; and &lt;strong&gt;v2.6.2&lt;/strong&gt; — all bug fixes from your reports. Thanks for filing them.&lt;/p&gt;

&lt;div&gt;&lt;h2 id=&quot;v262&quot;&gt;v2.6.2&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The Test Explorer recovers after a language server restart.&lt;/strong&gt; After restarting the language servers — for example via &lt;strong&gt;Clear Cache and Restart Language Servers&lt;/strong&gt; — test items and the run/debug buttons no longer disappear until you reload the window. &lt;strong&gt;RobotCode&lt;/strong&gt; now re-discovers each folder&apos;s tests and rebuilds its run profiles automatically when its language server comes back, and each workspace folder refreshes on its own without interfering with the others. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/618&quot;&gt;#618&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;More reliable test runs.&lt;/strong&gt; A run no longer hangs with a spinning indicator when a debug session fails to start, cancelling a run now stops only that run (and works even while it is still starting), and a test&apos;s error decoration clears as soon as the underlying problem is fixed. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/618&quot;&gt;#618&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;v261&quot;&gt;v2.6.1&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Automatic recovery from a corrupt cache database.&lt;/strong&gt; When the workspace cache became corrupt (&lt;code dir=&quot;auto&quot;&gt;database disk image is malformed&lt;/code&gt;), the keyword view, test discovery, and even &lt;strong&gt;Clear Cache and Restart Language Servers&lt;/strong&gt; stopped working. &lt;strong&gt;RobotCode&lt;/strong&gt; now detects the corruption and rebuilds the cache automatically — or falls back to an in-memory cache if the file is still locked by another window. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/614&quot;&gt;#614&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stale configuration profiles no longer block test runs.&lt;/strong&gt; If a selected profile was removed from &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt; — for example after switching git branches — every test run failed with a &lt;em&gt;profile not found&lt;/em&gt; error. &lt;strong&gt;Select Configuration Profiles&lt;/strong&gt; now drops profiles that no longer exist and lists which ones were removed. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/498&quot;&gt;#498&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stable Robocop formatting.&lt;/strong&gt; Formatting a file with Robocop repeatedly no longer flips between two results — for example a blank line being added and removed before a section header on every other run. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/612&quot;&gt;#612&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;pip install robotcode[all]&lt;/code&gt; works on more platforms.&lt;/strong&gt; On targets without a prebuilt &lt;code dir=&quot;auto&quot;&gt;html-to-markdown&lt;/code&gt; wheel (such as armv7l or Alpine/musllinux), the install used to fail during a source build. &lt;code dir=&quot;auto&quot;&gt;html-to-markdown&lt;/code&gt; is now opt-in instead of part of &lt;code dir=&quot;auto&quot;&gt;all&lt;/code&gt; — install it with &lt;code dir=&quot;auto&quot;&gt;pip install robotcode-runner[html]&lt;/code&gt; for nicer HTML log conversion in the &lt;code dir=&quot;auto&quot;&gt;results&lt;/code&gt; command. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/613&quot;&gt;#613&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is also a new reference page on &lt;a href=&quot;https://robotcode.io/guides/ignoring-files/&quot;&gt;excluding files with &lt;code dir=&quot;auto&quot;&gt;.robotignore&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;thank-you&quot;&gt;Thank You&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Thanks to everyone who reported issues, contributed ideas, and tested pre-release builds. Your feedback drives every release.&lt;/p&gt;
&lt;p&gt;For the full list of changes, see the &lt;a href=&quot;https://github.com/robotcodedev/robotcode/blob/main/CHANGELOG.md&quot;&gt;Changelog&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues&quot;&gt;Report issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/robotcodedev/robotcode/discussions&quot;&gt;Discussions &amp;#x26; Q&amp;#x26;A&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/robotcode&quot;&gt;Sponsor RobotCode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>release</category><category>vscode</category><category>analysis</category><category>configuration</category></item><item><title>What&apos;s New in v2.6.0</title><link>https://robotcode.io/news/v2-6-0/</link><guid isPermaLink="true">https://robotcode.io/news/v2-6-0/</guid><description>RobotCode v2.6.0 builds out a Robot Framework project&apos;s command line: project-aware commands discover tests, inspect finished runs, check code, explore keyword documentation and debug a run. A first version of chat plugins lets AI agents drive the robotcode CLI, and the release introduces the first experimental SemanticModel preview.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;RobotCode&lt;/strong&gt; v2.6.0 builds out a Robot Framework project&apos;s command line — new commands alongside sharper versions of the ones you already use — so working with a project means asking focused, structured questions instead of wading through raw &lt;code dir=&quot;auto&quot;&gt;.robot&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;.resource&lt;/code&gt; files, &lt;code dir=&quot;auto&quot;&gt;output.xml&lt;/code&gt;, or &lt;code dir=&quot;auto&quot;&gt;log.html&lt;/code&gt;. These project-aware commands discover tests, inspect finished runs, check code, explore keyword documentation, and debug a run. The work was driven by what AI agents need to operate a project without guessing, and a &lt;strong&gt;first version&lt;/strong&gt; of chat plugins lets an agent drive the &lt;code dir=&quot;auto&quot;&gt;robotcode&lt;/code&gt; CLI directly — honoring your &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt;, profiles, and Python environment, with more to come. It turns out a clean command line is exactly what developers and CI pipelines wanted too: readable Markdown at the prompt, and machine-readable JSON, SARIF, or GitHub and GitLab reports for pipelines. Separately, this release introduces the first experimental SemanticModel preview, a new foundation for deeper, more consistent Robot Framework analysis across RobotCode. A documentation refresh ties it together, explaining these workflows so agents and humans share the same resolved view of a project.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;inspect-robot-framework-runs-from-the-terminal&quot;&gt;Inspect Robot Framework Runs from the Terminal&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The new &lt;code dir=&quot;auto&quot;&gt;robotcode results&lt;/code&gt; command group lets you inspect finished Robot Framework runs straight from the terminal — the answers you&apos;d normally hunt for in &lt;code dir=&quot;auto&quot;&gt;report.html&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;log.html&lt;/code&gt;, delivered as plain text instead. It is designed for quick local triage, CI logs, shell scripts, and AI-driven failure analysis, where compact summaries and structured output matter more than handing a whole result file to a chat session.&lt;/p&gt;
&lt;p&gt;The command group covers the common result questions: &lt;code dir=&quot;auto&quot;&gt;summary&lt;/code&gt; gives a compact overview, &lt;code dir=&quot;auto&quot;&gt;show&lt;/code&gt; lists matching tests, &lt;code dir=&quot;auto&quot;&gt;log&lt;/code&gt; prints the execution tree, &lt;code dir=&quot;auto&quot;&gt;stats&lt;/code&gt; aggregates larger runs, and &lt;code dir=&quot;auto&quot;&gt;diff&lt;/code&gt; compares two result files. The active &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt; profile is used to find the output file automatically, while &lt;code dir=&quot;auto&quot;&gt;-o/--output&lt;/code&gt; can point to a specific one.&lt;/p&gt;
&lt;p&gt;Results can be filtered by status, tags, suites, tests, and long names, and &lt;code dir=&quot;auto&quot;&gt;--failed&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;--passed&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;--skipped&lt;/code&gt; are available as quick additive shortcuts for common status filters. &lt;code dir=&quot;auto&quot;&gt;--search&lt;/code&gt; / &lt;code dir=&quot;auto&quot;&gt;--search-regex&lt;/code&gt; can narrow large runs by names, failures, keyword calls, arguments, log messages, and metadata.&lt;/p&gt;
&lt;p&gt;Human text output is now Markdown. In an interactive colored terminal, &lt;strong&gt;RobotCode&lt;/strong&gt; renders that Markdown with themed tables, headings, lists, status markers, highlighted matches, and terminal-friendly links. In a pipe, redirected output, or &lt;code dir=&quot;auto&quot;&gt;--no-color&lt;/code&gt; session, the raw Markdown is emitted as-is, which makes it useful for CI logs, pull requests, chat tools, and AI-agent workflows. &lt;code dir=&quot;auto&quot;&gt;--format json&lt;/code&gt; remains the stable payload for scripts, CI, editor integrations, and agents.&lt;/p&gt;
&lt;p&gt;For deeper inspection, &lt;code dir=&quot;auto&quot;&gt;results log&lt;/code&gt; can include keyword or suite information with &lt;code dir=&quot;auto&quot;&gt;--keyword-info&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;--suite-info&lt;/code&gt;, and it can extract embedded artifacts such as screenshots into a directory.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;summary&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;show&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--failed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--search&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;login&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--failed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--keyword-info&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;For the full guide and more recipes, see &lt;a href=&quot;https://robotcode.io/guides/analyzing-results/&quot;&gt;Analyzing Run Results&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;searchable-project-discovery&quot;&gt;Searchable Project Discovery&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Human &lt;code dir=&quot;auto&quot;&gt;discover&lt;/code&gt; output now follows the same Markdown-first approach as &lt;code dir=&quot;auto&quot;&gt;results&lt;/code&gt;: project trees, file lists, suite lists, test lists, task lists, tag summaries, and statistics render nicely in terminals while staying pasteable as plain Markdown when output is captured. JSON output is unchanged and records the applied search filter for scripts and agents.&lt;/p&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;robotcode discover&lt;/code&gt; also gains &lt;code dir=&quot;auto&quot;&gt;--search&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;--search-regex&lt;/code&gt; across &lt;code dir=&quot;auto&quot;&gt;all&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;files&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;suites&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;tags&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;tasks&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;tests&lt;/code&gt;. That makes it easier for humans and agents to answer project-inventory questions without dumping the whole tree first: search can match names, long names, source paths, documentation, templates, timeouts, tags, suite documentation or metadata, and test body content such as keyword calls, arguments, assignments, control-flow conditions, and setup or teardown steps.&lt;/p&gt;
&lt;p&gt;Parsing errors and warnings no longer clutter the default output. When a suite has parse issues, &lt;code dir=&quot;auto&quot;&gt;discover&lt;/code&gt; now prints a compact &lt;code dir=&quot;auto&quot;&gt;Diagnostics&lt;/code&gt; summary with the error and warning counts after the statistics, and &lt;code dir=&quot;auto&quot;&gt;--diagnostics&lt;/code&gt; lists the full messages on demand. JSON output still carries the complete diagnostics, so editors and agents are unaffected.&lt;/p&gt;
&lt;p&gt;For the full discovery guide, including JSON output shapes and CI recipes, see &lt;a href=&quot;https://robotcode.io/guides/discovering-tests/&quot;&gt;Discovering Tests, Tasks and Suites&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;ci-ready-static-analysis-output&quot;&gt;CI-Ready Static Analysis Output&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;robotcode analyze code&lt;/code&gt; is now easier to use locally, in CI, and as an agent preflight check before running a suite. The default concise output prints diagnostics in source order, uses full severity names such as &lt;code dir=&quot;auto&quot;&gt;[ERROR]&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;[WARNING]&lt;/code&gt;, and formats multi-line messages and related locations more clearly. Robot Framework tracebacks and long &lt;code dir=&quot;auto&quot;&gt;PYTHONPATH&lt;/code&gt; dumps are hidden by default so routine CLI output stays focused; use &lt;code dir=&quot;auto&quot;&gt;--show-tracebacks&lt;/code&gt; when you need the full diagnostic body.&lt;/p&gt;
&lt;p&gt;For automation, the command now has structured output formats for JSON, SARIF, GitHub Actions annotations, and GitLab Code Quality reports. &lt;code dir=&quot;auto&quot;&gt;--output-file&lt;/code&gt; writes machine-readable reports directly to disk, and &lt;code dir=&quot;auto&quot;&gt;--full-paths&lt;/code&gt; switches between project-relative and absolute paths. The new &lt;code dir=&quot;auto&quot;&gt;--severity&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;--code&lt;/code&gt; filters let you narrow the reported diagnostics without remapping their severities, so the output, summary, and exit code stay aligned.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;analyze&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;analyze&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--severity&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;error,warning&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;analyze&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--output-format&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sarif&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--output-file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;robotcode.sarif&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Path filtering is also stricter: passing a path such as &lt;code dir=&quot;auto&quot;&gt;tests/api&lt;/code&gt; no longer accidentally includes sibling folders like &lt;code dir=&quot;auto&quot;&gt;tests/api_v2&lt;/code&gt;. Workspace-level diagnostics now get an explicit &lt;code dir=&quot;auto&quot;&gt;.:&lt;/code&gt; source marker instead of appearing without any location context. Unused keyword and variable diagnostics now go through the same diagnostic modifiers as every other diagnostic, so &lt;code dir=&quot;auto&quot;&gt;-mi&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;-mX&lt;/code&gt;, and inline &lt;code dir=&quot;auto&quot;&gt;# robotcode:&lt;/code&gt; comments apply consistently.&lt;/p&gt;
&lt;p&gt;For the full guide, including SARIF and CI recipes, see &lt;a href=&quot;https://robotcode.io/guides/analyzing-code/&quot;&gt;Analyzing Code&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;a-command-line-debugger-and-a-more-capable-repl&quot;&gt;A Command-Line Debugger, and a More Capable REPL&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The headline here is a new command-line debugger for Robot Framework. &lt;code dir=&quot;auto&quot;&gt;robotcode robot-debug&lt;/code&gt; (alias &lt;code dir=&quot;auto&quot;&gt;run-debug&lt;/code&gt;) runs a real suite through the normal runner and pauses where you tell it to — a file and line, a keyword name, an embedded &lt;code dir=&quot;auto&quot;&gt;Breakpoint&lt;/code&gt; keyword, the first failure, or right at entry. Once it stops, you get a &lt;code dir=&quot;auto&quot;&gt;pdb&lt;/code&gt;-style prompt with the live call stack and variables, where you can step through execution, inspect and set variables, evaluate expressions, manage breakpoints, and run keywords in the paused context. It works on every supported Robot Framework version and runs in terminals, over SSH, and in containers where the VS Code debugger isn&apos;t an option — and an AI agent can drive it non-interactively to capture the exact state at the moment of failure.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;robot-debug&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--break&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;login.robot:42&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tests/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;robot-debug&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--stop-on-entry&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tests/login.robot&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The same debugger is available inside &lt;code dir=&quot;auto&quot;&gt;robotcode repl&lt;/code&gt;, but there it starts detached and the shell stays a shell: a failing keyword just prints its error and leaves you at the prompt. Attach it (&lt;code dir=&quot;auto&quot;&gt;.debug on&lt;/code&gt;, or start with &lt;code dir=&quot;auto&quot;&gt;--break&lt;/code&gt;) when you actually want to stop on a breakpoint, and the breakpoints you set survive toggling it back off.&lt;/p&gt;
&lt;p&gt;Alongside the debugger, &lt;code dir=&quot;auto&quot;&gt;robotcode repl&lt;/code&gt; itself has grown into a far more comfortable scratchpad. It keeps command history across sessions, completes keywords, variables, and imports as you type, and handles multi-line blocks. &lt;code dir=&quot;auto&quot;&gt;.kw&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;.doc&lt;/code&gt; show the same keyword and library documentation the editor surfaces on hover, right in the terminal, in a scrollable viewer with search and clickable links. Imports work just like in a suite — type &lt;code dir=&quot;auto&quot;&gt;Library&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;Resource&lt;/code&gt;, or &lt;code dir=&quot;auto&quot;&gt;Variables&lt;/code&gt; at the prompt — &lt;code dir=&quot;auto&quot;&gt;${_}&lt;/code&gt; holds the last keyword result, and &lt;code dir=&quot;auto&quot;&gt;.save&lt;/code&gt; exports a session as a runnable &lt;code dir=&quot;auto&quot;&gt;.robot&lt;/code&gt; file. A &lt;code dir=&quot;auto&quot;&gt;--plain&lt;/code&gt; mode keeps the output clean for scripts and AI-agent workflows.&lt;/p&gt;
&lt;p&gt;For the full guide — every dot-command, the complete debugger command set, and installation extras — see the &lt;a href=&quot;https://robotcode.io/guides/repl/&quot;&gt;REPL&lt;/a&gt; and &lt;a href=&quot;https://robotcode.io/guides/robot-debug/&quot;&gt;command-line debugger&lt;/a&gt; references.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;ai-and-agent-workflows&quot;&gt;AI and Agent Workflows&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The commands in the sections above weren&apos;t built only for people at a keyboard — a big motivation was letting AI agents operate a Robot Framework project from the same structured, project-resolved output.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;chat-plugins-for-ai-agents&quot;&gt;Chat Plugins for AI Agents&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;RobotCode&lt;/strong&gt; now ships a set of &lt;strong&gt;chat plugins&lt;/strong&gt; that teach an AI agent to operate a Robot Framework project through the project&apos;s own &lt;code dir=&quot;auto&quot;&gt;robotcode&lt;/code&gt; CLI, the way an experienced Robot Framework engineer would. The agent honors your &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt;, profiles, and Python environment, so it works with the same resolved view of your project that the rest of &lt;strong&gt;RobotCode&lt;/strong&gt; uses. The plugins are published as a marketplace, &lt;a href=&quot;https://github.com/robotcodedev/robotframework-agent-plugins&quot;&gt;robotframework-agent-plugins&lt;/a&gt;, so any Open-Plugins-compatible agent — Claude Code, Codex, GitHub Copilot, and others — can install them once and reuse them anywhere. For example, you can ask it to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&quot;run the smoke tests with the ci profile&quot;&lt;/em&gt; — runs them through the selected profile and reports pass/fail counts&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&quot;why did Login Works fail?&quot;&lt;/em&gt; — inspects the existing run results with &lt;code dir=&quot;auto&quot;&gt;robotcode results&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&quot;what tests and tags exist?&quot;&lt;/em&gt; — uses &lt;code dir=&quot;auto&quot;&gt;robotcode discover&lt;/code&gt; to resolve the real set (paths, profiles, variables, pre-run modifiers)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&quot;what arguments does this keyword take?&quot;&lt;/em&gt; — looks it up with &lt;code dir=&quot;auto&quot;&gt;libdoc&lt;/code&gt; against the installed libraries and local resources&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&quot;try this keyword&quot;&lt;/em&gt; — runs it in the REPL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For agents running outside VS Code, the plugins call the &lt;code dir=&quot;auto&quot;&gt;robotcode&lt;/code&gt; CLI directly, so it needs to be installed in the project&apos;s Python environment.&lt;/p&gt;
&lt;p&gt;Inside VS Code there&apos;s nothing to install: the extension bundles both the chat plugins — for GitHub Copilot Chat — and &lt;code dir=&quot;auto&quot;&gt;robotcode&lt;/code&gt; itself, making the bundled CLI available in the integrated terminal through VS Code&apos;s terminal shell integration, so the plugins work out of the box. They are enabled by default and can be toggled with &lt;code dir=&quot;auto&quot;&gt;robotcode.ai.enableChatPlugins&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If you would rather install the plugins from the marketplace inside VS Code, two new Command Palette commands — &lt;strong&gt;RobotCode: Add Chat Plugins Marketplace&lt;/strong&gt; and &lt;strong&gt;RobotCode: Remove Chat Plugins Marketplace&lt;/strong&gt; — register or remove the marketplace in your user-level &lt;code dir=&quot;auto&quot;&gt;chat.plugins.marketplaces&lt;/code&gt; setting without editing JSON by hand. Only the applicable command is shown depending on whether the marketplace is already registered. When you install the plugins this way, turn off &lt;code dir=&quot;auto&quot;&gt;robotcode.ai.enableChatPlugins&lt;/code&gt; so you do not run the bundled and marketplace copies at the same time.&lt;/p&gt;
&lt;p&gt;For installation, marketplace setup, and troubleshooting, see &lt;a href=&quot;https://robotcode.io/guides/ai-agents/&quot;&gt;Working with AI Agents&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;vs-code-chat-tools-are-deprecated&quot;&gt;VS Code Chat Tools Are Deprecated&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The existing VS Code chat language model tools for Robot Framework keyword documentation, library documentation, imports, and environment details are now deprecated and disabled by default in favor of the CLI-based chat plugins described above. If you still rely on them during the transition, enable &lt;code dir=&quot;auto&quot;&gt;robotcode.ai.enableLanguageModelTools&lt;/code&gt;; the setting remains visible for now.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;cleaner-output-in-ai-agent-sessions&quot;&gt;Cleaner Output in AI-Agent Sessions&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;RobotCode&lt;/strong&gt; now recognizes common AI-agent environments and keeps terminal output easier to capture. Colors, paging, and REPL prompt enhancements are toned down by default in those sessions, so chat tools get clean text instead of terminal control sequences. Explicit CLI flags and environment variables still override the defaults; see &lt;a href=&quot;https://robotcode.io/guides/ai-agents/#ai-agent-detection&quot;&gt;AI-agent detection&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;experimental-semanticmodel-preview&quot;&gt;Experimental SemanticModel Preview&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;This release introduces the first experimental version of the SemanticModel, a new analysis foundation that &lt;strong&gt;RobotCode&lt;/strong&gt; will use to understand Robot Framework files more deeply and more consistently.&lt;/p&gt;
&lt;p&gt;This is the analysis-foundation part of the release, and it is intentionally not finished yet. The long-term plan is to replace the old analysis path with a single pre-computed model of the file: keyword calls, variables, imports, control flow, settings, references, and token meaning all resolved once, then reused by editor features. That should eventually mean less duplicated AST walking, fewer subtle differences between features, and better building blocks for things like completions, hover, rename, and future navigation features.&lt;/p&gt;
&lt;p&gt;For v2.6.0, the SemanticModel is a preview behind an opt-in flag. Parts of the migration are already in place, and the migrated features are designed to behave the same as the default analyzer. This is still early in the migration, so the default analyzer remains the recommended path while the new model gets more real-world mileage.&lt;/p&gt;
&lt;p&gt;Enable it in &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;tool&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;robotcode-analyze&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;semantic-model &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;or in VS Code:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;robotcode.experimental.semanticModel&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;With the SemanticModel enabled, &lt;strong&gt;RobotCode&lt;/strong&gt; can already statically resolve more nested variables such as &lt;code dir=&quot;auto&quot;&gt;${DICT_${key}}&lt;/code&gt; and handle RF 7.4 &lt;code dir=&quot;auto&quot;&gt;KeywordName&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;KeywordArgument&lt;/code&gt; type hints for run-keyword detection.&lt;/p&gt;
&lt;p&gt;Some editor features now have SemanticModel-backed paths:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inlay hints read pre-resolved data instead of doing a second analysis pass.&lt;/li&gt;
&lt;li&gt;Signature help can use already-resolved keyword data.&lt;/li&gt;
&lt;li&gt;The &quot;Open Documentation&quot; code action can read keyword and token information from the model.&lt;/li&gt;
&lt;li&gt;The &quot;Create Keyword&quot; quick fix and &quot;Assign Result to Variable&quot; refactor can use the keyword call&apos;s resolved namespace, library entry, and assignment state.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The intended result is that normal editor output stays the same while the internals get stronger. Dedicated equivalence tests already compare old and new paths across supported Robot Framework versions, but this is still a work in progress, not a stability promise.&lt;/p&gt;
&lt;p&gt;The feature is disabled by default while it matures. If you are curious and enable it on your project, we would love to hear how it behaves for you, especially if you notice differences from the default analyzer. Real project feedback is exactly what will help turn this new foundation into the normal path later. The full &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt; setting is documented in the &lt;a href=&quot;https://robotcode.io/reference/config/&quot;&gt;configuration reference&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;documentation-for-agent-friendly-workflows&quot;&gt;Documentation for Agent-Friendly Workflows&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;A lot of the release work went into documentation for those agent-friendly workflows too. There are new or heavily expanded guides for &lt;a href=&quot;https://robotcode.io/guides/ai-agents/&quot;&gt;AI-agent workflows&lt;/a&gt;, &lt;a href=&quot;https://robotcode.io/guides/analyzing-results/&quot;&gt;run-result inspection&lt;/a&gt;, &lt;a href=&quot;https://robotcode.io/guides/discovering-tests/&quot;&gt;project discovery&lt;/a&gt;, &lt;a href=&quot;https://robotcode.io/guides/analyzing-code/&quot;&gt;static analysis&lt;/a&gt;, the &lt;a href=&quot;https://robotcode.io/guides/repl/&quot;&gt;REPL&lt;/a&gt; and &lt;a href=&quot;https://robotcode.io/guides/robot-debug/&quot;&gt;command-line debugger&lt;/a&gt;, plus refreshed &lt;a href=&quot;https://robotcode.io/reference/cli/&quot;&gt;CLI&lt;/a&gt; and &lt;a href=&quot;https://robotcode.io/reference/config/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt;&lt;/a&gt; references. The goal is the same as the tooling work: make the real project behavior easier to inspect, follow, and automate.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;cli-and-vs-code-polish&quot;&gt;CLI and VS Code Polish&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;smoother-test-explorer-refreshes&quot;&gt;Smoother Test Explorer Refreshes&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The VS Code Test Explorer is calmer and more responsive during active editing. It now avoids re-rendering the tree when discovered tests have not actually changed, batches bursts of file edits into a single workspace refresh, cancels in-flight discovery when newer edits arrive, and keeps expanded tree nodes open when external file changes are detected.&lt;/p&gt;
&lt;p&gt;Newly added or removed tests in saved files now appear or disappear immediately without needing the refresh button. The same work also removes a startup edge case where &lt;code dir=&quot;auto&quot;&gt;AbortError&lt;/code&gt; could briefly show up as a workspace entry.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;cleaner-terminal-colors&quot;&gt;Cleaner Terminal Colors&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;CLI coloring now follows terminal conventions more closely. ANSI colors are auto-disabled when output is redirected to a pipe, file, log capture, or CI artifact, while &lt;a href=&quot;https://no-color.org/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;NO_COLOR&lt;/code&gt;&lt;/a&gt; and &lt;code dir=&quot;auto&quot;&gt;FORCE_COLOR&lt;/code&gt; are respected. stdout and stderr are decided independently, so warnings can still stay colored when stdout is piped but stderr is still attached to a terminal. Explicit &lt;code dir=&quot;auto&quot;&gt;--color&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;--no-color&lt;/code&gt; still override auto-detection. This stream-based handling is separate from the &lt;a href=&quot;#cleaner-output-in-ai-agent-sessions&quot;&gt;AI-agent output tuning&lt;/a&gt; above: one reacts to &lt;em&gt;where&lt;/em&gt; output goes, the other to &lt;em&gt;who&lt;/em&gt; is reading it.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;control-the-whats-new-notification&quot;&gt;Control the What&apos;s New Notification&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;VS Code users can now turn off the update notification shown after &lt;strong&gt;RobotCode&lt;/strong&gt; updates. The setting is available as &lt;code dir=&quot;auto&quot;&gt;robotcode.showWhatsNewOnUpdate&lt;/code&gt; under RobotCode &gt; General. The What&apos;s New post is still there when you want it; the notification just no longer has to appear after every update.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;real-robottoml-examples-in-the-schema&quot;&gt;Real &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt; Examples in the Schema&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The &lt;a href=&quot;https://robotcode.io/reference/config/&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt; reference&lt;/a&gt; and JSON schema now include real TOML examples and clearer inline documentation. The schema is also available from its new public URL, &lt;code dir=&quot;auto&quot;&gt;https://www.robotcode.io/schemas/robot.toml.json&lt;/code&gt;, so editor tooling can show more useful examples while you configure profiles, paths, variables, analysis settings, and runner options.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;bug-fixes&quot;&gt;Bug Fixes&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;There are also a few focused fixes in this release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CLI unused-variable diagnostics now treat variables starting with &lt;code dir=&quot;auto&quot;&gt;_&lt;/code&gt; as intentionally unused, matching the language server behavior. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/593&quot;&gt;#593&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The environment-validation quick pick in VS Code now mentions the correct minimum Robot Framework version, 5.0 instead of the stale 4.1 text. Thanks to Danilo for the PR! (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/603&quot;&gt;#603&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;When VS Code&apos;s &quot;4 Spaces Tab&quot; setting is enabled, &lt;code dir=&quot;auto&quot;&gt;Tab&lt;/code&gt; now still accepts Copilot inline edit suggestions instead of always inserting spaces. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/566&quot;&gt;#566&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt; now accepts &lt;code dir=&quot;auto&quot;&gt;max-error-lines = &quot;NONE&quot;&lt;/code&gt;, matching Robot Framework&apos;s &lt;code dir=&quot;auto&quot;&gt;--maxerrorlines NONE&lt;/code&gt; spelling for showing the full error message. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/606&quot;&gt;#606&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;thank-you&quot;&gt;Thank You&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Thanks to everyone who reported issues and contributed ideas — and to everyone who uses &lt;strong&gt;RobotCode&lt;/strong&gt; in their daily work. Your feedback drives every release.&lt;/p&gt;
&lt;p&gt;For the full list of changes, see the &lt;a href=&quot;https://github.com/robotcodedev/robotcode/blob/main/CHANGELOG.md&quot;&gt;Changelog&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues&quot;&gt;Report issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/robotcodedev/robotcode/discussions&quot;&gt;Discussions &amp;#x26; Q&amp;#x26;A&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/robotcode&quot;&gt;Sponsor RobotCode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>release</category><category>cli</category><category>analysis</category><category>ci</category><category>debugging</category><category>ai-agents</category><category>editor</category><category>vscode</category></item><item><title>What&apos;s New in v2.5.1</title><link>https://robotcode.io/news/v2-5-1/</link><guid isPermaLink="true">https://robotcode.io/news/v2-5-1/</guid><description>RobotCode 2.5.1 fixes false VariableNotFound diagnostics for templates with embedded arguments, multi-word BDD prefix matching, and CURDIR on Windows.</description><pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A quick follow-up to v2.5.0 with three bugfixes that came in from your reports — thanks for filing them.&lt;/p&gt;

&lt;div&gt;&lt;h2 id=&quot;template-keywords-no-longer-flag-embedded-arguments-as-unresolved&quot;&gt;Template Keywords No Longer Flag Embedded Arguments as Unresolved&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;If you use &lt;code dir=&quot;auto&quot;&gt;[Template]&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;Test Template&lt;/code&gt; with a keyword that has embedded arguments — something like &lt;code dir=&quot;auto&quot;&gt;The result of ${calculation} should be ${expected}&lt;/code&gt; — &lt;strong&gt;RobotCode&lt;/strong&gt; was treating the embedded argument placeholders as unresolved variables and showing false &lt;code dir=&quot;auto&quot;&gt;VariableNotFound&lt;/code&gt; diagnostics.&lt;/p&gt;
&lt;p&gt;This happened because the analyzer didn&apos;t distinguish between regular variable references and embedded argument placeholders when the keyword call came from a template declaration. Fixed: embedded argument tokens in template contexts are now skipped during variable analysis. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/542&quot;&gt;#542&lt;/a&gt;)&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;multi-word-bdd-prefixes-now-match-correctly&quot;&gt;Multi-Word BDD Prefixes Now Match Correctly&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Languages with multi-word BDD prefixes — most notably French with prefixes like &lt;em&gt;Étant donné que&lt;/em&gt;, &lt;em&gt;Et que&lt;/em&gt;, and &lt;em&gt;Mais que&lt;/em&gt; — weren&apos;t always recognized correctly. The problem: shorter prefixes (e.g. &lt;em&gt;Et&lt;/em&gt;) matched before longer ones (e.g. &lt;em&gt;Et que&lt;/em&gt;), consuming the prefix too early and leaving the keyword name garbled.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RobotCode&lt;/strong&gt; now sorts prefixes by length (longest first) and uses a single compiled regex for matching, which is the same strategy Robot Framework itself uses internally. This applies to keyword resolution, BDD prefix stripping, and semantic token highlighting. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/560&quot;&gt;#560&lt;/a&gt;)&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;curdir-works-correctly-in-variable-values-on-windows&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;${CURDIR}&lt;/code&gt; Works Correctly in Variable Values on Windows&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code dir=&quot;auto&quot;&gt;${CURDIR}&lt;/code&gt; variable in resource file variable tables was broken on Windows due to inconsistent backslash escaping. The resource builder used quadruple backslashes (&lt;code dir=&quot;auto&quot;&gt;\\\\&lt;/code&gt;) while the namespace analyzer used double backslashes (&lt;code dir=&quot;auto&quot;&gt;\\&lt;/code&gt;), and neither was correct for all cases.&lt;/p&gt;
&lt;p&gt;Both code paths now share a single &lt;code dir=&quot;auto&quot;&gt;replace_curdir_in_variable_values()&lt;/code&gt; helper with consistent escaping. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/589&quot;&gt;#589&lt;/a&gt;)&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;thank-you&quot;&gt;Thank You&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Thanks to everyone who reported these issues — your bug reports make &lt;strong&gt;RobotCode&lt;/strong&gt; better for the whole community.&lt;/p&gt;
&lt;p&gt;For the full list of changes, see the &lt;a href=&quot;https://github.com/robotcodedev/robotcode/blob/main/CHANGELOG.md&quot;&gt;Changelog&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues&quot;&gt;Report issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/robotcodedev/robotcode/discussions&quot;&gt;Discussions &amp;#x26; Q&amp;#x26;A&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/robotcode&quot;&gt;Sponsor RobotCode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>release</category><category>analysis</category><category>editor</category></item><item><title>What&apos;s New in v2.5.0 (April 1st Edition)</title><link>https://robotcode.io/news/v2-5-0-april-1st/</link><guid isPermaLink="true">https://robotcode.io/news/v2-5-0-april-1st/</guid><description>Happy April 1st! The April Fools&apos; edition of the v2.5.0 release notes: predictive analysis caching, a proactive performance mode, emotional code completion and a keyword adoption program. None of them exist.</description><pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;aside aria-label=&quot;April Fools&amp;#x27; joke&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;April Fools&apos; joke&lt;/p&gt;&lt;div&gt;&lt;p&gt;This post is an April Fools&apos; joke: none of the features it describes exist. The real release notes are in &lt;a href=&quot;https://robotcode.io/news/v2-5-0/&quot;&gt;What&apos;s New in v2.5.0&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;Hello everyone,&lt;/p&gt;
&lt;p&gt;we&apos;re excited to share a big &lt;strong&gt;RobotCode&lt;/strong&gt; release with you today. As many of you know, the main focus of v2.5.0 has been on performance — analysis caching, faster keyword resolution, smarter code completion. But while working on those features, we discovered some surprising opportunities that we just couldn&apos;t leave on the table. Here&apos;s the full picture.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;predictive-analysis-caching&quot;&gt;Predictive Analysis Caching&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;You already know that &lt;strong&gt;RobotCode&lt;/strong&gt; now caches analysis results in a local SQLite database for instant startup. But we didn&apos;t stop there.&lt;/p&gt;
&lt;p&gt;The new &lt;strong&gt;Predictive Caching&lt;/strong&gt; engine uses your git history, file modification patterns, and time-of-day statistics to pre-analyze files you&apos;re &lt;em&gt;likely&lt;/em&gt; to open next. If you usually start your Monday mornings in the login test suite, &lt;strong&gt;RobotCode&lt;/strong&gt; has those results ready before you even open the file.&lt;/p&gt;
&lt;p&gt;It also watches your keyboard idle patterns. Extended pauses after writing a &lt;code dir=&quot;auto&quot;&gt;FOR&lt;/code&gt; loop typically mean you&apos;re about to switch to a different file for reference — so &lt;strong&gt;RobotCode&lt;/strong&gt; pre-caches the top 5 most probable navigation targets during those pauses.&lt;/p&gt;
&lt;p&gt;Configure prediction depth in &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;tool&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;robotcode-analyze&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;cache&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;prediction-depth &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;clairvoyant&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# options: &quot;conservative&quot;, &quot;optimistic&quot;, &quot;clairvoyant&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;proactive-performance-mode&quot;&gt;Proactive Performance Mode&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The performance improvements in v2.5.0 (94% faster keyword matching, 28% faster file resolution) were so effective that we ran into an unexpected problem: &lt;strong&gt;RobotCode&lt;/strong&gt; now finishes analysis before some editors are ready to receive the results.&lt;/p&gt;
&lt;p&gt;To address this, we&apos;ve added &lt;strong&gt;Proactive Performance Mode&lt;/strong&gt;. When enabled, &lt;strong&gt;RobotCode&lt;/strong&gt; uses the leftover time between analysis completion and editor readiness to perform speculative work:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pre-resolving keywords from libraries you haven&apos;t imported yet but statistically might&lt;/li&gt;
&lt;li&gt;warming up code completion for keyword arguments you&apos;re likely to type based on cursor position history&lt;/li&gt;
&lt;li&gt;pre-computing diagnostics for code you haven&apos;t written yet, based on how similar keyword calls usually end&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This occasionally leads to diagnostic warnings appearing for lines that don&apos;t exist yet. This is expected behavior and usually means you were going to make that mistake anyway.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;emotional-code-completion&quot;&gt;Emotional Code Completion&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The new type hint-based completion for &lt;code dir=&quot;auto&quot;&gt;Literal&lt;/code&gt; values turned out to be just the beginning. Our analysis of completion acceptance rates revealed that keyword suggestions are significantly more effective when they match the developer&apos;s current &lt;em&gt;emotional context&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RobotCode&lt;/strong&gt; now analyzes several signals to determine your coding mood:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;typing speed and error correction frequency&lt;/li&gt;
&lt;li&gt;time since last successful test run&lt;/li&gt;
&lt;li&gt;number of times you&apos;ve hovered over the same unresolved keyword&lt;/li&gt;
&lt;li&gt;current scroll velocity (fast scrolling = frustration, slow scrolling = contemplation)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Based on this, code completion now adjusts its suggestions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confident mode&lt;/strong&gt;: shows advanced keywords, complex argument patterns, embedded arguments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cautious mode&lt;/strong&gt;: prioritizes well-tested keywords with high call frequency in your workspace&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frustrated mode&lt;/strong&gt;: moves &lt;code dir=&quot;auto&quot;&gt;Sleep&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;Log To Console&lt;/code&gt; to the top of every completion list&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resignation mode&lt;/strong&gt;: suggests &lt;code dir=&quot;auto&quot;&gt;[Tags]    known-issue&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;Skip    Not today&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;keyword-adoption-program&quot;&gt;Keyword Adoption Program&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Finding unused keywords with &lt;code dir=&quot;auto&quot;&gt;robotcode analyze code --collect-unused&lt;/code&gt; was a much-requested feature. But simply &lt;em&gt;listing&lt;/em&gt; unused keywords felt incomplete. These keywords were written by someone, probably with good intentions, possibly on a Friday afternoon. They deserve better than a cold diagnostic message.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RobotCode&lt;/strong&gt; now offers the &lt;strong&gt;Keyword Adoption Program&lt;/strong&gt;. When an unused keyword is detected, instead of just flagging it, &lt;strong&gt;RobotCode&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;checks if any other workspace in your organization could use it (via the new optional Keyword Sharing Protocol)&lt;/li&gt;
&lt;li&gt;generates a short &quot;keyword biography&quot; describing when it was written, how many times it was called in happier times, and what it probably hoped to achieve&lt;/li&gt;
&lt;li&gt;suggests test cases where it &lt;em&gt;could&lt;/em&gt; be useful, even if nobody asked&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Keywords that remain unadopted for more than 30 days receive a farewell message in the Problems panel before being eligible for cleanup.&lt;/p&gt;
&lt;p&gt;You can sponsor a keyword to prevent its removal:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;tool&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;robotcode-analyze&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;sponsored-keywords &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Click All The Things&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Verify Everything Is Fine&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;cache-mood-indicators&quot;&gt;Cache Mood Indicators&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The new &lt;code dir=&quot;auto&quot;&gt;robotcode analyze cache&lt;/code&gt; CLI commands give you full control over your analysis cache. But raw statistics felt impersonal, so we&apos;ve added a &lt;strong&gt;Cache Mood&lt;/strong&gt; indicator.&lt;/p&gt;
&lt;p&gt;Your cache now has feelings:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;analyze&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cache&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;info&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Cache&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;status:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;😊&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Content&lt;/span&gt;&lt;span&gt; (2,847 &lt;/span&gt;&lt;span&gt;entries,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;98.2%&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rate&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Possible moods:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;😊 &lt;strong&gt;Content&lt;/strong&gt; — high hit rate, low invalidation, everything is in harmony&lt;/li&gt;
&lt;li&gt;😐 &lt;strong&gt;Indifferent&lt;/strong&gt; — moderate hit rate, cache is doing its job but doesn&apos;t feel appreciated&lt;/li&gt;
&lt;li&gt;😟 &lt;strong&gt;Anxious&lt;/strong&gt; — frequent invalidations, the cache is worried it might not be needed anymore&lt;/li&gt;
&lt;li&gt;😤 &lt;strong&gt;Frustrated&lt;/strong&gt; — constant cache misses, usually caused by rapidly changing files, the cache would like you to please make up your mind&lt;/li&gt;
&lt;li&gt;💔 &lt;strong&gt;Heartbroken&lt;/strong&gt; — you ran &lt;code dir=&quot;auto&quot;&gt;cache prune&lt;/code&gt;, the cache remembers everything that was lost&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Running &lt;code dir=&quot;auto&quot;&gt;cache prune&lt;/code&gt; followed by &lt;code dir=&quot;auto&quot;&gt;cache info&lt;/code&gt; now shows a brief memorial of what was deleted, including the oldest entry&apos;s creation date and a message like &quot;It had been with you since Tuesday.&quot;&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;projectindex-the-keyword-social-network&quot;&gt;ProjectIndex: The Keyword Social Network&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The new workspace-wide &lt;code dir=&quot;auto&quot;&gt;ProjectIndex&lt;/code&gt; tracks references between keywords, variables, and namespaces. Internally, this is a straightforward inverse index. But we realized the data maps surprisingly well to social network concepts.&lt;/p&gt;
&lt;p&gt;The new &lt;strong&gt;Keyword Social Graph&lt;/strong&gt; (available via &lt;code dir=&quot;auto&quot;&gt;robotcode analyze social&lt;/code&gt;) shows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Popularity&lt;/strong&gt;: which keywords are called by the most test cases&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Influence&lt;/strong&gt;: keywords whose failure would cascade to the most other tests&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cliques&lt;/strong&gt;: groups of keywords that are always used together and never separately&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Loners&lt;/strong&gt;: keywords with zero incoming references (see: Keyword Adoption Program above)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frenemies&lt;/strong&gt;: keyword pairs that are frequently used in the same test but never in the same keyword call — suggesting an unresolved tension&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Keywords with high influence automatically receive a &lt;strong&gt;[Critical]&lt;/strong&gt; badge in code completion. Keywords in the &quot;Loners&quot; category get a 💬 icon suggesting they &quot;reach out&quot; to nearby test cases.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;known-limitations&quot;&gt;Known Limitations&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Predictive caching defaults to &lt;code dir=&quot;auto&quot;&gt;&quot;clairvoyant&quot;&lt;/code&gt; on Fridays, which can cause unexpected cache entries for files in branches you haven&apos;t checked out yet&lt;/li&gt;
&lt;li&gt;Emotional code completion cannot detect sarcasm in keyword names&lt;/li&gt;
&lt;li&gt;The Keyword Adoption Program does not yet support cross-company adoption due to GDPR concerns&lt;/li&gt;
&lt;li&gt;Cache mood indicators are not yet configurable and may not reflect your own feelings about the cache&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;robotcode analyze social --include-drama&lt;/code&gt; is available but not recommended in production environments&lt;/li&gt;
&lt;li&gt;The keyword social graph may reveal uncomfortable truths about your project&apos;s architecture&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;breaking-changes&quot;&gt;Breaking Changes&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Cache entries now have feelings and may resist deletion if recently populated&lt;/li&gt;
&lt;li&gt;Keyword completion order may vary depending on your emotional state&lt;/li&gt;
&lt;li&gt;Running &lt;code dir=&quot;auto&quot;&gt;cache prune&lt;/code&gt; now prompts &quot;Are you sure?&quot; followed by &quot;Are you really sure?&quot; followed by a 5-second countdown&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;migration-guide&quot;&gt;Migration Guide&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;No manual migration is required. However, we recommend:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;giving your team a heads-up about the keyword biographies before someone gets emotional&lt;/li&gt;
&lt;li&gt;reviewing your CI pipeline expectations around cache mood&lt;/li&gt;
&lt;li&gt;not running &lt;code dir=&quot;auto&quot;&gt;robotcode analyze social --include-drama&lt;/code&gt; during sprint reviews&lt;/li&gt;
&lt;li&gt;checking the date before filing issues about any of the above&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;what-actually-changed&quot;&gt;What Actually Changed&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Happy April 1st! 😄&lt;/p&gt;
&lt;p&gt;None of the above features exist. Probably for the best. But there &lt;em&gt;is&lt;/em&gt; a real v2.5.0 release — and it&apos;s actually worth reading.&lt;/p&gt;
&lt;p&gt;👉 &lt;strong&gt;&lt;a href=&quot;https://robotcode.io/news/v2-5-0/&quot;&gt;Read the real release notes here&lt;/a&gt;&lt;/strong&gt; 👈&lt;/p&gt;
</content:encoded><category>april-fools</category></item><item><title>What&apos;s New in v2.5.0</title><link>https://robotcode.io/news/v2-5-0/</link><guid isPermaLink="true">https://robotcode.io/news/v2-5-0/</guid><description>RobotCode 2.5.0 adds a persistent analysis cache and faster keyword matching, plus Literal completion, CLI unused keyword checks and cache commands.</description><pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you&apos;ve ever opened a large Robot Framework project and gone for coffee while &lt;strong&gt;RobotCode&lt;/strong&gt; was still thinking — this release is for you. Version 2.5.0 is all about &lt;strong&gt;speed&lt;/strong&gt;: faster startup, faster analysis, faster code completion. And a few new tricks on top.&lt;/p&gt;

&lt;div&gt;&lt;h2 id=&quot;instant-startup-with-analysis-caching&quot;&gt;Instant Startup with Analysis Caching&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The biggest change you&apos;ll notice: &lt;strong&gt;RobotCode remembers&lt;/strong&gt;. When you open a project for the second time, all the analysis work from your last session is still there — diagnostics, code completion, navigation, everything loads almost instantly.&lt;/p&gt;
&lt;p&gt;Behind the scenes, &lt;strong&gt;RobotCode&lt;/strong&gt; now stores fully resolved analysis data in a local SQLite database. Instead of re-analyzing every file on every IDE start, it loads cached results and only re-processes files that actually changed. For projects with hundreds of Robot files, this can cut startup from minutes down to seconds.&lt;/p&gt;
&lt;p&gt;This is &lt;strong&gt;enabled by default&lt;/strong&gt; — there&apos;s nothing to configure. The cache is automatically invalidated when your source files change, when library dependencies are updated, when environment variables or command-line variables differ, or when you update &lt;strong&gt;RobotCode&lt;/strong&gt; itself. If something changes, the affected parts are re-analyzed — everything else comes straight from cache.&lt;/p&gt;
&lt;p&gt;Since this is a new feature, you can disable it if you run into any issues:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;robot.toml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;tool&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;robotcode-analyze&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;cache&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cache-namespaces &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;or via the CLI:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;analyze&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--no-cache-namespaces&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Multiple processes (the language server, CLI commands, parallel analyze runs) can safely access the cache at the same time thanks to file-level locking. No corruption, no conflicts.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;performance-the-numbers&quot;&gt;Performance: The Numbers&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Even without the cache, this release is noticeably faster. Here&apos;s what changed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;No more 30-minute hangs on large projects.&lt;/strong&gt; Robot Framework&apos;s &lt;code dir=&quot;auto&quot;&gt;variable_not_found&lt;/code&gt; runs a fuzzy &quot;Did you mean…?&quot; search on every unresolved variable — a nice idea, but O(n×m) over all variable candidates. For big projects (375+ files), this could freeze the analysis for over 30 minutes. &lt;strong&gt;RobotCode&lt;/strong&gt; now skips that search entirely since it never uses the suggestion text. Problem solved. (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/587&quot;&gt;#587&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Keyword matching is 94% faster.&lt;/strong&gt; The &lt;code dir=&quot;auto&quot;&gt;KeywordMatcher&lt;/code&gt; used to be instantiated from scratch on every lookup — about 7.5 million times per analysis run. It&apos;s now cached on the &lt;code dir=&quot;auto&quot;&gt;KeywordDoc&lt;/code&gt; itself. Combined with a new dict-based index in &lt;code dir=&quot;auto&quot;&gt;KeywordStore&lt;/code&gt;, keyword lookups went from linear scan to O(1) for non-embedded keywords. Overall analysis time dropped by &lt;strong&gt;22%&lt;/strong&gt; with &lt;strong&gt;31% fewer function calls&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;File resolution is 28% faster.&lt;/strong&gt; Swapping &lt;code dir=&quot;auto&quot;&gt;pathlib.Path&lt;/code&gt; for &lt;code dir=&quot;auto&quot;&gt;os.path&lt;/code&gt; string operations in the hot path of file resolution plus lazy-caching of valid &lt;code dir=&quot;auto&quot;&gt;sys.path&lt;/code&gt; entries cut warm-start wall time by nearly a third.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Less memory per document.&lt;/strong&gt; Each document used to keep two cached AST models. Now there&apos;s just one, saving around 200–500 KB per file. That adds up quickly in a big workspace.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Faster cache loading.&lt;/strong&gt; Cached namespace data now includes source hints that let &lt;strong&gt;RobotCode&lt;/strong&gt; skip expensive filesystem lookups (&lt;code dir=&quot;auto&quot;&gt;find_resource&lt;/code&gt;) when the cached paths still exist on disk. Cache entries use lazy deserialization — data blobs are only unpickled on actual cache hits, not on every lookup.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;ArgumentSpec.resolve()&lt;/code&gt; actually caches now.&lt;/strong&gt; A subtle bug caused &lt;code dir=&quot;auto&quot;&gt;RobotArgumentSpec&lt;/code&gt; to be recreated on every call (100K times per run) instead of being cached. Fixed — instantiation calls dropped by &lt;strong&gt;98.7%&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;smarter-code-completion-for-type-hints&quot;&gt;Smarter Code Completion for Type Hints&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;If you write Python libraries with type hints like &lt;code dir=&quot;auto&quot;&gt;Literal[&quot;fast&quot;, &quot;slow&quot;, &quot;auto&quot;]&lt;/code&gt;, &lt;strong&gt;RobotCode&lt;/strong&gt; now picks up on those and shows the allowed values directly in the completion list. This works for &lt;code dir=&quot;auto&quot;&gt;Union&lt;/code&gt; types containing &lt;code dir=&quot;auto&quot;&gt;Literal&lt;/code&gt; too, so &lt;code dir=&quot;auto&quot;&gt;Literal[&quot;x&quot;, &quot;y&quot;] | int&lt;/code&gt; will offer &lt;code dir=&quot;auto&quot;&gt;x&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;y&lt;/code&gt; as suggestions.&lt;/p&gt;
&lt;p&gt;No more switching to the library docs just to look up which string values a keyword accepts — the editor tells you right there.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;find-unused-keywords--variables-from-the-cli&quot;&gt;Find Unused Keywords &amp;#x26; Variables from the CLI&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Unused keywords and variables are the kind of thing that quietly accumulates in any project. &lt;strong&gt;RobotCode&lt;/strong&gt; can now detect them when running &lt;code dir=&quot;auto&quot;&gt;robotcode analyze code&lt;/code&gt; from the command line — great for CI pipelines or periodic cleanup sessions.&lt;/p&gt;
&lt;p&gt;Enable it in your &lt;code dir=&quot;auto&quot;&gt;robot.toml&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;tool&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;robotcode-analyze&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;collect-unused &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Or toggle it per invocation:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;analyze&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--collect-unused&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;analyze&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--no-collect-unused&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;full-control-over-the-analysis-cache&quot;&gt;Full Control over the Analysis Cache&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;A new &lt;code dir=&quot;auto&quot;&gt;robotcode analyze cache&lt;/code&gt; command group gives you visibility into what&apos;s cached and lets you manage it when needed:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;analyze&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cache&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;# where is the cache stored?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;analyze&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cache&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;info&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;# cache statistics, per-section breakdown&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;analyze&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cache&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;# list cached entries (supports glob filtering with -p)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;analyze&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cache&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clear&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# remove cached entries by section&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;robotcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;analyze&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cache&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;prune&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# wipe the entire cache&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;All output respects &lt;code dir=&quot;auto&quot;&gt;--format&lt;/code&gt; (text/json/toml) and &lt;code dir=&quot;auto&quot;&gt;--no-color&lt;/code&gt;, so it plays nicely with scripts and CI.&lt;/p&gt;
&lt;p&gt;You can also point the cache to a custom directory via the &lt;code dir=&quot;auto&quot;&gt;ROBOTCODE_CACHE_DIR&lt;/code&gt; environment variable. The VS Code extension automatically sets this in the integrated terminal, so your CLI commands and the language server always share the same cache without any manual setup.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;bug-fixes&quot;&gt;Bug Fixes&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Fixed cache validation for libraries imported via relative paths — no longer triggers unnecessary full rebuilds on warm start.&lt;/li&gt;
&lt;li&gt;Variable names with trailing &lt;code dir=&quot;auto&quot;&gt;=&lt;/code&gt; are now stripped correctly by the resource builder (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/546&quot;&gt;#546&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RobotCode&lt;/strong&gt; no longer overrides the &lt;code dir=&quot;auto&quot;&gt;source&lt;/code&gt; field on AST blocks when Robot Framework itself already sets it (&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues/588&quot;&gt;#588&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Fixed a race condition when accessing workspace language settings in multi-workspace setups.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;under-the-hood&quot;&gt;Under the Hood&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;A lot of internal work went into this release to prepare for future features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Workspace-wide reference index (ProjectIndex)&lt;/strong&gt; — &lt;strong&gt;RobotCode&lt;/strong&gt; now maintains an incrementally updated inverse index across your entire workspace. When a file changes, only its references are updated instead of scanning everything. This covers keywords, variables, namespace entries, keyword tags, testcase tags, and metadata. This is the foundation for upcoming features like unused import detection, import dependency visualization, and call hierarchy — stay tuned.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Namespace refactoring&lt;/strong&gt; — The old monolithic &lt;code dir=&quot;auto&quot;&gt;Namespace&lt;/code&gt; class has been split into a clean data container (&lt;code dir=&quot;auto&quot;&gt;Namespace&lt;/code&gt; DTO) built by a dedicated &lt;code dir=&quot;auto&quot;&gt;NamespaceBuilder&lt;/code&gt;, with separate modules for import resolution, AST analysis, variable scoping, and scope trees. This makes the codebase more maintainable and easier to extend.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;RF_VERSION&lt;/code&gt; constant&lt;/strong&gt; — All ~134 scattered &lt;code dir=&quot;auto&quot;&gt;get_robot_version()&lt;/code&gt; call sites have been replaced with a single module-level constant. All dead code for Robot Framework &amp;#x3C; 5.0 (which is no longer supported) has been removed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;JSON file watching&lt;/strong&gt; — &lt;code dir=&quot;auto&quot;&gt;.json&lt;/code&gt; files are now included in the watched file extensions, so changes to JSON-based configuration are picked up automatically.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Deprecated Robocop options removed&lt;/strong&gt; — Legacy robocop configuration options that were deprecated in earlier releases have been cleaned up.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;thank-you&quot;&gt;Thank You&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Thanks to everyone who reported issues, contributed ideas, and tested pre-release builds. Your feedback drives every release.&lt;/p&gt;
&lt;p&gt;For the full list of changes, see the &lt;a href=&quot;https://github.com/robotcodedev/robotcode/blob/main/CHANGELOG.md&quot;&gt;Changelog&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/robotcodedev/robotcode/issues&quot;&gt;Report issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/robotcodedev/robotcode/discussions&quot;&gt;Discussions &amp;#x26; Q&amp;#x26;A&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/robotcode&quot;&gt;Sponsor RobotCode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>release</category><category>performance</category><category>analysis</category><category>editor</category><category>cli</category></item></channel></rss>