Vertex AI Skill Registry

Die Skill Registry ist der Build-Säulendienst der Gemini Enterprise Agent Platform, der versionierte SKILL.md-Pakete als ZIP-Archive auf aiplatform.googleapis.com speichert. ADK-Rust ist damit nur im Consume-only-Modus integriert: Agents erkennen, laden herunter und laden zentral verwaltete Skills, während die Bereitstellung (Erstellen, Aktualisieren, Löschen, Veröffentlichen) bei den Plattform-Tools verbleibt.

Hinweis: Die Skill Registry API ist v1beta1 (Preview) und wird ausschließlich über regionale https://{location}-aiplatform.googleapis.com-Endpunkte in us-central1, europe-west4 und us-east5 bereitgestellt. Sie unterscheidet sich von der Agent Registry, einem separaten Dienst der Govern-Säule zur Katalogisierung von Agents.

Einrichtung

Aktivieren Sie das Feature unter adk-skill (und unter adk-cli für die Befehle):

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

Die Authentifizierung verwendet Application Default Credentials (gcloud auth application-default login). Die Konfiguration stammt aus GOOGLE_CLOUD_PROJECT und GOOGLE_CLOUD_LOCATION oder aus explizit angegebenen Werten.

Was der Client tut – und was nicht

VorgangOberfläche
Einen Skill abrufen (mit Nutzdaten)SkillRegistryClient::get_skill
Skills auflistenSkillRegistryClient::list_skills
Semantische SucheSkillRegistryClient::search_skills
Revisionen auflisten / abrufenlist_skill_revisions, get_skill_revision
Herunterladen, überprüfen, extrahierenfetch_skill_content, fetch_skill_revision_content
Erstellen / aktualisieren / löschenNicht implementiert — Plattform-Tools verwalten den Lebenszyklus

Jede heruntergeladene Nutzlast wird anhand des Digest der Registry per SHA-256 verifiziert und vor der Verwendung jeglicher Bytes durch eine mehrschichtige ZIP-Validierung extrahiert (Anzahl der Einträge, Pfad-Traversal, symbolische Links, doppelte Namen, Größen-, Kompressionsverhältnis- und Verschachtelungstiefenlimits).

Registry-Skills in einen Agenten laden

load_skill_index_from_registry erzeugt ein standardmäßiges SkillIndex, sodass Injektion, Auswahl und Koordination genau wie bei Dateisystem-Skills funktionieren:

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

Registry-basierte SkillDocuments werden über denselben Parser und Hashing-Mechanismus wie Dateisystem-Skills erstellt; sie enthalten ein virtuelles path aus {resource name}/SKILL.md und keinen last_modified-Zeitstempel.

Das search_skills-Agenten-Tool

SkillSearchTool stellt LLM-Agenten die Registry-Suche zur Verfügung. Es ist schreibgeschützt und nebenläufigkeitssicher und nimmt daher an der parallelen Tool-Ausführung teil:

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

Die Eingabe ist {"query": string, "top_k"?: integer}; die Ausgabe ist ein Array von {name, skillName, description}-Objekten vom Typ JSON, mit der besten Übereinstimmung zuerst (API gibt keine Bewertungen zurück).

CLI

Die adk-rust-Binärdatei erhält zwei schreibgeschützte Unterbefehle hinter dem vertex-skill-registry-Feature:

[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

Beide Befehle lesen die Flags --project/--location und verwenden ersatzweise GOOGLE_CLOUD_PROJECT/GOOGLE_CLOUD_LOCATION. Abgerufene Skills werden im standardmäßigen Skills-Layout (SKILL.md einschließlich seines references/) abgelegt, sodass skills list, skills match und die Skill-Erkennung des Agenten sie sofort erfassen. Es gibt keinen push-Befehl – die Veröffentlichung erfolgt über Plattform-Tools.