jimmy.so

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.

Kibble payment interface showing Bridge & Swap and Normal Send options
Kibble payment interface

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 /pay route 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.