Skip to content

Conversation

@ucegbe
Copy link
Contributor

@ucegbe ucegbe commented Jun 13, 2025

Description


Changes:

  • Added coinbase-agentkit-strands-agents package in python/framework-extensions/strands-agents/
  • Provides get_strands_tools() function to convert AgentKit actions into Strands-Agents-compatible tools
  • Added example chatbot demonstrating the integration in python/examples/strands-agents-cdp-server-chatbot/
  • Includes automatic type hint inference from AgentKit action schemas
  • Follows established patterns from other framework extensions (langchain, openai-agents-sdk)

This enables developers using Strands Agents to leverage all existing AgentKit CDP actions (wallet operations, token transfers, trading, etc.) with minimal setup.

Tests


Chatbot: python/examples/strands-agents-cdp-server-chatbot/chatbot.py
Network: Base Sepolia
Setup: Configured with CDP API credentials

Prompt: request tokens from faucet

<thinking>The user wants to request tokens from the faucet. 

First, I need to determine which network the wallet is connected to. The faucet is only available on base-sepolia, ethereum-sepolia, and solana-devnet networks. If the wallet is on one of these networks, I can proceed with the faucet request. If not, I'll need to inform the user and suggest alternative funding methods.

According to the policy:
- Must check wallet network before any faucet operations
- Faucet only allowed on specified testnets
- Need to verify network ID via wallet details

Next step: Get wallet details to check current network ID and confirm eligibility for faucet usage.</thinking>


Tool #1: WalletActionProvider_get_wallet_details
<thinking>The wallet is connected to the base-sepolia network, which is eligible for faucet requests. The user hasn't specified an asset, so I'll default to ETH per faucet policy. Next step: Use the faucet tool to request ETH tokens since base-sepolia allows ETH faucets.</thinking> 
Tool #2: CdpApiActionProvider_request_faucet_funds
<thinking>The faucet transaction was successful. The user received ETH tokens on base-sepolia with transaction hash provided. Now I need to inform the user about the completed action and provide the transaction details as confirmation.</thinking> Testnet ETH tokens received via faucet. Transaction hash: 0x2004cc22080b977ba86a966fa23211245exxxxxxxxx<thinking>The faucet transaction was successful. The user received ETH tokens on base-sepolia with transaction hash provided. Now I need to inform the user about the completed action and provide the transaction details as confirmation.</thinking> Testnet ETH tokens received via faucet. Transaction hash: 0x2004cc22080b977ba86xxxxxx

Checklist


  • Added documentation to all relevant README.md files
  • Added a changelog entry
  • Code follows the project's style guidelines
  • Self-review of code completed
  • No breaking changes introduced

0xRAG and others added 30 commits February 19, 2025 18:50
* add privy and moonwell logos

* Update privy.svg

* Update privy.svg

* Update README.md
* readme mnemonic phrase import updates

* expanding upon import description
* chore: fix publish_nightly

* chore: update readme
* supported networks updates

* adding section graphic

* feedback

* enabling light/dark mode, adding ethereum, zora

* evm support note

* adding light mode to moonwell
* Created base create-onchain-agent package

* Added base templates/next template

* Improved CLI handling of wallet provider

* Improve responsiveness of UI

* Finished working out what a agent route looks like

* Implemented API routes for CDV, Viem, Privy and Solana routes

* Refactored naming of route configuration and options

* Setup CLI for testing

* Added branching to CLI for network -> wallet provider selection

* chore: handling defaults in CLI

* chore: refactored api routes to better reflect network/walletProvider combinations

* fix: changes after rebase

* chore: cleanup files better after refactor

* feat: improve CLI display

* fix: adressed feedback

* feat: improved the cli logged messages

* refactor: types and constants out of utils

* refactor: refactored constants and types out of utils

* refactor: fileSystem out of cli

* feat: coinbase branding improvements

* feat: improved .env.local created format

* feat: improved .env.local created format

* feat: parse markdown when displaying agent messages

* chore: added comments to files where agents get created

* chore: refactored useAgent and commented

* chore: added base project README

* feat: added wallet provider descriptions to cli

* bump: 0.1.0

* fix: added files for npm

* chore: improved readme

* chore: removed @coinbase from package.json

* chore: added basis for prettier and lint

* chore: cli readme feedback

* chore: template readme feedback

* chore: add coinbase to package description

* chore: fixed prettier and ran

* chore: fixed lint and ran

* fix: package.lock

* bump: 0.1.1

* chore: typescript readme

* chore: fix constants lint error

* feat: add dynamic message modifier and faucet to template

* chore: comment regarding faucet

* chore: fixed package.lock

* fix: typo in readme

