<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sergio Ramírez</title>
    <description>The latest articles on DEV Community by Sergio Ramírez (@seradotcom).</description>
    <link>https://dev.to/seradotcom</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4169875%2Fd16054f6-1a46-4f10-a28e-6cae7cc5b85e.png</url>
      <title>DEV Community: Sergio Ramírez</title>
      <link>https://dev.to/seradotcom</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/seradotcom"/>
    <language>en</language>
    <item>
      <title>I built Semwright to let AI agents work across desktop applications</title>
      <dc:creator>Sergio Ramírez</dc:creator>
      <pubDate>Wed, 07 Oct 2026 22:25:19 +0000</pubDate>
      <link>https://dev.to/seradotcom/i-built-semwright-to-let-ai-agents-work-across-desktop-applications-55n</link>
      <guid>https://dev.to/seradotcom/i-built-semwright-to-let-ai-agents-work-across-desktop-applications-55n</guid>
      <description>&lt;p&gt;For one of Semwright's demos, I started with an existing aircraft project in Blender. The workflow updates materials, adjusts the camera, renders a new shot, creates animated titles with Motion Canvas, and assembles everything with MLT.&lt;/p&gt;

&lt;p&gt;The result is a finished video, along with an editable timeline. You can still change the timing, replace footage, adjust the audio, or continue working on the project afterward.&lt;/p&gt;

&lt;p&gt;That's an important part of what I wanted to build. The goal isn't just to get an agent to produce an output, but to let it work with real software and leave behind something you can actually keep working on.&lt;/p&gt;

&lt;p&gt;I've been building &lt;strong&gt;Semwright&lt;/strong&gt;, an open-source runtime written in Rust that connects AI agents to desktop and professional applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/seradotcom/semwright/releases/download/v1.0.0/semwright-demo-60s-audio-r03.mp4" rel="noopener noreferrer"&gt;Watch the 60-second demo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Working with the application itself
&lt;/h2&gt;

&lt;p&gt;Take something simple, like asking an agent to change a material in Blender.&lt;/p&gt;

&lt;p&gt;With screenshot-based automation, the agent has to find the right object, navigate the interface, locate the material settings, and interact with the controls.&lt;/p&gt;

&lt;p&gt;But Blender already has an API for working with scenes, materials, cameras, and objects directly.&lt;/p&gt;

&lt;p&gt;Semwright takes advantage of that.&lt;/p&gt;

&lt;p&gt;It uses application-specific drivers to expose structured operations to agents. Instead of figuring out where to click, an agent can request an operation against the application's actual data model.&lt;/p&gt;

&lt;p&gt;The runtime handles permissions, execution, and reading back application state where supported.&lt;/p&gt;

&lt;p&gt;This means rearranging Blender's interface doesn't affect operations that use its API. And since the driver exposes a defined set of capabilities, the agent doesn't need unrestricted access to the application.&lt;/p&gt;

&lt;p&gt;I've built integrations for Blender, Godot, Figma, LibreOffice, OBS, Motion Canvas, MLT, KiCad, and audio tools including Ardour and Faust. There's also a Chromium adapter.&lt;/p&gt;

&lt;p&gt;The integrations have different scopes, but they follow the same underlying architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  What about MCP?
&lt;/h2&gt;

&lt;p&gt;This is probably the easiest place to misunderstand what Semwright does.&lt;/p&gt;

&lt;p&gt;MCP is a protocol that lets AI applications discover and interact with tools, resources, and other external capabilities. It's useful, and Semwright supports it.&lt;/p&gt;

&lt;p&gt;But connecting an agent to a tool and managing what happens inside the software are two different problems.&lt;/p&gt;

&lt;p&gt;For example, you could build a Blender MCP server that exposes a &lt;code&gt;change_material&lt;/code&gt; tool. The agent can discover it and call it.&lt;/p&gt;

&lt;p&gt;What happens behind that tool is up to its implementation.&lt;/p&gt;

