Multi-agent session framework for AI systems
Project description
AgentKit
A lightweight Python framework for building multi-agent systems with session management, message routing, state persistence, and lock management.
Installation
pip install agentkit-py
Features
- Session Management - Track agent sessions with ownership, channels, and metadata
- Message Routing - Send messages between agents with pub/sub support
- State Persistence - Key-value store with namespaces and atomic operations
- Lock Management - Distributed locking with TTL and cross-process support
Quick Start
from agentkit import SessionManager, MessageBus, StateStore, LockManager
from pathlib import Path
# Create managers with persistence
data_dir = Path("./agent_data")
sessions = SessionManager(data_dir / "sessions")
messages = MessageBus(data_dir / "messages")
state = StateStore(data_dir / "state.json")
locks = LockManager(data_dir / "locks")
# Create a session
session = sessions.create(
agent_id="agent-1",
channel="telegram",
owner="user-123",
)
# Send messages between agents
messages.send(
from_agent="agent-1",
to_agent="agent-2",
content="Hello from agent 1!",
)
# Receive messages
msg = messages.receive("agent-2")
if msg:
print(f"Got: {msg.content}")
# Persist state
state.set("last_run", "2024-01-15", namespace="agent-1")
state.increment("run_count", namespace="agent-1")
# Lock shared resources
with locks.hold("shared-resource", owner="agent-1", ttl_seconds=30) as lock:
if lock:
# Do exclusive work
pass
Session Management
from agentkit import SessionManager
sessions = SessionManager("./sessions")
# Create session
session = sessions.create(
agent_id="my-agent",
channel="slack",
owner="user-456",
metadata={"workspace": "acme"}
)
# Find sessions
active = sessions.find(agent_id="my-agent", status="active")
# Update session
session.metadata["last_action"] = "processed_message"
sessions.update(session)
# Cleanup stale sessions (inactive > 1 hour)
cleaned = sessions.cleanup_stale(max_age_seconds=3600)
Message Routing
from agentkit import MessageBus
bus = MessageBus("./messages")
# Send a message
msg = bus.send(
from_agent="coordinator",
to_agent="worker-1",
content="Process this task",
metadata={"task_id": "abc123"}
)
# Subscribe to messages
def handle_message(msg):
print(f"Received: {msg.content}")
bus.subscribe("worker-1", handle_message)
# Broadcast to all agents
bus.broadcast(
from_agent="coordinator",
content="System maintenance in 5 minutes"
)
# Check pending messages
count = bus.pending_count("worker-1")
State Persistence
from agentkit import StateStore
store = StateStore("./state.json")
# Basic operations
store.set("config", {"timeout": 30}, namespace="agent-1")
config = store.get("config", namespace="agent-1")
# Atomic increment
count = store.increment("requests", namespace="agent-1")
# Append to list with max length
store.append("recent_errors", "timeout error",
namespace="agent-1", max_length=100)
# Get with metadata
info = store.get_with_metadata("config", namespace="agent-1")
# {'value': {...}, 'updated_at': 1705334400.0}
Lock Management
from agentkit import LockManager
locks = LockManager("./locks")
# Acquire lock with TTL
lock = locks.acquire(
resource="database-connection",
owner="agent-1",
ttl_seconds=60
)
if lock:
try:
# Do exclusive work
pass
finally:
locks.release("database-connection", "agent-1")
# Context manager (auto-release)
with locks.hold("resource", "agent-1", ttl_seconds=30) as lock:
if lock:
# Work with lock held
pass
# Wait for lock
lock = locks.acquire(
resource="busy-resource",
owner="agent-1",
wait=True,
wait_timeout=10.0
)
# Force release stuck lock
locks.force_release("stuck-resource")
In-Memory Mode
All components work without persistence (in-memory only):
# No storage_dir = in-memory only
sessions = SessionManager()
messages = MessageBus()
state = StateStore()
locks = LockManager()
For AI Agents
See SKILL.md for agent-optimized documentation with command patterns and examples.
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 agentkit_py-0.1.0.tar.gz.
File metadata
- Download URL: agentkit_py-0.1.0.tar.gz
- Upload date:
- Size: 10.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
11e30e6ae342d91929e739d0e8dd3f76283808d92f6a99fe6f1474e6d8a93d98
|
|
| MD5 |
4b16e8d5568dbed93c38f726ec77bb54
|
|
| BLAKE2b-256 |
0971beba8283e409ab112c053fff48538f11ac7eb7ff237e3437028bbec427ca
|
File details
Details for the file agentkit_py-0.1.0-py3-none-any.whl.
File metadata
- Download URL: agentkit_py-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d12ff811f2b42cf514c293cdae9212e03ac02e54099ead792aa67940312c0de9
|
|
| MD5 |
43da9cd0538e74ff9007ce0784b52f0d
|
|
| BLAKE2b-256 |
b742ae78d3978522e1fdef617dd97e1aea54c2ec2afdff7876d75103510df953
|