Atomic Agents
Build controlled AI applications from composable, typed Python components.
- Source repo
- Eigenwise/atomic-agents
- Stars
- ★ 6.3k
- Last updated
- today
- License
- MIT
- Primary language
- Python
- FA score
- 64/100 · Some gaps
At a glance
- How it runs
- Works with
- Universal · cross-platformOpenAI API · Claude API
- Cost
- Free software; you pay for model usage
- Setup effort
- Low · running in minutes
- You'll need
- Typical use
- A Python backend team can require model responses to match Pydantic fields before passing them into business logic.
- Not a fit if
- Teams that need a ready-to-deploy end-user agent product
- Users who want a visual builder instead of writing Python orchestration
- Teams unwilling to own their own service layer, storage, and deployment
- Source review
- 64/100 · Some gaps
What does this agent do, and when should you use it?
Atomic Agents is a lightweight Python framework for composing agents, tools, and context providers into agentic AI pipelines. Its core library supplies AtomicAgent, AgentConfig, typed I/O schemas, SystemPromptGenerator, ChatHistory, and dynamic-context interfaces, with Pydantic and Instructor handling structured outputs. Developers write the control flow in Python, so the framework runs inside an application or service rather than acting as a standalone hosted agent. The monorepo also includes the atomic-assembler component CLI, atomic-examples, and the atomic-forge tool collection. OpenAI is included by default, while Instructor provides documented paths to Anthropic, Gemini, Groq, Ollama, Mistral, Cohere, and OpenAI-compatible APIs. It fits teams that prioritize explicit orchestration, reusable components, and validated outputs, provided they are prepared to own deployment and production workflow design.
An application defines input and output contracts as Pydantic models derived from BaseIOSchema, describes behavior through SystemPromptGenerator, and passes an Instructor client, model, prompt generator, and optional ChatHistory into AgentConfig. AtomicAgent.run() accepts typed input, calls the configured model API, and returns an object constrained by the selected output schema. Runtime information can be injected into the system prompt by implementing BaseDynamicContextProvider.get_info() and attaching the provider with register_context_provider(). Agents and tools can be chained by making one component's output schema match the next component's input schema; the documented query-agent example targets SearXNGSearchTool.input_schema directly. The installed atomic CLI opens Atomic Assembler, which downloads selected Atomic Forge tools. Listed tools cover arXiv, BoCha, Hacker News, SearXNG, Tavily, Wikipedia, weather, PDF reading, webpage scraping, YouTube transcripts, date and time, and calculation, while repository examples cover chat, image extraction, research, RAG, web search, tool routing, and video-to-structured-data workflows.
- A Python backend team can require model responses to match Pydantic fields before passing them into business logic.
- An engineer building a search or research pipeline can chain query generation, a SearXNG-style search tool, and answer generation through compatible schemas.
- A RAG application team can implement
BaseDynamicContextProviderto inject retrieved material into an agent's system prompt at runtime. - A project that may change model vendors can preserve its agents and schemas while replacing the Instructor client for OpenAI, Anthropic, Gemini, Groq, Ollama, or a compatible API.
- A prototype developer can use Atomic Assembler to download only the search, PDF, weather, or YouTube tools needed by the application.
- A production engineering team can use the Hooks System example as a basis for monitoring, performance metrics, error handling, and retry behavior.
How do you install or deploy this agent?
You need Python, network access, and valid credentials for the chosen model provider. The supplied material does not state a minimum Python version or prescribe credential environment-variable names. OpenAI support is included with the default package:
pip install atomic-agentsInstall the appropriate Instructor extra for another provider:
pip install instructor[groq]
pip install instructor[anthropic]
pip install instructor[google-genai]For local development from source:
git clone https://github.com/eigenwise/atomic-agents.git
cd atomic-agents
uv syncTo install every workspace package, including examples and tools:
uv sync --all-packagesHow do you use this agent?
Configure credentials as required by the selected provider SDK; the supplied material does not specify an exact environment variable. This documented OpenAI pattern sends a message and prints a schema-validated response plus three follow-up questions:
from pydantic import Field
from openai import OpenAI
import instructor
from atomic_agents import AtomicAgent, AgentConfig, BasicChatInputSchema, BaseIOSchema
from atomic_agents.context import SystemPromptGenerator, ChatHistory
class CustomOutputSchema(BaseIOSchema):
"""Custom structured response."""
chat_message: str = Field(..., description="The chat message from the agent.")
suggested_questions: list[str] = Field(..., description="Suggested follow-up questions.")
system_prompt_generator = SystemPromptGenerator(
background=["This assistant is knowledgeable, helpful, and suggests follow-up questions."],
steps=[
"Analyze the user's input to understand the context and intent.",
"Formulate a relevant and informative response.",
"Generate 3 suggested follow-up questions for the user."
],
output_instructions=[
"Provide clear and concise information in response to user queries.",
"Conclude each response with 3 relevant suggested questions for the user."
]
)
client = instructor.from_openai(OpenAI())
agent = AtomicAgent[BasicChatInputSchema, CustomOutputSchema](
config=AgentConfig(
client=client,
model="gpt-5-mini",
system_prompt_generator=system_prompt_generator,
history=ChatHistory(),
)
)
if __name__ == "__main__":
user_input = "Tell me about atomic agents framework"
response = agent.run(BasicChatInputSchema(chat_message=user_input))
print(f"Agent: {response.chat_message}")
print("Suggested questions:")
for question in response.suggested_questions:
print(f"- {question}")Launch the installed Atomic Assembler menu to download tools:
atomicFrom a cloned repository managed with uv, run:
uv run atomicWhat are this agent's strengths and limitations?
BaseIOSchema, Pydantic, and Instructor provide explicit, validated input and output contracts instead of relying only on free-form text.- Agents, tools, and context providers are designed as single-purpose components that can be composed or replaced through compatible schemas.
- Control flow remains ordinary Python, allowing teams to apply familiar testing, review, and error-handling practices.
- The documented provider surface includes OpenAI, Anthropic, Gemini, Groq, Ollama, Mistral, Cohere, and OpenAI-compatible APIs.
- The repository includes both quickstarts and fuller examples for RAG, research, search, multimodal extraction, orchestration, and hooks.
- This is an application framework rather than a deployable end-user agent; teams must supply their own service layer, interface, storage, and infrastructure.
- Runtime operation depends on an external or local model provider, whose credentials, pricing, rate limits, and availability remain outside the framework.
- Non-OpenAI providers require additional Instructor extras and may require client-configuration changes.
- Schema alignment and explicit Python orchestration improve control but leave workflow design, state management, and component integration to the developer.
- The supplied material does not state a minimum Python version, a production deployment recipe, or one standard credential configuration.
- Version 2.0 is identified as a major release, but the supplied material does not enumerate its migration changes, leaving upgrade effort from 1.x to be assessed.
How does this agent compare with similar options?
Key facts side by side with the most closely related agents.
| Agent | Source review | Form / cost | Stars | Updated | Language | Full support on |
|---|---|---|---|---|---|---|
| Atomic Agents This agent | 64 · Some gaps | Library / SDKFree + model costs | ★ 6.3k | today | Python | OpenAI API · Claude API |
| Mirascope | 55 · Major gaps | Library / SDKFree + model costs | ★ 1.5k | 1d ago | Python | Claude API |
| Agentica | 63 · Some gaps | CLIFree + model costs | ★ 356 | today | Python | OpenAI API · Claude API |
| Qwen Code | 54 · Major gaps | CLIFree + model costs | ★ 29k | today | TypeScript | OpenAI API · Claude API |
How does FollowAgents rate this agent?
Why each dimension lost points
The framework centers on explicit Python configuration, typed input/output schemas, and opt-in tool composition, while the quality workflow uses contents: read. The README also diagrams prompt contents, and external calls generally depend on clients and tools selected by the developer, providing meaningful control over privilege, data flow, and effects. Deductions apply because no uniform user-confirmation protocol, effect classification, outbound-data inventory, secret-redaction mechanism, or retention policy is shown; API-key handling is demonstrated only through environment variables. reset_history offers limited state recovery but not transactional rollback for external actions. Dependencies are constrained and Instructor is exactly pinned, but many packages use ranges, CI installs the latest uv release, Actions are tag-pinned rather than commit-pinned, and no vulnerability scanning or supply-chain policy is shown. The license, author, email, and repository attribution are clear, supporting full source-attribution credit; the unverified publisher status is treated as unknown rather than suspicious.
Tests cover synchronous, asynchronous, streaming, history synchronization, schema strictness, hook isolation, and MiniMax integration, with mocks keeping ordinary unit tests independent of live services. Live integration tests explicitly skip when credentials are unavailable. Declared dependencies and supported Python versions provide an ordinary installation baseline. The major deduction is internal inconsistency: pyproject declares version 2.10.0, Python 3.12+, and Textual 5.x, while requirements.txt still requests atomic-agents 1.x, a different Pydantic lower bound, and Textual 0.82.x, creating divergent installation paths. Workflows define test execution, but this static assessment cannot establish that they passed. Tests demonstrate error hooks and ValidationError behavior, yet the supplied source does not show comprehensive, actionable user-facing failure messages.
The README clearly targets developers and covers chat, RAG, research, search, orchestration, multimodal analysis, video processing, and custom tools, thoroughly documenting audiences and scenarios. Generic input/output schemas, context providers, swappable model clients, and Python-controlled flow provide strong adaptability. Deductions apply because much provider compatibility is inherited from Instructor and described broadly, while the framework does not show a uniform capability declaration or permission boundary. Schemas, prompts, and orchestration code can express precise routing, but safety confirmations remain application-defined. Python 3.12+, provider extras, and credential requirements are documented, although the conflicting requirements file weakens environment certainty.
The README provides a table of contents, concepts, diagrams, installation, project structure, provider compatibility, support, contribution, and license sections, giving it strong information architecture and onboarding. A quick example and numerous complete examples are provided. Naming is mostly stable around AtomicAgent, AgentConfig, schemas, and context providers, but Atomic Forge, Atomic Assembler, CLI packaging, and stale requirements blur version and product boundaries. Beta status and provider dependencies are disclosed, yet there is no concentrated account of known limitations, privacy constraints, or side effects. MIT metadata and the complete license text agree, justifying full license credit. A package version and a v2 announcement exist, but the supplied material lacks a substantive changelog or complete migration record. The author email, sponsorship links, contribution path, and community channels identify an update path, though individual versus organizational responsibility and verified publisher identity remain unclear.
Pydantic-structured outputs, synchronous and asynchronous APIs, streaming, history management, and composable tools make results directly usable in software pipelines, strongly supporting output usability. Compared with raw model calls, schemas, context providers, hooks, and modular composition offer meaningful added value; however, several benefits derive from Instructor and Pydantic, and no comparative evidence quantifies unique gains, so marginal value is not maximal. Lightweight positioning and selective tool installation support favorable costs, but the sources do not analyze model expense, latency, retry overhead, context growth, or provider tradeoffs.
Many structural README claims can be traced to pyproject, workflows, and tests, including dependencies, CLI exposure, structured outputs, history, streaming, and provider adaptation; these sources provide moderate corroboration. Deductions apply because broad claims such as predictable, reliable, extremely lightweight, and comprehensive provider compatibility are not fully defined or measured in the supplied static evidence. Badges and workflow definitions do not establish execution or success in this review, and live MiniMax tests skip without credentials. The documentation does not consistently separate design goals, capabilities inherited from dependencies, mocked test observations, and empirically validated runtime conclusions.
- Do not treat pyproject.toml and requirements.txt as interchangeable environment specifications; they conflict on the framework major version, Pydantic lower bound, and Textual major version, so confirm the authoritative installation path for this revision.
- Prompts, chat history, dynamic context, and tool inputs may be transmitted to third-party model providers; implement data classification, redaction, retention, and user-consent controls before production use.
- The framework does not provide a uniform confirmation or rollback protocol for external side effects; add previews, confirmation gates, idempotency, and compensation at the application layer for search, download, scraping, and custom tools.
- Do not interpret CI badges, workflow definitions, or conditionally skipped live tests as independent proof that this revision passed execution-based verification.
Recent releases
Latest entries from the project's GitHub Releases. Notes are quoted from upstream as written, not rewritten or tested by FollowAgents.
-
Release notes excerpt
Released 2026-10-15. Firecrawl Search, FXMacroData and Phoenix tracing shipped earlier the same day in 2.11.0. Changes - Discover every page of MCP tools, resources and prompts. Propagate template continuation errors instead of silently dropping them. - Resolve MCP schema references to non-object definitions and decode escaped definition names. - Parse JSON text from real MCP SDK results when structured content is absent. Preserve precedence for present structured content, including empty values. …View on GitHub ↗ -
Release notes excerpt
What's New Arize Phoenix / OpenInference tracing Atomic Agents now ships an optional OpenInference instrumentor. Install atomic-agents[observability] (or just have arize-phoenix-otel installed) and phoenix.otel.register(auto_instrument=True) picks it up automatically. Features - AGENT span per AtomicAgent.run / run_async / run_stream / run_async_stream, named Class[InputSchema, OutputSchema].run, with input/output JSON and atomic_agents.* attributes (model, mode, schema names, history size, context providers, static prompt hash) …View on GitHub ↗ -
Release notes excerpt
What's New Bug Fixes - ChatHistory.copy() no longer serializes and re-imports message classes, so an agent can be created with a history that contains schemas defined inside a function or factory (#288, thanks @YaoxinHuang) - MCP tools with nullable fields ({"type": ["string", "null"]}) no longer disappear from discovery; type arrays resolve to unions and null maps to None instead of Any (#283, thanks @Shy7777) Atomic Forge - New serply_search tool: Google web, News and Scholar search through the Serply API (#284, thanks @googio) Full Changelog …View on GitHub ↗