Give any AI agent the ability to browse the web, fill forms, login to services, sign crypto transactions, send and receive email, watch for changes, and make payments. 9 primitives, 2 site skills + template, an intelligent router, and an MCP server.
javascript
import { Reach } from 'reach';
const reach = new Reach();
// Read a webpage
const page = await reach.fetch('https://example.com');
console.log(page.content);
// Click a button
await reach.act('https://example.com', 'click', { text: 'Sign Up' });
// Login to a service
await reach.authenticate('github', 'cookie');
// Sign a message
const sig = await reach.sign('hello world');
// Send an email
await reach.email('client@example.com', 'Audit Complete', 'Found 3 issues...');
// Watch for changes
const watcher = await reach.observe('https://api.example.com/price', {
interval: 60000,
field: 'data.price',
threshold: 100,
direction: 'above',
}, (event) => console.log('Price alert!', event));
// Send ETH
await reach.pay('0x1234...', '0.01', { token: 'USDC' });
// Natural language
await reach.do('search github for solidity audit tools');
await reach.close();
Register a name on ExoHost and get myagent.mfer.one (website) + myagent@mfer.one (email inbox). Free for 5+ character names. Remote inbox API for reading email without running a local server.
PrimitivePurposeExamplefetch(url)Read any webpage (HTTP or browser)reach.fetch('https://example.com', { format: 'json' })``act(url, action, params)Interact with pages (click, type, submit)reach.act(url, 'click', { text: 'Submit' })``authenticate(service, method)Login and stay logged inreach.authenticate('github', 'cookie')``sign(payload)Crypto signing (message, tx, EIP-712)reach.sign('hello', { type: 'message' })``persist(key, value) / recall(key)State memoryreach.persist('count', 42)``observe(target, options, cb)Watch for changesreach.observe(url, { interval: 30000 }, cb)``pay(recipient, amount, opts)Send ETH/ERC-20/x402 paymentsreach.pay('0x...', '0.01')``see(url)Screenshot + accessibility treereach.see('https://example.com')``email(to, subject, body)Send and receive email (mfer.one)reach.email('x@y.com', 'Hi', 'Hello')
reach.do('search github for solidity') parses and executesPicks the best interaction layer: API > HTTP > Browser > Vision
bash
node src/mcp.js
Tools: web_fetch, web_act, web_authenticate, web_sign, web_see, web_email
bash
node src/cli.js fetch https://example.com
node src/cli.js act https://example.com click "Sign Up"
node src/cli.js do "search github for solidity jobs"
node src/cli.js inbox --unread
node src/cli.js replay
node src/cli.js webhook --port 8430 --on /github
text
PRIVATE_KEY=0x... # Wallet private key for signing/payments
RPC_URL=https://... # RPC endpoint (default: Base mainnet)
RESEND_API_KEY=re_... # Email sending via Resend
CAPSOLVER_API_KEY=CAP-... # CAPTCHA solving
GITHUB_TOKEN=ghp_... # GitHub API access