&lt;p&gt;How do you identify the correct object? What is the agent allowed to modify? How do you know the material actually changed? What happens to the resulting asset when another application needs it?&lt;/p&gt;

&lt;p&gt;You can implement all of that in an MCP server. Semwright's approach is to provide those common mechanisms in one runtime, rather than rebuilding them separately for every integration.&lt;/p&gt;

&lt;p&gt;With Semwright, MCP can be the interface the agent uses to send requests. Behind it, the runtime applies policy, dispatches operations through drivers, tracks references and artifacts, and checks observable results.&lt;/p&gt;

&lt;p&gt;The same runtime can also be accessed through other interfaces, including the CLI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So Semwright isn't an alternative to MCP. It's the execution layer behind the tools an agent uses.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting multiple applications to work together
&lt;/h2&gt;

&lt;p&gt;This is where things started getting more interesting.&lt;/p&gt;

&lt;p&gt;Blender understands its own scenes and objects. Motion Canvas handles animation. MLT works with video timelines.&lt;/p&gt;

&lt;p&gt;Each application has its own data model, files, and way of doing things.&lt;/p&gt;

&lt;p&gt;In the aircraft demo, the Blender output becomes an input to the video workflow. Motion Canvas generates the titles, and MLT assembles everything into the final project.&lt;/p&gt;

&lt;p&gt;Semwright provides a common layer for those operations and artifact handoffs.&lt;/p&gt;

&lt;p&gt;There are two parts of the architecture worth mentioning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Graph&lt;/strong&gt; keeps track of resource identities, relationships, and dependencies. It provides context about how different parts of a project relate to each other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Effects&lt;/strong&gt; helps distinguish between what an agent requested and what could actually be verified afterward.&lt;/p&gt;

&lt;p&gt;For example, a command returning successfully doesn't necessarily mean the intended object was modified or the correct file was produced.&lt;/p&gt;

&lt;p&gt;Being able to inspect the resulting application state matters, especially when the next operation depends on it.&lt;/p&gt;

&lt;p&gt;The drivers handle application-specific details, while the runtime provides common behavior across them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not just use the application's API directly?
&lt;/h2&gt;

&lt;p&gt;You absolutely can. In fact, that's what many Semwright drivers do internally.&lt;/p&gt;

&lt;p&gt;If you're writing a one-off Blender script, there's no reason to introduce another runtime just to change a material.&lt;/p&gt;

&lt;p&gt;But when you start building agent workflows across several applications, you end up dealing with many of the same problems repeatedly: permissions, application state, references, dependencies, artifact transfers, and checking what actually happened.&lt;/p&gt;

&lt;p&gt;If you switch agents or add another application, you shouldn't have to rebuild all of that infrastructure.&lt;/p&gt;

&lt;p&gt;That's the idea behind Semwright.&lt;/p&gt;

&lt;p&gt;You integrate an application through a driver, and compatible agents can use its supported capabilities through the same runtime and authorization model.&lt;/p&gt;

&lt;p&gt;The repository also includes a Driver SDK for developing integrations and a Native SDK for applications that want deeper cooperation with their own state and transactions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open source
&lt;/h2&gt;

&lt;p&gt;Semwright v1.0.0 is now available, along with the source code, documentation, SDKs, and demos.&lt;/p&gt;

&lt;p&gt;I'm continuing to expand the application integrations and work on more advanced cross-app workflows, including preserving existing project state and improving recovery when part of a workflow fails.&lt;/p&gt;

&lt;p&gt;There's a lot of interesting work in making agents useful beyond a single application, particularly when the output needs to remain editable and usable by someone afterward.&lt;/p&gt;

&lt;p&gt;You can explore the project here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/seradotcom/semwright" rel="noopener noreferrer"&gt;GitHub — seradotcom/semwright&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'd be interested to hear what applications people are currently automating, especially if you're connecting several of them together. I'm also curious how others are handling shared state and verification across their agent tools. &lt;/p&gt;

&lt;p&gt;Thanks for reading. :)&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>ai</category>
      <category>rust</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
