Coinbase Agentkit Documentation¶
AgentKit¶
AgentKit is a framework for easily enabling AI agents to take actions onchain. It is designed to be framework-agnostic, so you can use it with any AI framework, and wallet-agnostic, so you can use it with any wallet.
Table of Contents¶
Getting Started¶
Prerequisites:
Installation¶
pip install coinbase-agentkit
Usage¶
Create an AgentKit instance¶
If no wallet or action providers are specified, the agent will use the CdpWalletProvider
and WalletActionProvider
action provider by default.
from coinbase_agentkit import AgentKit, AgentKitConfig
agent_kit = AgentKit()
Create an AgentKit instance with a specified wallet provider¶
from coinbase_agentkit import (
AgentKit,
AgentKitConfig,
CdpWalletProvider,
CdpWalletProviderConfig
)
wallet_provider = CdpWalletProvider(CdpWalletProviderConfig(
api_key_name="CDP API KEY NAME",
api_key_private="CDP API KEY PRIVATE KEY",
network_id="base-mainnet"
))
agent_kit = AgentKit(AgentKitConfig(
wallet_provider=wallet_provider
))
Create an AgentKit instance with specified action providers¶
from coinbase_agentkit import (
AgentKit,
AgentKitConfig,
cdp_api_action_provider,
pyth_action_provider
)
agent_kit = AgentKit(AgentKitConfig(
wallet_provider=wallet_provider,
action_providers=[
cdp_api_action_provider(
api_key_name="CDP API KEY NAME",
api_key_private="CDP API KEY PRIVATE KEY"
),
pyth_action_provider()
]
))
Use with a framework extension¶
Example using LangChain + OpenAI:
Prerequisites:
Set
OPENAI_API_KEY
environment variable
poetry add coinbase-agentkit-langchain langchain-openai langgraph
from coinbase_agentkit_langchain import get_langchain_tools
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
tools = get_langchain_tools(agent_kit)
llm = ChatOpenAI(model="gpt-4")
agent = create_react_agent(
llm=llm,
tools=tools
)
Creating an Action Provider¶
Action providers define the actions that an agent can take. They are created by subclassing the ActionProvider
abstract class.
from coinbase_agentkit import ActionProvider, WalletProvider
from coinbase_agentkit.network import Network
class MyActionProvider(ActionProvider[WalletProvider]):
def __init__(self):
super().__init__("my-action-provider", [])
# Define if the action provider supports the given network
def supports_network(self, network: Network) -> bool:
return True
Adding Actions to your Action Provider¶
Actions are defined using the @create_action
decorator. They can optionally use a wallet provider and must return a string.
Define the action schema using Pydantic:
from pydantic import BaseModel
class MyActionSchema(BaseModel):
my_field: str
Define the action:
from coinbase_agentkit import ActionProvider, WalletProvider, create_action
from coinbase_agentkit.network import Network
class MyActionProvider(ActionProvider[WalletProvider]):
def __init__(self):
super().__init__("my-action-provider", [])
@create_action(
name="my-action",
description="My action description",
schema=MyActionSchema
)
def my_action(self, args: dict[str, Any]) -> str:
return args["my_field"]
def supports_network(self, network: Network) -> bool:
return True
def my_action_provider():
return MyActionProvider()
Adding Actions that use a Wallet Provider¶
Actions that need access to a wallet provider can include it as their first parameter:
from coinbase_agentkit import ActionProvider, WalletProvider, create_action
class MyActionProvider(ActionProvider[WalletProvider]):
@create_action(
name="my-action",
description="My action description",
schema=MyActionSchema
)
def my_action(self, wallet_provider: WalletProvider, args: dict[str, Any]) -> str:
return wallet_provider.sign_message(args["my_field"])
Adding an Action Provider to your AgentKit instance¶
agent_kit = AgentKit(AgentKitConfig(
cdp_api_key_name="CDP API KEY NAME",
cdp_api_key_private="CDP API KEY PRIVATE KEY",
action_providers=[my_action_provider()]
))
Action Providers¶
This section provides a detailed list of all available action providers and their actions.
Basename
register_basename |
Registers a custom .base.eth or .basetest.eth domain name for the wallet address. |
CDP Wallet
deploy_contract |
Deploys a custom smart contract using specified Solidity version and constructor arguments. |
deploy_nft |
Deploys a standard ERC-721 NFT contract with configurable name, symbol, and metadata URI. |
deploy_token |
Deploys a standard ERC-20 token contract with configurable name, symbol, and initial supply. |
trade |
Executes a token swap between two assets at current market rates on mainnet networks. |
CDP API
fetch_price |
Retrieves the current price of a cryptocurrency from the CDP API. |
fetch_base_scan |
Fetches on-chain data from Base blockchain explorer via CDP API. |
Compound
supply |
Supplies collateral assets (WETH, CBETH, CBBTC, WSTETH, or USDC) to Compound. |
withdraw |
Withdraws previously supplied collateral assets from Compound. |
borrow |
Borrows base assets (WETH or USDC) from Compound using supplied collateral. |
repay |
Repays borrowed assets back to Compound. |
get_portfolio |
Retrieves portfolio details including collateral balances and borrowed amounts. |
ERC20
get_balance |
Retrieves the token balance for a specified address and ERC-20 contract. |
transfer |
Transfers a specified amount of ERC-20 tokens to a destination address. |
ERC721
get_balance |
Retrieves the NFT balance for a specified address and ERC-721 contract. |
transfer |
Transfers ownership of a specific NFT token to a destination address. |
mint |
Creates a new NFT token and assigns it to a specified destination address. |
Hyperbolic
generate_text |
Generate text using AI models. |
generate_image |
Generate images using AI models. |
generate_audio |
Generate text-to-speech audio. |
get_available_gpus |
Get available GPU resources. |
get_available_gpus_by_type |
Get GPUs filtered by model type. |
get_available_gpus_types |
Get list of available GPU types. |
get_gpu_status |
Check status of GPU resources. |
rent_compute |
Rent GPU compute resources. |
terminate_compute |
Terminate a rented GPU compute instance. |
get_current_balance |
Get current account balance. |
get_purchase_history |
Get purchase history. |
get_spend_history |
Get spending history. |
link_wallet_address |
Link a wallet address to your account. |
Morpho
deposit |
Deposits a specified amount of assets into a designated Morpho Vault. |
withdraw |
Withdraws a specified amount of assets from a designated Morpho Vault. |
Pyth
fetch_price |
Retrieves current price data from a specified Pyth price feed. |
fetch_price_feed_id |
Retrieves the unique price feed identifier for a given token symbol. |
SSH
ssh_connect |
Establishes an SSH connection to a remote server. |
remote_shell |
Executes shell commands on a remote server via SSH. |
ssh_status |
Checks status of SSH connections. |
ssh_list_connections |
Lists active SSH connections. |
ssh_disconnect |
Disconnects from an SSH server. |
ssh_add_host_key |
Adds an SSH host key to known_hosts. |
sftp_upload |
Uploads files to a remote server via SFTP. |
sftp_download |
Downloads files from a remote server via SFTP. |
Superfluid
create_flow |
Creates a new token streaming flow to a recipient address. |
delete_flow |
Deletes an existing token streaming flow. |
get_flow |
Gets details of an existing token streaming flow. |
account_details |
Fetches profile information and metadata for the authenticated Twitter account. |
account_mentions |
Retrieves recent mentions and interactions for the authenticated account. |
post_tweet |
Creates a new tweet on the authenticated Twitter account. |
post_tweet_reply |
Creates a reply to an existing tweet using the tweet's unique identifier. |
Wallet
get_wallet_details |
Retrieves wallet address, network info, balances, and provider details. |
get_balance |
Gets the native currency balance of the connected wallet. |
native_transfer |
Transfers native blockchain tokens (e.g., ETH) to a destination address. |
WETH
wrap_eth |
Converts native ETH to Wrapped ETH (WETH) on supported networks. |
WOW
buy_token |
Purchases WOW tokens from a contract using ETH based on bonding curve pricing. |
create_token |
Creates a new WOW memecoin with bonding curve functionality via Zora factory. |
sell_token |
Sells WOW tokens back to the contract for ETH based on bonding curve pricing. |
Wallet Providers¶
AgentKit supports the following wallet providers:
EVM:
CdpWalletProvider - Uses the Coinbase Developer Platform (CDP) API Wallet
EthAccountWalletProvider - Uses a local private key for any EVM-compatible chain
CdpWalletProvider¶
The CdpWalletProvider
is a wallet provider that uses the Coinbase Developer Platform (CDP) API Wallet.
Network Configuration¶
The CdpWalletProvider
can be configured to use a specific network by passing the network_id
parameter to the CdpWalletProviderConfig
. The network_id
is the ID of the network you want to use. You can find a list of supported networks on the CDP API docs.
from coinbase_agentkit import CdpWalletProvider, CdpWalletProviderConfig
wallet_provider = CdpWalletProvider(CdpWalletProviderConfig(
api_key_name="CDP API KEY NAME",
api_key_private="CDP API KEY PRIVATE KEY",
network_id="base-mainnet",
))
Configuring from an existing CDP API Wallet¶
If you already have a CDP API Wallet, you can configure the CdpWalletProvider
by passing the wallet
parameter to the configureWithWallet
method.
from coinbase_agentkit import CdpWalletProvider, CdpWalletProviderConfig
from cdp import Wallet
wallet_provider = CdpWalletProvider(CdpWalletProviderConfig(
wallet=wallet,
api_key_name="CDP API KEY NAME",
api_key_private="CDP API KEY PRIVATE KEY",
))
Configuring from a mnemonic phrase¶
The CdpWalletProvider
can be configured from a mnemonic phrase by passing the mnemonic_phrase
and network_id
parameters to the CdpWalletProviderConfig
. If network_id
is not defined, the CdpWalletProvider
will fall back to the env var NETWORK_ID
, and if that is not defined, it will default to base-sepolia
.
from coinbase_agentkit import CdpWalletProvider, CdpWalletProviderConfig
wallet_provider = CdpWalletProvider(CdpWalletProviderConfig(
mnemonic_phrase="MNEMONIC PHRASE",
network_id="base-sepolia",
))
Exporting a wallet¶
The CdpWalletProvider
can export a wallet by calling the export_wallet
method.
from coinbase_agentkit import CdpWalletProvider
wallet_provider = CdpWalletProvider(CdpWalletProviderConfig(
mnemonic_phrase="MNEMONIC PHRASE",
network_id="base-sepolia",
))
wallet_data = wallet_provider.export_wallet()
Importing a wallet from WalletData
JSON string¶
The CdpWalletProvider
can import a wallet from a WalletData
JSON string by passing the cdp_wallet_data
parameter to the CdpWalletProviderConfig
.
from coinbase_agentkit import CdpWalletProvider, CdpWalletProviderConfig
wallet_provider = CdpWalletProvider(CdpWalletProviderConfig(
wallet_data="WALLET DATA JSON STRING",
api_key_name="CDP API KEY NAME",
api_key_private="CDP API KEY PRIVATE KEY",
))
Configuring CdpWalletProvider
gas parameters¶
The CdpWalletProvider
also exposes parameters for effecting the gas calculations.
from coinbase_agentkit import CdpWalletProvider, CdpWalletProviderConfig
wallet_provider = CdpWalletProvider(CdpWalletProviderConfig(
wallet_data="WALLET DATA JSON STRING",
api_key_name="CDP API KEY NAME",
api_key_private="CDP API KEY PRIVATE KEY",
gas={
"gas_limit_multiplier": 2.0, # Adjusts gas limit estimation
"fee_per_gas_multiplier": 2.0 # Adjusts max fee per gas
}
))
Note: Gas parameters only impact the wallet_provider.send_transaction
behavior. Actions that do not rely on direct transaction calls, such as deploy_token
, deploy_contract
, and native_transfer
, remain unaffected.
EthAccountWalletProvider¶
Example usage with a private key:
import os
from eth_account import Account
from coinbase_agentkit import (
AgentKit,
AgentKitConfig,
EthAccountWalletProvider,
EthAccountWalletProviderConfig
)
# See here for creating a private key:
# https://web3py.readthedocs.io/en/stable/web3.eth.account.html#creating-a-private-key
private_key = os.environ.get("PRIVATE_KEY")
assert private_key is not None, "You must set PRIVATE_KEY environment variable"
assert private_key.startswith("0x"), "Private key must start with 0x hex prefix"
account = Account.from_key(private_key)
wallet_provider = EthAccountWalletProvider(
config=EthAccountWalletProviderConfig(
account=account,
chain_id="84532",
)
)
agent_kit = AgentKit(AgentKitConfig(
wallet_provider=wallet_provider
))
Configuring EthAccountWalletProvider
gas parameters¶
The EthAccountWalletProvider
also exposes parameters for effecting the gas calculations.
import os
from eth_account import Account
from coinbase_agentkit import (
AgentKit,
AgentKitConfig,
EthAccountWalletProvider,
EthAccountWalletProviderConfig
)
private_key = os.environ.get("PRIVATE_KEY")
assert private_key is not None, "You must set PRIVATE_KEY environment variable"
assert private_key.startswith("0x"), "Private key must start with 0x hex prefix"
account = Account.from_key(private_key)
wallet_provider = EthAccountWalletProvider(
config=EthAccountWalletProviderConfig(
account=account,
chain_id="84532",
gas={
"gas_limit_multiplier": 2,
"fee_per_gas_multiplier": 2
}
)
)
agent_kit = AgentKit(AgentKitConfig(
wallet_provider=wallet_provider
))
Configuring EthAccountWalletProvider
rpc url¶
The EthAccountWalletProvider
also exposes parameters for defining the rpc url manually.
import os
from eth_account import Account
from coinbase_agentkit import (
AgentKit,
AgentKitConfig,
EthAccountWalletProvider,
EthAccountWalletProviderConfig
)
private_key = os.environ.get("PRIVATE_KEY")
assert private_key is not None, "You must set PRIVATE_KEY environment variable"
assert private_key.startswith("0x"), "Private key must start with 0x hex prefix"
account = Account.from_key(private_key)
wallet_provider = EthAccountWalletProvider(
config=EthAccountWalletProviderConfig(
account=account,
rpc_url="https://sepolia.base.org",
)
)
agent_kit = AgentKit(AgentKitConfig(
wallet_provider=wallet_provider
))
SmartWalletProvider¶
The SmartWalletProvider
is a wallet provider that uses CDP Smart Wallets.
import os
from eth_account import Account
from coinbase_agentkit import (
AgentKit,
AgentKitConfig,
SmartWalletProvider,
SmartWalletProviderConfig
)
# See here for creating a private key:
# https://web3py.readthedocs.io/en/stable/web3.eth.account.html#creating-a-private-key
private_key = os.environ.get("PRIVATE_KEY")
assert private_key is not None, "You must set PRIVATE_KEY environment variable"
assert private_key.startswith("0x"), "Private key must start with 0x hex prefix"
signer = Account.from_key(private_key)
network_id = os.getenv("NETWORK_ID", "base-sepolia")
wallet_provider = SmartWalletProvider(SmartWalletProviderConfig(
network_id=network_id,
signer=signer,
smart_wallet_address=None, # If not provided, a new smart wallet will be created
paymaster_url=None, # Sponsor transactions: https://docs.cdp.coinbase.com/paymaster/docs/welcome
))
agent_kit = AgentKit(AgentKitConfig(
wallet_provider=wallet_provider
))
Contributing¶
See CONTRIBUTING.md for more information.