* chore: updated readme to better reflect the outcome of create-onchain-agent

* bump: 0.1.2

* feat: added wallet persistance for cdp

* chore: updated package-lock after bump
* feat: initial python cli tool

* feat: chatbot.ts generation via templating

* feat: overhaul cli for devx and branding

* chore: improved readme in template

* chore: readme for create-onchain-agent

* chore: commented generated chatbot.py

* feat: pyproject.toml passes in package name from cli

* chore: cleaned up some new lines creating by templating engine

* chore: updated readmes and comments

* chore: fix copier ignoring poetry.lock and copier.yml

* chore: updated python readme

* fix: typo in readme
* bump: release 0.1.3 hotfix

* chore: update package-lock
* fix: cli tool does not bundle template, and must read them from somewhere. temp fix is github

* chore: created/updated changelog

* bump: python create-onchain-agent to 0.1.1

* fix: rename variable for python code style
* feat: added guard to cli to ensure python supported version

* fix: readme

* fix: removed 12 from allowed_minors list. Was there for testing

* chore: updated requirement docs
* feat: added gha for npm create-onchain-agent

* chore: updated secret to NPM_TOKEN_CREATE_ONCHAIN_AGENT

* chore: pr feedback

* chore: reverted env secret to shared NPM_TOKEN

* chore: updated gha name

* chore: pr feedback
* chore: added changelog to create-onchain-agent

* chore: updated package-lock
…checksum to avoid errors (#460)

Sometimes the address given by explorers/wallets isn't in the right format
@phdargen
Copy link
Contributor

Hi @ucegbe, this looks great to me, thanks for the integration! Just a few comments:

  • please rebase against main, note that following feat: validate CDP/x402 upgrades #785 CdpEvmServerWalletProvider needs to be renamed to CdpEvmWalletProvider in the chatbot example

  • add a .env.local as in other examples

  • I could not find how to activate model support for us.amazon.nova-premier-v1:0. Maybe its not available in my region? In that case, it might be better to use a model that is more broadly accessible like nova pro

  • please make sure to run make format/lint before you commit

# Create a BedrockModel
bedrock_model = BedrockModel(
model_id="us.amazon.nova-premier-v1:0",
region_name='us-east-1',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this use AWS_REGION from env here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for spotting, made the change to use the region variable

user_input = input("\nPrompt: ")
if user_input.lower() == "exit":
break

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For empty prompts (pressing enter by accident), the chatbot crashes with botocore.errorfactory.ValidationException: An error occurred (ValidationException) when calling the ConverseStream operation: The text field in the ContentBlock object at messages.0.content.0 is blank. Add text to the text field, and try again.

Suggest to add:

if not user_input.strip(): continue

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this was an oversight, fixed!

ucegbe and others added 3 commits July 23, 2025 14:50
proper CD wallet library import
included direction for Bedrock API keys
lint check
modification to strands chatbot example
@ucegbe
Copy link
Contributor Author

ucegbe commented Jul 23, 2025

I have made teh changes requested above, rebased against main and applied my commits.
Also did a lint check on required files.
Please let me know if I missed anything else.
Cheers.

validate_environment()

# Load environment variables
load_dotenv()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think load_dotenv() needs to be before validate_environment()

@phdargen
Copy link
Contributor

I have made teh changes requested above, rebased against main and applied my commits. Also did a lint check on required files. Please let me know if I missed anything else. Cheers.

Thanks for the quick turnaround! Changes look good, only one follow up above.

Also would be appreciated if you could add the framework extension to the project README (https://github.com/coinbase/agentkit/blob/main/python/README.md)

@ucegbe
Copy link
Contributor Author

ucegbe commented Jul 24, 2025

sorry about that! Made all the changes.

Cheers

enforcing region env variable to be set
@phdargen
Copy link
Contributor

sorry about that! Made all the changes.

Cheers

Great, thanks! I tested it once more and think we are ready to go @CarsonRoscoe

* unwrap weth action

* updated docs

* description fix, updated README

* changeset updated
Copy link
Contributor

@CarsonRoscoe CarsonRoscoe left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ucegbe It looks great, thank you for the contribution!

One last thing to resolve, we require signed commits, and sadly, the first two commits in this PR (3242330,095c3f7) were not signed, and then there's two other commits scattered in there that are not being associated with your account, but they are to your name.

Please rebase against main and resign all commits. That should resolve it

@ucegbe
Copy link
Contributor Author

ucegbe commented Jul 25, 2025

Updated PR at #798

@ucegbe ucegbe mentioned this pull request Jul 25, 2025
5 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation example New example agent framework extension New framework extension python

Development

Successfully merging this pull request may close these issues.