Skip to main content

A flexible Goal-Oriented Action Planning (GOAP) system for game AI and planning problems, featuring A* search, efficient state management, and modular design.

Project description

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
# 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")

🤝 Contributing

Contributions are welcome! Please read CONTRIBUTING.md and our Code of Conduct.

📄 License

MIT License. See LICENSE.

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

goapauto-0.2.0.tar.gz (14.5 kB view details)

Uploaded Source

Built Distribution

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

goapauto-0.2.0-py3-none-any.whl (20.2 kB view details)

Uploaded Python 3

File details

Details for the file goapauto-0.2.0.tar.gz.

File metadata

  • Download URL: goapauto-0.2.0.tar.gz
  • Upload date:
  • Size: 14.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for goapauto-0.2.0.tar.gz
Algorithm Hash digest
SHA256 bf29bab31e74130838e0e09aa6d84d72bbb0272f0c8754f11ba5e9db98f93aee
MD5 90708ca93d89b102d5b177504108468f
BLAKE2b-256 09e1c8eca0cb10df23e8d7463cbd4d6636e9d342263b7b8ecf5fa7023038ebd7

See more details on using hashes here.

Provenance

The following attestation bundles were made for goapauto-0.2.0.tar.gz:

Publisher: release.yml on IAmNo1Special/goapauto

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file goapauto-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: goapauto-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 20.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for goapauto-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 411bdaa2914b51b7fdbf12582d7ab695bfc1003bdd8111c644ee2f1e8f051ea4
MD5 c96be6c5075375de9ea0e1e9330e6a42
BLAKE2b-256 a5abade9fd044beaefb0fec23e200e732ac87d6f2bf352e20bd420152dafecd7

See more details on using hashes here.

Provenance

The following attestation bundles were made for goapauto-0.2.0-py3-none-any.whl:

Publisher: release.yml on IAmNo1Special/goapauto

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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