<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
  <title>anoma.ly</title>
  <link>https://aggr.aymericbeaumet.com/sources/anoma.ly/</link>
  <description>Browse aymeric&#39;s, an independent, searchable archive of readable snapshots from followed feeds, preserved in Git with aggr.</description>
  <language>en</language>
  <atom:link href="https://aggr.aymericbeaumet.com/sources/anoma.ly/rss.xml" rel="self" type="application/rss+xml"/>
  <lastBuildDate>Wed, 14 Oct 2026 20:48:24 +0000</lastBuildDate>
  <generator>aggr</generator>
  <item>
    <title>OpenCode 2.0</title>
    <link>https://aggr.aymericbeaumet.com/items/hnrss-org/2026-10-14-opencode-2-0/</link>
    <guid isPermaLink="false">urn:aggr:item:e16349b9ad6491ec7ee12bb7539433304834859e</guid>
    <atom:link href="https://anoma.ly/notes/opencode-2-0/" rel="via" type="text/html"/>
    <pubDate>Wed, 14 Oct 2026 20:48:24 +0000</pubDate>
    <dc:creator>gmays</dc:creator>
    <description>OpenCode 2.0 is a major over haul. It draws on mil lions of daily users&#39; expe ri ence to deliver a system that can flex to every thing an agent needs to be. There are quite a lot of new fea tures, per for mance improve ments, and bug fixes…</description>
    <content:encoded>&lt;p&gt;OpenCode 2.0 is a major over haul. It draws on mil lions of daily users&#39; expe ri ence to deliver a system that can flex to every thing an agent needs to be. There are quite a lot of new fea tures, per for mance improve ments, and bug fixes but here are some of the more impact ful user-facing changes.&lt;/p&gt;
&lt;h2&gt;The Service&lt;/h2&gt;
&lt;p&gt;From the begin ning OpenCode adopted a client/server model. However, this was not some thing it took advan tage of by default and was mostly used by power users.&lt;/p&gt;
&lt;p&gt;In 2.0 this server now auto mat i cally runs as a single back ground process on your machine. When you open up a TUI, the web inter face or the desktop app they&#39;re all talking to the same central process.&lt;/p&gt;
&lt;p&gt;opencode pid 48213 Running&lt;/p&gt;
&lt;p&gt;Sessions&lt;/p&gt;
&lt;p&gt;Fix flaky test&lt;/p&gt;
&lt;p&gt;Add dark mode&lt;/p&gt;
&lt;p&gt;Review changes&lt;/p&gt;
&lt;p&gt;If you&#39;re using the pro gram matic client &lt;code&gt;@opencode/client&lt;/code&gt; to make your own scripts, they will autodis cover the local service and just work. This is par tic u larly useful for sched uled tasks. You can also call it via CLI by using &lt;code&gt;opencode&lt;/code&gt; &lt;code&gt;api&lt;/code&gt; com mands.&lt;/p&gt;
&lt;p&gt;You can expose it to other hosts and run &lt;code&gt;/pair&lt;/code&gt; or &lt;code&gt;opencode&lt;/code&gt; &lt;code&gt;pair&lt;/code&gt; to connect it to other appli ca tions. We have native apps in the works that take advan tage of this flow.&lt;/p&gt;
&lt;h2&gt;The API&lt;/h2&gt;
&lt;p&gt;The old API grew hap haz ardly as we and the world col lec tively learned what agents are and should be. It was bad.&lt;/p&gt;
&lt;p&gt;We started from scratch and exam ined all the weird use cases across the mil lions of users who use OpenCode every day. It now sup ports nearly any thing you need to be able to do.&lt;/p&gt;
&lt;p&gt;OpenCode is also aware of its own API and will call it to do useful things like moving the current session into a git work tree when start ing new work.&lt;/p&gt;
&lt;p&gt;SessionNew session&lt;/p&gt;
&lt;p&gt;OpenCode&lt;/p&gt;
&lt;p&gt;~/app&lt;/p&gt;
&lt;p&gt;Fix flaky upload test interrupted&lt;/p&gt;
&lt;p&gt;Migrate config loader tab closed&lt;/p&gt;
&lt;p&gt;New session this session&lt;/p&gt;
&lt;p&gt;~/worktrees/rate-limit&lt;/p&gt;
&lt;p&gt;We&#39;ve also shipped a new client package &lt;code&gt;@opencode/client&lt;/code&gt; that con tains clients for vanilla JavaScript as well as Effect.&lt;/p&gt;
&lt;p&gt;review.ts&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;code-snippet&quot; data-language=&quot;JavaScript&quot;&gt;&lt;span class=&quot;syntax-source syntax-js&quot;&gt;&lt;span class=&quot;syntax-meta syntax-import syntax-js&quot;&gt;&lt;span class=&quot;syntax-keyword syntax-control syntax-import-export syntax-js&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;syntax-meta syntax-block syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-block syntax-js&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;syntax-variable syntax-other syntax-readwrite syntax-js&quot;&gt;OpenCode&lt;/span&gt; &lt;span class=&quot;syntax-punctuation syntax-section syntax-block syntax-js&quot;&gt;}&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;syntax-keyword syntax-control syntax-import-export syntax-js&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;syntax-string syntax-quoted syntax-double syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-definition syntax-string syntax-begin syntax-js&quot;&gt;&amp;quot;&lt;/span&gt;@opencode/client&lt;span class=&quot;syntax-punctuation syntax-definition syntax-string syntax-end syntax-js&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-import syntax-js&quot;&gt;&lt;span class=&quot;syntax-keyword syntax-control syntax-import-export syntax-js&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;syntax-meta syntax-block syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-block syntax-js&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;syntax-variable syntax-other syntax-readwrite syntax-js&quot;&gt;Service&lt;/span&gt; &lt;span class=&quot;syntax-punctuation syntax-section syntax-block syntax-js&quot;&gt;}&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;syntax-keyword syntax-control syntax-import-export syntax-js&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;syntax-string syntax-quoted syntax-double syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-definition syntax-string syntax-begin syntax-js&quot;&gt;&amp;quot;&lt;/span&gt;@opencode/client/service&lt;span class=&quot;syntax-punctuation syntax-definition syntax-string syntax-end syntax-js&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;

