Catalog PyPI
PACKAGE EXPLORERView in registry

acton-agent

PyPI

LLM Agent Framework with tool execution capabilities

agentaiautomationframeworkllmopenaitools
Versions collected1
Direct dependencies12From release 0.0.23
Last observed20 Oct, 18:38 UTC

README

Version 0.0.23 documentation

Acton Agent

Acton Agent

A lightweight, flexible Python framework for building LLM agents with tool execution capabilities

⚠️ Experimental Project: This is a personal project currently in an experimental phase. The API may change without notice, and features may be incomplete or unstable. Use at your own discretion.

Python 3.10+ License: MIT

Acton Agent enables you to build AI agents that can interact with external APIs, execute custom Python functions, and maintain conversation context. With minimal configuration, you can create agents that reason through complex tasks, call tools, and stream responses in real-time.

Quick Start

pip install acton-agent
from acton_agent import Agent, FunctionTool
from acton_agent.client import OpenAIClient

# Create a simple calculator tool
def calculate(a: float, b: float, operation: str) -> float:
    ops = {"add": a + b, "subtract": a - b, "multiply": a * b, "divide": a / b}
    return ops.get(operation, 0)

# Initialize agent with OpenAI
client = OpenAIClient(api_key="your-key", model="gpt-4o")
agent = Agent(llm_client=client)

# Register the tool
agent.register_tool(FunctionTool(
    name="calculator",
    description="Perform basic arithmetic operations",
    func=calculate,
    schema={
        "type": "object",
        "properties": {
            "a": {"type": "number"},
            "b": {"type": "number"},
            "operation": {"type": "string", "enum": ["add", "subtract", "multiply", "divide"]}
        },
        "required": ["a", "b", "operation"]
    }
))

# Run the agent
result = agent.run("What is 25 multiplied by 4?")
print(result)  # "The result of 25 multiplied by 4 is 100."

Key Features

🔧 Flexible Tool System

Create tools from Python functions, HTTP APIs, or custom classes. Organize related tools with ToolSets and shared configuration.

from pydantic import Field
from acton_agent import ToolSet, FunctionTool
from acton_agent.tools import ConfigSchema

# Define configuration schema
class WeatherConfig(ConfigSchema):
    api_key: str = Field(..., description="API key for weather service")

# Define tools that use an API key
def get_weather(city: str, api_key: str) -> str:
    # api_key will be automatically injected from toolset config
    return f"Weather in {city}: Sunny, 72°F"

def get_forecast(city: str, days: int, api_key: str) -> str:
    return f"{days}-day forecast for {city}"

# Group related tools with shared configuration
weather_tools = ToolSet(
    name="weather",
    description="Weather data tools",
    tools=[
        FunctionTool(
            name="current_weather",
            description="Get current weather for a city",
            func=get_weather,
            schema={
                "type": "object",
                "properties": {"city": {"type": "string"}},
                "required": ["city"]
            }
        ),
        FunctionTool(
            name="forecast",
            description="Get weather forecast",
            func=get_forecast,
            schema={
                "type": "object",
                "properties": {
                    "city": {"type": "string"},
                    "days": {"type": "integer"}
                },
                "required": ["city", "days"]
            }
        )
    ],
    config_schema=WeatherConfig,
)
# Set configuration using update_config()
weather_tools.update_config({"api_key": "secret-api-key"})
agent.register_toolset(weather_tools)

🔄 Automatic Retry & Error Handling

Built-in retry logic with exponential backoff for both LLM calls and tool execution.

from acton_agent.agent import RetryConfig

agent = Agent(llm_client=client, retry_config=RetryConfig(max_attempts=5))

💬 Conversation Memory Management

Automatic token-based history truncation to stay within context limits.

from acton_agent import SimpleAgentMemory

agent = Agent(llm_client=client, memory=SimpleAgentMemory(max_history_tokens=8000))

🌊 Streaming Support

Stream agent responses token-by-token for real-time feedback.

from acton_agent.agent import AgentToken

for event in agent.run_stream("Tell me a story"):
    if isinstance(event, AgentToken):
        print(event.content, end="", flush=True)

🔌 Multi-Provider Support

Works with OpenAI, OpenRouter, and any OpenAI-compatible API.

from acton_agent import OpenRouterClient

