Many advanced use-cases will require writing custom Toolkits. Here’s the general flow:
Create a class inheriting the agno.tools.Toolkit class.
Add your functions to the class.
Important: Include all the functions in the tools argument to the Toolkit constructor.
Now your Toolkit is ready to use with an Agent. For example:
shell_toolkit.py
Copy
Ask AI
from typing import Listfrom agno.agent import Agentfrom agno.tools import Toolkitfrom agno.utils.log import loggerclass ShellTools(Toolkit): def __init__(self, **kwargs): super().__init__(name="shell_tools", tools=[self.run_shell_command], **kwargs) def run_shell_command(self, args: List[str], tail: int = 100) -> str: """ Runs a shell command and returns the output or error. Args: args (List[str]): The command to run as a list of strings. tail (int): The number of lines to return from the output. Returns: str: The output of the command. """ import subprocess logger.info(f"Running shell command: {args}") try: logger.info(f"Running shell command: {args}") result = subprocess.run(args, capture_output=True, text=True) logger.debug(f"Result: {result}") logger.debug(f"Return code: {result.returncode}") if result.returncode != 0: return f"Error: {result.stderr}" # return only the last n lines of the output return "\n".join(result.stdout.split("\n")[-tail:]) except Exception as e: logger.warning(f"Failed to run shell command: {e}") return f"Error: {e}"agent = Agent(tools=[ShellTools()], show_tool_calls=True, markdown=True)agent.print_response("List all the files in my home directory.")