Skip to content

Add GEAP Skill Registry integration for local harnesses - #300

Merged
zbl94 merged 1 commit into
mainfrom
skills-registry-integration
Jul 15, 2026
Merged

Add GEAP Skill Registry integration for local harnesses#300
zbl94 merged 1 commit into
mainfrom
skills-registry-integration

Conversation

@zbl94

Copy link
Copy Markdown
Collaborator

Materialize agentskills.io skills from the GEAP Skill Registry (Vertex AI v1beta1) into an on-disk skills directory before a harness starts, so the Antigravity and Antigravity Interactions harnesses can use registry-hosted skills on the local ax exec / ax serve path.

  • internal/skills/materialize: harness-agnostic package that reads config.SkillsConfig, drives the registry client (ListSkills / GetSkill / GetSkillRevision / skills:retrieve), safe-unzips payloads to <target_dir>//, and reports what it wrote. First-wins on duplicate ids with a warning; fail-safe (a registry error never blocks harness startup).
  • config: harnesses..skills.registries[] with per-registry selection (skills / query / all), required target_dir, and a validated "exactly one selection mode" rule. Also wires the interactions harness's system_instruction from ax.yaml.
  • cliutil: materializes skills at controller construction; for the interactions harness (no SKILLS_DIR concept) it appends a discovery pointer to the system instruction.

Scope: local path only; the substrate/pod path does not yet read ax.yaml. Verified end-to-end against a live registry (by-id and by-query).

@zbl94
zbl94force-pushed the skills-registry-integration branch 2 times, most recently from 48f7b5c to 50451c2CompareJuly 14, 2026 00:00

@wjjclaudwjjclaud left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For the package name, is it better to use something like skills/geap or skills/geminienterprise to call out it is specific to skills from GEAP?

@zbl94
zbl94force-pushed the skills-registry-integration branch from 50451c2 to c5bbba4CompareJuly 14, 2026 19:05
@zbl94

Copy link
Copy Markdown
CollaboratorAuthor

For the package name, is it better to use something like skills/geap or skills/geminienterprise to call out it is specific to skills from GEAP?

I moved these to internal/skills/gemini/client.go, and called the package gemini since go prefers short package names

@zbl94
zbl94 requested a review from wjjclaudJuly 14, 2026 19:06

@joycel-githubjoycel-github left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM with a few comments here and there. Thanks vm for getting this in!

@zbl94
zbl94force-pushed the skills-registry-integration branch 3 times, most recently from 5c818b0 to 4f8e7f9CompareJuly 14, 2026 21:59
Comment threadcmd/ax/internal/cliutil/cliutil.go Outdated
@zbl94
zbl94force-pushed the skills-registry-integration branch from 4f8e7f9 to 8c93e91CompareJuly 14, 2026 23:34
Comment threadcmd/ax/internal/cliutil/skills.go Outdated
@zbl94
zbl94force-pushed the skills-registry-integration branch from 8c93e91 to 477f552CompareJuly 14, 2026 23:42
Comment threadinternal/skills/geminienterprise/unzip.go Outdated
Comment threadinternal/skills/geminienterprise/client.go
@zbl94
zbl94force-pushed the skills-registry-integration branch from 477f552 to 119b6dfCompareJuly 14, 2026 23:54
for _, ref := range refs {
// First-wins: skip (with a warning) any id already materialized into this
// dir, rather than overwriting it.
if won, byRegistry := claimed.claim(targetDir, ref.SkillID, regIdx); !won {

@joycel-githubjoycel-githubJul 14, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should claim happen at the end

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why it should happen at the end? We are trying to claim a skill before fetching and writing to file to avoid conflicts (and save API calls if there are)

Comment threadinternal/skills/geminienterprise/materialize.go
Comment threadinternal/skills/geminienterprise/client.go
Comment threadinternal/skills/geminienterprise/materialize.go
Comment threadinternal/config/config.go
@zbl94
zbl94force-pushed the skills-registry-integration branch from 119b6df to 7a18608CompareJuly 15, 2026 00:27
Materialize agentskills.io skills from the Gemini Enterprise Skill Registry
(Vertex AI v1beta1) into on-disk folders before the harness starts, so the
built-in harnesses can use registry-hosted skills on the local `ax exec` /
`ax serve` path.
- internal/skills/geminienterprise: harness-agnostic package that reads
config.SkillsConfig, drives the registry client (ListSkills / GetSkill /
GetSkillRevision / skills:retrieve), safe-unzips payloads to
<target_dir>/<skill-id>/, and reports what it wrote. First-wins on
duplicate ids with a warning; fail-safe (a registry error never blocks
harness startup).
- config: top-level `skills.registries[]` (harness-agnostic -- each actor
runs a single harness that consumes the materialized folder). Per-registry
selection (skills / query / all), required target_dir, and a validated
"exactly one selection mode" rule. Also wires the interactions harness's
system_instruction from ax.yaml.
- cliutil: materializes skills once, up front, at controller construction;
for the interactions harness (no SKILLS_DIR concept) it appends a discovery
pointer to the system instruction.
Scope: local path only; the substrate/pod path does not yet read ax.yaml.
Verified end-to-end against a live registry (by-id and by-query).
@zbl94
zbl94force-pushed the skills-registry-integration branch from 7a18608 to bed026aCompareJuly 15, 2026 00:29
@zbl94
zbl94 merged commit 36bd8b0 into mainJul 15, 2026
9 checks passed
@zbl94
zbl94 deleted the skills-registry-integration branch July 15, 2026 00:41
rakyll pushed a commit that referenced this pull request Jul 21, 2026
Previously, ax serve called cfg.Validate() before constructing the
controller, but ax exec did not. A misconfigured ax.yaml could pass
through runExec and only surface as an obscure error later. Mirror the
validation call so both entry points have parity in startup checks.
Addresses A8 in TODO.md.
rakyll pushed a commit that referenced this pull request Jul 21, 2026
…300)
Materialize agentskills.io skills from the Gemini Enterprise Skill Registry
(Vertex AI v1beta1) into on-disk folders before the harness starts, so the
built-in harnesses can use registry-hosted skills on the local `ax exec` /
`ax serve` path.
- internal/skills/geminienterprise: harness-agnostic package that reads
config.SkillsConfig, drives the registry client (ListSkills / GetSkill /
GetSkillRevision / skills:retrieve), safe-unzips payloads to
<target_dir>/<skill-id>/, and reports what it wrote. First-wins on
duplicate ids with a warning; fail-safe (a registry error never blocks
harness startup).
- config: top-level `skills.registries[]` (harness-agnostic -- each actor
runs a single harness that consumes the materialized folder). Per-registry
selection (skills / query / all), required target_dir, and a validated
"exactly one selection mode" rule. Also wires the interactions harness's
system_instruction from ax.yaml.
- cliutil: materializes skills once, up front, at controller construction;
for the interactions harness (no SKILLS_DIR concept) it appends a discovery
pointer to the system instruction.
Scope: local path only; the substrate/pod path does not yet read ax.yaml.
Verified end-to-end against a live registry (by-id and by-query).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@zbl94@joycel-github@wjjclaud