client = OpenRouterClient(api_key="your-key", model="anthropic/claude-3-opus")

📝 Configurable Logging

Control logging output with the verbose parameter and customize log levels via environment variables.

# Disable logging (default - no output)
agent = Agent(llm_client=client, verbose=False)

# Enable logging at INFO level
agent = Agent(llm_client=client, verbose=True)

# Set custom log level via environment variable
import os
os.environ['ACTON_LOG_LEVEL'] = 'DEBUG'  # TRACE, DEBUG, INFO, SUCCESS, WARNING, ERROR, CRITICAL
agent = Agent(llm_client=client, verbose=True)

Documentation

Examples

Explore complete examples in the examples/ directory:

License

MIT License - see LICENSE file for details.


Disclaimer: This is an experimental project. Use at your own risk. No guarantees about stability, security, or fitness for any particular purpose.

Downloads & popularity

5downloads
1-day window · source-reported counts19 Oct 2026
5125.50
2026-07-22: 3 · observed 2026-10-20T18:58:53.8424241Z · period 2026-07-22–2026-07-222026-07-23: 1 · observed 2026-10-20T18:58:53.8424241Z · period 2026-07-23–2026-07-232026-07-24: 4 · observed 2026-10-20T18:58:53.8424241Z · period 2026-07-24–2026-07-242026-07-27: 3 · observed 2026-10-20T18:58:53.8424241Z · period 2026-07-27–2026-07-272026-08-01: 1 · observed 2026-10-20T18:58:53.8424241Z · period 2026-08-01–2026-08-012026-08-02: 1 · observed 2026-10-20T18:58:53.8424241Z · period 2026-08-02–2026-08-022026-08-03: 8 · observed 2026-10-20T18:58:53.8424241Z · period 2026-08-03–2026-08-032026-08-09: 9 · observed 2026-10-20T18:58:53.8424241Z · period 2026-08-09–2026-08-092026-08-13: 2 · observed 2026-10-20T18:58:53.8424241Z · period 2026-08-13–2026-08-132026-08-14: 4 · observed 2026-10-20T18:58:53.8424241Z · period 2026-08-14–2026-08-142026-08-17: 2 · observed 2026-10-20T18:58:53.8424241Z · period 2026-08-17–2026-08-172026-08-18: 1 · observed 2026-10-20T18:58:53.8424241Z · period 2026-08-18–2026-08-182026-08-19: 12 · observed 2026-10-20T18:58:53.8424241Z · period 2026-08-19–2026-08-192026-08-20: 6 · observed 2026-10-20T18:58:53.8424241Z · period 2026-08-20–2026-08-202026-08-21: 1 · observed 2026-10-20T18:58:53.8424241Z · period 2026-08-21–2026-08-212026-08-22: 1 · observed 2026-10-20T18:58:53.8424241Z · period 2026-08-22–2026-08-222026-08-23: 4 · observed 2026-10-20T18:58:53.8424241Z · period 2026-08-23–2026-08-232026-08-24: 15 · observed 2026-10-20T18:58:53.8424241Z · period 2026-08-24–2026-08-242026-08-25: 1 · observed 2026-10-20T18:58:53.8424241Z · period 2026-08-25–2026-08-252026-08-28: 1 · observed 2026-10-20T18:58:53.8424241Z · period 2026-08-28–2026-08-282026-08-31: 3 · observed 2026-10-20T18:58:53.8424241Z · period 2026-08-31–2026-08-312026-09-01: 5 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-01–2026-09-012026-09-03: 1 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-03–2026-09-032026-09-04: 1 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-04–2026-09-042026-09-05: 1 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-05–2026-09-052026-09-07: 9 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-07–2026-09-072026-09-08: 2 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-08–2026-09-082026-09-09: 3 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-09–2026-09-092026-09-10: 1 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-10–2026-09-102026-09-11: 3 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-11–2026-09-112026-09-12: 1 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-12–2026-09-122026-09-15: 10 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-15–2026-09-152026-09-16: 1 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-16–2026-09-162026-09-17: 1 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-17–2026-09-172026-09-18: 1 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-18–2026-09-182026-09-19: 51 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-19–2026-09-192026-09-20: 3 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-20–2026-09-202026-09-21: 5 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-21–2026-09-212026-09-22: 5 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-22–2026-09-222026-09-23: 7 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-23–2026-09-232026-09-24: 1 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-24–2026-09-242026-09-26: 2 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-26–2026-09-262026-09-27: 1 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-27–2026-09-272026-09-28: 3 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-28–2026-09-282026-09-30: 11 · observed 2026-10-20T18:58:53.8424241Z · period 2026-09-30–2026-09-302026-10-01: 25 · observed 2026-10-20T18:58:53.8424241Z · period 2026-10-01–2026-10-012026-10-02: 10 · observed 2026-10-20T18:58:53.8424241Z · period 2026-10-02–2026-10-022026-10-03: 15 · observed 2026-10-20T18:58:53.8424241Z · period 2026-10-03–2026-10-032026-10-04: 1 · observed 2026-10-20T18:58:53.8424241Z · period 2026-10-04–2026-10-042026-10-05: 8 · observed 2026-10-20T18:58:53.8424241Z · period 2026-10-05–2026-10-052026-10-06: 3 · observed 2026-10-20T18:58:53.8424241Z · period 2026-10-06–2026-10-062026-10-07: 6 · observed 2026-10-20T18:58:53.8424241Z · period 2026-10-07–2026-10-072026-10-08: 4 · observed 2026-10-20T18:58:53.8424241Z · period 2026-10-08–2026-10-082026-10-09: 30 · observed 2026-10-20T18:58:53.8424241Z · period 2026-10-09–2026-10-092026-10-10: 31 · observed 2026-10-20T18:58:53.8424241Z · period 2026-10-10–2026-10-102026-10-11: 3 · observed 2026-10-20T18:58:53.8424241Z · period 2026-10-11–2026-10-112026-10-12: 14 · observed 2026-10-20T18:58:53.8424241Z · period 2026-10-12–2026-10-122026-10-13: 10 · observed 2026-10-20T18:58:53.8424241Z · period 2026-10-13–2026-10-132026-10-14: 11 · observed 2026-10-20T18:58:53.8424241Z · period 2026-10-14–2026-10-142026-10-15: 5 · observed 2026-10-20T18:58:53.8424241Z · period 2026-10-15–2026-10-152026-10-16: 2 · observed 2026-10-20T18:58:53.8424241Z · period 2026-10-16–2026-10-162026-10-17: 29 · observed 2026-10-20T18:58:53.8424241Z · period 2026-10-17–2026-10-172026-10-18: 7 · observed 2026-10-20T18:58:53.8424241Z · period 2026-10-18–2026-10-182026-10-19: 5 · observed 2026-10-20T18:58:53.8424241Z · period 2026-10-19–2026-10-19
22 Jul19 Oct

