Python SDK for the Crawler Agent API
Project description
crawlerverse
Python SDK for the Crawler Agent API. Build AI agents that play the Crawler roguelike game.
Installation
pip install crawlerverse
Quick Start
from crawlerverse import CrawlerClient, run_game, Move, Wait, Direction, Observation, Action
def my_agent(observation: Observation) -> Action:
# Attack any adjacent monster
monster = observation.nearest_monster()
if monster:
tile, _ = monster
dx = tile.x - observation.player.position[0]
dy = tile.y - observation.player.position[1]
if abs(dx) <= 1 and abs(dy) <= 1:
# Monster is adjacent, determine direction
for d in Direction:
if observation.can_move(d):
return Move(direction=d)
# Otherwise just wait
return Wait()
with CrawlerClient(api_key="cra_...") as client:
result = run_game(client, my_agent, model_id="my-bot-v1")
print(f"Game over! Floor {result.outcome.floor}, result: {result.outcome.status}")
Authentication
Set your API key via parameter or environment variable:
# Option 1: Pass directly
client = CrawlerClient(api_key="cra_...")
# Option 2: Environment variable
# export CRAWLERVERSE_API_KEY=cra_...
client = CrawlerClient()
Async Support
from crawlerverse import AsyncCrawlerClient, async_run_game
async with AsyncCrawlerClient() as client:
result = await async_run_game(client, my_agent)
API Reference
Client Methods
client.games.create(model_id="gpt-4o") # Start a new game
client.games.list(status="completed") # List your games
client.games.get(game_id) # Get game state
client.games.action(game_id, Move(...)) # Submit action
client.games.abandon(game_id) # Abandon game
client.health() # Health check
Actions
Move(direction=Direction.NORTH)
Attack(direction=Direction.EAST)
Wait()
Pickup()
Drop(item_type="health-potion")
Use(item_type="health-potion")
Equip(item_type="iron-sword")
EnterPortal()
RangedAttack(direction=Direction.SOUTH, distance=5)
Observation Helpers
obs.tile_at(x, y) # Look up tile by coordinates
obs.monsters() # All visible monsters
obs.nearest_monster() # Closest monster
obs.items_at_feet() # Items at player's position
obs.has_item("sword") # Check inventory
obs.can_move(Direction.NORTH) # Check if direction is walkable
Examples
All examples default to a local API at http://localhost:3000/api/agent. Set CRAWLERVERSE_BASE_URL to point at production.
OpenAI
pip install openai
export CRAWLERVERSE_API_KEY=cra_...
export OPENAI_API_KEY=sk-...
python examples/openai_agent.py
Works with any OpenAI-compatible provider (Ollama, LMStudio, Azure, etc.) via OPENAI_BASE_URL.
Anthropic (Claude)
See examples/anthropic_agent.py:
pip install anthropic
export CRAWLERVERSE_API_KEY=cra_...
export ANTHROPIC_API_KEY=sk-ant-...
python examples/anthropic_agent.py
Uses Claude Haiku 4.5 by default. Override with ANTHROPIC_MODEL=claude-sonnet-4-5.
Local LLM (Ollama / LMStudio)
See examples/local_llm_agent.py for a script with configurable turn limits and error recovery:
pip install openai
export CRAWLERVERSE_API_KEY=cra_...
export OPENAI_BASE_URL=http://localhost:11434/v1
export OPENAI_MODEL=llama3
python examples/local_llm_agent.py
Supports MAX_TURNS (default 25) and MODEL_ID env vars.
License
MIT
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file crawlerverse-0.1.0.tar.gz.
File metadata
- Download URL: crawlerverse-0.1.0.tar.gz
- Upload date:
- Size: 71.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94d9c07d310d6190419a05e618d35fa793873104da4c97c59bb13e49ea76265d
|
|
| MD5 |
9c68a28e7ecbefc509c7fd28284af9e4
|
|
| BLAKE2b-256 |
4c1d45b73eb33f2c8aac2f67fe0891feba5cff5aa6059e02980c1d5be84d51b4
|
File details
Details for the file crawlerverse-0.1.0-py3-none-any.whl.
File metadata
- Download URL: crawlerverse-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5cf3bf421abcd9bfb0a3bb0183462bcbdd9869c750f44c45963d31a5621ac98b
|
|
| MD5 |
79bf94ce63969028b7f2deb9cd9aaf21
|
|
| BLAKE2b-256 |
1b2284fd00dd173c2eb4ec377c024727923dee9f51517e4663613130f1951ba6
|