# Lordevo tools for the OpenAI Agents SDK (JavaScript)

> Needs `lordevo-x402` **0.1.5 or later** (on npm and PyPI; 0.1.3 lacks `toolDefs()` and `trial`). The Python version is in https://shop.lordevo.com/guides/sdk/openai-agents-python.

Five web tools as function tools for `@openai/agents`, paid per call with x402 (USDC on Base). No account and no API key.

| Tool | What it does | Price per call |
|---|---|---|
| `page_markdown` | A web page as clean, LLM-ready Markdown | $0.002 |
| `can_fetch` | robots.txt + AI-crawler permission check for a URL | $0.002 |
| `tech_stack` | What a site is built with (CMS, frameworks, analytics) | $0.002 |
| `dns_lookup` | DNS records (A, AAAA, CNAME, MX, TXT, NS, SOA, CAA) | $0.002 |
| `email_validate` | Email syntax + domain + MX (no mailbox probing) | $0.002 |

Prices are from the shop's price table (checked 13 Nov 2026; the published `lordevo-x402` 0.1.5 lists the same prices). The live price is always the one in the HTTP 402 and in https://shop.lordevo.com/catalog.json.

## Install
```bash
npm i lordevo-x402 @openai/agents
npm i @x402/fetch @x402/evm viem        # only for paid calls
```
Copy `lordevo-agents.mjs` next to your code.

## Use (5 lines)
```js
import { Agent, run } from '@openai/agents';
import { fromPrivateKey } from 'lordevo-x402';
import { lordevoTools } from './lordevo-agents.mjs';
const agent = new Agent({ name: 'Web analyst', instructions: 'Answer with checked facts.', tools: lordevoTools(await fromPrivateKey(process.env.AGENT_WALLET_KEY, { trial: true, maxPriceUsd: 0.01 })) });
console.log((await run(agent, 'What is https://example.com built with?')).finalOutput);
```
The schemas are strict (the SDK's default): optional inputs are nullable and `null` means "not given".

## Free trial
With `{ trial: true }` the first calls of the day are free: 3 calls per IP per UTC day on tools priced up to $0.005 (all five tools here). After that the client pays. Without a wallet key, use `createLordevo({ trial: true })`: free calls only; when they are used up the tool returns `{"error": "payment_required", ...}` to the model.

## How payment works
An unpaid request gets HTTP 402 with the price. The x402 fetch signs a USDC payment from your agent wallet on Base and retries; the shop's facilitator settles it, so the wallet needs USDC but no ETH for gas. `maxPriceUsd` refuses any tool priced above it before a request is made. Answers of 400 or higher are not charged. Use a separate agent wallet with a small balance; key in an environment variable, never in code.

## Run the example
```bash
node example.mjs                       # free trial calls only
AGENT_WALLET_KEY=0x... node example.mjs # free first, then paid
```

MIT licence. The OpenAI Agents SDK is MIT-licensed; this file only uses its public `tool()` API.

## Files
- [example.mjs](https://shop.lordevo.com/guides/sdk/openai-agents-js/example.mjs)
- [lordevo-agents.mjs](https://shop.lordevo.com/guides/sdk/openai-agents-js/lordevo-agents.mjs)

All SDK guides: https://shop.lordevo.com/guides/sdk