pypistats · 64 observations shown. Missing days are unknown. Source category: overall: without mirrors.

View observed values
Date / source periodValueObserved at
2026-10-19 – 2026-10-1952026-10-20T18:58:53.8424241Z
2026-10-18 – 2026-10-1872026-10-20T18:58:53.8424241Z
2026-10-17 – 2026-10-17292026-10-20T18:58:53.8424241Z
2026-10-16 – 2026-10-1622026-10-20T18:58:53.8424241Z
2026-10-15 – 2026-10-1552026-10-20T18:58:53.8424241Z
2026-10-14 – 2026-10-14112026-10-20T18:58:53.8424241Z
2026-10-13 – 2026-10-13102026-10-20T18:58:53.8424241Z
2026-10-12 – 2026-10-12142026-10-20T18:58:53.8424241Z
2026-10-11 – 2026-10-1132026-10-20T18:58:53.8424241Z
2026-10-10 – 2026-10-10312026-10-20T18:58:53.8424241Z
2026-10-09 – 2026-10-09302026-10-20T18:58:53.8424241Z
2026-10-08 – 2026-10-0842026-10-20T18:58:53.8424241Z
2026-10-07 – 2026-10-0762026-10-20T18:58:53.8424241Z
2026-10-06 – 2026-10-0632026-10-20T18:58:53.8424241Z
2026-10-05 – 2026-10-0582026-10-20T18:58:53.8424241Z
2026-10-04 – 2026-10-0412026-10-20T18:58:53.8424241Z
2026-10-03 – 2026-10-03152026-10-20T18:58:53.8424241Z
2026-10-02 – 2026-10-02102026-10-20T18:58:53.8424241Z
2026-10-01 – 2026-10-01252026-10-20T18:58:53.8424241Z
2026-09-30 – 2026-09-30112026-10-20T18:58:53.8424241Z
2026-09-28 – 2026-09-2832026-10-20T18:58:53.8424241Z
2026-09-27 – 2026-09-2712026-10-20T18:58:53.8424241Z
2026-09-26 – 2026-09-2622026-10-20T18:58:53.8424241Z
2026-09-24 – 2026-09-2412026-10-20T18:58:53.8424241Z
2026-09-23 – 2026-09-2372026-10-20T18:58:53.8424241Z
2026-09-22 – 2026-09-2252026-10-20T18:58:53.8424241Z
2026-09-21 – 2026-09-2152026-10-20T18:58:53.8424241Z
2026-09-20 – 2026-09-2032026-10-20T18:58:53.8424241Z
2026-09-19 – 2026-09-19512026-10-20T18:58:53.8424241Z
2026-09-18 – 2026-09-1812026-10-20T18:58:53.8424241Z
2026-09-17 – 2026-09-1712026-10-20T18:58:53.8424241Z
2026-09-16 – 2026-09-1612026-10-20T18:58:53.8424241Z
2026-09-15 – 2026-09-15102026-10-20T18:58:53.8424241Z
2026-09-12 – 2026-09-1212026-10-20T18:58:53.8424241Z
2026-09-11 – 2026-09-1132026-10-20T18:58:53.8424241Z
2026-09-10 – 2026-09-1012026-10-20T18:58:53.8424241Z
2026-09-09 – 2026-09-0932026-10-20T18:58:53.8424241Z
2026-09-08 – 2026-09-0822026-10-20T18:58:53.8424241Z
2026-09-07 – 2026-09-0792026-10-20T18:58:53.8424241Z
2026-09-05 – 2026-09-0512026-10-20T18:58:53.8424241Z
2026-09-04 – 2026-09-0412026-10-20T18:58:53.8424241Z
2026-09-03 – 2026-09-0312026-10-20T18:58:53.8424241Z
2026-09-01 – 2026-09-0152026-10-20T18:58:53.8424241Z
2026-08-31 – 2026-08-3132026-10-20T18:58:53.8424241Z
2026-08-28 – 2026-08-2812026-10-20T18:58:53.8424241Z
2026-08-25 – 2026-08-2512026-10-20T18:58:53.8424241Z
2026-08-24 – 2026-08-24152026-10-20T18:58:53.8424241Z
2026-08-23 – 2026-08-2342026-10-20T18:58:53.8424241Z
2026-08-22 – 2026-08-2212026-10-20T18:58:53.8424241Z
2026-08-21 – 2026-08-2112026-10-20T18:58:53.8424241Z
2026-08-20 – 2026-08-2062026-10-20T18:58:53.8424241Z
2026-08-19 – 2026-08-19122026-10-20T18:58:53.8424241Z
2026-08-18 – 2026-08-1812026-10-20T18:58:53.8424241Z
2026-08-17 – 2026-08-1722026-10-20T18:58:53.8424241Z
2026-08-14 – 2026-08-1442026-10-20T18:58:53.8424241Z
2026-08-13 – 2026-08-1322026-10-20T18:58:53.8424241Z
2026-08-09 – 2026-08-0992026-10-20T18:58:53.8424241Z
2026-08-03 – 2026-08-0382026-10-20T18:58:53.8424241Z
2026-08-02 – 2026-08-0212026-10-20T18:58:53.8424241Z
2026-08-01 – 2026-08-0112026-10-20T18:58:53.8424241Z
2026-07-27 – 2026-07-2732026-10-20T18:58:53.8424241Z
2026-07-24 – 2026-07-2442026-10-20T18:58:53.8424241Z
2026-07-23 – 2026-07-2312026-10-20T18:58:53.8424241Z
2026-07-22 – 2026-07-2232026-10-20T18:58:53.8424241Z

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.0.2323 Dec 202512

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
akstspace/acton-agent

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 18:38 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:2051e997649dc6976c6c53f3f3f540b0ed11d015f8533c78ef29a1a84e13be6d