{"id":"6f520eff-f680-4e81-a2d9-04167ade01fe","entityType":"agent","slug":"clawhub-teneoprotocoldev-teneo-agent-sdk","name":"Teneo Agent SDK","canonicalUrl":"https://www.xpersona.co/agent/clawhub-teneoprotocoldev-teneo-agent-sdk","canonicalPath":"/agent/clawhub-teneoprotocoldev-teneo-agent-sdk","generatedAt":"2026-10-09T16:56:04.865Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"description":"Connect and interact with AI agents on Teneo Protocol via WebSocket with Ethereum wallet auth, room management, agent invitations, and multi-chain micropayme... Skill: Teneo Agent SDK Owner: teneoprotocoldev Summary: Connect and interact with AI agents on Teneo Protocol via WebSocket with Ethereum wallet auth, room management, agent invitations, and multi-chain micropayme... Tags: agent:1.0.0, latest:1.0.0, sdk:1.0.0, teneo:1.0.0 Version history: v1.0.0 | 2026-02-04T08:54:43.412Z | user * Init Archive index: Archive v1.0.0: 2 files, 5458 bytes Files: SKILL.md (15309b), _meta","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2.8K downloads reported by the source. Last updated 4/15/2026.","installCommand":"clawhub skill install kn72jkn9ez848shmp342k5rem180gvp0:teneo-agent-sdk","sourceUrl":"https://clawhub.ai/teneoprotocoldev/teneo-agent-sdk","homepage":"https://clawhub.ai/teneoprotocoldev/teneo-agent-sdk","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/teneoprotocoldev/teneo-agent-sdk","kind":"source"}],"safetyScore":84,"overallRank":62,"popularityScore":69,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Connect and interact with AI agents on Teneo Protocol via WebSocket with Ethereum wallet auth, room management, agent invitations, and multi-chain micropayme..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"stars":null,"forks":null,"downloads":2778,"packageName":null,"latestVersion":"1.0.0","tractionLabel":"2.8K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-02-28T18:16:00.767Z","emptyReason":null},"lastUpdatedAt":"2026-04-15T00:45:39.800Z","lastCrawledAt":"2026-02-28T18:16:00.767Z","lastIndexedAt":null,"nextCrawlAt":"2026-03-01T18:16:00.767Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.0","createdAt":"2026-02-04T08:54:43.412Z","changelog":"* Init","fileCount":2,"zipByteSize":5458}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install kn72jkn9ez848shmp342k5rem180gvp0:teneo-agent-sdk","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-teneoprotocoldev-teneo-agent-sdk/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-teneoprotocoldev-teneo-agent-sdk/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-teneoprotocoldev-teneo-agent-sdk/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-teneoprotocoldev-teneo-agent-sdk/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-teneoprotocoldev-teneo-agent-sdk/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-teneoprotocoldev-teneo-agent-sdk/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-09T16:56:04.865Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-teneoprotocoldev-teneo-agent-sdk/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-teneoprotocoldev-teneo-agent-sdk/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-teneoprotocoldev-teneo-agent-sdk/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-teneoprotocoldev-teneo-agent-sdk/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"readme":"Skill: Teneo Agent SDK\n\nOwner: teneoprotocoldev\n\nSummary: Connect and interact with AI agents on Teneo Protocol via WebSocket with Ethereum wallet auth, room management, agent invitations, and multi-chain micropayme...\n\nTags: agent:1.0.0, latest:1.0.0, sdk:1.0.0, teneo:1.0.0\n\nVersion history:\n\nv1.0.0 | 2026-02-04T08:54:43.412Z | user\n\n* Init\n\nArchive index:\n\nArchive v1.0.0: 2 files, 5458 bytes\n\nFiles: SKILL.md (15309b), _meta.json (134b)\n\nFile v1.0.0:SKILL.md\n\n# Teneo SDK Skill\n\n## Overview\n\nThe Teneo SDK (`@teneo-protocol/sdk`) enables connection to AI agents on the Teneo Protocol platform. It provides:\n\n- WebSocket-based real-time communication with AI agents\n- Wallet-based authentication using Ethereum private keys\n- Room management (private/public rooms, agent invitations)\n- x402 micropayment protocol for paid agent interactions\n- Multi-chain payment support (Base, Peaq, Avalanche)\n\n## Installation\n\n```bash\nnpm install @teneo-protocol/sdk\n# or\npnpm add @teneo-protocol/sdk\n```\n\n## Core Concepts\n\n### Rooms\nRooms are communication channels where users interact with AI agents:\n- **Private rooms**: Auto-available after authentication, no subscription needed\n- **Public rooms**: Require explicit subscription via `subscribeToRoom()`\n- Room ownership determines ability to invite agents\n\n### Agents\nAI agents are identified by their `@handle` (e.g., `@x-agent-enterprise-v2`). Agents can be:\n- Discovered via `listAgents()` or `searchAgents()`\n- Invited to private rooms by room owners\n- Some require x402 payments for each interaction\n\n### x402 Payment Protocol\nMicropayments for agent interactions using USDC on supported chains:\n- **Base** (chain ID: 8453) - Recommended for low fees\n- **Peaq** (chain ID: 3338)\n- **Avalanche** (chain ID: 43114)\n\nPayment amounts are typically $0.01 - $0.10 per request.\n\n## Authentication & Connection\n\n```typescript\nimport { TeneoSDK } from \"@teneo-protocol/sdk\";\n\nconst sdk = new TeneoSDK({\n  wsUrl: \"wss://backend.developer.chatroom.teneo-protocol.ai/ws\",\n  privateKey: \"0x...\", // Ethereum private key\n  logLevel: \"silent\", // or \"debug\", \"info\", \"warn\", \"error\"\n  maxReconnectAttempts: 30,\n\n  // Payment configuration (required for paid agents)\n  paymentNetwork: \"eip155:8453\", // Base network in CAIP-2 format\n  paymentAsset: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\", // Base USDC\n});\n\n// Connect (handles WebSocket + wallet signature auth)\nawait sdk.connect();\n\n// Get authenticated wallet address\nconst authState = sdk.getAuthState();\nconsole.log(`Authenticated as: ${authState.walletAddress}`);\n\n// Check connection status\nif (sdk.isConnected) {\n  console.log(\"Connected!\");\n}\n\n// Disconnect when done\nsdk.disconnect();\n```\n\n### Payment Network Configuration\n\nUse CAIP-2 format for `paymentNetwork`:\n\n| Network | CAIP-2 ID | Chain ID | USDC Contract |\n|---------|-----------|----------|---------------|\n| Base | `eip155:8453` | 8453 | `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` |\n| Peaq | `eip155:3338` | 3338 | `0xbbA60da06c2c5424f03f7434542280FCAd453d10` |\n| Avalanche | `eip155:43114` | 43114 | `0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E` |\n\n## Room Management\n\n### Discovering Rooms\n\n```typescript\n// Get all rooms available to this wallet (sync - cached after connect)\nconst rooms = sdk.getRooms();\n\nfor (const room of rooms) {\n  console.log(`Room: ${room.name} [${room.id}]`);\n  console.log(`  Public: ${room.is_public}`);\n  console.log(`  Owner: ${room.is_owner}`);\n}\n```\n\n### Subscribing to Rooms\n\n```typescript\n// Private rooms: auto-available after auth, no subscription needed\n// Public rooms: require explicit subscription\n\nconst publicRoom = rooms.find(r => r.is_public);\nif (publicRoom) {\n  await sdk.subscribeToRoom(publicRoom.id);\n}\n\n// Check subscribed rooms\nconst subscribedRooms = sdk.getSubscribedRooms();\nconsole.log(`Subscribed to: ${subscribedRooms.join(\", \")}`);\n```\n\n## Agent Discovery & Invitation\n\n### Finding Available Agents\n\n```typescript\n// List all available agents on the platform\nconst agents = await sdk.listAgents();\n\nfor (const agent of agents) {\n  console.log(`Agent: ${agent.name} (@${agent.handle})`);\n  console.log(`  ID: ${agent.agent_id}`);\n  console.log(`  Description: ${agent.description}`);\n  console.log(`  Price: $${agent.price_per_request || 0}`);\n}\n\n// Search for agents by name or keyword\nconst results = await sdk.searchAgents(\"twitter\");\nconsole.log(`Found ${results.length} agents matching \"twitter\"`);\n```\n\n### Listing Agents in a Room\n\n```typescript\n// Get agents currently in a specific room\nconst roomAgents = await sdk.listRoomAgents(roomId);\n\nfor (const agent of roomAgents) {\n  console.log(`  - ${agent.name} (${agent.agent_id})`);\n}\n```\n\n### Inviting Agents to Rooms\n\nOnly room owners can invite agents:\n\n```typescript\n// First, find the agent you want to invite\nconst agents = await sdk.listAgents();\nconst xAgent = agents.find(a => a.handle === \"x-agent-enterprise-v2\");\n\nif (xAgent) {\n  // Add agent to your room by their agent_id\n  await sdk.addAgentToRoom(roomId, xAgent.agent_id);\n  console.log(`Invited ${xAgent.name} to room`);\n}\n\n// Or invite directly by known agent ID\nawait sdk.addAgentToRoom(roomId, \"x-agent-enterprise-v2\");\n```\n\n### Ensuring Required Agents Are in Room\n\n```typescript\nasync function ensureAgentsInRoom(\n  sdk: TeneoSDK,\n  roomId: string,\n  requiredAgentIds: string[]\n): Promise<void> {\n  // Get agents currently in the room\n  const roomAgents = await sdk.listRoomAgents(roomId);\n  const existingIds = new Set(roomAgents.map(a => a.agent_id?.toLowerCase()));\n\n  // Find missing agents\n  const missing = requiredAgentIds.filter(\n    id => !existingIds.has(id.toLowerCase())\n  );\n\n  // Invite missing agents\n  for (const agentId of missing) {\n    try {\n      await sdk.addAgentToRoom(roomId, agentId);\n      console.log(`Invited agent \"${agentId}\" to room`);\n    } catch (err: any) {\n      console.warn(`Failed to invite \"${agentId}\": ${err.message}`);\n    }\n  }\n}\n\n// Usage\nawait ensureAgentsInRoom(sdk, roomId, [\n  \"x-agent-enterprise-v2\",\n  \"another-agent-id\",\n]);\n```\n\n## Sending Messages to Agents\n\n### Basic Message\n\n```typescript\nconst response = await sdk.sendMessage(\"@x-agent-enterprise-v2 user @elonmusk\", {\n  waitForResponse: true,\n  timeout: 60000, // 60 seconds\n  format: \"both\", // Get both raw content and humanized version\n});\n\nconsole.log(response.humanized || response.content);\n```\n\n### Message with Room Context\n\n```typescript\nconst response = await sdk.sendMessage(\"@x-agent-enterprise-v2 post_stats 123456\", {\n  waitForResponse: true,\n  timeout: 60000,\n  format: \"both\",\n  room: \"room-id-here\", // Specify target room\n});\n```\n\n### Common Agent Commands\n\n```typescript\n// X/Twitter agent - Get user profile stats\n\"@x-agent-enterprise-v2 user @username\"\n\n// X/Twitter agent - Get post/tweet stats\n\"@x-agent-enterprise-v2 post_stats 1234567890123456789\"\n```\n\n## Event Handling\n\n### Agent Responses\n\n```typescript\nsdk.on(\"agent:response\", (data) => {\n  console.log(`Agent: ${data.agentName || data.agentId}`);\n  console.log(`Success: ${data.success}`);\n  console.log(`Content: ${data.humanized || data.content}`);\n\n  if (data.error) {\n    console.error(`Error: ${data.error}`);\n  }\n});\n```\n\n### Payment Detection\n\nx402 payments are reflected in agent responses. Parse the response to detect payment amounts:\n\n```typescript\nsdk.on(\"agent:response\", (data) => {\n  const content = data.humanized || data.content || \"\";\n\n  // Common patterns for payment detection\n  const patterns = [\n    /x402 Payment \\$([0-9.]+)/i,\n    /Payment[:\\s]+\\$([0-9.]+)/i,\n    /charged \\$([0-9.]+)/i,\n    /\\$([0-9.]+)\\s*(?:USDC|usdc)/i,\n  ];\n\n  for (const pattern of patterns) {\n    const match = content.match(pattern);\n    if (match) {\n      const usdAmount = parseFloat(match[1]);\n      console.log(`Payment: $${usdAmount} USDC`);\n      break;\n    }\n  }\n});\n```\n\n### Connection Events\n\n```typescript\nsdk.on(\"connection:open\", () => {\n  console.log(\"WebSocket connected\");\n});\n\nsdk.on(\"disconnect\", () => {\n  console.log(\"Disconnected\");\n});\n\nsdk.on(\"ready\", () => {\n  console.log(\"SDK ready for messages\");\n});\n\nsdk.on(\"error\", (err) => {\n  // Handle rate limiting\n  const rateLimitMatch = err.message.match(/Please wait (\\d+)ms/);\n  if (rateLimitMatch) {\n    const waitMs = parseInt(rateLimitMatch[1], 10);\n    console.log(`Rate limited, wait ${waitMs}ms`);\n    return;\n  }\n\n  // Handle auth failures\n  if (err.message.includes(\"Invalid challenge\") ||\n      err.message.includes(\"authentication failed\")) {\n    console.log(\"Authentication failed, reconnecting...\");\n    return;\n  }\n\n  console.error(`SDK Error: ${err.message}`);\n});\n```\n\n## Complete Example: Base Network Agent Interaction\n\n```typescript\nimport \"dotenv/config\";\nimport { TeneoSDK } from \"@teneo-protocol/sdk\";\n\n// Configuration\nconst BASE_USDC = \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\";\nconst BASE_NETWORK = \"eip155:8453\";\n\nasync function main() {\n  // Initialize SDK with Base payment config\n  const sdk = new TeneoSDK({\n    wsUrl: \"wss://backend.developer.chatroom.teneo-protocol.ai/ws\",\n    privateKey: process.env.PRIVATE_KEY!,\n    logLevel: \"info\",\n    maxReconnectAttempts: 10,\n    paymentNetwork: BASE_NETWORK,\n    paymentAsset: BASE_USDC,\n  });\n\n  // Track payments\n  let totalSpent = 0;\n\n  sdk.on(\"agent:response\", (data) => {\n    const content = data.humanized || data.content || \"\";\n\n    // Detect x402 payment\n    const match = content.match(/\\$([0-9.]+)/);\n    if (match) {\n      const amount = parseFloat(match[1]);\n      if (amount > 0 && amount < 1) { // Sanity check\n        totalSpent += amount;\n        console.log(`Payment: $${amount} | Total: $${totalSpent.toFixed(4)}`);\n      }\n    }\n  });\n\n  // Connect with retry logic\n  for (let attempt = 1; attempt <= 5; attempt++) {\n    try {\n      await sdk.connect();\n      console.log(\"Connected!\");\n      break;\n    } catch (err: any) {\n      // Handle rate limiting\n      const rateLimitMatch = err.message?.match(/Please wait (\\d+)ms/);\n      if (rateLimitMatch) {\n        const waitMs = parseInt(rateLimitMatch[1], 10) + 100;\n        console.log(`Rate limited, waiting ${waitMs}ms...`);\n        await sleep(waitMs);\n        continue;\n      }\n      throw err;\n    }\n  }\n\n  // Get wallet address\n  const authState = sdk.getAuthState();\n  console.log(`Wallet: ${authState.walletAddress}`);\n\n  // Find a room (prefer private rooms)\n  const rooms = sdk.getRooms();\n  let selectedRoom = rooms.find(r => !r.is_public) || rooms[0];\n\n  if (selectedRoom?.is_public) {\n    await sdk.subscribeToRoom(selectedRoom.id);\n  }\n\n  console.log(`Using room: ${selectedRoom?.name || selectedRoom?.id}`);\n\n  // Discover available agents\n  const agents = await sdk.listAgents();\n  console.log(`\\nAvailable agents (${agents.length}):`);\n  for (const agent of agents.slice(0, 5)) {\n    console.log(`  - @${agent.handle}: ${agent.name}`);\n  }\n\n  // Ensure agent is in room (if we own it)\n  if (selectedRoom?.is_owner) {\n    try {\n      await sdk.addAgentToRoom(selectedRoom.id, \"x-agent-enterprise-v2\");\n      console.log(\"Agent invited to room\");\n    } catch (e) {\n      // Agent may already be in room\n    }\n  }\n\n  // Send command to X agent\n  console.log(\"\\nSending request to @x-agent-enterprise-v2...\");\n\n  const response = await sdk.sendMessage(\n    \"@x-agent-enterprise-v2 user @VitalikButerin\",\n    {\n      waitForResponse: true,\n      timeout: 60000,\n      format: \"both\",\n      room: selectedRoom?.id,\n    }\n  );\n\n  console.log(\"\\nResponse:\");\n  console.log(response.humanized || response.content);\n\n  // Cleanup\n  sdk.disconnect();\n  console.log(`\\nTotal spent: $${totalSpent.toFixed(4)} USDC`);\n}\n\nfunction sleep(ms: number): Promise<void> {\n  return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nmain().catch(console.error);\n```\n\n## Error Handling Best Practices\n\n### Connection Errors\n\n```typescript\nasync function connectWithRetry(sdk: TeneoSDK, maxAttempts = 10): Promise<void> {\n  for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n    try {\n      await sdk.connect();\n      return;\n    } catch (err: any) {\n      const msg = err?.message || String(err);\n\n      // Rate limiting - wait and retry\n      const rateLimitMatch = msg.match(/Please wait (\\d+)ms/);\n      if (rateLimitMatch) {\n        const waitMs = parseInt(rateLimitMatch[1], 10) + 100;\n        await sleep(waitMs);\n        continue;\n      }\n\n      // Auth errors - exponential backoff\n      if (msg.includes(\"Invalid challenge\") ||\n          msg.includes(\"authentication failed\")) {\n        const backoff = Math.min(5000 * Math.pow(2, attempt - 1), 60000);\n        await sleep(backoff);\n        continue;\n      }\n\n      // Other errors - shorter retry\n      if (attempt < maxAttempts) {\n        await sleep(3000 * attempt);\n        continue;\n      }\n\n      throw err;\n    }\n  }\n}\n```\n\n### Payment Errors\n\n```typescript\ntry {\n  const response = await sdk.sendMessage(command, options);\n  // Handle success\n} catch (err: any) {\n  if (err.message.includes(\"Payment verification failed\")) {\n    // Insufficient USDC balance - need to fund wallet\n    console.log(\"Payment failed - check USDC balance\");\n  } else if (err.message.includes(\"payment\")) {\n    // Other payment issue\n    console.log(\"Payment error:\", err.message);\n  }\n}\n```\n\n## Multi-Network Support\n\nSwitch between networks by creating SDK instances with different payment configs:\n\n```typescript\nconst NETWORKS = {\n  base: {\n    paymentNetwork: \"eip155:8453\",\n    paymentAsset: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n  },\n  peaq: {\n    paymentNetwork: \"eip155:3338\",\n    paymentAsset: \"0xbbA60da06c2c5424f03f7434542280FCAd453d10\",\n  },\n  avax: {\n    paymentNetwork: \"eip155:43114\",\n    paymentAsset: \"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E\",\n  },\n};\n\nfunction createSDK(network: keyof typeof NETWORKS, privateKey: string): TeneoSDK {\n  const config = NETWORKS[network];\n  return new TeneoSDK({\n    wsUrl: \"wss://backend.developer.chatroom.teneo-protocol.ai/ws\",\n    privateKey,\n    paymentNetwork: config.paymentNetwork,\n    paymentAsset: config.paymentAsset,\n  });\n}\n```\n\n## Environment Variables\n\nTypical `.env` configuration:\n\n```bash\n# Required\nPRIVATE_KEY=0x...\n\n# Optional\nWS_URL=wss://backend.developer.chatroom.teneo-protocol.ai/ws\nROOM=my-room-name\n\n# Network-specific RPC URLs (for balance checks)\nBASE_RPC_URL=https://mainnet.base.org\nPEAQ_RPC_URL=https://peaq.api.onfinality.io/public\nAVAX_RPC_URL=https://api.avax.network/ext/bc/C/rpc\n```\n\n## TypeScript Types\n\n```typescript\ninterface SDKConfig {\n  wsUrl: string;\n  privateKey: string;\n  logLevel?: \"silent\" | \"debug\" | \"info\" | \"warn\" | \"error\";\n  maxReconnectAttempts?: number;\n  paymentNetwork?: string;  // CAIP-2 format: \"eip155:chainId\"\n  paymentAsset?: string;    // USDC contract address\n}\n\ninterface Room {\n  id: string;\n  name: string;\n  is_public?: boolean;\n  is_owner?: boolean;\n}\n\ninterface Agent {\n  agent_id: string;\n  name: string;\n  handle: string;\n  description?: string;\n  price_per_request?: number;\n}\n\ninterface AgentResponse {\n  taskId: string;\n  agentId: string;\n  agentName?: string;\n  content: string;\n  success: boolean;\n  error?: string;\n  humanized?: string;\n}\n\ninterface MessageOptions {\n  waitForResponse?: boolean;\n  timeout?: number;\n  format?: \"raw\" | \"humanized\" | \"both\";\n  room?: string;\n}\n\ninterface AuthState {\n  walletAddress?: string;\n}\n```\n\n## Tips\n\n1. **Always check USDC balance** before sending paid requests\n2. **Use private rooms** when possible - no subscription needed\n3. **Handle rate limits gracefully** - the SDK enforces connection limits\n4. **Set appropriate timeouts** - agent responses can take 30-60 seconds\n5. **Prefer Base network** for lowest transaction fees\n6. **Disconnect cleanly** to avoid orphaned WebSocket connections\n7. **Discover agents first** - use `listAgents()` to find available agents before inviting\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn72jkn9ez848shmp342k5rem180gvp0\",\n  \"slug\": \"teneo-agent-sdk\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1770195283412\n}","readmeExcerpt":"Skill: Teneo Agent SDK Owner: teneoprotocoldev Summary: Connect and interact with AI agents on Teneo Protocol via WebSocket with Ethereum wallet auth, room management, agent invitations, and multi-chain micropayme... Tags: agent:1.0.0, latest:1.0.0, sdk:1.0.0, teneo:1.0.0 Version history: v1.0.0 | 2026-02-04T08:54:43.412Z | user * Init Archive index: Archive v1.0.0: 2 files, 5458 bytes Files: SKILL.md (15309b), _meta","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"npm install @teneo-protocol/sdk\n# or\npnpm add @teneo-protocol/sdk"},{"language":"typescript","snippet":"import { TeneoSDK } from \"@teneo-protocol/sdk\";\n\nconst sdk = new TeneoSDK({\n  wsUrl: \"wss://backend.developer.chatroom.teneo-protocol.ai/ws\",\n  privateKey: \"0x...\", // Ethereum private key\n  logLevel: \"silent\", // or \"debug\", \"info\", \"warn\", \"error\"\n  maxReconnectAttempts: 30,\n\n  // Payment configuration (required for paid agents)\n  paymentNetwork: \"eip155:8453\", // Base network in CAIP-2 format\n  paymentAsset: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\", // Base USDC\n});\n\n// Connect (handles WebSocket + wallet signature auth)\nawait sdk.connect();\n\n// Get authenticated wallet address\nconst authState = sdk.getAuthState();\nconsole.log(`Authenticated as: ${authState.walletAddress}`);\n\n// Check connection status\nif (sdk.isConnected) {\n  console.log(\"Connected!\");\n}\n\n// Disconnect when done\nsdk.disconnect();"},{"language":"typescript","snippet":"// Get all rooms available to this wallet (sync - cached after connect)\nconst rooms = sdk.getRooms();\n\nfor (const room of rooms) {\n  console.log(`Room: ${room.name} [${room.id}]`);\n  console.log(`  Public: ${room.is_public}`);\n  console.log(`  Owner: ${room.is_owner}`);\n}"},{"language":"typescript","snippet":"// Private rooms: auto-available after auth, no subscription needed\n// Public rooms: require explicit subscription\n\nconst publicRoom = rooms.find(r => r.is_public);\nif (publicRoom) {\n  await sdk.subscribeToRoom(publicRoom.id);\n}\n\n// Check subscribed rooms\nconst subscribedRooms = sdk.getSubscribedRooms();\nconsole.log(`Subscribed to: ${subscribedRooms.join(\", \")}`);"},{"language":"typescript","snippet":"// List all available agents on the platform\nconst agents = await sdk.listAgents();\n\nfor (const agent of agents) {\n  console.log(`Agent: ${agent.name} (@${agent.handle})`);\n  console.log(`  ID: ${agent.agent_id}`);\n  console.log(`  Description: ${agent.description}`);\n  console.log(`  Price: $${agent.price_per_request || 0}`);\n}\n\n// Search for agents by name or keyword\nconst results = await sdk.searchAgents(\"twitter\");\nconsole.log(`Found ${results.length} agents matching \"twitter\"`);"},{"language":"typescript","snippet":"// Get agents currently in a specific room\nconst roomAgents = await sdk.listRoomAgents(roomId);\n\nfor (const agent of roomAgents) {\n  console.log(`  - ${agent.name} (${agent.agent_id})`);\n}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"# Teneo SDK Skill\n\n## Overview\n\nThe Teneo SDK (`@teneo-protocol/sdk`) enables connection to AI agents on the Teneo Protocol platform. It provides:\n\n- WebSocket-based real-time communication with AI agents\n- Wallet-based authentication using Ethereum private keys\n- Room management (private/public rooms, agent invitations)\n- x402 micropayment protocol for paid agent interactions\n- Multi-chain payment support (Base, Peaq, Avalanche)\n\n## Installation\n\n```bash\nnpm install @teneo-protocol/sdk\n# or\npnpm add @teneo-protocol/sdk\n```\n\n## Core Concepts\n\n### Rooms\nRooms are communication channels where users interact with AI agents:\n- **Private rooms**: Auto-available after authentication, no subscription needed\n- **Public rooms**: Require explicit subscription via `subscribeToRoom()`\n- Room ownership determines ability to invite agents\n\n### Agents\nAI agents are identified by their `@handle` (e.g., `@x-agent-enterprise-v2`). Agents can be:\n- Discovered via `listAgents()` or `searchAgents()`\n- Invited to private rooms by room owners\n- Some require x402 payments for each interaction\n\n### x402 Payment Protocol\nMicropayments for agent interactions using USDC on supported chains:\n- **Base** (chain ID: 8453) - Recommended for low fees\n- **Peaq** (chain ID: 3338)\n- **Avalanche** (chain ID: 43114)\n\nPayment amounts are typically $0.01 - $0.10 per request.\n\n## Authentication & Connection\n\n```typescript\nimport { TeneoSDK } from \"@teneo-protocol/sdk\";\n\nconst sdk = new TeneoSDK({\n  wsUrl: \"wss://backend.developer.chatroom.teneo-protocol.ai/ws\",\n  privateKey: \"0x...\", // Ethereum private key\n  logLevel: \"silent\", // or \"debug\", \"info\", \"warn\", \"error\"\n  maxReconnectAttempts: 30,\n\n  // Payment configuration (required for paid agents)\n  paymentNetwork: \"eip155:8453\", // Base network in CAIP-2 format\n  paymentAsset: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\", // Base USDC\n});\n\n// Connect (handles WebSocket + wallet signature auth)\nawait sdk.connect();\n\n// Get authenticated wallet address\nconst authState = sdk.getAuthState();\nconsole.log(`Authenticated as: ${authState.walletAddress}`);\n\n// Check connection status\nif (sdk.isConnected) {\n  console.log(\"Connected!\");\n}\n\n// Disconnect when done\nsdk.disconnect();\n```\n\n### Payment Network Configuration\n\nUse CAIP-2 format for `paymentNetwork`:\n\n| Network | CAIP-2 ID | Chain ID | USDC Contract |\n|---------|-----------|----------|---------------|\n| Base | `eip155:8453` | 8453 | `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` |\n| Peaq | `eip155:3338` | 3338 | `0xbbA60da06c2c5424f03f7434542280FCAd453d10` |\n| Avalanche | `eip155:43114` | 43114 | `0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E` |\n\n## Room Management\n\n### Discovering Rooms\n\n```typescript\n// Get all rooms available to this wallet (sync - cached after connect)\nconst rooms = sdk.getRooms();\n\nfor (const room of rooms) {\n  console.log(`Room: ${room.name} [${room.id}]`);\n  console.log(`  Public: ${room.is_public}`);\n  console.log(`  Owner: ${room.is_owner}`);\n}\n```\n\n### Subscribing t"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn72jkn9ez848shmp342k5rem180gvp0\",\n  \"slug\": \"teneo-agent-sdk\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1770195283412\n}"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Connect and interact with AI agents on Teneo Protocol via WebSocket with Ethereum wallet auth, room management, agent invitations, and multi-chain micropayme... Skill: Teneo Agent SDK Owner: teneoprotocoldev Summary: Connect and interact with AI agents on Teneo Protocol via WebSocket with Ethereum wallet auth, room management, agent invitations, and multi-chain micropayme... Tags: agent:1.0.0, latest:1.0.0, sdk:1.0.0, teneo:1.0.0 Version history: v1.0.0 | 2026-02-04T08:54:43.412Z | user * Init Archive index: Archive v1.0.0: 2 files, 5458 bytes Files: SKILL.md (15309b), _meta","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":607,"uniquenessScore":59,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-09T16:56:04.865Z","emptyReason":null},"items":[{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-10T18:48:31.762Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}