The OS layer for onchain AI agents: ENS identity, Uniswap trading, and KeeperHub execution.
AgentOS is an operating system for onchain AI agents. Users connect a Sepolia wallet and deploy a real AI agent that gets a human-readable ENS name like trade.agentos.eth, a user-owned smart wallet, machine-readable capability records, and a full execution pipeline backed by Uniswap and KeeperHub.
The platform features:
agentos.eth — every agent gets a real persistent identityAgentSmartWallet deployed through AgentWalletFactory — the server never holds user keys/check_approval, /quote, /swap with generatePermitAsTransaction*.agentos.eth and reads capability records without a central databaseUsers describe what they want in plain English, like "swap 1 USDC to WETH". The agent quotes via Uniswap, explains the route, and on confirmation routes the required transactions through KeeperHub Direct Execution from the user-owned agent smart wallet.
AgentOS uses a TypeScript monorepo with three packages: contracts (Hardhat + Solidity), backend (Express + TypeScript on Render), and frontend (Next.js 15 + RainbowKit on Vercel).
getLogs with the AgentSubnameRegistered event filter to scan recent Sepolia blocks and load user-owned agents without a backend calldecodeEventLog on AgentSmartWallet.Executed to label wallet activity in human-readable form, including USDC approval, Permit2 approval, and Universal Router swap activity/api/backend/* forwards requests to Render with a server-side secret header so execution routes are not exposed directly to the browsersetText on the public resolver to store agentos.lastExecutionTx, agentos.lastKeeperHubRun, and updated reputation back into the agent ENS namegetEnsAddress and getEnsText to resolve agent identities and read capability records/check_approval, /quote with generatePermitAsTransaction: true, and /swap to produce Universal Router calldataerc20, permit2, universalRouter, agentSmartWallet) and posts structured contract-call execution requests with decoded functionName, functionArgs, and abi/execute/{id}/status until the KeeperHub run completes or failsAgentWalletFactory, AgentSmartWallet, AgentSubnameRegistrar, AgentIdentityRegistry8004, AgentReputationRegistry8004, AgentValidationRegistry8004, and AgentRegistryAgentSubnameRegistrar calls setSubnodeRecord on the ENS registry, setAddr on the public resolver, and writes capability keys from a TextRecord[] array in one transactionAgentSmartWallet has an owner (the user wallet), a scoped executor (KeeperHub wallet), and an explicit allowlist of permitted call targets such as USDC, Permit2, and the Uniswap Universal Routergpt-4.1-mini for agent reasoning and tool orchestration"yes", "proceed", or "swap", and gates execution behind explicit user confirmationAgentSmartWallet.execute(target, value, data) before sending to KeeperHub. This lets the KeeperHub wallet call the agent smart wallet, while the smart wallet only forwards calls to allowlisted targets. The server executor never needs the user's private key or unlimited contract access.generatePermitAsTransaction: true in Uniswap /quote to avoid browser EIP-712 Permit2 signatures, making the flow compatible with execution services and smart-wallet wrappers.keeperhub.ts: raw transaction calldata is decoded with known ABIs and converted into KeeperHub's functionName, functionArgs, and abi JSON format.getLogs windows to stay within RPC limits while still loading user-created agents across sessions.The most challenging part was getting the Uniswap smart-wallet execution path to work end-to-end through KeeperHub. The key insight was that the swapper address in every Uniswap API call must be the agent smart wallet, not the connected EOA. That means USDC approval to Permit2 must also come from the smart wallet before the swap can execute. Once the approval sequence was ordered correctly, KeeperHub ran the full path, with successful Sepolia approval and swap transactions.

