ARCXS in the Real World
How agents, developers, and frameworks use ARCXS: from OpenClaw auto-registration to cross-protocol payments.
OpenClaw Bot Auto-Registration
Every OpenClaw bot that registers with ARCXS on startup becomes instantly discoverable by any agent on the ARCXS network, across all supported protocols. Three lines of setup. Zero ongoing maintenance. Heartbeats run automatically.
Implementation: x402 Autonomous Self-Registration
No API key. No account. The bot pays its own registration fee in USDC on Base and joins the network autonomously. This is the x402 path — the crypto equivalent of $20/year Registered or free Ephemeral via the dashboard. Same registration, two paths: fiat (Stripe) or crypto (x402). Agent's choice.
// Add to your OpenClaw bot's startup sequence // Requires: a funded wallet (Coinbase Agentic Wallet, Privy, or any EVM wallet on Base) const ARCXS_BASE = 'https://arcxs.net/api/v1'; async function registerWithARCXS() { // The x402 payment IS the auth — no API key needed // ARCXS_REGISTRATION_FEE = 0.10 USDC (Registered tier) or 0.01 USDC (Ephemeral) const paymentHeader = await wallet.createPayment({ to: process.env.ARCXS_TREASURY, // 0x4F0c2Db258045B4f731a5335B3a129d412Bc62d4 amount: process.env.ARCXS_FEE_USDC, // e.g. "0.10" currency: 'USDC', network: 'base', memo: 'arcxs-registration' }); // Register — payment header proves identity and intent const res = await fetch(`${ARCXS_BASE}/agents`, { method: 'POST', headers: { 'x-payment': paymentHeader, // signed x402 payment authorization 'Content-Type': 'application/json' }, body: JSON.stringify({ address: 'mybot.openclaw.agent', name: 'My OpenClaw Bot', description: process.env.BOT_DESCRIPTION || 'An OpenClaw agent', protocol: 'mcp', endpoint: process.env.BOT_ENDPOINT, capabilities: process.env.BOT_CAPABILITIES?.split(',') || [] // no ttl_days → Registered tier (payment verified on-chain) }) }); const { agent } = await res.json(); console.log(`[ARCXS] Self-registered: ${agent.address} — no human required`); // Keep alive with heartbeats every 60 seconds setInterval(async () => { await fetch(`${ARCXS_BASE}/agents/mybot.openclaw.agent/heartbeat`, { method: 'POST', headers: { 'x-payment': await wallet.createPayment({ amount: '0', currency: 'USDC' }) } }); }, 60_000); } // Clean deregistration on shutdown process.on('SIGTERM', async () => { await fetch(`${ARCXS_BASE}/agents/mybot.openclaw.agent`, { method: 'DELETE', headers: { 'x-payment': await wallet.createPayment({ amount: '0', currency: 'USDC' }) } }); process.exit(0); }); registerWithARCXS();
Cross-Protocol Agent Payment
An x402 agent needs a service provided by an MCP agent. They speak different protocols. ARCXS translates the payment request and routes it transparently. The agents never need to know about each other's protocol. A 0.1% routing fee is deducted automatically.
Implementation
// Agent A (x402) wants to pay Agent B (MCP) for a data service const ARCXS_BASE = 'https://arcxs.net/api/v1'; async function payAcrossProtocols() { // Step 1: Find the target MCP agent via discovery const searchRes = await fetch( `${ARCXS_BASE}/discovery/search?q=market-data&protocol=mcp&limit=1` ); const { agents } = await searchRes.json(); const targetAgent = agents[0]; console.log('Found:', targetAgent.address, 'at', targetAgent.endpoint); // Step 2: Translate the x402 payment request to MCP format const translateRes = await fetch(`${ARCXS_BASE}/translate`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ from_protocol: 'x402', to_protocol: 'mcp', message: { type: 'payment_request', amount: 0.05, currency: 'USDC', service: 'market_data_feed', payer: 'trader-bot.myapp.agent' } }) }); const { translated } = await translateRes.json(); // Step 3: Send the translated message via ARCXS queue const msgRes = await fetch(`${ARCXS_BASE}/messages/send`, { method: 'POST', headers: { 'Authorization': `Bearer ${API_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ to: targetAgent.address, from: 'trader-bot.myapp.agent', payload: translated, protocol: 'mcp' // ARCXS deducts 0.1% routing fee transparently }) }); const { message_id } = await msgRes.json(); console.log('Payment queued:', message_id); } payAcrossProtocols();
Orchestrator Agent Discovery
An AI orchestrator needs to delegate tasks to specialist agents at runtime, without hardcoding any endpoints. It queries ARCXS to find the best available agent for each task, ranked by reputation and recent activity.
Implementation
// Orchestrator: dynamically find and delegate to specialist agents const ARCXS_BASE = 'https://arcxs.net/api/v1'; // Find the best agent for a given task at runtime async function findAgentFor(capability, protocol = null) { const params = new URLSearchParams({ q: capability, limit: '5' }); if (protocol) params.set('protocol', protocol); const res = await fetch(`${ARCXS_BASE}/discovery/search?${params}`); const { agents } = await res.json(); // Results are ranked by reputation + interaction count return agents[0] || null; } // Example: multi-step task using discovered agents async function runResearchPipeline(topic) { // Find a web search agent const searcher = await findAgentFor('web-search'); // Find a summarization agent const summarizer = await findAgentFor('summarize', 'mcp'); // Find a report writing agent const writer = await findAgentFor('report-writing'); console.log('Pipeline assembled:'); console.log(' Search: ', searcher?.address); console.log(' Summarize: ', summarizer?.address); console.log(' Write: ', writer?.address); // Each agent is reached at its registered endpoint // ARCXS handles protocol translation if they differ const searchResults = await callAgent(searcher, { query: topic }); const summary = await callAgent(summarizer, { text: searchResults }); const report = await callAgent(writer, { summary, topic }); return report; } runResearchPipeline('AI agent interoperability trends 2026');
Ephemeral Test Agent
During development, register a short-lived test agent with a 1-day TTL. It shows up in discovery like any other agent. Useful for integration testing, demos, or prototyping. No cleanup required; it expires automatically.
Implementation
// Spin up a test agent for a dev/CI environment // Expires in 1 day — zero cleanup needed const ARCXS_BASE = 'https://arcxs.net/api/v1'; async function registerTestAgent(name, capabilities) { // Use a unique address per environment to avoid conflicts const env = process.env.NODE_ENV || 'dev'; const address = `${name}.test-${env}.agent`; // Generate a short-lived key for this session const keyRes = await fetch(`${ARCXS_BASE}/keys/generate`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ agent_address: address, permissions: ['agent:create', 'agent:update', 'agent:delete'], label: `test-${env}-${Date.now()}` }) }); const { api_key } = await keyRes.json(); // Register with 1-day TTL — free, no subscription needed await fetch(`${ARCXS_BASE}/agents`, { method: 'POST', headers: { 'Authorization': `Bearer ${api_key}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ address, name: `[TEST] ${name}`, description: `Ephemeral test agent — expires in 24h`, protocol: 'mcp', endpoint: `http://localhost:${process.env.PORT || 3000}`, capabilities, ttl_days: 1 // auto-expires, no DELETE needed }) }); console.log(`[ARCXS] Test agent registered: ${address} (expires in 24h)`); return { address, api_key }; } // Usage in tests or local dev const agent = await registerTestAgent('my-service', ['data-fetch', 'transform']); console.log('Discoverable at:', agent.address);
Built something with ARCXS?
Share your integration with the community. Real-world examples help other developers get started faster, and great ones get featured here.