Building Kibble, cross-chain funding for AI agents
2026 · Side Project
Context
AI agents are increasingly operating onchain, executing transactions, managing wallets, and interacting with protocols autonomously. Every agent framework has its own requirements for how its wallet needs to be funded.
Kibble is a cross-chain deposit abstraction layer I built for AI agents. The core idea is that an agent generates a single shareable URL, and anyone who opens it can fund the agent's wallet using any token on any chain they hold using LI.FI.
Problem
MPP agents need stablecoins on Tempo. Coinbase x402 agents typically need USDC on Base, and generic DeFi agents run across Arbitrum, Solana, and other chains.
Existing agent frameworks assume the user is already on the right chain with the right token. But the reality is that users hold assets everywhere.
Right now, funding an AI agent's wallet today is a painful, multi-step process. If a user holds ETH on Ethereum but the agent needs USDC on Tempo, they have to find a bridge, wait for confirmation, swap to the right token on the destination chain, and then finally send it to the agent's wallet. That's three separate apps and multiple transactions for what should be a single action.
How It Works
Kibble is a skill that allows agents to request for funds with a URL: kibble.sh/pay?toChain=8453&toToken=0x833...&toAddress=0xABC...&agentName=MyAgent
An agent constructs this URL with its destination chain, token, and wallet address locked in, so the user can't accidentally send to the wrong place. The user opens the link, connects their wallet, picks whichever token they want to pay with on whichever chain, and LI.FI handles the bridging and swapping.

Implementation
Built with Next.js, shadcn/ui, Tailwind, and TypeScript, and available to install on npm and npx skills for Claude Code, Codex, OpenCode, etc.
Some implementation details worth calling out:
- Server-side parameter validation on the
/payroute catches bad URLs before the page renders. Invalid chain IDs, malformed addresses, and missing params all redirect to a specific error page rather than showing a broken UI - Address validation adapts to chain type. EVM addresses get checksummed via viem's
getAddress(), Solana addresses are validated by decoding base58 and checking for 32 bytes, and Sui addresses use their own format - The LI.FI widget uses Material UI internally, but Kibble is built on shadcn/ui. Two parallel theme objects keep the widget visually consistent
Reflections
It's incredibly rewarding to build for problems that I personally face. When I built my Grocery Agent, I consistently ran into the issue of manually bunding my agents. My hope for Kibble that is it will eventually fully automate the funding, and this is the first step.
The dual theme system (Material UI for the widget, Tailwind for the app) was more work than expected. Keeping two styling paradigms in sync across light and dark modes required runtime font resolution and a ResizeObserver to match widths between the widget and the Direct Send panel. Fragile, but it works and the visual consistency matters for a payment interface.