Skip to main content

A minimalistic approach to building AI agents

Project description

🤖 KodeAgent: The Minimal Agent Engine

pypi codecov Documentation Status License: Apache 2.0 Known Vulnerabilities PyPI - Downloads Ruff

KodeAgent is a frameworkless, minimalistic approach to building AI agents. Written in ~2,000 lines of pure Python, KodeAgent is designed to be the robust reasoning core inside your larger system, not the entire platform.

KodeAgent Demo

✅ Why KodeAgent?

KodeAgent adheres to the Unix Philosophy: do one thing well and integrate seamlessly.

Use KodeAgent because it offers:

  • Scalable: Designed to be memoryless with zero overhead, KodeAgent perfectly integrates into serverless and high-throughput microservices (ephemeral tasks).
  • ReAct & CodeAct: KodeAgent supports both ReAct and CodeAct agent paradigms out-of-the-box, enabling agents to reason and act using tools or by generating and executing code.
  • LLM Agnostic: Built on LiteLLM, KodeAgent easily swaps between models (e.g., Gemini, OpenAI, and Claude) without changing your core logic.
  • Auto-Correction: Includes an internal "Observer" that monitors agent progress, detects loops or stalled plans, and provides corrective feedback to stay on track.
  • Lightweight Glass Box: Read the entire source and debug without fighting opaque abstraction layers. Follow the key abstractions and build something on your own!

✋ Why Not?

Also, here are a few reasons why you shouldn't use KodeAgent:

  • KodeAgent is actively evolving, meaning some aspects may change.
  • You want to use some of the well-known frameworks.
  • You need a full-fledged platform with built-in memory management.

🚀 Quick Start

Open In Colab

Install KodeAgent via pip:

pip install kodeagent

Or if you want to clone the KodeAgent GitHub repository locally and run from there, use:

git clone https://github.com/barun-saha/kodeagent.git

python -m venv venv
source venv/bin/activate
# venv\Scripts\activate.bat  # Windows

pip install -r requirements.txt

Now, in your application code, create a ReAct agent and run a task like this (see examples/_quick_start/kodeagent_quick_start.py):

from kodeagent import ReActAgent, print_response
from kodeagent.tools import read_webpage, search_web

agent = ReActAgent(
    name='Web agent',
    model_name='gemini/gemini-2.5-flash-lite',
    tools=[search_web, read_webpage],
    max_iterations=5,
)

for task in [
    'What are the festivals in Paris? How they differ from Kolkata?',
]:
    print(f'User: {task}')

    async for response in agent.run(task):
        print_response(response, only_final=True)

You can also create a CodeActAgent, which leverages the core CodeAct pattern to generate and execute Python code on the fly for complex tasks. For example:

from kodeagent import CodeActAgent
from kodeagent.tools import read_webpage, search_web, extract_as_markdown

agent = CodeActAgent(
    name='Web agent',
    model_name='gemini/gemini-2.0-flash-lite',
    tools=[search_web, read_webpage, extract_as_markdown],
    run_env='host',
    max_iterations=7,
    allowed_imports=[
        're', 'requests', 'ddgs', 'urllib', 'requests', 'bs4',
        'pathlib', 'urllib.parse', 'markitdown'
    ],
    pip_packages='ddgs~=9.5.2;beautifulsoup4~=4.14.2;"markitdown[all]";',
)

That's it! Your agent should start solving the task and keep streaming the updates. For more examples, including how to provide files as inputs, see the kodeagent.py module and API documentation.

API Configuration

KodeAgent uses LiteLLM for model access and Langfuse for observability. Set your API keys as environment variables or in a .env file:

Service Environment Variable
Gemini GOOGLE_API_KEY
OpenAI OPENAI_API_KEY
Anthropic ANTHROPIC_API_KEY
E2B Sandbox E2B_API_KEY
Langfuse LANGFUSE_PUBLIC_KEY, LANGFUSE_SECRET_KEY

Detailed configuration for various providers can be found in the LiteLLM documentation.

Code Execution

CodeActAgent executes LLM-generated code to leverage the tools. KodeAgent currently supports two different code run environments:

  • host: The Python code will be run on the system where you created this agent. In other words, where the application is running.
  • e2b: The Python code will be run on an E2B sandbox. You will need to set the E2B_API_KEY environment variable.

With host as the code running environment, no special steps are required, since it uses the current Python installation. However, with e2b, code (and tools) are copied to a different environment and are executed there. Therefore, some additional setup may be required.

You can also specify a work_dir to serve as a local workspace. For the e2b environment, any files generated by the agent in the sandbox will be automatically downloaded to this local work_dir. If specified, work_dir could be relative or absolute path, but it must exist; otherwise, a temporary directory will be created and used for each run.

from kodeagent import CodeActAgent

agent = CodeActAgent(
    name='Data Agent',
    model_name='gemini/gemini-2.0-flash-lite',
    run_env='e2b',
    work_dir='./agent_workspace',  # Local workspace directory to copy files to/from E2B
    # ... other parameters
)

For example, the Python modules that are allowed to be used in code should be explicitly specified using allowed_imports. In addition, any additional Python package that may need to be installed should be specified as a comma-separated list via pip_packages.

KodeAgent is under active development. Capabilities are limited. Use with caution.

🛠️ Tools

