Lightweight AI agent library. Turn Python functions/classes into AI tools instantly.
Project description
Agentlys
Turn any Python class into an AI tool. Instantly.
Async-native • MCP support • Multi-providers • ~500 lines of core code
class Database:
def __llm__(self):
return f"Tables: {self.list_tables()}" # AI sees this every turn
def query(self, sql: str) -> list[dict]:
"""Execute SQL query"""
return self.execute(sql)
def describe(self, table: str) -> dict:
"""Get table schema"""
return self.get_schema(table)
agent = Agentlys()
agent.add_tool(Database(conn)) # That's it. All methods are now AI tools.
agent.run("What drove revenue decline in Q3?")
Other frameworks: 50 lines of tool definitions, separate schemas, manual state management.
Agentlys: Your class IS the tool. Methods become actions. __llm__() injects state.
Why Agentlys?
| If you want... | Use |
|---|---|
| Graphs and state machines | LangGraph |
| Team-based agent crews | CrewAI |
| Your existing classes as AI tools | Agentlys |
~500 lines of core code. No framework lock-in. No magic.
Install
pip install 'agentlys[all]' # OpenAI + Anthropic + MCP
The Pattern
1. Functions → Tools
def get_weather(city: str) -> str:
"""Get current weather for a city"""
return requests.get(f"https://wttr.in/{city}?format=3").text
agent.add_function(get_weather)
2. Classes → Stateful Tools (the killer feature)
class FileSystem:
def __init__(self, root: str):
self.root = root
def __llm__(self):
"""State shown to AI each turn"""
return f"Current directory: {self.root}\nFiles: {os.listdir(self.root)}"
def read(self, path: str) -> str:
"""Read file contents"""
return open(f"{self.root}/{path}").read()
def write(self, path: str, content: str):
"""Write to file"""
open(f"{self.root}/{path}", 'w').write(content)
agent.add_tool(FileSystem("/workspace"))
# AI now sees file state, can read/write, all from one class
3. Run Conversations
for message in agent.run_conversation("Refactor config.json to use environment variables"):
print(message.content)
Async Support
# Async conversation loop
async for message in agent.run_conversation_async("Analyze the data"):
print(message.content)
# Single async call
response = await agent.ask_async("What tables exist?")
Real Example: agentlys-dev
A coding agent in 15 lines:
from agentlys import Agentlys
from agentlys_tools import CodeEditor, Terminal, Git
agent = Agentlys(
instruction="You are a senior developer",
provider="anthropic",
model="claude-sonnet-4-20250514"
)
agent.add_tool(CodeEditor())
agent.add_tool(Terminal())
agent.add_tool(Git())
agent.run_conversation("Create a FastAPI app with tests")
Providers
# Anthropic (default)
agent = Agentlys(provider="anthropic", model="claude-sonnet-4-20250514")
# OpenAI
agent = Agentlys(model="gpt-4o")
More
Used By
- Myriade — AI-native data platform
When NOT to use Agentlys
- You need graph-based workflows → Use LangGraph
- You want pre-built agent teams → Use CrewAI
- You need sandboxed code execution → Use Smolagents
Agentlys is for: turning your existing Python code into AI tools with zero ceremony.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agentlys-1.6.0.tar.gz.
File metadata
- Download URL: agentlys-1.6.0.tar.gz
- Upload date:
- Size: 37.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0cd879848684fe1a6c9fe9e9ed388699cedd0515e54ccdc801ecbdd4d07df239
|
|
| MD5 |
155b988f63ee3ed145a87441d266527f
|
|
| BLAKE2b-256 |
0b4210e9dc17a0729056bac86abbf2faac726e3e338f398d2cecb2243cf6309f
|
File details
Details for the file agentlys-1.6.0-py3-none-any.whl.
File metadata
- Download URL: agentlys-1.6.0-py3-none-any.whl
- Upload date:
- Size: 31.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8dd72e6a35e103f7450c4dd83455be1e7f05ca701f9b3964b5e628d8c8f61db9
|
|
| MD5 |
32ef6775f1ec42915296226f27e27f99
|
|
| BLAKE2b-256 |
f7ecc09b64d97c0a98da6a1df332952ca9b698c2ce20848cbec359d9d52c0980
|