AbstractAgent
Agent patterns (ReAct / CodeAct / MemAct) built on AbstractRuntime (durable execution) and AbstractCore (tools + LLM integration).
AbstractAgent is part of the AbstractFramework ecosystem:
- AbstractFramework (ecosystem overview): https://github.com/lpalbou/AbstractFramework
- AbstractCore (providers + tool schemas): https://github.com/lpalbou/abstractcore
- AbstractRuntime (durable workflows + storage/ledger): https://github.com/lpalbou/abstractruntime
Start here: docs/getting-started.md (then docs/README.md for the full index)
How it fits (high level)
flowchart LR
Host[Your app / service] --> Agent[AbstractAgent<br/>ReAct / CodeAct / MemAct]
Agent --> RT[AbstractRuntime<br/>WorkflowSpec + Effects]
RT --> Core[AbstractCore<br/>LLM + tool-call normalization]
RT --> Stores[RunStore + LedgerStore]
Agent --> Tools[Tool callables<br/>(abstractcore common_tools + agent tools)]
Documentation
- Getting started:
docs/getting-started.md - API reference:
docs/api.md - Loop hooks (listen/steer/capture):
docs/hooks.md - FAQ:
docs/faq.md - Troubleshooting:
docs/troubleshooting.md - Architecture (diagrams):
docs/architecture.md - Changelog:
CHANGELOG.md - Contributing:
CONTRIBUTING.md - Security:
SECURITY.md - Acknowledgements:
ACKNOWLEDMENTS.md - Code of conduct:
CODE_OF_CONDUCT.md
What you get
- ReAct: tool-first Reason → Act → Observe loop
- CodeAct: executes Python (tool calls; on prompted-tools models also fenced
```python```blocks) - MemAct (experimental): memory-enhanced agent using runtime-owned Active Memory — distinct architecture, less production mileage; import from
abstractagent.agents.memact(deliberately not top-level) - Durable runs: pause/resume via
run_id+ runtime stores - Tool control: explicit tool bundles + per-run allowlists (unresolvable grant names are recorded loudly, never dropped silently)
- Loop hooks: listen/steer/capture on the running loop via
LoopHooks(seedocs/hooks.md); the flaton_stepcallback remains - Generation controls: temperature, seed, media policy, prompt-cache
identity, streaming, Core
thinkingandspeculation(MTP) are normalized before LLM calls and inherited by delegated children - Observability: durable ledger of LLM calls, tool calls, and waits
Where this lives in code (source of truth):
- Agents:
src/abstractagent/agents/* - Workflows/adapters:
src/abstractagent/adapters/*_runtime.py - Prompting/parsing logic (runtime-agnostic):
src/abstractagent/logic/* - Default tool bundle:
src/abstractagent/tools/__init__.py
Requirements
- Python
>=3.10(seepyproject.toml)
Installation
From source (development):
pip install -e .
With dev dependencies:
pip install -e ".[dev]"
From PyPI:
pip install abstractagent
Native Python hardware profile cascades are available for deployment manifests:
abstractagent[apple] and abstractagent[gpu]. These delegate to the matching
AbstractCore and AbstractRuntime profiles; AbstractAgent itself remains
provider/runtime agnostic.
AbstractAgent 0.3.14 requires abstractcore[tools]>=2.13.41 and
AbstractRuntime>=0.5.0 (the runtime release that provides live token
streaming, on top of turn grounding, in-flight cancellation and speculation
inheritance). AbstractRuntime 0.5.0 itself requires AbstractCore 2.16.0 or newer.
Note: the repository may be ahead of the latest published PyPI release. To verify what you installed:
python -c "import importlib.metadata as md; print(md.version('abstractagent'))"
Quick start (ReAct)
from abstractagent import create_react_agent
# provider/model resolve from your AbstractCore config defaults
# (`abstractcore --config`) when omitted; pass them explicitly to pin.
agent = create_react_agent(provider="ollama", model="qwen3:4b")
agent.start("List the files in the current directory")
state = agent.run_to_completion()
print(state.output["answer"])
Tip: these loops send the full transcript plus ~19 tool schemas every cycle —
prefer a tool-capable model. On Ollama, raise the context window to the model's
maximum available context or the server silently truncates from the oldest
content first: per-call llm_kwargs={"num_ctx": <model max>} or server-side OLLAMA_CONTEXT_LENGTH=<model max> ollama serve.
House rule: maximum available context unless you explicitly choose otherwise —
a fixed lower number is a hidden ceiling (see docs/faq.md).
Persistence (resume across restarts)
By default, the factory helpers use an in-memory runtime store. For resume across process restarts,
pass a persistent RunStore/LedgerStore (example below uses JSON files).
from abstractagent import create_react_agent
from abstractruntime.storage.json_files import JsonFileRunStore, JsonlLedgerStore
run_store = JsonFileRunStore(".runs")
ledger_store = JsonlLedgerStore(".runs")
agent = create_react_agent(run_store=run_store, ledger_store=ledger_store)
agent.start("Long running task")
agent.save_state("agent_state.json")
# ... later / after restart ...
agent2 = create_react_agent(run_store=run_store, ledger_store=ledger_store)
agent2.load_state("agent_state.json")
state = agent2.run_to_completion()
print(state.output["answer"])
More details: docs/persistence.md
CLI
This repository still installs a react-agent entrypoint, but it is deprecated and only prints a migration hint
(see src/abstractagent/repl.py and pyproject.toml).
Interactive UX lives in AbstractCode.
License
MIT (see LICENSE).
Release files for abstractagent 0.3.14
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| abstractagent-0.3.14.tar.gz | 324.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| abstractagent-0.3.14-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 530.8 kB
Release files / abstractagent-0.3.14.tar.gz
| Download URL | abstractagent-0.3.14.tar.gz |
|---|---|
| Size | 324.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e91433fe010480fb333f28beff410ea2d9e4ede272142b437b7898bf21516ae4
|
|
BLAKE2b-256 checksum How to use checksums |
e826c34f60175fced087d81bc78828c41d5e30f435649b5956a1353a26104578
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.
Transparency logRelease files / abstractagent-0.3.14-py3-none-any.whl
| Download URL | abstractagent-0.3.14-py3-none-any.whl |
|---|---|
| Size | 206.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b297527e33386f1521b8c012ea6b1f1a7197af7d139a436a3b374461a18e5018
|
|
BLAKE2b-256 checksum How to use checksums |
d61949b8f82ff67a77ba0f9be26a164d0112abfe4e0ded94073e5572d1fcf33e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.
Transparency log