Observed since 20 Oct, 22:39 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
A general-purpose Python framework for building LLM agents and multi-agent systems, with tools, memory, retrieval / RAG, context engineering, guardrails, human-in-the-loop, and observability.
"Four lines of code, an agent with memory."
A general-purpose Python framework for building LLM agents and multi-agent systems, with tools, memory, retrieval / RAG, context engineering, guardrails, human-in-the-loop, and observability built in. Async-first, fully typed, and easy to debug: a built-in LLM debugger pinpoints a failed run's first bad step, root cause, and fix.
pip install agentmaker
pip install "agentmaker[all]" # every optional extra below
Requires Python 3.12+. The core install already covers multi-provider LLM calls, structured output, tool-argument validation, and local hybrid retrieval (vectors plus CJK-aware keyword search). The optional extras below add the rest:
| Extra | Adds |
|---|---|
anthropic | Anthropic native protocol adapter |
gemini | Google Gemini native protocol adapter |
search | SearchTool backends: DuckDuckGo (no key needed), Tavily, Brave, SerpAPI |
rag | Document loading for RAG: PDF / DOCX / HTML to Markdown |
rerank | Cohere multilingual reranker |
mcp | MCP (Model Context Protocol) tool integration |
otel | OpenTelemetry trace export |
devtools | Trace Detective: local web UI for diagnosing agent runs |
Define a tool, hand it to an agent, and the model calls it when it needs to:
from agentmaker import Agent, LLMClient, tool
@tool
def get_weather(city: str) -> str:
"""Return today's weather for a city.
Args:
city: The city name.
"""
return f"{city}: sunny, 24C"
agent = Agent("assistant", LLMClient("deepseek"), tools=[get_weather])
print(agent.run("What's the weather in Copenhagen?").final_output)
Every capability is a few more arguments to the same constructor. Here is that agent given semantic long-term memory, a model-invoked skill library, retrieved context, and an input guardrail:
from agentmaker import (Agent, LLMClient, Memory, MemoryStore, ContextBuilder, CallableSource, SkillLoader, CallableGuardrail)
from agentmaker.retrieval import build_sqlite_hybrid, OpenAIEmbedder
llm = LLMClient("openai")
memory = Memory(build_sqlite_hybrid(OpenAIEmbedder()), MemoryStore())
skills = SkillLoader("./skills")
agent = Agent(
"assistant", llm,
tools=[get_weather], # function calling
sources=[CallableSource("memory", memory.search)], # memory pulled into context each turn
context_builder=ContextBuilder(), # assemble context under a token budget
system_prompt=f"You are a helpful assistant.\nSkills:\n{skills.catalog()}", # model-invoked skills
input_guardrails=[CallableGuardrail(lambda t: len(t) < 4000, message="input too long")], # validate input
)
print(agent.run("Plan a day in Copenhagen, and remember I'm vegetarian.").final_output)
Every argument past llm is optional, so you add capabilities one at a time, and the same pattern reaches the rest of the framework: RAG retrieval as another sources= entry, MCP servers and sub-agents (AgentTool) as tools=, a SmartWriter that extracts and diffs memories instead of storing raw text, structured output and streaming, the PlanAgent / ReflectionAgent workflow recipes, plus sessions, checkpoints (human-in-the-loop), permissions, and history compaction. See the Highlights above for the full list.
For development, attach the trace-based agent debugger. When a run fails, DoctorHook prints an LLM-written diagnosis (first bad step, root cause, suggested fix) straight to your terminal:
from agentmaker import Agent, Tracer
from agentmaker.devtools import DoctorHook
tracer = Tracer()
agent = Agent("assistant", llm, tools=[get_weather], tracer=tracer, hooks=[DoctorHook(tracer)])
print(agent.run("What's the weather in Copenhagen?").final_output)
DoctorHook prints inline; for the full picture, python -m agentmaker.devtools opens Trace Detective, a local web page that visualizes a recorded run step by step (its LLM calls, tool calls, and guardrails) and, on demand, has an LLM pinpoint the first bad step, root cause, and fix. Both are themselves agentmaker agents, so the framework debugs its own runs. You debug agents with an agent.
examples/: sixteen runnable, numbered examples, from quickstart to skills.CHANGELOG.mdagentmaker>=0.1,<0.2.Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.2.0 | 13 Jul 2026 | 19 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 22:39 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:cf5498d6c0827751acee5aa215f02579ea0c2ad70287b0476d61d896a23e7156