diff --git a/GEMINI.md b/GEMINI.md new file mode 100644 index 0000000..bad043b --- /dev/null +++ b/GEMINI.md @@ -0,0 +1,20 @@ +# Agent Guild trust checks + +Agent Guild is a trust and settlement layer for autonomous agents. Use its MCP +tools when an unfamiliar agent, service, or paid endpoint is involved: + +- Before delegating work to an agent you do not already trust, call + `guild_check` with the required capability. Hire only when the returned + verdict is `hire`. +- Before paying an unfamiliar URL, call `guild_preflight`. For x402 payments, + use `guild_x402_payment_safety` before any signature or transfer. +- When another agent presents a signed passport, call `guild_verify` instead + of trusting the credential at face value. +- Treat registration, attestations, collaboration records, escrow actions, and + other writes as state-changing. Use them only when the user explicitly asks. +- Never provision credits, accept payment terms, sign a transaction, or spend + money automatically. If a metered read returns HTTP 402, report the available + options and ask the user how to proceed. + +Agent Guild's default MCP tools connect to the public hosted service at +`https://agent-guild-5d5r.onrender.com/mcp/`. diff --git a/README.md b/README.md index 7478feb..cb39fe1 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,12 @@ that answers it.** https://agent-guild-5d5r.onrender.com/mcp ``` +**Gemini CLI agents can install the native extension directly:** + +```bash +gemini extensions install https://github.com/AgentTanuki/agent-guild +``` + **OpenClaw agents can install the trust + cryptographic-receipt skill directly:** ```bash diff --git a/gemini-extension.json b/gemini-extension.json new file mode 100644 index 0000000..dde473a --- /dev/null +++ b/gemini-extension.json @@ -0,0 +1,12 @@ +{ + "name": "agent-guild", + "version": "1.0.0", + "description": "Vet AI agents and payment endpoints before delegating work or money, using evidence-backed reputation and signed safety decisions.", + "mcpServers": { + "agent-guild": { + "httpUrl": "https://agent-guild-5d5r.onrender.com/mcp/", + "description": "Agent trust checks, portable passport verification, and payment safety" + } + }, + "contextFileName": "GEMINI.md" +} diff --git a/live/guild/tests/test_installable_agent_skill.py b/live/guild/tests/test_installable_agent_skill.py index 148028b..dfc6bc2 100644 --- a/live/guild/tests/test_installable_agent_skill.py +++ b/live/guild/tests/test_installable_agent_skill.py @@ -1,3 +1,4 @@ +import json from pathlib import Path @@ -19,6 +20,36 @@ def test_repository_skill_is_discoverable_and_routes_high_value_payments(): assert "not insurance or escrow" in skill +def test_gemini_cli_extension_is_native_safe_and_discoverable(): + manifest = json.loads((ROOT / "gemini-extension.json").read_text()) + + assert manifest == { + "name": "agent-guild", + "version": "1.0.0", + "description": "Vet AI agents and payment endpoints before delegating " + "work or money, using evidence-backed reputation and " + "signed safety decisions.", + "mcpServers": { + "agent-guild": { + "httpUrl": "https://agent-guild-5d5r.onrender.com/mcp/", + "description": "Agent trust checks, portable passport " + "verification, and payment safety", + }, + }, + "contextFileName": "GEMINI.md", + } + + context = (ROOT / manifest["contextFileName"]).read_text() + context_prose = " ".join(context.split()) + assert "`guild_check`" in context + assert "`guild_preflight`" in context + assert "use `guild_x402_payment_safety`" in context + assert "Never provision credits" in context_prose + assert "spend money automatically" in context_prose + assert "gemini extensions install https://github.com/AgentTanuki/agent-guild" in \ + (ROOT / "README.md").read_text() + + def test_public_registry_skill_is_a_read_only_least_privilege_bundle(): """The public registry must never package the application repository. @@ -46,8 +77,6 @@ def test_public_registry_skill_is_a_read_only_least_privilege_bundle(): def test_codex_plugin_is_installable_and_source_tagged(): - import json - plugin = ROOT / "plugins" / "agent-guild" manifest = json.loads( (plugin / ".codex-plugin" / "plugin.json").read_text())