KodeAgent comes with the following built-in tools:

  • calculator: A simple calculator tool to perform basic arithmetic operations. It imports the ast, operator, and re Python libraries.
  • download_file: A tool to download a file from a given URL. It imports the requests, re, tempfile, pathlib, and urllib.parse Python libraries.
  • extract_as_markdown: A tool to read file contents and return as Markdown using MarkItDown. It imports the re, pathlib, urllib.parse, and markitdown Python libraries.
  • generate_image: A tool to generate an image based on a text prompt using the specified model. The (LiteLLM) model name to be used must be mentioned in the task, system prompt, or somehow. It imports the os, base64, and litellm Python libraries.
  • read_webpage: A tool to read a webpage using BeautifulSoup. It imports the re, requests, urllib.parse, and bs4 Python libraries.
  • search_arxiv: A tool to search arXiv for research papers and return summaries and links. It imports the arxiv library.
  • search_web: A web search tool using DuckDuckGo to fetch top search results. It imports the datetime, random, and time Python libraries.
  • search_wikipedia: A tool to search Wikipedia and return summaries and links. It imports the wikipedia library.
  • transcribe_audio: A tool to transcribe audio files using OpenAI's Whisper via Fireworks API. Need to set the FIREWORKS_API_KEY environment variable. It imports the os and requests Python libraries.
  • transcribe_youtube: A tool to fetch YouTube video transcripts. It imports the youtube_transcript_api library.

Check out the docstrings of these tools in the tools.py module for more details.

To add a new tool, use the @tool decorator from kodeagent.tools module. For example:

from kodeagent import tool

@tool
def my_tool(param1: str) -> str:
    """Description of the tool.
    Args:
        param1 (str): Description of param1.
    Returns:
        str: Description of the return value.
    """
    # Tool implementation here
    return 'result'

Module imports and all variables should be inside the tool function. If you're using CodeActAgent, KodeAgent will execute the tool function in isolation. For further details, refer to the API documentation. Note: async tools are not supported.

🔭 Observability

KodeAgent logs the LLM calls and usage using Langfuse. The LiteLLM calls set the trace ID to the task ID. The model name as well as the response format and retry attempts for the generations are also logged (see the screenshot below). To enable tracing, create your Langfuse account and set the LANGFUSE_PUBLIC_KEY, LANGFUSE_SECRET_KEY, and LANGFUSE_HOST environment variables. Read more about Langfuse integration with LiteLLM.

KodeAgent trace on Langfuse dashboard

⊷ Sequence Diagram for CodeAct Agent (via CodeRabbit)

sequenceDiagram
  autonumber
  actor User
  participant Agent
  participant Planner
  participant LLM as LLM/Prompts
  participant Tools

  User->>Agent: run(task)
  Agent->>Planner: create_plan(task)
  Planner->>LLM: request AgentPlan JSON (agent_plan.txt)
  LLM-->>Planner: AgentPlan JSON
  Planner-->>Agent: planner.plan set

  loop For each step
    Agent->>Planner: get_formatted_plan()
    Agent->>LLM: codeact prompt + {plan, history}
    LLM-->>Agent: Thought + Code
    Agent->>Tools: execute tool call(s)
    Tools-->>Agent: Observation
    Agent->>Planner: update_plan(thought, observation, task_id)
  end

  Agent-->>User: Final Answer / Failure (per codeact spec)

🧪 Run Tests

To run unit tests, use:

python -m pytest .\tests\unit -v --cov --cov-report=html

For integration tests involving calls to APIs, use:

python -m pytest .\tests\integration -v --cov --cov-report=html

Gemini and E2B API keys should be set in the .env file for integration tests to work.

A Kaggle notebook for benchmarking KodeAgent is also available.

🗺️ Roadmap & Contributions

To be updated.

🙏 Acknowledgement

KodeAgent heavily borrows code and ideas from different places, such as:

⚠️ DISCLAIMER & LIABILITY

AI agents can occasionally cause unintended or unpredictable side effects. We urge users to use KodeAgent with caution. Always review generated code and test agents rigorously in a constrained, non-production environment before deployment.

LIMITATION OF LIABILITY: By using this software, you agree that KodeAgent, its developers, contributors, supporters, and any other associated entities shall not be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kodeagent-0.7.2.tar.gz (73.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kodeagent-0.7.2-py3-none-any.whl (76.4 kB view details)

Uploaded Python 3

File details

Details for the file kodeagent-0.7.2.tar.gz.

File metadata

  • Download URL: kodeagent-0.7.2.tar.gz
  • Upload date:
  • Size: 73.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for kodeagent-0.7.2.tar.gz
Algorithm Hash digest
SHA256 8f0a2a88dc59cd4df97588a1f81195eb23ec9e3ced8d07745298a9edd60abd79
MD5 51acaa9675efc783677feec1a0a44417
BLAKE2b-256 3ac29316b7cf638f4e16f146b2c10218aa5ff0ade6444ff94857c516ad0f95de

See more details on using hashes here.

Provenance

The following attestation bundles were made for kodeagent-0.7.2.tar.gz:

Publisher: publish-to-pypi.yml on barun-saha/kodeagent

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kodeagent-0.7.2-py3-none-any.whl.

File metadata

  • Download URL: kodeagent-0.7.2-py3-none-any.whl
  • Upload date:
  • Size: 76.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for kodeagent-0.7.2-py3-none-any.whl
Algorithm Hash digest
SHA256 806a5573e4fa0260a92a981e55e6470ee164fa2487837c0d52d922d00c0f8ddb
MD5 1540a5bac19dd3605bd0b37188a95a06
BLAKE2b-256 28385067410f2f8ada23bbd617e688efccdfe15dad5447fa06f227e8891e1c0b

See more details on using hashes here.

Provenance

The following attestation bundles were made for kodeagent-0.7.2-py3-none-any.whl:

Publisher: publish-to-pypi.yml on barun-saha/kodeagent

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page