Skip to content

Conform to Agent Plugins 1.0.0 and the Agent Skills specification (v0.2.0) - #5

Merged
jpantsjoha merged 5 commits into
mainfrom
fork/googleplugin
Aug 7, 2026
Merged

Conform to Agent Plugins 1.0.0 and the Agent Skills specification (v0.2.0)#5
jpantsjoha merged 5 commits into
mainfrom
fork/googleplugin

Conversation

@jpantsjoha

Copy link
Copy Markdown
Owner

Summary

Brings the plugin into conformance with Agent Plugins 1.0.0 and the Agent Skills specification — the open, vendor-neutral packaging standards co-maintained by Amazon, Cursor, Google, Microsoft, OpenAI and Vercel, announced here.

Before this PR, a conformant Agent Plugins client would have loaded nothing from this plugin. Two independent fatal faults:

  1. plugin.json omitted the required $schema. The manifest schema is closed (additionalProperties: false), so §5.2 makes the omission fatal — the client rejects the plugin outright.
  2. All 17 skills carried top-level frontmatter outside the closed Agent Skills field set (version, triggers, required_scopes, mcp_servers, and on personas persona, tier, gate, owns_eval). §6.1 requires clients to skip every non-conforming skill.

Standards and specifications adopted

Standard Version What conforms Enforced by
Agent Plugins 1.0.0 plugin.json, mcp.json, skills/ layout make spec
plugin.schema.json 1.0.0 root manifest, closed field set make spec + check-jsonschema
mcp.schema.json 1.0.0 MCP manifest, transport discriminator make spec + check-jsonschema
Agent Skills current all 17 SKILL.md make validate + skills-ref
Model Context Protocol stdio, 2025-06-18 mcp.json servers live handshake

Key decisions

  • mcp.json declares no env. Only ${PLUGIN_ROOT} and ${PLUGIN_DATA} expand; everything else passes through literally. CLOUDSDK_CORE_PROJECT: "${GCP_PROJECT_ID}" would have set the project to that 18-character string. Clients may inherit the ambient environment, and gcloud-mcp already reads project + ADC from it.
  • mcp.json ships gcloud only. Toolbox needs a user-specific tools.yaml path no placeholder can express, so it stays a documented opt-in rather than a server guaranteed to fail on first run.
  • Per-harness manifests stay. The spec closes the plugin.json field set and fixes component locations but says nothing about sibling directories. .claude-plugin/, .kimi-plugin/, gemini-extension.json and .agents/ are untouched.

See ADR-007.

Breaking change (skill authors and downstream tooling)

Frontmatter is now {name, description, license, metadata}. Plugin-specific fields move under metadata, namespaced, as string values:

metadata:
  "googlecloud-plugin/required-scopes": "run.services.create, run.services.get"

Anything reading the old YAML lists must read the namespaced key and split on ", ". Routing keywords moved into description — the only field a conformant client routes on.

No action for users. Existing installs are unaffected.

Verification

Check Result
skills-ref — official Agent Skills reference validator 17/17 valid
check-jsonschema vs both published schemas pass / pass
agy plugin validate — Antigravity loader 17 skills, 2 mcpServers, exit 0
Antigravity routing 17 visible, 6/6 correct
Kimi routing (--skills-dir) 17 loaded, 7/7 correct
Live MCP handshake gcloud-mcp-server v0.5.3, protocol 2025-06-18, run_gcloud_command
make gate spec + validate + manifest + mermaid + 102 URLs + 195 tests
Negative tests drop $schema, strip MCP type, re-add triggers — all 3 caught

Reproduce without trusting this repo's own scripts:

uvx --from "git+https://github.com/agentskills/agentskills.git#subdirectory=skills-ref" skills-ref validate skills/cloud-run
uvx check-jsonschema --schemafile https://agent-plugins.org/schemas/1.0.0/plugin.schema.json plugin.json

Not verified: Codex (usage limit at time of writing) and Toolbox MCP (opt-in by design).

Cross-harness testing found real defects

Every routing fix here came from the harnesses, not from review. With triggers deleted, description is the sole routing signal — Kimi found four pairs where both skills matched the same request (iamgcp-security, gcp-opslogging-monitoring, vertex-aiagent-architect, gcp-architectsolution-designer), then two follow-on contradictions in vertex-ai. All fixed and re-tested to clean.

Also

  • Tests 136 → 195. New make spec gate.
  • make manifest no longer claims "installable across 4 harnesses" — it checks manifests parse and agree, and now says so.
  • .claude/CLAUDE.md claimed to be gitignored; it is tracked and public. Corrected.
  • Version 0.1.0 → 0.2.0; CHANGELOG.md added.

Two independent fatal faults meant a conformant Agent Plugins client would
load nothing from this plugin:

