Skip to main content

A lightweight async framework for structuring and running AI agents in Python

Project description

pygents

A lightweight async framework for structuring and running AI agents in Python. Define tools, queue turns, stream results.

Install

pip install pygents

Requires Python 3.12+.

Example

import asyncio
from pygents import Agent, Turn, tool

@tool()
async def greet(name: str) -> str:
    return f"Hello, {name}!"

async def main():
    agent = Agent("greeter", "Greets people", [greet])
    # Use kwargs:
    await agent.put(Turn("greet", kwargs={"name": "World"}))
    # Or positional args:
    await agent.put(Turn("greet", args=["World"]))

    async for turn, value in agent.run():
        print(value)  # "Hello, World!"

asyncio.run(main())

Tools are async functions. Turns say which tool to run and with what args. Agents process a queue of turns and stream results. The loop exits when the queue is empty.

Features

  • Streaming — agents yield (turn, value) as results are produced
  • Inter-agent messaging — agents can send turns to each other
  • Dynamic arguments — callable positional args and kwargs evaluated at runtime
  • Timeouts — per-turn, default 60s
  • Per-tool locking — opt-in serialization for shared state (lock is acquired inside the tool wrapper, so turn-level hooks run outside the tool lock)
  • Fixed kwargs — decorator kwargs (e.g. @tool(permission="admin")) are merged into every invocation; call-time kwargs override
  • Hooks@hook(hook_type, lock=..., **fixed_kwargs) decorator; hooks stored as a list and selected by type; turn, agent, tool, and memory hooks; same fixed_kwargs and lock options as tools
  • Serializationto_dict() / from_dict() for turns and agents

Design Decisions

Agent/Turn hook boundaryTurnHook covers events fired by the Turn itself (BEFORE_RUN, AFTER_RUN, ON_TIMEOUT, ON_ERROR, ON_COMPLETE). AgentHook covers agent-loop events (BEFORE_TURN, AFTER_TURN, ON_TURN_VALUE, BEFORE_PUT, AFTER_PUT, ON_PAUSE, ON_RESUME). ON_TURN_VALUE stays on Agent because it fires after routing (agent logic). Turn-lifecycle hooks can be registered on an agent via agent.turn_hooks (or the @agent.on_error / @agent.on_timeout / @agent.on_complete decorators) and are automatically propagated to every turn the agent runs.

Hook attachment style — Hooks are attached via method decorators on the instance (@agent.before_turn, @turn.on_complete, @my_tool.before_invoke) rather than constructor parameters. This keeps the API surface explicit and enables IDE autocompletion of hook signatures.

Docs

Full documentation: uv run mkdocs serve. MkDocs is an optional dependency—install with pip install -e ".[docs]" (or use uv run as above) so the library itself does not depend on it.

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

pygents-0.6.1.tar.gz (20.8 kB view details)

Uploaded Source

Built Distribution

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

pygents-0.6.1-py3-none-any.whl (24.7 kB view details)

Uploaded Python 3

File details

Details for the file pygents-0.6.1.tar.gz.

File metadata

  • Download URL: pygents-0.6.1.tar.gz
  • Upload date:
  • Size: 20.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for pygents-0.6.1.tar.gz
Algorithm Hash digest
SHA256 440a606f81787ca624f74796c7a81faf36eddd8aac676e7d123a4639cc82d0cd
MD5 2966e7b929e4f3b8297034fe7c3b0c39
BLAKE2b-256 c863f9e2c206c92a39f28e26f216e360822fc48ec87e691f997412735933eb55

See more details on using hashes here.

File details

Details for the file pygents-0.6.1-py3-none-any.whl.

File metadata

  • Download URL: pygents-0.6.1-py3-none-any.whl
  • Upload date:
  • Size: 24.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for pygents-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9082da4727eb56861b393a0b3315dd4b28bdc32f10c6c16f4e4b796f16bb823c
MD5 3d8a6f7bde78d25969ea4bb79cb09252
BLAKE2b-256 4076e1cabe968d091dcfa416bf2eee882daf3342da1b7177cba406d1813451b0

See more details on using hashes here.

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