メインコンテンツまでスキップ

Codemode

Codemodeでは、モデルがJavaScriptプログラム内でツール呼び出しを組み合わせ、プログラム向け結果を調べ、簡潔な回答を出力できます。現在のSessionで呼び出せるツールとアクセス範囲を使います。Node.js、直接のファイルアクセス、ネットワークのグローバル、タイマーは提供しません。これらの操作には利用可能なホストツールが必要です。

有効化とモードの選択​

Dashboard → Tools → Built-in → codemodeで、Profileの既定値を設定するか、待機中で保留入力のないSessionにCodemodeだけの変更を適用します。ProfileのSaveは既存Sessionを再選択しません。Dashboard設定を参照してください。

新規Sessionや待機中の再開Sessionでは、ツール選択にCodemodeを含められます。

anyy --tools '+codemode,+tool_search'
anyy --resume SESSION_ID --tools '+codemode,+tool_search'

+規則は、再開Sessionの現在のアクティブ一覧ではなくProfileの既定選択を変更します。config.yamlには書き込みません。MCP検出によっても、明示的な除外がなければ自動有効化される場合があります。

codemode.mode: onは直接ツールをCodemodeと併存させます。onlyはスクリプト呼び出し可能な直接宣言をモデル要求から隠しつつ、Codemodeからは呼べる状態を維持します。モードはCodemodeを有効化したり、ツールを増やしたり、Roleを変えたりしません。codemode.inline_budgetは宣言に含める入れ子ツールドキュメント量を制御します(既定は推定約3000トークン)。一覧から省略したツールも検出できます。ツールセットを参照してください。

スクリプトを書く​

公開引数の形式は、必須のcode文字列を持つオブジェクトです。

{"code":"const result = await tools.bash({command: \"pwd\"}); text(result);"}

選択したネイティブモデルがcompat.supportsOpenAIGrammarToolsを宣言し、プロバイダーがその要求経路に対応する場合、生のJavaScript文法入力を送れます。他のモデルは上のJSON形式を使います。どちらも同じ正規引数を保存します。

スクリプトは非同期関数の本体なので、最上位のawaitとreturnが使えます。Markdownフェンスなしのソースを渡します。たとえばreadが利用可能な場合:

const page = await tools.read({path: "README.md", offset: 1, limit: 60});
text(page);

開始した呼び出しはすべてawaitしてください。スクリプト終了時に残る呼び出しはキャンセルされます。呼び出しごとに新しいVMとグローバルが作られるので、次のCodemode呼び出しまで保持する値にはstoreを使います。

任意の先頭行で出力と実行の上限を指定できます。

// @options: {"max_output_tokens": 2000, "timeout_ms": 30000}
const results = await Promise.all([
tools.bash({command: "git status --short"}),
tools.read({path: "README.md", limit: 40})
]);
for (const result of results) text(result);

これは独立した2つの読み取りです。依存する操作は順番に実行します。timeout_msは2147483647以下の正の整数で、VMの読み込み/起動も含みます。省略時に追加のスクリプトタイムアウトはありませんが、親のキャンセルやホストツールの制限は適用されます。max_output_tokensは非負整数、既定10000で、概算テキスト予算です。

ツールを検出して呼び出す​

MCP名を推測せず、検出結果の正確な識別子を使います。

API動作
ALL_TOOLS現在呼び出せる名前と説明
await searchTools(query, {limit, namespace})そのスナップショットを検索。既定件数8、任意の名前空間
await describeTool(name)宣言またはundefinedを返す。正規名かスクリプト識別子を受け付ける
await describeNamespace(name)名前空間の説明/指示とツール識別子、またはundefinedを返す
await tools.name({...})通常のホスト経路で既存の呼び出し可能ツールを実行

名前はJavaScript識別子に正規化され、記号は_になります。衝突時はライブ宣言が正式です。名前空間メタデータは検出用にグループ化するもので、アクセスを許可しません。非表示ツールとモデル専用宣言はスクリプトから呼べません。

searchToolsは既存の呼び出し可能メタデータだけを検索します。別サーバーカタログの取得や、後続モデル要求用の宣言の有効化は行いません。その有効化は別のモデルツールtool_searchが行います。

