Vertex AI Skill Registry

Skill Registry は、Gemini Enterprise Agent Platform の Build ピラーサービスであり、バージョン管理された SKILL.md パッケージを zip アーカイブとして aiplatform.googleapis.com に保存します。ADK-Rust はこれと 消費専用 で統合されます。 つまり、エージェントは一元管理されたスキルを検出、ダウンロード、読み込みできますが、プロビジョニング(作成、更新、削除、公開)はプラットフォームツールが引き続き担当します。

注: Skill Registry API は v1beta1(プレビュー) であり、us-central1europe-west4us-east5 のリージョン https://{location}-aiplatform.googleapis.com エンドポイントからのみ提供されます。これは、エージェントのカタログ化を行う Govern ピラーの別サービスである Agent Registry とは異なります。

セットアップ

adk-skill で機能を有効にします(コマンドでは adk-cli でも有効にします)。

[dependencies]
adk-skill = { version = "2.1.0", features = ["vertex-skill-registry"] }

認証にはアプリケーションのデフォルト認証情報(gcloud auth application-default login)を使用します。構成は GOOGLE_CLOUD_PROJECTGOOGLE_CLOUD_LOCATION、または明示的な値から取得されます。

クライアントが行うこと — 行わないこと

操作サーフェス
スキルを取得(ペイロード付き)SkillRegistryClient::get_skill
スキルを一覧表示SkillRegistryClient::list_skills
セマンティック検索SkillRegistryClient::search_skills
リビジョンの一覧表示/取得list_skill_revisions, get_skill_revision
ダウンロード、検証、展開fetch_skill_content, fetch_skill_revision_content
作成/更新/削除未実装 — ライフサイクルはプラットフォームツールが管理

ダウンロードされたすべてのペイロードは、レジストリのダイジェストに対して SHA-256 検証され、いかなるバイトも使用される前に、多層防御による zip 検証(エントリ数、パストラバーサル、シンボリックリンク、重複名、サイズ、圧縮率、深さの制限を含む)を経て展開されます。

エージェントにレジストリスキルを読み込む

load_skill_index_from_registry は標準の SkillIndex を生成するため、 注入、選択、調整はファイルシステムスキルの場合とまったく同じように機能します。

use adk_skill::registry::{
    RegistrySkillFilter, SkillRegistryClient, SkillRegistryConfig,
    load_skill_index_from_registry, merge_skill_indexes,
};
use adk_skill::load_skill_index;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = SkillRegistryClient::new_with_adc(SkillRegistryConfig::from_env()?)?;

    // Select by semantic search…
    let remote = load_skill_index_from_registry(
        &client,
        RegistrySkillFilter::by_query("quarterly reporting").with_top_k(5),
    )
    .await?;

    // …or by explicit names, optionally pinned to a revision.
    let pinned = load_skill_index_from_registry(
        &client,
        RegistrySkillFilter::by_names(["report-writer"]).with_revision("3"),
    )
    .await?;

    // Merge with project-local skills — local wins on name collision,
    // matching the project-local-over-global precedence of
    // load_skill_index_with_extras.
    let local = load_skill_index(".")?;
    let merged = merge_skill_indexes(local, remote);
    println!("{} skill(s) available ({} pinned)", merged.len(), pinned.len());
    Ok(())
}

レジストリをバックエンドとする SkillDocuments は、ファイルシステムスキルと同じパーサーおよびハッシュ処理によって構築されます。これらには {resource name}/SKILL.md の仮想 path が付与され、last_modified タイムスタンプはありません。

search_skillsエージェントツール

SkillSearchTool は、LLM エージェントにレジストリ検索を提供します。これは読み取り専用かつ並行実行に安全であるため、並列ツールディスパッチに参加できます。

use adk_skill::registry::{SkillRegistryClient, SkillRegistryConfig, SkillSearchTool};
use std::sync::Arc;

fn build_tool() -> adk_core::Result<SkillSearchTool> {
    let client = SkillRegistryClient::new_with_adc(SkillRegistryConfig::from_env()?)?;
    Ok(SkillSearchTool::new(Arc::new(client)))
}

入力は {"query": string, "top_k"?: integer} です。出力は {name, skillName, description} オブジェクトの JSON 配列で、最も一致するものが先頭になります(API はスコアを返しません)。

CLI

adk-rust バイナリに、vertex-skill-registry 機能によって有効化される、読み取り専用のサブコマンドが2つ追加されます。

[dependencies]
adk-cli = { version = "2.1.0", features = ["vertex-skill-registry"] }
# Semantic search (best match first)
adk-rust skills search "quarterly reporting" --top-k 5

# Materialize a skill package under .skills/<skill-id>/
adk-rust skills pull report-writer

# Pin a revision and choose the target directory
adk-rust skills pull report-writer --revision 3 --dir vendored-skills

両コマンドは --project/--location フラグを読み取り、指定されていない場合は GOOGLE_CLOUD_PROJECT/GOOGLE_CLOUD_LOCATION にフォールバックします。取得したスキルは標準のスキルレイアウト(SKILL.md とその references/)に配置されるため、skills listskills match、およびエージェントのスキル検出によって直ちに認識されます。push コマンドはありません — 公開はプラットフォームのツールを通じて行われます。