{
  "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": "snipe-falling-premium",
      "outcome": "Register one selected .eth name directly to the user when its live registrar cost falls to or below a hard ETH ceiling.",
      "risk": "paid-wallet-transaction",
      "status": "deployment-gated",
      "walletRequired": true,
      "agent": "sniper1.enstools.eth",
      "prerequisites": [
        "user-owned Ethereum acquisition vault",
        "fixed service fee in Base USDC",
        "Ethereum ETH registration budget",
        "one normalized .eth label, duration, cap and deadline"
      ],
      "steps": [
        {"tool": "lookup_domain", "success": "the lifecycle and current registrant state are explicit"},
        {"tool": "batch_check_availability", "success": "live registrar availability and pricing are retained separately from the user's cap"},
        {"tool": "get_name_price", "success": "the current base and premium price evidence can be compared with the hard cap"},
        {"action": "deploy or select a user-owned ENSAcquisitionVault", "success": "vault owner and configured executor are verified before payment"},
        {"action": "sign the basket reservation before Base payment", "success": "a public payment hash cannot be claimed by a different basket"},
        {"action": "pay Base USDC, sign the payment-bound target digest, and arm on Ethereum", "success": "payment, EIP-712 order and onchain basket bind to one basket ID"},
        {"action": "deterministic keeper commits and executes", "success": "registration succeeds directly to the user only while every onchain bound passes"}
      ],
      "stopWhen": [
        "price exceeds the target cap",
        "name is unavailable",
        "commitment is not mature",
        "budget, purchase count or deadline is exhausted",
        "basket is cancelled"
      ],
      "web": "https://ens.tools/agents/acquire?mode=sniper"
    },
    {
      "id": "acquire-capped-basket",
      "outcome": "Monitor selected .eth names and acquire only the permitted number under individual ceilings and one global ETH budget.",
      "risk": "paid-wallet-transaction",
      "status": "deployment-gated",
      "walletRequired": true,
      "agent": "basket1.enstools.eth",
      "prerequisites": [
        "user-owned Ethereum acquisition vault",
        "fixed service fee in Base USDC",
        "one to 25 targets with duration and individual caps",
        "global ETH budget, maximum purchase count and deadline"
      ],
      "steps": [
        {"tool": "batch_check_availability", "success": "each candidate has live lifecycle and registrar pricing evidence"},
        {"tool": "get_name_price", "success": "individual ceilings can be reviewed against base and temporary premium"},
        {"action": "build the target Merkle tree and basket-wide bounds", "success": "every leaf binds vault, chain, basket, label, duration and cap"},
        {"action": "reserve the basket, pay Base USDC and sign the payment-bound private order", "success": "encrypted targets, reservation, payment and EIP-712 digest all match"},
        {"action": "fund the isolated vault and start the deterministic keeper", "success": "onchain spend and purchase counters remain within the signed policy"}
      ],
      "stopWhen": [
        "all permitted purchases complete",
        "global budget cannot cover an eligible target",
        "deadline passes",
        "vault owner cancels or removes funds",
        "executor or controller does not match"
      ],
      "web": "https://ens.tools/agents/acquire?mode=basket"
    },
    {
      "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"
    }
  ]
}