入れ子呼び出しは通常、失敗するとrejectします。ただし構造化戻り値を宣言するツールは、エラーオブジェクトをresolveする場合があります。resolveされたPromiseをすべて成功とせず、bash.exit_code、製品結果の状態、MCPのisErrorを確認します。構造化結果はスクリプトで調べるためのものです。リモート応答全体を出すより、有用な部分をtextで出力します。

出力と分岐内の値​

グローバル用途
text(value)テキストを追加。オブジェクトはJSON化
image(dataURLOrBlock)base64のPNG/JPEG/GIF/WebP画像を追加し、一時画像ファイルを保存。リモートURLは拒否
console.log(...)コンソール出力ブロックに診断を追加
return value戻り値を出力に追加
exit()スクリプトを正常終了
store(key, value) / load(key)文字列キーでJSONシリアライズ可能な値を保存/取得。undefinedで削除

成功したstore変更は選択中の会話分岐に確定します。別分岐を読み込むとその分岐の確定値を使い、DBを開き直しても保持されます。エラー、キャンセル、タイムアウトでは現在スクリプトの未確定変更を破棄します。完了済みツールの作用は取り消しません。

保存する各JSON値は最大262144文字、キーとシリアライズ値の合計は最大1048576文字です。完全なファイルや認証情報ではなく小さな状態を保存します。VMのメモリ上限は256 MiBです。出力の厳密な上限は16777216 JavaScript文字または出力/console呼び出し100000回で、超えるとスクリプトが失敗します。

失敗スクリプトはエラーと一部出力を返す場合があります。テキスト予算による短縮では先頭/末尾抜粋と一時的な全文パスを示します。ファイルが存在する間にreadのoffset/limitで読みます。一時出力パスは永続添付を保証しません。保存済み論理結果参照とコンテキスト予算はツール結果を参照してください。

分類・画像モデルAPI​

Codemode内には次の非同期モデルAPIもあります。ツール説明は、同梱の読み取り可能な参照<ProfileHome>/system/docs/pi-v1.2.0/codemode.mdを示します。使用前に完全なスキーマを読んでください。

API引数
models.getModelsOfType(type, provider?)設定済みモデルを一覧表示
models.getAvailableOfType(type, provider?)有効なプロバイダーとローカル解決可能な認証情報で絞る。リモートのヘルスプローブではない
models.getModelOfType(type, provider, id)3つの独立文字列で1モデルを検索。未知ならundefined
models.classify(model, context)設定済み分類モデルを使用
models.generateImages(model, context)設定済み画像モデルを使用

型はchat、image、classifierです。chatモデルを列挙してもチャット生成関数は公開されません。実行にはカタログのproviderとidを持つモデルオブジェクトが必要で、結合したprovider/id文字列や独自エンドポイントは使いません。

分類のcontext.stateはオブジェクトで、任意のimagesにはbase64画像ブロックを入れます。questionsは空でないオブジェクトです。各質問はinstructions、type、criteriaを持ちます。choiceはラベルと意味の対応、scoreは低から高への段階、boolはtrueとfalseの文字列の意味を定義します。

const available = await models.getAvailableOfType("classifier");
if (!available.length) { text("No configured classifier is available"); exit(); }
const result = await models.classify(available[0], {
state: {subject: "Move tomorrow's meeting to Friday"},
questions: {
scheduling: {
type: "bool", instructions: "Does this request change a meeting?",
criteria: {true: "A meeting change is requested", false: "No meeting change"}
}
}
});
if (result.stopReason !== "stop") throw new Error(result.errorMessage || result.stopReason);
text(result);

生成には{input: [{type: "text", text: "..."}]}を渡し、base64画像ブロックを参照に使えます。例:

const available = await models.getAvailableOfType("image");
if (!available.length) { text("No configured image model is available"); exit(); }
const result = await models.generateImages(available[0], {
input: [{type: "text", text: "A simple blue bird icon on white"}]
});
if (result.stopReason !== "stop") throw new Error(result.errorMessage || result.stopReason);
for (const part of result.output) {
if (part.type === "image") image(part);
else if (part.type === "text") text(part.text);
}

1スクリプト内で同時実行できる分類/画像操作は最大4件です。プロバイダー失敗はstopReason: "error"または"aborted"とerrorMessageを持つ結果になり、不正引数はプロバイダー呼び出し前にrejectされる場合があります。モデル使用量はCodemode結果に合算されます。可用性、課金、受け付ける画像入力は設定プロバイダーによって異なります。