Skip to main content
A new class of research is emerging where giving models tools for structured thinking, like a scratchpad, greatly improves their reasoning capabilities. For example, by giving a model reasoning tools, we can greatly improve its reasoning capabilities by providing a dedicated space for working through the problem. This is a simple, yet effective approach to add reasoning to non-reasoning models. First published by Anthropic in this blog post, this technique has been practiced by many AI Engineers (including our own team) long before it was published.

Reasoning Tools

The first version of the Reasoning Tools, previously known as Thinking tools, was published by Anthropic in this blog post.
claude_reasoning_tools.py
from agno.agent import Agent
from agno.models.anthropic import Claude
from agno.tools.reasoning import ReasoningTools
from agno.tools.duckduckgo import DuckDuckGoTools

# Setup our Agent with the reasoning tools
reasoning_agent = Agent(
    model=Claude(id="claude-3-7-sonnet-latest"),
    tools=[
        ReasoningTools(add_instructions=True),
        DuckDuckGoTools(),
    ],
    instructions="Use tables where possible",
    markdown=True,
)

# Run the Agent
reasoning_agent.print_response(
    "What are the fastest cars in the market? Only the report, no other text.",
    stream=True,
    show_full_reasoning=True,
    stream_intermediate_steps=True,
)
See the Reasoning Tools documentation for more details.

Knowledge Tools

The Knowledge Tools take the Reasoning Tools one step further by allowing the Agent to search a knowledge base and analyze the results of their actions. KnowledgeTools = think + search + analyze
knowledge_tools.py
import os
from agno.agent import Agent
from agno.knowledge.embedder.openai import OpenAIEmbedder
from agno.knowledge.knowledge import Knowledge
from agno.models.openai import OpenAIChat
from agno.tools.knowledge import KnowledgeTools
from agno.vectordb.lancedb import LanceDb, SearchType


agno_docs = Knowledge(
    vector_db=LanceDb(
        uri="tmp/lancedb",
        table_name="agno_docs",
        search_type=SearchType.hybrid,
        embedder=OpenAIEmbedder(id="text-embedding-3-small"),
    ),
)


knowledge_tools = KnowledgeTools(
    knowledge=agno_docs,
    think=True,
    search=True,
    analyze=True,
    add_few_shot=True,
)


agent = Agent(
    model=OpenAIChat(id="gpt-5-mini"),
    tools=[knowledge_tools],
    markdown=True,
)


agno_docs.add_content(
    url="https://docs.agno.com/llms-full.txt"
)


agent.print_response("How do I build multi-agent teams with Agno?", stream=True)
See the Knowledge Tools documentation for more details.

Memory Tools

The Memory Tools allow the Agent to use memories to reason about the question and work through it step by step.
memory_tools.py
from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.models.openai import OpenAIChat
from agno.tools.memory import MemoryTools

# Create a database connection
db = SqliteDb(
    db_file="tmp/memory.db"
)

memory_tools = MemoryTools(
    db=db,
)

agent = Agent(
    model=OpenAIChat(id="gpt-5-mini"),
    tools=[memory_tools],
    markdown=True,
)

agent.print_response(
    "My name is John Doe and I like to hike in the mountains on weekends. "
    "I like to travel to new places and experience different cultures. "
    "I am planning to travel to Africa in December. ",
    user_id="john_doe@example.com",
    stream=True
)

# This won't use the session history, but instead will use the memory tools to get the memories
agent.print_response("What have you remembered about me?", stream=True, user_id="john_doe@example.com")
See the Memory Tools documentation for more details.

Workflow Tools

The Workflow Tools allow the Agent to execute a workflow and reason about the results.
workflow_tools.py
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.workflow import WorkflowTools

# Create your workflow
# ...

workflow_tools = WorkflowTools(
    workflow=blog_post_workflow,
)

agent = Agent(
    model=OpenAIChat(id="gpt-5-mini"),
    tools=[workflow_tools],
    markdown=True,
)

agent.print_response("Create a blog post on the topic: AI trends in 2024", stream=True)
See the Workflow Tools documentation for more details.

Developer Resources

I