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

@zbl94 zbl94 commented Jul 13, 2026

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
zbl94 force-pushed the skills-registry-integration branch 2 times, most recently from 48f7b5c to 50451c2 Compare July 14, 2026 00:00

@wjjclaud wjjclaud 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
zbl94 force-pushed the skills-registry-integration branch from 50451c2 to c5bbba4 Compare July 14, 2026 19:05
@zbl94

zbl94 commented Jul 14, 2026

Copy link
Copy Markdown
Collaborator Author

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 wjjclaud July 14, 2026 19:06

@joycel-github joycel-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
zbl94 force-pushed the skills-registry-integration branch 3 times, most recently from 5c818b0 to 4f8e7f9 Compare July 14, 2026 21:59
Comment thread cmd/ax/internal/cliutil/cliutil.go Outdated
@zbl94
zbl94 force-pushed the skills-registry-integration branch from 4f8e7f9 to 8c93e91 Compare July 14, 2026 23:34
Comment thread cmd/ax/internal/cliutil/skills.go Outdated
@zbl94
zbl94 force-pushed the skills-registry-integration branch from 8c93e91 to 477f552 Compare July 14, 2026 23:42
Comment thread internal/skills/geminienterprise/unzip.go Outdated
Comment thread internal/skills/geminienterprise/client.go
@zbl94
zbl94 force-pushed the skills-registry-integration branch from 477f552 to 119b6df Compare July 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-github joycel-github Jul 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
Collaborator Author

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 thread internal/skills/geminienterprise/materialize.go
Comment thread internal/skills/geminienterprise/client.go
Comment thread internal/skills/geminienterprise/materialize.go
Comment thread internal/config/config.go
@zbl94
zbl94 force-pushed the skills-registry-integration branch from 119b6df to 7a18608 Compare July 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
zbl94 force-pushed the skills-registry-integration branch from 7a18608 to bed026a Compare July 15, 2026 00:29
@zbl94
zbl94 merged commit 36bd8b0 into main Jul 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 free to 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