diff --git a/tests/integration/fixtures/reference/plugin.json b/tests/integration/fixtures/reference/plugin.json
index 9971952..6d4fd8c 100644
--- a/tests/integration/fixtures/reference/plugin.json
+++ b/tests/integration/fixtures/reference/plugin.json
@@ -1,4 +1,5 @@
{
+ "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "demo",
"version": "0.1.0",
"description": "Reference plugin for integration tests.",
diff --git a/tests/integration/test_antigravity.py b/tests/integration/test_antigravity.py
index ea4fb88..63c391e 100644
--- a/tests/integration/test_antigravity.py
+++ b/tests/integration/test_antigravity.py
@@ -1,6 +1,11 @@
"""Antigravity end-to-end via folder install: `agy plugin install
` loads the
skill and MCP server, and an ambient env var reaches the server.
+Checks:
+ 1. `agy plugin install ` accepts the generated files.
+ 2. It reports exactly one skill and one MCP server.
+ 3. An ambient env var reaches the MCP server.
+
AGY forwards the ambient environment. It can't resolve a `./` command, so we point
it at the committed probe by absolute path. Auth lives under HOME (can't isolate),
so we install into the real home; the `_clean_agy` fixture uninstalls before and
diff --git a/tests/integration/test_claude.py b/tests/integration/test_claude.py
index 5e37daa..9c0b8e8 100644
--- a/tests/integration/test_claude.py
+++ b/tests/integration/test_claude.py
@@ -2,6 +2,13 @@
skill, `--config` sets the userConfig the server resolves
(`${user_config.demo_host}`), and a session starts the server (via the generated
`${CLAUDE_PLUGIN_ROOT}` command). Needs a session (auth), so it's `integration`.
+
+Checks:
+ 1. `plugin marketplace add` + `plugin install` accept the generated files.
+ 2. `plugin details` reports the skill.
+ 3. `--config demo_host=...` sets the userConfig declared in the manifest.
+ 4. A session starts the server via `${CLAUDE_PLUGIN_ROOT}`, and the config
+ value arrives as DEMO_HOST (`${user_config.demo_host}` resolved).
"""
from __future__ import annotations
diff --git a/tests/integration/test_codex.py b/tests/integration/test_codex.py
index 753698e..304fcba 100644
--- a/tests/integration/test_codex.py
+++ b/tests/integration/test_codex.py
@@ -1,6 +1,13 @@
"""Codex end-to-end via folder install: the plugin installs, its MCP server starts,
and a user env var resolves into it.
+Checks:
+ 1. Marketplace install accepts the generated files.
+ 2. A session starts the MCP server.
+ 3. A user env var reaches it, i.e. Codex applied the `.codex-plugin/`
+ `env_vars` overlay to the spec server. **Needs Codex 0.150.0+**; older
+ versions read the spec mcp.json only and drop the variable.
+
Codex-legacy can't resolve a `./` command, so we point it at the committed probe
by absolute path. Needs a session (auth), so it's marked `integration`.
"""
diff --git a/tests/integration/test_gemini.py b/tests/integration/test_gemini.py
index b10593d..1fb3e28 100644
--- a/tests/integration/test_gemini.py
+++ b/tests/integration/test_gemini.py
@@ -2,6 +2,12 @@
the extension and its skill, the generated `${extensionPath}` command resolves the
committed probe, and an ambient env var reaches the server.
+Checks:
+ 1. `gemini extensions install ` accepts the generated extension.
+ 2. The extension and its skill are listed after install.
+ 3. The `${extensionPath}` command in gemini-extension.json resolves.
+ 4. An ambient env var reaches the MCP server.
+
Gemini forwards the ambient environment. It prompts to trust the folder (answered
on stdin) and installs into the real home; the `_clean_gemini` fixture uninstalls
before and after (before too, to recover from a crashed prior run).
diff --git a/uv.lock b/uv.lock
index a4cbca2..f966510 100644
--- a/uv.lock
+++ b/uv.lock
@@ -8,7 +8,7 @@ resolution-markers = [
[[package]]
name = "agent-plugin-sync"
-version = "0.1.2"
+version = "0.1.3"
source = { editable = "." }
dependencies = [
{ name = "pydantic" },