Registro de Habilidades do Vertex AI

O Registro de Habilidades é o serviço do pilar Build da Plataforma de Agentes Gemini Enterprise que armazena pacotes versionados de SKILL.md como arquivos zip no aiplatform.googleapis.com. ADK-Rust integra-se a ele no modo somente consumo: os agentes descobrem, baixam e carregam habilidades governadas centralmente, enquanto o provisionamento (criação, atualização, exclusão, publicação) permanece sob responsabilidade das ferramentas da plataforma.

Observação: o API do Registro de Habilidades é v1beta1 (Prévia), disponibilizado somente por meio de endpoints regionais de https://{location}-aiplatform.googleapis.com em us-central1, europe-west4 e us-east5. Ele é diferente do Registro de Agentes, um serviço separado do pilar Govern destinado à catalogação de agentes.

Configuração

Ative o recurso em adk-skill (e em adk-cli para os comandos):

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

A autenticação usa as Credenciais Padrão do Aplicativo (gcloud auth application-default login). A configuração é obtida de GOOGLE_CLOUD_PROJECT e GOOGLE_CLOUD_LOCATION, ou de valores explícitos.

O que o cliente faz — e o que não faz

OperaçãoSuperfície
Obter uma habilidade (com payload)SkillRegistryClient::get_skill
Listar habilidadesSkillRegistryClient::list_skills
Pesquisa semânticaSkillRegistryClient::search_skills
Listar / obter revisõeslist_skill_revisions, get_skill_revision
Baixar, verificar, extrairfetch_skill_content, fetch_skill_revision_content
Criar / atualizar / excluirNão implementado — as ferramentas da plataforma gerenciam o ciclo de vida

Cada payload baixado é verificado com SHA-256 em relação ao digest do registro e extraído com validação de zip em camadas de defesa (contagem de entradas, travessia de caminhos, links simbólicos, nomes duplicados, tamanho, proporção de compressão e limites de profundidade) antes que qualquer byte seja usado.

Carregar habilidades do registro em um agente

load_skill_index_from_registry produz um SkillIndex padrão, portanto a injeção, a seleção e a coordenação funcionam exatamente como com habilidades do sistema de arquivos:

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 baseados no registro são criados pelo mesmo analisador e processo de hash que as habilidades do sistema de arquivos; eles carregam um path virtual de {resource name}/SKILL.md e nenhum carimbo de data e hora last_modified.

A ferramenta de agente search_skills

SkillSearchTool expõe a pesquisa do registro para agentes LLM. Ela é somente leitura e segura para concorrência, portanto participa do despacho paralelo de ferramentas:

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)))
}

A entrada é {"query": string, "top_k"?: integer}; a saída é um array JSON de objetos {name, skillName, description}, com a melhor correspondência primeiro (o API não retorna pontuações).

CLI

O binário adk-rust ganha dois subcomandos somente leitura por trás do recurso 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

Ambos os comandos leem as flags --project/--location, recorrendo a GOOGLE_CLOUD_PROJECT/GOOGLE_CLOUD_LOCATION. As habilidades obtidas são colocadas no layout padrão de habilidades (SKILL.md e seu references/), portanto skills list, skills match e a descoberta de habilidades do agente as encontram imediatamente. Não há um comando push — a publicação é feita pelas ferramentas da plataforma.