GOAP Planner (goapauto)
Goal-Oriented Action Planning for Python — Build intelligent, autonomous agents with strict typing and comprehensive tooling.
goapauto provides a modular framework for AI decision-making using A* search. It separates Perception (Sensors), Thinking (Arbitration), Planning (A*), and Acting (Actions), making it ideal for game AI, NPCs, and simulation bots.
🚀 Key Features (v0.2.0)
- 🎯 Goal Arbitration: Dynamically select the best goal based on priority and state.
- 🧠 Smart Planning: A* pathfinding finds the optimal sequence of actions.
- 🛡️ Type Safety: Built on Pydantic for strict validation and robustness.
- 👁️ Visualizer: Export search trees to Mermaid or Graphviz for debugging.
- 🔌 Modular Architecture: Decoupled components for
WorldState,Sensors, andGoals.
📚 Documentation
Detailed documentation is available in the docs/ directory:
- 🏁 Getting Started: Build your first agent in minutes.
- 📖 Core Concepts: Understand the Sense-Think-Plan-Act loop.
- ⚙️ API Reference: Deep dive into classes (
WorldState,Planner, etc.).
📦 Installation
uv add goapauto
# or
uv add goapauto
⚡ Quick Start
Here's a minimal example of an agent figuring out how to open a door.
from goapauto.models.worldstate import WorldState
from goapauto.models.goal import Goal
from goapauto.models.actions import Action
from goapauto.models.goap_planner import Planner
# 1. The World: Agent has a key, but the door is closed.
state = WorldState(has_key=True, is_open=False)
# 2. The Action: Needs 'has_key' to open the door.
open_door = Action(
name="open_door",
preconditions={"has_key": True, "is_open": False},
effects={"is_open": True},
cost=1.0
)
# 3. The Goal: We want the door open.
goal = Goal(target_state={"is_open": True})
# 4. The Plan: Find the path.
planner = Planner(actions_list=[open_door])
result = planner.generate_plan(state, goal)
print(f"Plan to '{goal.name}': {result.plan}")
# Output: Plan to "{'is_open': True}": ['open_door']
🛠️ Advanced Tooling
Visualization
Debug your planner's decision-making process by exporting the search tree:
from goapauto.utils.visualizer import SearchTreeVisualizer
viz = SearchTreeVisualizer()
planner.register_hook("on_node_expanded", viz.on_node_expanded)
# ... run plan ...
# Save as a Mermaid diagram
viz.export("planning_tree.mmd")
Visualization
GoapAuto includes a built-in search tree visualizer that hooks into the planning process to capture every explored node.
Capturing the Search Tree
Register the visualizer hook with the planner before generating a plan:
from goapauto.utils.visualizer import SearchTreeVisualizer
viz = SearchTreeVisualizer()
planner.register_hook("on_node_expanded", viz.on_node_expanded)
planner.generate_plan(initial_state, goal)
viz.export("search_tree.md")
Branching and Complexity
Simple planning problems often result in linear "chains". To see A* explore multiple branches, provide actions with overlapping effects or varying costs.
See [examples/complex_search_demo.py](file:///f:/AI/goapauto/examples/complex_search_demo.py) for a scenario that demonstrates branching search trees.
🤝 Contributing
Contributions are welcome! Please read CONTRIBUTING.md and our Code of Conduct.
📄 License
MIT License. See LICENSE.
Metadata
Release files for goapauto 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| goapauto-0.3.1.tar.gz | 21.7 kB | With provenance | Details for goapauto-0.3.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| goapauto-0.3.1-py3-none-any.whl | Python 3 | none | any | Details for goapauto-0.3.1-py3-none-any.whl |
Total release size: 48.8 kB
Release files / goapauto-0.3.1.tar.gz
| Download URL | goapauto-0.3.1.tar.gz |
|---|---|
| Size | 21.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d6055e03417c735a521f6d62a1e803b4471d1b8784e9e792e2cd5937cc3e35de
|
|
BLAKE2b-256 checksum How to use checksums |
a0766f2286a5d362921db075134111d74bf5fc0998d0102c380d0fabaa176436
|
| 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 14, 2026.
Transparency logRelease files / goapauto-0.3.1-py3-none-any.whl
| Download URL | goapauto-0.3.1-py3-none-any.whl |
|---|---|
| Size | 27.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9c518b76263b99d99913cd345a6a928eea6638fb23caa47d1b00ad3ff31efcfc
|
|
BLAKE2b-256 checksum How to use checksums |
01dffb40e6b091b575e419545bbad3cdda5dd53ef7a26f56bab60472292561ac
|
| 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 14, 2026.
Transparency logSecurity for goapauto 0.3.1
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for goapauto-0.3.1.tar.gz
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 14, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.