Vertex AI Skill Registry

Skill Registry는 버전이 지정된 SKILL.md 패키지를 zip 아카이브로 aiplatform.googleapis.com에 저장하는 Gemini Enterprise Agent Platform Build 축 서비스입니다. ADK-Rust는 이 서비스와 소비 전용 방식으로 통합됩니다. 즉, agent는 중앙에서 관리되는 skill을 검색하고 다운로드하며 로드하지만, 프로비저닝(create, update, delete, publish)은 플랫폼 도구에서 계속 담당합니다.

참고: Skill Registry API는 **v1beta1 (Preview)**이며, us-central1, europe-west4, us-east5에서만 제공되는 지역별 https://{location}-aiplatform.googleapis.com 엔드포인트를 통해 서비스됩니다. 이는 agent를 카탈로그화하는 Govern 축의 별도 서비스인 Agent Registry와는 다릅니다.

설정

adk-skill에서 기능을 활성화합니다(명령어를 사용하려면 adk-cli에서도 활성화).

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

인증에는 Application Default Credentials (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 기능 뒤에 두 개의 읽기 전용 서브커맨드를 추가합니다.

[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 list, skills match 및 에이전트 스킬 검색이 즉시 이를 찾아 사용합니다. push 명령은 없으며, 게시 작업은 플랫폼 도구를 통해 수행됩니다.

Vertex AI Skill Registry - ADK-Rust 문서 | ADK-Rust