Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Agent Skills

最終更新 Markdown で表示Agent セットアップ

Agent Skills は、オンデマンドの手順、リソース、スクリプトです。スキルソースはスキル名と説明のカタログを提供します。エージェントはそのカタログをシステムプロンプトに追加し、ユーザーのタスクがスキルに一致したときにモデルが使えるツールを公開します。大きな能力ライブラリで、毎回のプロンプトが膨らむのを避けられます。

スキルエンジンは agents/skills にあり、フレームワーク非依存です。任意のエージェント(プレーンな AIChatAgentonChatMessage を含む)が SkillRegistry を構築できます。@cloudflare/thinkskills 名前空間として再エクスポートし、getSkills() をターンへ自動で接続します。

Think でスキルを使う

バンドルされたスキルは、通常 Agents の Vite プラグインでインポートします。

import { Think, skills } from "@cloudflare/think";
import bundledSkills from "agents:skills"; // resolves to ./skills next to this file

export class MyAgent extends Think {
	getSkills() {
		return [
			bundledSkills,
			skills.r2(this.env.SKILLS_BUCKET, { prefix: "skills/" }),
		];
	}

	getSkillScriptRunner() {
		return skills.runner({
			loader: this.env.LOADER,
			workspaceInstance: this.workspace,
		});
	}
}
import { Think, skills } from "@cloudflare/think";
import bundledSkills from "agents:skills"; // resolves to ./skills next to this file

type Env = {
	AI: Ai;
	LOADER: WorkerLoader;
	SKILLS_BUCKET: R2Bucket;
};

export class MyAgent extends Think<Env> {
	getSkills() {
		return [
			bundledSkills,
			skills.r2(this.env.SKILLS_BUCKET, { prefix: "skills/" }),
		];
	}

	getSkillScriptRunner() {
		return skills.runner({
			loader: this.env.LOADER,
			workspaceInstance: this.workspace,
		});
	}
}

agents:skills は、インポート元ファイルの隣にある ./skills ディレクトリに解決します。別名の兄弟ディレクトリを指す場合は agents:skills/<dir> を使います。agents:skills のインポート型は、agents 同梱のアンビエント宣言です。同じファイルで Think をインポートすると型がスコープに入ります(指定子だけをインポートするファイルでは /// <reference types="agents/skills-module" /> を追加します)。Agents の Vite プラグインを使わない場合は、代わりに skills.fromManifest(...) でソースを構築します。

ソースは順に適用されます。スキル名を最初に登録したソースが勝ちます。後続の重複(または読み込みに失敗したソース)は、エージェントを失敗させず、警告をログしてスキップします。

インポートするディレクトリには、スキルごとに子ディレクトリを置きます。

src/skills/release-notes/SKILL.md
src/skills/release-notes/scripts/format-release-notes.ts
src/skills/release-notes/references/style-guide.md

スキルツール

スキルが使えるとき、エージェントは次を公開します。

ツール 用途
activate_skill 一致したスキルの手順と、バンドルされたリソース一覧を読み込みます
read_skill_resource { name, path } または skill-name/path でバンドルされたリソースを読みます
run_skill_script getSkillScriptRunner() がランナーを返すとき、バンドルされたスクリプトを実行します

スキルは、常時有効なシステムプロンプトではありません。すべてのターンに適用する振る舞いは getSystemPrompt() または Session のコンテキストブロックを使います。スキルは、関連するときだけ読み込むタスク固有の手順、参照、スクリプト、テンプレート、アセット向けです。

スクリプト実行

スクリプト実行はオプトインで、Worker Loader バインディングが必要です。

{
	"worker_loaders": [{ "binding": "LOADER" }]
}
[[worker_loaders]]
binding = "LOADER"

skills.runner() は実験的です。scripts/ 配下の JavaScript、TypeScript、Python、Bash スクリプトを実行します。TypeScript は @cloudflare/worker-bundler でコンパイルします。Python は Python Dynamic Workers として動き、Bash は just-bash 経由です。

JavaScript と TypeScript のスクリプトは関数形式です。

export default async function run(input, ctx) {
	const guide = ctx.files["references/style-guide.md"]; // bundled text resources
	const docs = await ctx.workspace.readFile("README.md"); // gated by permission
	const summary = await ctx.tools.call("summarize", { input }); // explicit tools
	await ctx.output.writeFile("notes.md", summary); // scratch artifact
	return { ok: true };
}
import type { SkillRunContext } from "@cloudflare/think";

export default async function run(input: unknown, ctx: SkillRunContext) {
	const guide = ctx.files["references/style-guide.md"]; // bundled text resources
	const docs = await ctx.workspace.readFile("README.md"); // gated by permission
	const summary = await ctx.tools.call("summarize", { input }); // explicit tools
	await ctx.output.writeFile("notes.md", summary); // scratch artifact
	return { ok: true };
}

ctx{ skill, files, workspace, tools, output } です。ctx.files は相対パスでバンドルされたテキストリソースを保持します。ctx.workspace はワークスペース権限でゲートされます。ctx.tools はランナーに渡されたツールだけを公開します。ctx.output.writeFile(name, content) はスクラッチ成果物をモデルへ返します(ワークスペースは変更しません)。Python と Bash はパスベースの契約です。/input.json/context.json/skill 配下のバンドルリソース、成果物用の /output を使います。

workspaceInstance を渡すと、スクリプトはデフォルトで読み取り専用のワークスペースアクセスを得ます。ネットワーク、ツール、ワークスペースへの書き込みはオプトインです。デフォルトのタイムアウトは 30 秒です。

import { Think, skills } from "@cloudflare/think";

export class SkillsAgent extends Think {
	getSkills() {
		return [skills.r2(this.env.SKILLS_BUCKET, { prefix: "skills/" })];
	}
}
import { Think, skills } from "@cloudflare/think";

export class SkillsAgent extends Think<Env> {
	getSkills() {
		return [skills.r2(this.env.SKILLS_BUCKET, { prefix: "skills/" })];
	}
}

バンドルスキル、R2 バックエンドのスキル、スクリプト実行は agent-skills の例 を参照してください。

関連情報

  • ThinkgetSkills()getSkillScriptRunner() をエージェントループへ接続します
  • Think のツール — スキルツールがワークスペース、カスタム、MCP、クライアントツールとどうマージされるか

役に立ちましたか?