Slack bot that lets devs request test funds from a Safe. ENS names, multi-chain bridging via Slack.
El Cajero is a Slack bot that lets developers request test ETH and USDC from a shared Safe on Base without asking anyone for help.
Developers constantly need test funds. They ask the QA person, wait for someone with Safe access, or try to use the Safe app themselves. It's slow and annoying.
El Cajero fixes that. One Slack command:
/cajero request 0.01 ETH vitalik.eth testing bridge
The bot validates the request, resolves the ENS name (or takes a raw 0x address), and proposes + auto-executes the Safe transaction. No approval needed.
The Safe lives on Base, but developers can also request funds on Ethereum or Arbitrum. Cross-chain requests are bridged automatically using Across Protocol (the bridge behind Uniswap). Just add --network eth or --network arb. The bot handles the quote, the ERC-20 approval, and the SpokePool deposit in one batched Safe transaction.
Requests can be tagged with a project name (--project bridge-v2). The /cajero expenses command shows how much each project has spent, broken down by token and network.
Built with ENS for human-readable addresses, Safe Protocol Kit for multisig management, and Across Protocol for cross-chain bridging.
Built with TypeScript and the Slack Bolt SDK in Socket Mode, so no public URL is needed. Fund requests go through a validation pipeline: allowlist
check, ENS resolution on Ethereum mainnet, amount caps, and a one-pending-request rate limit per user. Developers can specify recipients as ENS names
or raw addresses and the bot resolves them before doing anything.
The Safe integration uses @safe-global/protocol-kit and @safe-global/api-kit. The bot wallet is a Safe owner, so it can propose, sign, and
auto-execute transactions in one shot when threshold is 1. No human needed.
For cross-chain requests to Ethereum mainnet or Arbitrum, the bot fetches a bridge quote from Uniswap and builds the calldata for the Safe to execute on Base. ERC-20 approval and bridge deposit are batched into a single multisig transaction. Funds arrive on the target chain in seconds.
SQLite handles persistence. A background polling loop monitors proposed transactions and posts Slack confirmations when they land on-chain.

