Skip to main content

GOAP Planner (goapauto)

Goal-Oriented Action Planning for Python — Build intelligent, autonomous agents with strict typing and comprehensive tooling.

CI Release License

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, and Goals.

📚 Documentation

Detailed documentation is available in the docs/ directory:

📦 Installation

uv add goapauto
# with Jev (TypeSafe) judgment support:
uv add "goapauto[jev]"

⚡ 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.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for goapauto 0.6.0
File Size Uploaded Provenance Actions
goapauto-0.6.0.tar.gz 74.8 kB With provenance Details for goapauto-0.6.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for goapauto 0.6.0
File Interpreter ABI Platform Actions
goapauto-0.6.0-py3-none-any.whl Python 3 none any Details for goapauto-0.6.0-py3-none-any.whl

Total release size: 160.4 kB

Release files / goapauto-0.6.0.tar.gz

Download URL goapauto-0.6.0.tar.gz
Size 74.8 kB
Tags Source
SHA-256 checksum
How to use checksums
80424a2039ad4f555a1b5584f149d6672a6586ff53ff00084da795581ec6568e
BLAKE2b-256 checksum
How to use checksums
e464ab98254bf99e6cb6dac18bc691dee2279b4faca4ca8c369b7b5aa081cb92
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 21, 2026.

Transparency log

Release files / goapauto-0.6.0-py3-none-any.whl

Download URL goapauto-0.6.0-py3-none-any.whl
Size 85.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
443acd8e6febe69d60cf8553d06a5faf9d2a93addde1e6615b52221dbcf7d8ae
BLAKE2b-256 checksum
How to use checksums
345efb7b71163dfcd7613f607656074e547d026cd9a041f667971e9674f7efea
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 21, 2026.

Transparency log

Security for goapauto 0.6.0

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.

Select from 2 files

Attestation for goapauto-0.6.0.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 21, 2026.

Transparency log

A 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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page