LangChain toolkit for Axon — agentic finance with secure vaults for autonomous AI agents.
Gives your LangChain agent 7 tools: pay, check balance, swap tokens, execute DeFi protocols, poll async requests, get vault info, and handle x402 paywalls.
pip install langchain-axonBefore using this toolkit, you need an Axon vault and a registered bot:
-
Deploy a vault — Go to app.axonfi.xyz, connect your wallet, and deploy a vault. The vault is a non-custodial smart contract that holds your funds. You'll get a vault address (e.g.
0xb8e3...). -
Fund the vault — Send USDC (or any ERC-20) to your vault address. Anyone can deposit.
-
Register a bot — In the dashboard, go to your vault → Bots → Add Bot. You can generate a new keypair (downloads a keystore file) or bring your own public key. Set spending limits and policies.
-
Get the bot key — Your agent needs the bot's private key to sign payment intents. Either use the keystore file + passphrase, or export the raw private key.
Your wallet (vault owner) stays secure — the bot key can only sign intents within the policies you set. The bot never touches gas or holds funds.
| Chain | ID | Status |
|---|---|---|
| Base | 8453 | Live |
| Arbitrum One | 42161 | Live |
| Ethereum | 1 | Coming soon |
| Chain | ID | Status |
|---|---|---|
| Base Sepolia | 84532 | Live |
| Arbitrum Sepolia | 421614 | Live |
from langchain_axon import AxonToolkit
from langchain_anthropic import ChatAnthropic
from axonfi import Chain
toolkit = AxonToolkit(
vault_address="0x...",
chain_id=Chain.BaseSepolia,
bot_private_key="0x...",
)
llm = ChatAnthropic(model="claude-sonnet-4-20250514")
agent = llm.bind_tools(toolkit.get_tools())toolkit = AxonToolkit(
vault_address="0x...",
chain_id=Chain.Base,
bot_keystore="bot-keystore.json",
bot_passphrase="my-secret-passphrase",
)AXON_VAULT_ADDRESS=0x...
AXON_CHAIN_ID=84532
AXON_BOT_PRIVATE_KEY=0x...
# or
AXON_BOT_KEYSTORE_PATH=bot-keystore.json
AXON_BOT_PASSPHRASE=my-secret-passphrase| Tool | Description |
|---|---|
axon_pay |
Send a payment from the vault |
axon_balance |
Check vault token balance |
axon_swap |
In-vault token rebalance |
axon_execute |
DeFi protocol interaction (approve → call → revoke) |
axon_poll |
Poll async payment/swap/execute status |
axon_vault_info |
Get vault status, owner, paused state |
axon_x402 |
Handle HTTP 402 Payment Required paywalls |
from langchain_axon import AxonPay, AxonBalance
from axonfi import AxonClientSync, Chain
client = AxonClientSync(
vault_address="0x...",
chain_id=Chain.BaseSepolia,
bot_private_key="0x...",
)
pay_tool = AxonPay(client=client)
balance_tool = AxonBalance(client=client, chain_id=Chain.BaseSepolia)import os
from langchain_axon import AxonToolkit
from langchain_anthropic import ChatAnthropic
from langchain_core.messages import HumanMessage, SystemMessage, ToolMessage
from axonfi import Chain
toolkit = AxonToolkit(
vault_address=os.environ["AXON_VAULT_ADDRESS"],
chain_id=Chain.BaseSepolia,
bot_private_key=os.environ["AXON_BOT_PRIVATE_KEY"],
)
tools = toolkit.get_tools()
llm = ChatAnthropic(model="claude-sonnet-4-20250514", temperature=0)
llm_with_tools = llm.bind_tools(tools)
messages = [
SystemMessage(content="You are an AI agent with an Axon payment vault."),
HumanMessage(content="Check my USDC balance then send 1 USDC to 0xRecipient"),
]
# Agent loop
while True:
response = llm_with_tools.invoke(messages)
messages.append(response)
if not response.tool_calls:
print(response.content)
break
for call in response.tool_calls:
tool = next(t for t in tools if t.name == call["name"])
result = tool.invoke(call["args"])
messages.append(ToolMessage(content=result, tool_call_id=call["id"]))