ジェネラティブエージェンツの大嶋です。
「AIエージェントキャッチアップ #80 - agentOS」という勉強会を開催しました。
generative-agents.connpass.com
アーカイブ動画はこちらです。
agentOS
今回は、AIエージェントのためのポータブルなオペレーティングシステム「agentOS」をキャッチアップしました。
agentOSのGitHubリポジトリはこちらです。
Webサイトはこちらです。
ドキュメントはこちらです。
今回のポイント
agentOSとは
agentOSは、AIエージェントを実行するためのサンドボックスのOSSの1つです。
agentOSの環境は、仮想マシンやコンテナを起動することなく、プロセス内で実行されます。 そのため、起動の高速さやリソースのオーバーヘッドの少なさが特徴とされています。
環境の分離の技術としては、WebAssemblyとV8 isolateが採用されています。
分離された環境で、プロセス管理やファイルシステムなどの機能が仮想的に提供されるようになっています。
実際に動かしてみた
公式ドキュメントのQuickstartの内容を動かしてみました。
まず、サーバー側(server.ts)を実装します。
import common from '@rivet-dev/agent-os-common' import pi from '@rivet-dev/agent-os-pi' import 'dotenv/config' import { setup } from 'rivetkit' import { agentOs } from 'rivetkit/agent-os' const vm = agentOs({ options: { software: [common, pi] } }) export const registry = setup({ use: { vm } }) registry.start()
次に、クライアント側(client.ts)を実装します。
import 'dotenv/config' import { createClient } from 'rivetkit/client' import type { registry } from './server' const client = createClient<typeof registry>('http://localhost:6420') const agent = client.vm.getOrCreate(['my-agent']).connect() // Subscribe to streaming events agent.on('sessionEvent', (data) => { console.log(data.event) }) // Create a session and send a prompt const session = await agent.createSession('pi', { env: { ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY! } }) await agent.sendPrompt( session.sessionId, 'Write a hello world script to /home/user/hello.js' ) // Read the file the agent created const content = await agent.readFile('/home/user/hello.js') console.log(new TextDecoder().decode(content))
サーバーを起動して、クライアントを実行しました。
すると、エージェントの実行ログが表示され、エージェントが作成した/home/user/hello.jsの内容を確認できました。

デフォルトのファイルシステム
上記の例では、エージェントは/home/user/hello.jsというファイルを作成します。
デフォルトの設定では、インメモリのファイルシステムに書き込まれています。
設定次第でホストのディレクトリをマウントすることもできるようです。
agentOSの仮想ファイルシステム
一般論として、エージェントが行うファイルシステムの操作がWrite・Readのみであれば、仮想的なファイルシステムを提供するのは比較的難しくないでしょう。
問題は、コマンドを実行した場合でも整合性がとれる挙動をすることです。 コマンドの実行にも対応しようとすると、もはやファイルシステムを実装することになります。
agentOSはまさにそのようなアプローチをとっています。 ファイルシステムを実装することで、Write・Read・コマンド実行のすべてに対して、整合性がとれた挙動を提供しているのです。
具体的には、V8 isolateの環境に、agentOSが実装したプロセス管理やファイルシステムの機能を提供することで、ユーザー空間で仮想的にOSを提供しているようです。
coreutilsの追加
コマンドの実行に対してもうまく動くことを確認するため、coreutilsを追加した設定でエージェントを動かしてみました。
npm install @rivet-dev/agent-os-coreutils
server.tsで、coreutilsを使えるよう設定します。
import common, { coreutils } from '@rivet-dev/agent-os-common' : const vm = agentOs({ options: { software: [common, pi, coreutils] } }) :
client.tsで、作成したファイルをcatコマンドで読み込んでみます。
: const result = await agent.exec('cat /home/user/hello.js') console.log('--- hello.js ---') console.log(result) :
残念ながら、今回試した範囲ではcat: /home/user/hello.txt: Permission deniedというエラーでうまく動作しませんでした。
GitHubに同様のIssueがあがっているため、agent-osの問題のようでした。
ホストツール
coreutilsのコマンドの追加のように、agentOSではTypeScriptで実装したツールを環境にCLIとして提供する機能があるようです。
エージェントにツールとして設定するのではなく、自動でCLIツールを環境に配置するのは面白い実装だと思います。
次回のご案内
以上、今回は「agentOS」をキャッチアップしました。
次回は「AIエージェントキャッチアップ #81 - DeepEval」ということで、オープンソースのLLM評価フレームワークがテーマです!
generative-agents.connpass.com
ご興味・お時間ある方はぜひご参加ください!
また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!