{"id":44545237,"url":"https://github.com/jentic/standard-agent","last_synced_at":"2026-02-13T19:13:14.680Z","repository":{"id":305912072,"uuid":"1017491481","full_name":"jentic/standard-agent","owner":"jentic","description":"The composable standard reasoning agent","archived":false,"fork":false,"pushed_at":"2026-01-22T17:37:05.000Z","size":1743,"stargazers_count":62,"open_issues_count":21,"forks_count":24,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-01-23T10:34:31.601Z","etag":null,"topics":["agent-framework","agents","ai","ai-agent","developer-tools","hacktoberfest","python","rewoo"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jentic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-10T16:02:18.000Z","updated_at":"2026-01-22T17:47:07.000Z","dependencies_parsed_at":"2025-08-07T11:18:55.329Z","dependency_job_id":"39157cba-9ed2-4270-8dc7-56a349ee23a0","html_url":"https://github.com/jentic/standard-agent","commit_stats":null,"previous_names":["jentic/standard-agent"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jentic/standard-agent","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jentic%2Fstandard-agent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jentic%2Fstandard-agent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jentic%2Fstandard-agent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jentic%2Fstandard-agent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jentic","download_url":"https://codeload.github.com/jentic/standard-agent/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jentic%2Fstandard-agent/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29414651,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-13T06:24:03.484Z","status":"ssl_error","status_checked_at":"2026-02-13T06:23:12.830Z","response_time":78,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent-framework","agents","ai","ai-agent","developer-tools","hacktoberfest","python","rewoo"],"created_at":"2026-02-13T19:13:13.843Z","updated_at":"2026-02-13T19:13:14.673Z","avatar_url":"https://github.com/jentic.png","language":"Python","readme":"# Standard Agent 🛠️ — Composable Agents\n\n\n[![Discord](https://img.shields.io/badge/JOIN%20OUR%20DISCORD-COMMUNITY-7289DA?style=plastic\u0026logo=discord\u0026logoColor=white)](https://discord.gg/yrxmDZWMqB)\n[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-3.0-40c463.svg)](https://github.com/jentic/standard-agent/blob/HEAD/CODE_OF_CONDUCT.md)\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/jentic/standard-agent/blob/HEAD/LICENSE)\n\n\n- [Quick Start](#quick-start)\n- [Usage Examples](#usage-examples)\n- [Project Layout](#project-layout)\n- [Core Runtime Objects](#core-runtime-objects)\n- [Extending the Library](#extending-the-library)\n- [Roadmap](#roadmap)\n- [Observability (optional)](#observability-optional)\n\n\u003e **Join our community!** Connect with contributors and users on [Discord](https://discord.gg/yrxmDZWMqB) to discuss ideas, ask questions, and collaborate on the Standard Agent repository.\n\n## Architecture Overview\n\n*Standard Agent* is a simple, modular library for building AI agents, with a composable core and plug‑in components. \n\nIt is *not* a complete agent with a nice user interface. It is a library that provides the core agent reasoning loop that bridges an LLM with tools, featuring a flexible design that allows you to swap out different LLMs, reasoning strategies, memory backends, and tool providers. A basic example CLI interface is provided, but you will generally have to provide your own system prompt, tool set and UI. [Jentic](https://jentic.com) can help with the tool set, but you can also roll your own.\n\n![Standard Agent architecture](docs/assets/standard_agent_architecture.png)\n\nIt is deliberately small so it can be easily read and understood (whether by you or your coding agent), and used with confidence. This is a *less is more* approach to agent development.  You can browse it to understand how agents work. You can use it to quickly build your own agents, skipping the boilerplate and focusing on business logic. \n\n*Standard Agent* excels when equipped with just-in-time tool loading, a paradigm that we advocate at [Jentic](https://jentic.com). This means dynamically loading (or \"late-binding\") tools at run-time depending on the specific goal or task at hand. This permits better context engineering, keeping the context uncluttered and the LLM focused on the tool details that matter, while eliminating practical limits on the number of tools that can be provided (here's a [blog post](https://jentic.com/blog/just-in-time-tooling) on the topic).\n\nWe hope the community will benefit from *Standard Agent* in the following ways:\n- A common project for reference implementations of common reasoning strategies (ReACT, ReWOO, LATS etc.)\n- An easy way to experiment with variations on reasoning strategies or new approaches\n- A way to perform apple-to-apple comparisons and evaluations of different reasoning strategies\n- An easy upgrade path for agents as better reasoning strategies emerge.\n\n\n## Quick Start\n\n### Installation\n\n```bash\n# Clone and set up the project\ngit clone \u003crepository-url\u003e\ncd standard-agent\n\n# Install dependencies\nmake install\n\n# Activate the virtual environment\nsource .venv/bin/activate\n\n# Run the agent\npython examples/cli_rewoo_api_agent.py\n```\n### Configuration\n\nBefore running the agent, you need to create a `.env` file in the root of the project to store your API keys and other secrets. The application will automatically load these variables.\n\n#### Quick Setup:\n1. Copy the provided template: `cp .env.example .env`\n2. Edit the `.env` file and replace placeholder values with your actual API keys\n3. At minimum, you need one LLM provider key to get started\n4. Add `JENTIC_AGENT_API_KEY` for out-of-the-box tool access (recommended)\n\nSee [.env.example](./.env.example) for the complete configuration template with detailed comments and setup instructions.\n\n#### Key Requirements:\n- **LLM Model**: `LLM_MODEL` - Choose your preferred model\n- **LLM Provider**: At least one API key (Anthropic, OpenAI, or Google)\n- **Tool Provider**: `JENTIC_AGENT_API_KEY` for turn-key access to capabilities based on 1500+ APIs (get yours at [jentic.com](https://jentic.com))\n\n\n### Usage Examples\n\n*Standard Agent* includes pre-built agent classes for a quick-start, but you can also compose your own agent from scratch. Both approaches are shown below.\n\n#### 1. Quick Start: Running a Pre-built Agent\n\nThis is the fastest way to get started. `ReWOOAgent` and `ReACTAgent` are subclasses of `StandardAgent` that are pre-configured with a reasoner, LLM, tools, and memory.\n\n```python\n# examples/cli_api_agent.py\nimport os\nfrom dotenv import load_dotenv\nfrom agents.prebuilt import ReWOOAgent, ReACTAgent\nfrom examples._cli_helpers import read_user_goal, print_result\n\n# Load API keys from .env file\nload_dotenv()\n\n# 1. Get the pre-built agent.\n# Choose a prebuilt profile (ReWOO or ReACT)\nagent = ReWOOAgent(model=os.getenv(\"LLM_MODEL\"))\n# agent = ReACTAgent(model=os.getenv(\"LLM_MODEL\"))\n\n# 2. Run the agent's main loop.\nprint(\"🤖 Agent is ready. Press Ctrl+C to exit.\")\nwhile True:\n    goal_text = None\n    try:\n        goal = read_user_goal()\n        if not goal:\n            continue\n        \n        result = agent.solve(goal)\n        print_result(result)\n\n    except KeyboardInterrupt:\n        print(\"\\n🤖 Bye!\")\n        break\n```\n\n#### 2. Custom: Compose Your Own Agent\n\nThe real power of *Standard Agent* comes from its **composable architecture**. Every component is swappable, allowing you to create custom agents tailored to your specific needs, without reimplementing a lot of code. Here's how to build agents from scratch by mixing and matching components.\n\n```python\n# main_build_your_own_agent.py\nimport os\nfrom dotenv import load_dotenv\n\n# Import the core agent class\nfrom agents.standard_agent import StandardAgent\n\n# Import different implementations for each layer\nfrom agents.llm.litellm import LiteLLM\nfrom agents.tools.jentic import JenticClient\nfrom agents.memory.dict_memory import DictMemory\n\n# Import reasoner components\nfrom agents.reasoner.rewoo import ReWOOReasoner\n\nfrom examples._cli_helpers import read_user_goal, print_result\n\nload_dotenv()\n\n# Step 1: Choose and configure your components\nllm = LiteLLM(model=\"gpt-4\")\ntools = JenticClient()\nmemory = DictMemory()\n\n# Step 2: Pick a reasoner profile (single-file implementation)\ncustom_reasoner = ReWOOReasoner(llm=llm, tools=tools, memory=memory)\n\n# Step 3: Wire everything together in the StandardAgent\nagent = StandardAgent(\n    llm=llm,\n    tools=tools,\n    memory=memory,\n    reasoner=custom_reasoner\n)\n\n# Step 4: Use your custom agent\nprint(\"🤖 Custom Agent is ready!\")\nwhile True:\n    goal_text = None\n    try:\n        goal = read_user_goal()\n        if not goal:\n            continue\n            \n        result = agent.solve(goal)\n        print_result(result)\n        \n    except KeyboardInterrupt:\n        print(\"\\n🤖 Bye!\")\n        break\n```\n\n\n## Architecture\n\n*Standard Agent* provides a composable architecture that allows you to swap out different LLMs, reasoning strategies, memory backends, and tool providers. This allows you to:\n\n- **Start simple** with pre-built agents like `ReWOOAgent`\n- **Gradually customize** by swapping individual components\n- **Experiment easily** with different LLMs, reasoning strategies, or tool providers\n- **Extend incrementally** by implementing new components that follow the same interfaces\n- **Mix and match** components from different sources without breaking existing code\n\nEach component follows well-defined interfaces (`BaseLLM`, `BaseMemory`, `JustInTimeToolingBase`, etc.), so they can be combined in any configuration that makes sense for you.\n\n### Project Layout\n\n```\n.\n├── agents/\n│   ├── standard_agent.py           # The main agent class orchestrating all components\n│   ├── prebuilt.py                 # Factory functions for pre-configured agents (e.g., ReWOO)\n│   ├── llm/                        # LLM wrappers (e.g., LiteLLM)\n│   ├── memory/                     # Memory backends (e.g., in-memory dictionary)\n│   ├── tools/                      # Tool integrations (e.g., Jentic client)\n│   └── reasoner/                   # Core reasoning and execution logic\n│       ├── base.py                 # Base classes and interfaces for reasoners\n│       ├── rewoo.py                # ReWOO (Plan → Execute → Reflect)\n│       └── react.py                # ReACT (Think → Act)\n│   ├── goal_preprocessor/          # [OPTIONAL] Goal preprocessor\n│\n├── utils/\n│   └── logger.py                   # Logging configuration\n│   └── observability/              # Observability framework \n│       └── exporters/              # OTLP backend exporters\n│\n├── examples/                       # Runnable scripts and helper snippets\n│\n├── tests/                          # Unit and integration tests\n├── Makefile                        # Commands for installation, testing, etc.\n├── pyproject.toml                  # Project and dependency metadata\n└── config.json                     # Agent configuration file\n```\n\n### Core Runtime Objects\n\n| Layer            | Class / Protocol                                                     | Notes                                                             |\n|------------------|----------------------------------------------------------------------|-------------------------------------------------------------------|\n| **Agent**        | `StandardAgent`                                                      | Owns Reasoner, LLM, Memory, and Tools                             |\n| **Reasoners**    | `ReWOOReasoner`, `ReACTReasoner`                                      | Each orchestrates a different reasoning strategy (profile).       |\n| **Memory**       | `MutableMapping`                                                         | A key-value store accessible to all components.                   |\n| **Tools**        | `JustInTimeToolingBase`                                              | Abstracts external actions (APIs, shell commands, etc.).          |\n| **LLM Wrapper**  | `BaseLLM`                                                            | Provides a uniform interface for interacting with different LLMs. |\n| **Goal Preprocessor** | `BaseGoalPreprocessor`                                            | [Optional] Preprocess goals before reasoning                      |\n\n\n### Reasoner Strategies\n\nThe library currently ships two reasoner strategies:\n\n- **ReWOOReasoner** (`agents/reasoner/rewoo.py`): Plan → Execute → Reflect  (arxiv [link](https://arxiv.org/abs/2305.18323))\n- **ReACTReasoner** (`agents/reasoner/react.py`): Think → Act (arxiv [link](https://arxiv.org/abs/2210.03629))\n\nEach profile exposes a `run(goal: str) -\u003e ReasoningResult` and produces a `transcript`. The agent synthesizes the final answer from the transcript.\n\nWe note that there are broadly two ways to implement agentic reasoning:\n\n- \"Explicit\" reasoning explicitly implements the reasoning strategy in the code that calls the LLM. ReWOO is more explicit.\n- \"Implicit\" reasoning lets the LLM steer the reasoning strategy, informed only by the system prompt. ReACT is more implicit.\n\nWe welcome contributions of new reasoning strategies anywhere on this spectrum. If you add a profile, please keep it as a single module that implements the `BaseReasoner` class and define its prompts in YAML under `agents/prompts/reasoners/`.\n\n### Extending the Library\n\nThe library is designed to be modular. Here are some common extension points:\n\n| Need                               | How to Implement                                                                                                                                                                     |\n|------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **Different reasoning strategy**   | Create a new `BaseReasoner` implementation (e.g., `TreeSearchReasoner`) and inject it into `StandardAgent`.                                                                          |\n| **New tool provider**              | Create a class that inherits from `JustInTimeToolingBase`, implement its methods, and pass it to your `StandardAgent`.                                                               |\n| **Persistent memory**              | Create a class that implements the `MutableMapping` interface (e.g., using Redis), and pass it to your `StandardAgent`.                                                              |\n| **New Planners, Executors, etc.**  | Create your own implementations of `Plan`, `ExecuteStep`, `Reflect`, or `SummarizeResult` to invent new reasoning capabilities, then compose them in a `SequentialReasoner`. |\n| **Pre-process or validate goals**  | Create a class that inherits from `BaseGoalPreprocessor` and pass it to `StandardAgent`. Use this to resolve conversational ambiguities, check for malicious intent, or sanitize inputs. |\n\n### [Observability](utils/observability/README.md) (optional)\n\nObservability is fully opt-in — if OpenTelemetry isn’t installed or initialized, it quietly does nothing.\n  - Powered by OpenTelemetry (OTel), exportable to any OTLP backend (Langfuse, Jaeger, Honeycomb, etc.)\n  - Plug-and-play exporters in utils/observability/exporters/ \n  - Simple API with the @observe decorator \n  - LLM-aware: capture token usage on @observe(llm=True) spans, aggregate at @observe(root=True)\n\n[Learn more](utils/observability/README.md).\n\n## Roadmap\nWe welcome all help implementing parts of the roadmap, or contributing new ideas. We will merge anything we think makes sense in this core library, and will link to all other relevant work.\n\n- Additional pre-built reasoner implementations (ReAct, ToT, Graph-of-Thought)\n- More out of the box composable parts to enable custom agents or reasoner implementations\n- Web dashboard (live agent state + logs)\n- Vector-store memory with RAG planning\n- Redis / VectorDB memory\n- More advanced CLI example with local file system tools\n- Async agent loop \u0026 concurrency-safe inboxes\n- Ideas are welcome! [Open an issue](https://github.com/jentic/standard-agent/issues) or [submit a pull request](https://github.com/jentic/standard-agent/pulls).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjentic%2Fstandard-agent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjentic%2Fstandard-agent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjentic%2Fstandard-agent/lists"}