1. plugin.json omitted the required $schema. It sits on a closed schema, so
   §5.2 makes the omission fatal — the client rejects the plugin outright.
2. All 17 skills carried top-level frontmatter keys (version, triggers,
   required_scopes, mcp_servers, persona, tier, gate, owns_eval) outside the
   closed Agent Skills field set. Agent Plugins §6.1 requires clients to skip
   every non-conforming skill.

Changes:
- plugin.json declares the manifest schema.
- New root mcp.json: the portable MCP manifest, with an explicit stdio
  transport discriminator. It ships the gcloud server only — toolbox needs a
  user-specific tools.yaml that no spec placeholder can express, so it stays a
  documented opt-in. env is omitted entirely: only ${PLUGIN_ROOT} and
  ${PLUGIN_DATA} expand, so ${GCP_PROJECT_ID} would have been passed through
  literally and mis-set the project.
- All 17 SKILL.md frontmatters reduced to {name, description, license,
  metadata}. Routing keywords folded into description, which is what a
  conformant client actually routes on; the plugin's own contract moves to
  namespaced string values under metadata.
- validate_skills.py inverted: it now enforces the closed Agent Skills field
  set instead of requiring the fields that broke conformance.
- New validate_agent_plugins.py: dependency-free conformance check wired in as
  `make spec`, reporting against the spec's own FATAL/MCP/SKILL failure
  boundaries.
- Smoke tests rewritten: 136 -> 195, covering both specs.

Verified against the official reference validator (agentskills/agentskills
skills-ref) — 17/17 valid — and both published JSON schemas via
check-jsonschema. All four harnesses remain installable.
…routing

Documentation still described the contract the previous commit deleted, and a
cross-harness routing test surfaced a real regression risk in the migration.

ADR-007 records the adoption decision, its trade-offs, and why mcp.json is
smaller than the harness manifests. ADR-005 is marked superseded — its reasoning
for carrying the metadata still holds, only the location changed.

Routing: with `triggers` gone, `description` is the sole routing signal. Loading
the skills into Kimi via --skills-dir and putting five requests through it
confirmed all 17 load and route correctly, but flagged four pairs whose
descriptions both matched: iam/gcp-security, gcp-ops/logging-monitoring,
vertex-ai/agent-architect, gcp-architect/solution-designer. Each now names its
counterpart and draws the boundary explicitly.

Also:
- README gains a Standards and compliance section with the conformance table and
  commands to verify it without trusting this repo's own scripts.
- shared/conventions.md and SPEC.md carry the closed field set and the rules for
  writing a description that routes.
- skills/mcp-servers/references/agent-plugins-mcp.md explains the placeholder
  trap and documents toolbox as an opt-in.
- `make manifest` no longer claims the plugin is "installable across 4
  harnesses" — it checks that manifests parse and agree, and now says so.
- .claude/CLAUDE.md claimed to be gitignored; it is tracked and public.
  .gitignore covers .claude/local-CLAUDE.md, so the guide is meant to ship —
  the self-description was simply wrong.

make spec, validate, manifest and test all pass; skills-ref 17/17.
A Kimi routing test over the seven canonical requests returned 7/7 correct and
confirmed three of the four disambiguated pairs resolved. It flagged the fourth
as still ambiguous, correctly: vertex-ai's description told the reader to go to
agent-architect for agentic work while still listing "Agent Builder" among the
things it covers. The clause and the coverage list contradicted each other.

vertex-ai now hands Agent Builder over explicitly along with ADK, Agent Runtime,
A2A, AP2 and multi-agent topologies. agent-architect claims it in turn, in both
its description and its trigger list — the redirect previously pointed at a
skill that never mentioned the term.

make spec, validate and test pass; skills-ref valid for both skills.
Kimi held the vertex-ai/agent-architect boundary ambiguous across two rounds and
both times named the same phrase: vertex-ai claimed "generative AI applications",
which reads as agentic and re-opened the overlap its own hand-off clause had just
closed. Narrowed to "generative AI workloads — models, prompts, tuning and
endpoints".

Re-tested: 'build an agent with Vertex AI Agent Builder' now routes to
agent-architect, and the pair reports RESOLVED. All four disambiguated pairs are
clean.
Bumps every manifest to 0.2.0 and adds a changelog. The minor bump is warranted:
the SKILL.md frontmatter contract changed shape, so anything reading the
top-level triggers/required_scopes/mcp_servers lists breaks and must read the
namespaced metadata keys instead. Pre-1.0, that is a minor.

CHANGELOG.md records the standards adopted, what broke, why mcp.json declares
one server and no env, and the verification evidence — including which harnesses
were tested and which were not.
@jpantsjoha
jpantsjoha merged commit 7315ebe into main Aug 7, 2026
1 check passed
@jpantsjoha
jpantsjoha deleted the fork/googleplugin branch August 7, 2026 11:32
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.

2 participants