Observed since 21 Oct, 09:02 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Agents that work in a versioned world: a loop over nontainer, for functional tasks and long-running sessions alike.
Agents that work in a versioned world.
agex is an agent loop over nontainer workspaces: a filesystem, a shell and sandboxed Python, with history. It has two front doors:
pip install "agex[anthropic]" # or [openai], [openrouter], [google], [all]
from agex import Agent
from nontainer import Store
agent = Agent("anthropic:claude-sonnet-5-5")
store = Store(memory=True)
ws = store.open("demo")
chat = agent.session(ws)
out = chat.say("Write fib.py printing the first ten Fibonacci numbers, and run it.")
print(out.status, out.text) # completed, and the model's reply
print(ws.files.read("fib.py").decode()) # the file it wrote
out = chat.say("Make it print twenty.") # it remembers the last turn
Tool calls that change the workspace commit as they land, and a turn's
end lands one more commit, stamped with how the run ended: completed,
cancelled, failed or interrupted. None of them raise.
from dataclasses import dataclass
@dataclass
class Recipe:
name: str
steps: list[str]
minutes: int
@agent.task
def plan_dinner(ingredients: list[str]) -> Recipe:
"""A dinner recipe using only these ingredients, plus salt and oil."""
...
recipe = plan_dinner(["eggs", "spinach", "feta"]) # a Recipe
The docstring is the job, and the body holds no code (... is for a
type checker). The agent works in a scratch world (or a fork of
world=), and its code hands back the value with task.success(...).
The value is checked against the return type, so the caller gets a
Recipe or a TaskFailed.
A session's agent can define tasks of its own, for the judgment work in
a script: classify, extract, summarize. Grant agex to its workspace:
from agex import agent_tasks
from nontainer import Profile, PythonConfig
profile = Profile(python=PythonConfig(host_objects={"agex": agent_tasks(agent)}))
ws = store.open("reviews", profile=profile)
and the agent's code can write
@agex.task
def sentiment(review: str) -> str:
"""positive, negative or mixed"""
labels = sentiment.map(reviews) # helpers run them at once
agex 0.13 is a new API. The 0.12 line, agents working directly with an
existing Python codebase, is at the
v0.12.4 tag and on
PyPI as agex==0.12.4.
uv sync
uv run pre-commit install --hook-type pre-commit --hook-type pre-push
uv run pytest
See CONTRIBUTING.md.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.13.0 | 12 Oct 2026 | 3 |
This describes our collected data; it is not a security assessment.
Observed since 21 Oct, 09:02 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:fb4aab5c196c7f52ee03aff64b9c8f9cc88d8b6e6f7d33476b51dffefadb4894