プログラミング
OpenCode 2.0
要約
OpenCode 2.0は、数百万人の日々のユーザー体験に基づいた大規模なオーバーホールです。エージェントが必要とするあらゆるものに対応できる柔軟なシステムを提供します。クライアント/サーバーモデルがバックグラウンドプロセスとして自動実行されるようになり、APIはゼロから再設計されました。また、JavaScriptインタープリターを内蔵した「Code Mode」、バックグラウンドタスク(サブエージェントやシェルコマンド)、豊富なプラグインシステム、SDKによるライブラリとしての利用などが強化されています。
全文翻訳
OpenCode 2.0は、大規模なオーバーホールです。数百万人の日々のユーザー体験に基づき、エージェントが必要とするあらゆるものに対応できる柔軟なシステムを提供します。多くの新機能、パフォーマンス改善、バグ修正がありますが、ここではユーザーに最も影響を与える変更点をいくつか紹介します。
サービス
当初からOpenCodeはクライアント/サーバーモデルを採用していましたが、デフォルトではそれを活用しておらず、主にパワーユーザーによって使用されていました。2.0では、このサーバーが自動的に単一のバックグラウンドプロセスとして実行されます。TUI、Webインターフェース、デスクトップアプリを開くと、すべて同じ中央プロセスと通信します。
Terminal
Flaky testの修正
Web
Flaky testの修正
Desktop
ダークモードの追加
review.ts
変更のレビュー
opencodepid 48213
Stopped
Starting
Running
Sessions
Flaky testの修正
ダークモードの追加
レビュー変更
プログラム的なクライアント@opencode/clientを使用して独自のスクリプトを作成している場合、ローカルサービスを自動検出してそのまま動作します。これは特にスケジュールされたタスクに便利です。opencode apiコマンドを使用してCLIから呼び出すこともできます。他のホストに公開して、/pairまたはopencode pairを呼び出して他のアプリケーションに接続することもできます。このフローを活用するネイティブアプリも開発中です。
API
古いAPIは、私たちと世界がエージェントとは何か、そしてあるべきかを collectively に学んでいく中で、場当たり的に成長しました。それは悪かったです。
私たちはゼロから始め、毎日OpenCodeを使用する数百万人のユーザーの奇妙なユースケースをすべて調査しました。今では、あなたがやりたいことのほぼすべてをサポートしています。
OpenCodeは自身のAPIも認識しており、新しい作業を開始する際に現在のセッションをgit worktreeに移動するなどの便利な操作を行うためにそれを呼び出します。
Session
New session
YOU
新しいworktreeでアップロードのレート制限を開始します。
execute{ code }
›opencode.worktree_create[name=rate-limit]
›opencode.session_rename[title=Rate limit uploads]
›opencode.session_move[directory=~/worktrees/rate-limit]
YOU
Flaky testセッションがスタックしています。停止して、テストを隔離し、完了したタブを閉じます。
execute{ code }
›opencode.session_list
›opencode.session_context[sessionID=ses_7c41e09a]
└ "Retrying uploads.test.ts again…"
execute{ code }
›opencode.session_interrupt[sessionID=ses_7c41e09a]
›opencode.session_prompt[sessionID=ses_7c41e09a, text=Quarantine uploads.test.ts]
›opencode.tab_close[sessionID=ses_2f9d61b4]
停止し、テストを隔離するように指示し、設定タブを閉じました。
OpenCode
~/app
Flaky upload testの修正
interrupted
config loaderの移行
tab closed
New session
this session
~/worktrees/rate-limit
バニラJavaScriptおよびEffect用のクライアントを含む新しいクライアントパッケージ@opencode/clientも出荷しました。
review.ts
import { OpenCode } from "@opencode/client"
import { Service } from "@opencode/client/service"
const endpoint = await Service.ensure()
const client = OpenCode.make({
baseUrl: endpoint.url,
headers: Service.headers(endpoint),
})
const session = await client.session.create({
location: { directory: process.cwd() },
})
await client.session.prompt({
sessionID: session.id,
text: "Review the current changes",
})
Code Mode
モデルはコードを書くのが大好きで、OpenCode 2.0はそれを他のどのコーディングエージェントよりも活用します。私たちは@opencode/codemodeパッケージに最小限のJavaScriptインタープリターを構築しました。
Session
YOU
LinearでGitHubのバグをファイルしてください。
execute{ code }
tools.github.list_issuestools.linear.save_issue
execute{ code }
["OC-412", "OC-413", "OC-414"]
Code Mode
return [
search({ query: "list github issues" }),
search({ query: "create linear issue" }),
]
const { issues } = await tools.github.list_issues({
owner: "anomalyco",
repo: "opencode",
labels: ["bug"],
state: "OPEN",
})
const filed = await Promise.all(
issues.map(({ title }) => tools.linear.save_issue({ team: "OC", title }))
)
return filed.map((issue) => issue.identifier)
MCP servers
github
linear
sentry
このパッケージは、MCPサーバーまたはOpenAPIエンドポイントを取り込み、エージェントがスクリプトで呼び出せる関数に変換します。Node.js VMの複雑さやQuickJSのような複雑なソリューションを埋め込むことなく、ネイティブでこれらのスクリプトを実行できます。
これにより、エージェントはツールを呼び出し、結果をマップして別のツールを呼び出すといったことができるスクリプトを書くことができます。一度に1つずつ呼び出すのではなく、単一のラウンドトリップで実行できます。
2.0のすべてのMCPサーバーはデフォルトでcodemodeがオプトインされています。これは、コンテキストの肥大化を最小限に抑えながら数千を追加でき、エージェントがそれらを発見して組み合わせてタスクを完了できることを意味します。
バックグラウンドタスク
最新のモデルはオーケストレーションに非常に優れており、ハーネスがその能力を最大限に発揮できるようにすることが重要です。
Session
YOU
このコードをレビューするために、バックグラウンドのfableサブエージェントを起動します。
subagent
review this code
fable
background
2 comments
$shell
bun test
background
148 passed
editsrc/retry.ts
+12
$shell
bun run build
background
done
変更が完了しました。レビューで2件のコメント、148件のテストがパスし、ビルドが成功し、変更ログが更新されました。
Background
review this code
fable
$bun test
$bun run build
ctrlb
まず、バックグラウンドサブエージェントを追加しました。これにより、プライマリエージェントが別のエージェントに作業をオフロードし、自身は続行できます。
これは自動的に発生しますが、手動でトリガーすることもできます。異なるモデルを使用することも可能です。「このコードをレビューするためにバックグラウンドのfableサブエージェントを起動して」のように、プロンプトを続けながら実行できます。
次に、バックグラウンドシェルコマンドを追加しました。シェルツールは非同期で呼び出すことができるため、長時間実行される作業がプライマリエージェントをブロックする必要がなくなります。完了すると通知されます。
フォアグラウンドのシェルコマンドまたはサブエージェントが予想よりも長くかかる場合は、ホットキーを押してバックグラウンドに移動させ、プロンプトを続けることができます。
プラグイン
OpenCode 1.0にはプラグインシステムがありましたが、十分な注目を集めることはありませんでした。これを是正するために、私たちはOpenCode 2.0のほぼすべての機能を内部プラグインとして実装することを余儀なくされ、現在80以上のプラグインがあります。これにより、Plugin APIが適切にメンテナンスされることが保証されます。
また、TUIプラグインを実験段階から安定版に昇格させました。すべてOpenTUIによって駆動されるため、ほぼ何でも構築できます。ここに無用なものの例を示します。
また、OpenCode 2.0のすべての機能をホットリロードできるようにするためにかなりの時間を費やしました。これにより、セッション中に自身のためにプラグインを書き、すぐに使用することができます。この設計については以前のブログ記事でカバーしました。
OpenCodeに任意のプラグインを構築するように依頼でき、それはその方法を知っています。ドキュメントを読みたい場合は、こちらで入手できます。
SDK
OpenCodeは、@opencode/sdkパッケージを使用してライブラリとしても使用できるようになりました。これは、CLIを駆動するのと同じコードです。
これにより、それを削減して独自のOpenCodeフレーバーを作成し、サーバーまたはDurable Objectsのような特殊な環境で実行できます。そして、標準のOpenCodeサーバープロトコルを話すため、任意のOpenCodeクライアントから接続できます。
オプションでEffectベースのAPIも提供しています。
これはまだ開発中ですが、すでに使用できます。
アップグレード
CLIをアップグレードするには、最新の1.xリリースを使用していることを確認し、opencode upgrade --majorを実行します。デスクトップアプリをアップグレードするには、こちらから最新版をダウンロードしてください。
いくつかの破壊的変更があります。
1.0プラグインは2.0では動作しません
サーバーAPIは完全に異なります
tui.json設定はjsonに移動しました
他にも多くの変更がありますが、それらは後方互換性があります。OpenCodeにこのドキュメントを指し示して、それ自身で移行できるようにすると良いでしょう。
OpenCode 2.0は、大規模なオーバーホールです。数百万人の日々のユーザー体験に基づき、エージェントが必要とするあらゆるものに対応できる柔軟なシステムを提供します。多くの新機能、パフォーマンス改善、バグ修正がありますが、ここではユーザーに最も影響を与える変更点をいくつか紹介します。
当初からOpenCodeはクライアント/サーバーモデルを採用していましたが、デフォルトではそれを活用しておらず、主にパワーユーザーによって使用されていました。2.0では、このサーバーが自動的に単一のバックグラウンドプロセスとして実行されます。When