&lt;/span&gt;&lt;span class=&quot;syntax-storage syntax-type syntax-js&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;syntax-variable syntax-other syntax-readwrite syntax-js&quot;&gt;endpoint&lt;/span&gt; &lt;span class=&quot;syntax-keyword syntax-operator syntax-assignment syntax-js&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;syntax-variable syntax-other syntax-readwrite syntax-js&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;syntax-variable syntax-other syntax-object syntax-js&quot;&gt;Service&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-accessor syntax-js&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-method syntax-js&quot;&gt;&lt;span class=&quot;syntax-variable syntax-function syntax-js&quot;&gt;ensure&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-group syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-group syntax-js&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-group syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-group syntax-js&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;syntax-storage syntax-type syntax-js&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;syntax-variable syntax-other syntax-readwrite syntax-js&quot;&gt;client&lt;/span&gt; &lt;span class=&quot;syntax-keyword syntax-operator syntax-assignment syntax-js&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;syntax-variable syntax-other syntax-object syntax-js&quot;&gt;OpenCode&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-accessor syntax-js&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-method syntax-js&quot;&gt;&lt;span class=&quot;syntax-variable syntax-function syntax-js&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-group syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-group syntax-js&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-object-literal syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-block syntax-js&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;syntax-meta syntax-object-literal syntax-key syntax-js&quot;&gt;baseUrl&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-separator syntax-key-value syntax-js&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;syntax-variable syntax-other syntax-object syntax-js&quot;&gt;endpoint&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-accessor syntax-js&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property syntax-object syntax-js&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-separator syntax-comma syntax-js&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;syntax-meta syntax-object-literal syntax-key syntax-js&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-separator syntax-key-value syntax-js&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;syntax-variable syntax-other syntax-object syntax-js&quot;&gt;Service&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-accessor syntax-js&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-method syntax-js&quot;&gt;&lt;span class=&quot;syntax-variable syntax-function syntax-js&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-group syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-group syntax-js&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-variable syntax-other syntax-readwrite syntax-js&quot;&gt;endpoint&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-group syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-group syntax-js&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-separator syntax-comma syntax-js&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;syntax-punctuation syntax-section syntax-block syntax-js&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-group syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-group syntax-js&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;syntax-storage syntax-type syntax-js&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;syntax-variable syntax-other syntax-readwrite syntax-js&quot;&gt;session&lt;/span&gt; &lt;span class=&quot;syntax-keyword syntax-operator syntax-assignment syntax-js&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;syntax-variable syntax-other syntax-readwrite syntax-js&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;syntax-variable syntax-other syntax-object syntax-js&quot;&gt;client&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-accessor syntax-js&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property syntax-object syntax-js&quot;&gt;session&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-accessor syntax-js&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-method syntax-js&quot;&gt;&lt;span class=&quot;syntax-variable syntax-function syntax-js&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-group syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-group syntax-js&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-object-literal syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-block syntax-js&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;syntax-meta syntax-object-literal syntax-key syntax-js&quot;&gt;location&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-separator syntax-key-value syntax-js&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;syntax-meta syntax-object-literal syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-block syntax-js&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;syntax-meta syntax-object-literal syntax-key syntax-js&quot;&gt;directory&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-separator syntax-key-value syntax-js&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;syntax-meta syntax-function-call syntax-method syntax-js&quot;&gt;&lt;span class=&quot;syntax-support syntax-type syntax-object syntax-process syntax-js&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-accessor syntax-js&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;syntax-support syntax-function syntax-process syntax-js&quot;&gt;cwd&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-group syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-group syntax-js&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-group syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-group syntax-js&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;syntax-punctuation syntax-section syntax-block syntax-js&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-separator syntax-comma syntax-js&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;syntax-punctuation syntax-section syntax-block syntax-js&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-group syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-group syntax-js&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;syntax-keyword syntax-control syntax-flow syntax-js&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;syntax-variable syntax-other syntax-object syntax-js&quot;&gt;client&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-accessor syntax-js&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property syntax-object syntax-js&quot;&gt;session&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-accessor syntax-js&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-method syntax-js&quot;&gt;&lt;span class=&quot;syntax-variable syntax-function syntax-js&quot;&gt;prompt&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-group syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-group syntax-js&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-object-literal syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-block syntax-js&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;syntax-meta syntax-object-literal syntax-key syntax-js&quot;&gt;sessionID&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-separator syntax-key-value syntax-js&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;syntax-variable syntax-other syntax-object syntax-js&quot;&gt;session&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-accessor syntax-js&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property syntax-object syntax-js&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-separator syntax-comma syntax-js&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;syntax-meta syntax-object-literal syntax-key syntax-js&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-separator syntax-key-value syntax-js&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;syntax-string syntax-quoted syntax-double syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-definition syntax-string syntax-begin syntax-js&quot;&gt;&amp;quot;&lt;/span&gt;Review the current changes&lt;span class=&quot;syntax-punctuation syntax-definition syntax-string syntax-end syntax-js&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-separator syntax-comma syntax-js&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;syntax-punctuation syntax-section syntax-block syntax-js&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-group syntax-js&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-group syntax-js&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Code Mode&lt;/h2&gt;
&lt;p&gt;The models love to write code and OpenCode 2.0 takes advan tage of that more than any other coding agent. We&#39;ve built a minimal JavaScript inter preter in the &lt;code&gt;@opencode/codemode&lt;/code&gt; package.&lt;/p&gt;
&lt;p&gt;Session&lt;/p&gt;
&lt;p&gt;Code Mode&lt;/p&gt;
&lt;p&gt;MCP servers&lt;/p&gt;
&lt;p&gt;github&lt;/p&gt;
&lt;p&gt;linear&lt;/p&gt;
&lt;p&gt;sentry&lt;/p&gt;
&lt;p&gt;This package ingests MCP servers or OpenAPI end points, con vert ing them into func tions that the agent can call in a script. It can run these scripts natively without the com plex ity of Node.js VMs or embed ding com pli cated solu tions like QuickJS.&lt;/p&gt;
&lt;p&gt;This lets your agent write scripts that can do things like call a tool, map over the results and call another tool. Single round trip instead of calling them one at a time.&lt;/p&gt;
&lt;p&gt;All MCP servers in 2.0 are opted into code mode by default. This means you can add a thou sand of them with minimal context bloat and your agent will dis cover and compose them to get things done.&lt;/p&gt;
&lt;h2&gt;Background Tasks&lt;/h2&gt;
&lt;p&gt;The latest batch of models are incred i bly good at orches tra tion and it is impor tant for har nesses to let them express the full extent of that capa bil ity.&lt;/p&gt;
&lt;p&gt;Session&lt;/p&gt;
&lt;p&gt;Background&lt;/p&gt;
&lt;p&gt;First, we&#39;ve added back ground sub agents. This allows the primary agent to kick off some work to another one while it con tin ues.&lt;/p&gt;
&lt;p&gt;This happens auto mat i cally but you can also trigger it man u ally - even with a dif fer ent model. It lets you do things like “spawn a back ground fable sub agent to review this code” while you keep prompt ing.&lt;/p&gt;
&lt;p&gt;Second, we&#39;ve added back ground shell com mands. The shell tool can be invoked asyn chronously so long-running work does not have to block the primary agent. It&#39;ll be noti fied when things are com plete.&lt;/p&gt;
&lt;p&gt;If any fore ground shell command or sub agent takes longer than you expect, you can hit a hotkey to move them to the back ground so you can keep prompt ing.&lt;/p&gt;
&lt;h2&gt;Plugins&lt;/h2&gt;
&lt;p&gt;Although OpenCode 1.0 had a plugin system, it never got the atten tion it needed. To correct that, we forced our selves to imple ment nearly every OpenCode 2.0 feature as an inter nal plugin and there are now 80+ of them. This guar an tees that the Plugin API stays well main tained.&lt;/p&gt;
&lt;p&gt;We&#39;ve also pro moted TUI plugins from exper i men tal to stable. Since it is all powered by OpenTUI, you can build nearly any thing. Here is an example of some thing useless.&lt;/p&gt;
&lt;p&gt;We also spent quite a lot of time ensuring everything in OpenCode 2.0 can be hot-reloaded. So it can write a plugin for itself mid-session and use it right away - we covered the design of this in a &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://anoma.ly/notes/opencode-reloaded&quot;&gt;previous blogpost&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can ask OpenCode to build whatever plugin you want and it knows how to. But if you do want to read the docs, they are available &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://opencode.ai/v2/docs/build/plugins&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;The SDK&lt;/h2&gt;
&lt;p&gt;OpenCode can also now be used as a library with the &lt;code&gt;@opencode/sdk&lt;/code&gt; package. This is the exact same code that powers our CLI.&lt;/p&gt;
&lt;p&gt;This means you can strip it down and make your own flavor of OpenCode that runs on a server or in spe cial ized envi ron ments like Durable Objects. And then you can connect to it from any OpenCode client since it speaks the stan dard OpenCode server pro to col.&lt;/p&gt;
&lt;p&gt;It also has an optional Effect-based API.&lt;/p&gt;
&lt;p&gt;This one is still in development as things are shifting but you can &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://opencode.ai/v2/docs/build/sdk&quot;&gt;already use it&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Upgrading&lt;/h2&gt;
&lt;p&gt;To upgrade the CLI, make sure you&#39;re on the latest 1.x release, then run &lt;code&gt;opencode&lt;/code&gt; &lt;code&gt;upgrade&lt;/code&gt; &lt;code&gt;--major&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To upgrade your desktop app, download the latest &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://opencode.ai/download&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There are some break ing changes.&lt;/p&gt;
&lt;p&gt;1.0 plugins will not work in 2.0&lt;/p&gt;
&lt;p&gt;Server API is completely different&lt;/p&gt;
&lt;p&gt;tui.json config is moved to json&lt;/p&gt;
&lt;p&gt;There are a lot of other changes but they are backwards compatible. It is worth pointing OpenCode at &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://opencode.ai/v2/docs/migrate-v1/&quot;&gt;this doc&lt;/a&gt; so it can migrate things for you.&lt;/p&gt;
</content:encoded>
    <category>news</category>
  </item>
</channel>
</rss>
