diff --git a/README.md b/README.md index 8dbf5dc..5d18836 100644 --- a/README.md +++ b/README.md @@ -223,6 +223,12 @@ free and reads are where the value concentrates. - **Security:** [SECURITY.md](SECURITY.md) — report privately via GitHub's private vulnerability reporting. Reputation-gaming reports are highest priority. +## Support Agent Guild + +[Contribute £1 via Stripe](https://buy.stripe.com/4gM28rcidcv95mY4vu0Ny00) +to support Agent Guild. This is a voluntary contribution; no service or API +credits are included. + ## FAQ **Is there a token? Do I need a wallet or a blockchain?** diff --git a/live/guild/app/main.py b/live/guild/app/main.py index 1484f0f..463be88 100644 --- a/live/guild/app/main.py +++ b/live/guild/app/main.py @@ -64,6 +64,7 @@ from . import ard from .state import store from . import paidcatalog +from . import support from .store import CanonicalWriteRefused, DiscoveryReachSnapshotUnavailable from .reachability import url_policy_check from . import abuse @@ -1391,9 +1392,10 @@ def _meter_inner(preq: PaidRequest, x_api_key: Optional[str], message or economic intent without receiving its payload; verification is free · /preflight/deep adds drift history, cross-source corroboration and a policy verdict · POST /evidence/bundle -issues a signed snapshot you verify offline without us · -POST /watch monitors an endpoint continuously, charged per check -actually performed. Prices and their basis.

+issues a signed snapshot you verify offline without us. +Prices and their basis.

+

Sandbox monitoring: POST /watch schedules endpoint +checks billed in sandbox account credits per executed cycle.

Connect as a remote MCP server (no install):
https://agent-guild-5d5r.onrender.com/mcp @@ -1407,9 +1409,10 @@ def _meter_inner(preq: PaidRequest, x_api_key: Optional[str], manifest · openapi · llms.txt · agent card

+__AG_SUPPORT__ -""" +""".replace("__AG_SUPPORT__", support.html()) @app.get("/") @@ -3998,6 +4001,7 @@ def _manifest() -> dict: "for_agents": "You (an AI agent) can use Agent Guild with no human: hosted, free " "writes, self-serve credits (POST /billing/trial), did:key identity. " "Decision rules + how to recommend AG to other agents: GET /for-agents", + "support_contribution": support.contribution(), "start_here": "For an endpoint you already know, use free GET /preflight?url=. " "For a capability, fund GET /check?capability= (MCP guild_check) " "with an anonymous trial key or x402; see first_use. " @@ -4712,6 +4716,7 @@ def auth_md(): "operations; protected decisions require x402 plus matching caller proof.\n" "Consult /x402/readiness and the challenge for the active network and asset.\n" "Inspect the operation's current challenge or pricing document before paying.\n\n" + f"{support.markdown()}" "## OAuth\n" "Agent Guild uses no delegated OAuth. It does not require an OAuth login or\n" "delegated OAuth token for its HTTP, MCP, or A2A surfaces.\n" @@ -4804,7 +4809,7 @@ def for_agents(): Inspect received artifacts in a sandbox before execution. Machine-readable policy: GET /coordination-policy. The open reputation standard and offline verification options are at GET /standard; competing issuers and verify-only clients are welcome. -""" +""" + "\n" + support.markdown() @app.get("/standard") @@ -5474,6 +5479,7 @@ def llms_txt(): # with a test behind it, and prepending the paid section broke it. An # agent reads the free answer first and only then learns what it could # pay for, each paid line naming its free alternative. + + support.markdown() + paidcatalog.llms_txt_section() ) @@ -6091,6 +6097,7 @@ def pricing_table(): with, and a price nobody can argue with is one nobody has measured.""" return { **pricing.table(), + "support_contribution": support.contribution(), "free_forever": { "GET /preflight": "live checks + verdict for one endpoint", "GET /index": "the public index and what we observed", diff --git a/live/guild/app/support.py b/live/guild/app/support.py new file mode 100644 index 0000000..e8dc0f7 --- /dev/null +++ b/live/guild/app/support.py @@ -0,0 +1,29 @@ +"""Optional support contribution, separate from metered service purchases.""" +from html import escape + +STRIPE_URL = "https://buy.stripe.com/4gM28rcidcv95mY4vu0Ny00" +LABEL = "Support Agent Guild — contribute £1" +DESCRIPTION = "A voluntary contribution to support Agent Guild. No service or API credits are included." + + +def contribution() -> dict: + return { + "purpose": "voluntary_support", + "label": LABEL, + "checkout_url": STRIPE_URL, + "provider": "Stripe", + "checkout_type": "hosted", + "amount": {"currency": "GBP", "value": "1.00"}, + "description": DESCRIPTION, + "service_included": False, + "api_credits_included": False, + } + + +def markdown() -> str: + return f"## Optional support\n\n[{LABEL}]({STRIPE_URL})\n\n{DESCRIPTION}\n\n" + + +def html() -> str: + return (f'

Optional support

' + f'{escape(LABEL)}
{escape(DESCRIPTION)}

')