Subako Functions
自分で書いた Tool を、Subako が WebAssembly で実行します。
Agent がどれだけ役に立つかは、何にアクセスできるかで決まります。既存のシステムには MCP サーバーでつなげますが、Subako Functions は、まだどこにもない Tool を用意するためのものです。たとえば、このファイルを解析する、あのスプレッドシートを作る、チームと同じ手順で請求 API を呼び出す、注文を自社のルールで検証する、といった Tool です。
Function package は、WebAssembly Module と短い Manifest からなります。Workspace にアップロードして Agent のバージョンに付与すれば、Module が提供する Tool はすべて Agent から呼び出せるようになります。Subako は呼び出しのたびに、Session のそばにある専用の Sandbox でそれを実行します。Session のファイルはすぐ手の届くところにあり、ネットワークには許可した範囲でしか接続できません。

Function を使う理由
- サーバーの運用が不要。 デプロイもスケールも保守も要りません。Subako が呼び出しのたびに Module を起動し、終われば停止します。
- 好きな言語で書ける。 Rust、TypeScript、Go の SDK を使えば、普通の関数がそのまま Tool になり、入力 Schema も型から生成されます。ほかの言語でも、WASI preview 1 向けにビルドできれば ABI を直接使えます。
- デフォルトで隔離。 Grant でネットワークを与えない限り、呼び出しはネットワークを使えません。与えた場合も、接続できるのは許可した公開
httpsHost だけです。Credential は外向きのリクエストに Session の Vault から付与されるので、Module の目に触れることはありません。 - データをコンテキストに載せない。 Function は Session の Session Volume にあるファイルを直接扱うので、大きなドキュメントやエクスポートをモデルに通す必要がありません。詳しくは次の節で説明します。
- 独自のファイルを同梱できる。 Package には、テンプレート、フォント、参照データなどの Asset を含められます。Asset はどの呼び出しからも
/packageで読めます。 - Agent と一緒にバージョン管理。 アップロードするたびに、変更できない新しいバージョンが作られます。Agent のバージョンからは、特定のバージョンに固定することも、常に最新を使うこともできます。修正を公開しても、実行中の Session には影響しません。
コンテキストを埋めずにデータを扱う
Tool が返したものは、すべてモデルの前に置かれます。モデルのコンテキストには限りがあり、しかもトークン単位で課金されます。200 ページの契約書や 1 年分の注文のエクスポート、リポジトリ全体をコンテキストに読み込む Agent は、すぐに余地を使い果たすか、一度見れば十分だったデータを何度も読み直して予算の大半を使ってしまいます。
Function は、データをファイルのまま扱うことでこの問題を避けます。Function を使う Session には、必ず Session Volume があります。Session の Function が共有するファイルシステムで、アプリやコンソールの利用者も読み書きできます。Function は入力を Volume から読み、出力を Volume に書き戻します。モデルが受け取るのは、パス、件数、要約、重要な 3 行など、次の一手を決めるのに必要な情報だけです。
- anydoc は長い PDF を Volume 上の Markdown ファイルに変換します。Agent はそのファイルを
filesで検索し、該当するセクションだけを読みます。 - Function が 50 MB のエクスポートを
/volume/tmpに直接ダウンロードして集計し、合計だけを返します。エクスポートそのものは会話に入りません。 - ある Function の出力ファイルを次の Function の入力にできます。取得、変換、分析、レンダリングと処理が続いても、データはモデルを介さずに Tool から Tool へ渡ります。
ファイルは呼び出しが終わっても残ります。人は Session の Session Volume タブから結果をダウンロードでき、アプリは API で読み取れます。
Function か Sandbox か
Sandbox は Agent に Linux マシンを丸ごと与え、Agent が書いたコマンドを何でも実行します。一方 Function は、自分で書いたコードを呼び出しごとに新しい Sandbox で実行します。ネットワークは Grant しない限り使えず、Credential は Vault に保管されたままです。Function のほうが安全で、費用も抑えられます (課金されるのは呼び出しの実行中だけです)。結果は Session Volume に置かれるので、ほかのどの Tool からも使えます。Sandbox は、コードベースのビルドやテストのように本物の Linux ユーザーランドが必要な作業に限って使ってください。Sandbox のページでは両者を比較し、Python、シェルスクリプト、JavaScript、ドキュメントをすでに扱える Function を紹介しています。
全体の流れ
Package をビルドする
SDK で Tool を書いて module.wasm にビルドし、Package の名前を記した subako-package.json と並べて置きます。サンプル のどれかをビルドしてもかまいません。独自の Package を書く では、各言語のテンプレートから始める方法を説明しています。
Workspace にアップロードする
コンソールの Function ページから、または subako function create でアップロードします。Subako は Module を一度実行して提供される Tool を読み取り、Parameter とともに表示します。
Agent に付与する
Agent のバージョンの編集画面にある Function package で、使うバージョン、1 回の呼び出しの実行時間の上限、接続できる Host、渡す Credential、呼び出し前に承認を求めるかどうかを設定します。詳しくは Function の付与 を参照してください。
Agent が呼び出す
モデルは各 Tool の名前、説明、入力 Schema を受け取り、ほかの Tool と同じように呼び出します。Session の会話には、呼び出しとその引数、返された結果が表示されます。
Platform package
次の 2 つの Package は Subako に付属しており、アップロードは不要です。
| Package | 機能 |
|---|---|
files |
Session Volume のファイルを一覧、読み取り、検索、書き込み、移動、削除します。読み込んだ画像はモデルに見せます。 |
http |
Grant で許可したネットワークと Credential の範囲で HTTP リクエストを送ります。リクエストやレスポンスのボディに Volume のファイルを使えます。 |
付与のしかたは自分の Package と同じです。詳しくは Platform package を参照してください。