{
  "schema": "ens-tools.agent-recipes/v1",
  "version": "1.2.0",
  "title": "ENS.Tools outcome-first agent recipes",
  "canonicalToolCatalogue": "https://ens.tools/api/mcp/tools",
  "mcp": "https://ens.tools/mcp",
  "mcpLite": "https://ens.tools/mcp-lite",
  "humanInterface": "https://ens.tools/agents/recipes",
  "lastVerified": "2026-07-31",
  "stability": "public",
  "rules": [
    "Call tools/list before relying on an input schema.",
    "Keep identity, health, routing, authorization, payment and escrow evidence separate.",
    "Unknown and stale are not healthy.",
    "Never claim authorization, payment or escrow from an intent, redirect or submitted hash.",
    "Wallets review every signature, permission and transaction."
  ],
  "recipes": [
    {
      "id": "paper-trade-ens-narrative",
      "outcome": "Turn one time-stamped crypto narrative into live ENS candidates and an expiring decision receipt without connecting a wallet.",
      "risk": "read-only",
      "status": "live",
      "walletRequired": false,
      "prerequisites": [
        "one narrative",
        "source URL",
        "observation timestamp",
        "network access to https://ens.tools/mcp",
        "storage for a 30-day paper receipt"
      ],
      "steps": [
        {
          "action": "pin narrative, source, observedAt and a SHA-256 thesisId",
          "success": "the original signal cannot be rewritten after results are known"
        },
        {
          "tool": "semantic_domain_search",
          "input": {"query": "the pinned narrative", "limit": 20},
          "success": "no more than 20 normalized candidates are returned"
        },
        {
          "tool": "batch_check_availability",
          "input": {"names": ["candidate.eth"], "duration": 31536000},
          "success": "every retained candidate has a live lifecycle result and checkedAt"
        },
        {
          "tools": ["marketplace_search", "get_market_activity", "estimate_domain_value"],
          "success": "inventory, activity and heuristic valuation are retained as separate evidence"
        },
        {
          "action": "publish immutable ens-tools.paper-trade/v1 receipt",
          "success": "execution=paper, walletRequired=false, expiresAt is 15 minutes after observedAt, and scoreAfter is 30 days"
        }
      ],
      "rejectWhen": [
        "source or observation time is missing",
        "availability or listing evidence is stale",
        "registration premium exceeds policy",
        "listing cannot be independently verified",
        "comparable evidence is insufficient"
      ],
      "stopWhen": [
        "any wallet, signature or transaction broadcast is requested",
        "more than five finalists remain",
        "the 15-minute receipt window has expired"
      ],
      "exampleInput": {
        "narrative": "Onchain AI agents are adopting portable identities",
        "source": "https://example.com/research/onchain-agent-identities",
        "observedAt": "2026-07-29T09:00:00Z",
        "maximumCandidates": 20,
        "maximumFinalists": 5
      },
      "exampleReceipt": {
        "schema": "ens-tools.paper-trade/v1",
        "agent": "researcher.example.eth",
        "thesisId": "sha256:replace-with-canonical-input-digest",
        "observedAt": "2026-07-29T09:00:00Z",
        "action": "watch",
        "name": "agentidentity.eth",
        "maximumTotalCost": "0.025 ETH",
        "evidence": {
          "narrativeSource": "https://example.com/research/onchain-agent-identities",
          "availabilityCheckedAt": "2026-07-29T09:03:00Z",
          "marketActivityCheckedAt": "2026-07-29T09:05:00Z",
          "valuation": "heuristic-not-guaranteed"
        },
        "rejections": ["premium exceeds policy", "insufficient comparable evidence"],
        "expiresAt": "2026-07-29T09:15:00Z",
        "execution": "paper",
        "walletRequired": false,
        "scoreAfter": "2026-08-28T09:00:00Z",
        "baseline": "no-trade"
      },
      "scoreAfterDays": 30,
      "baseline": "no-trade",
      "web": "https://ens.tools/agents/recipes#paper-trade-ens-narrative"
    },
    {
      "id": "inspect-agent",
      "outcome": "Resolve and verify an ENS agent before use.",
      "risk": "read-only",
      "prerequisites": ["full ENS name"],
      "steps": [
        {"tool": "get_agent_context", "success": "wallet address, context and endpoints are explicit"},
        {"tool": "check_agent_verification", "success": "registry control grade is explicit"},
        {"tool": "check_agent_capabilities", "success": "fresh protocol observation is retained"}
      ],
      "stopWhen": ["no wallet address", "registry mismatch for privileged work", "unknown or stale health"],
      "web": "https://ens.tools/agents/directory"
    },
    {
      "id": "route-with-evidence",
      "outcome": "Select an eligible agent from a reproducible ranking.",
      "risk": "read-only",
      "prerequisites": ["concrete intent", "hard freshness and protocol constraints"],
      "steps": [
        {"tool": "route_agent_intent", "success": "routing version, coverage, exclusions and score components are retained"},
        {"tool": "check_agent_capabilities", "success": "the selected endpoint is freshly healthy"},
        {"action": "store routing receipt with the downstream job", "success": "selection remains auditable"}
      ],
      "stopWhen": ["no eligible route", "winner becomes stale or unhealthy"],
      "web": "https://ens.tools/agents/router"
    },
    {
      "id": "delegate-safely",
      "outcome": "Delegate one narrowly scoped wallet action.",
      "risk": "wallet-signature",
      "prerequisites": ["wallet-backed ENS agent", "session key", "target", "selector", "expiry", "value and call budgets"],
      "steps": [
        {"tool": "prepare_agent_execution_permission", "success": "human-readable wallet and executor scopes are reviewed"},
        {"tool": "verify_agent_execution_permission", "success": "signature, ENS binding, scope, expiry and revocation are valid"},
        {"tool": "authorize_agent_execution", "success": "durable receipt returns execution.mayProceed=true after simulation"}
      ],
      "stopWhen": ["expired or revoked", "budget exhausted", "simulation failed", "evidence stale"],
      "web": "https://ens.tools/agents/policies#delegated-execution",
      "sdk": "https://ens.tools/sdk/ens-agent-enforcer.mjs"
    },
    {
      "id": "buy-agent-work",
      "outcome": "Coordinate signed agent work and prove escrow truth.",
      "risk": "wallet-signature",
      "prerequisites": ["requester and provider ENS identities", "USDC budget", "pinned ERC-8183 profile"],
      "steps": [
        {"tool": "publish_agent_job", "success": "signed requester terms are durable"},
        {"tool": "accept_agent_quote", "success": "exactly one verified provider quote is accepted"},
        {"tool": "inspect_erc8183_escrow", "success": "token, amount, roles, binding, code hash, receipt and JobFunded event all match"}
      ],
      "stopWhen": ["accepted but unfunded", "binding drift", "profile mismatch", "expired job"],
      "web": "https://ens.tools/agents/commerce",
      "compatibilityProfile": "https://ens.tools/.well-known/agent-skills/erc8183-profile.json"
    },
    {
      "id": "subscribe-capacity",
      "outcome": "Approve a bounded Base USDC permission, explicitly start the first payment, and activate production quotas only from a confirmed transfer.",
      "risk": "paid-wallet-approval",
      "prerequisites": ["wallet-owned developer account", "human payer who can sign in to or create a Coinbase-built Base Account", "plan amount held by that Base Account in official Base USDC", "providers.base.available=true"],
      "steps": [
        {"action": "GET https://ens.tools/api/developers/billing", "success": "plan, owner, asset, recipient and period are pinned"},
        {"action": "supervising Base Account approves the exact spend permission", "success": "returned payer matches the declared Base billing wallet; no USDC has moved"},
        {"action": "if approval was interrupted, authenticate the same Base Account and recover only its exact active permission", "success": "no new allowance or payment is requested"},
        {"operation": "register_base_subscription", "success": "permission and owner link are independently verified; account remains Not paid and no charge is queued"},
        {"operation": "pay_base_subscription_now", "success": "the human reviewed the exact price and explicitly requested the first payment; this is still not payment proof"},
        {"action": "monitor account and charge receipts", "success": "exact USDC transfer to enstools.eth has five confirmations"}
      ],
      "stopWhen": ["provider unavailable", "payer mismatch", "spender mismatch", "allowance or period mismatch", "first payment not explicitly authorized", "allowance exhausted"],
      "disabledFallbacks": ["stripe", "direct-base", "eth"],
      "web": "https://ens.tools/developers/console",
      "pricing": "https://ens.tools/.well-known/agent-pricing.json"
    }
  ]
}
