Version: 1.0
Last Updated: October 6, 2025
Audience: AI Agents, z3ed users, automation developers
Overview
This guide explains how AI agents can interact with YAZE's overworld editor through the z3ed
CLI and automation APIs. It covers:
- Available tools and commands
- Multimodal vision workflows
- Proposal-based editing
- Best practices for AI-generated edits
Quick Start
Prerequisites
# Build YAZE with AI and gRPC support
cmake -B build -DZ3ED_AI=ON -DYAZE_WITH_GRPC=ON
cmake --build build --target z3ed
# Set up AI provider (Gemini recommended for vision)
export GEMINI_API_KEY="your-key-here"
First Agent Interaction
# Ask AI about a map
z3ed agent simple-chat "What tiles are at position 10,10 on map 0?" --rom zelda3.sfc
# AI agent generates edits
z3ed agent run --prompt "Place trees in a 3x3 grid at position 10,10 on map 0" \
--rom zelda3.sfc --sandbox
# Review and accept
z3ed agent diff --proposal-id <id>
z3ed agent accept --proposal-id <id>
Available Tools
Read-Only Tools (Safe for AI)
overworld-get-tile
Query tile ID at coordinates.
Purpose: Analyze existing tile placement
Safety: Read-only, no ROM modification
Rate Limit: None
{
"tool": "overworld-get-tile",
"parameters": {
"map": 0,
"x": 10,
"y": 10
}
}
Response:
{
"tile_id": 66,
"tile_id_hex": "0x0042",
"position": {"x": 10, "y": 10}
}
Use Cases:
- Check what tile currently exists before painting
- Analyze patterns in tile placement
- Verify expected tiles after edits
overworld-get-visible-region
Get tiles currently visible on canvas.
Purpose: Understand what the user is looking at
Safety: Read-only
Rate Limit: None
{
"tool": "overworld-get-visible-region",
"parameters": {
"map": 0
}
}
Response:
{
"region": {
"x_start": 0,
"y_start": 0,
"x_end": 31,
"y_end": 31
},
"tiles": [
{"x": 0, "y": 0, "tile_id": 40},
{"x": 1, "y": 0, "tile_id": 40},
...
]
}
Use Cases:
- Analyze visible area before suggesting edits
- Generate context-aware suggestions
- Understand user's current focus
overworld-analyze-region
Get tile composition and patterns in a region.
Purpose: Deep analysis of tile distribution
Safety: Read-only
Rate Limit: Large regions (>1000 tiles) may be slow
{
"tool": "overworld-analyze-region",
"parameters": {
"map": 0,
"x1": 0,
"y1": 0,
"x2": 31,
"y2": 31
}
}
Response:
{
"tile_counts": {
"40": 512, // Grass
"66": 128, // Tree
"80": 64 // Water
},
"patterns": [
{
"type": "forest",
"center": {"x": 15, "y": 15},
"size": {"width": 10, "height": 10}
}
],
"statistics": {
"total_tiles": 1024,
"unique_tiles": 15,
"most_common_tile": 40
}
}
Use Cases:
- Understand map composition before edits
- Detect patterns (forests, water bodies, paths)
- Generate statistics for reports
Write Tools (Sandboxed - Creates Proposals)
overworld-set-tile
Paint a single tile (creates proposal).
Purpose: Modify single tile
Safety: Sandboxed, creates proposal
Rate Limit: Reasonable (don't spam)
{
"tool": "overworld-set-tile",
"parameters": {
"map": 0,
"x": 10,
"y": 10,
"tile_id": 66
}
}
Response:
{
"proposal_id": "abc123",
"success": true,
"message": "Proposal created: Set tile at (10,10) to 0x0042"
}
Use Cases:
- Fix individual tiles
- Place objects at specific coordinates
- Correct tile placement errors
overworld-set-tiles-batch
Paint multiple tiles in one operation (creates proposal).
Purpose: Efficient multi-tile editing
Safety: Sandboxed, creates proposal
Rate Limit: Max 1000 tiles per batch
{
"tool": "overworld-set-tiles-batch",
"parameters": {
"map": 0,
"tiles": [
{"x": 10, "y": 10, "tile_id": 66},
{"x": 11, "y": 10, "tile_id": 66},
{"x": 12, "y": 10, "tile_id": 66}
]
}
}
Response:
{
"proposal_id": "abc123",
"tiles_painted": 3,
"success": true
}
Use Cases:
- Create patterns (forests, paths, water bodies)
- Fill regions with specific tiles
- Generate complex map structures
Multimodal Vision Workflow
Step 1: Capture Canvas Screenshot
# From CLI
z3ed agent vision --capture-canvas "Overworld Canvas" \
--prompt "Analyze this overworld map" \
--rom zelda3.sfc
# From agent workflow
z3ed agent run --prompt "Analyze map 0 and suggest improvements" \
--rom zelda3.sfc --sandbox
Step 2: AI Analyzes Screenshot
Gemini Vision API receives:
- Screenshot of canvas (PNG/JPEG)
- User prompt
- Context (map index, visible region)
AI returns:
{
"analysis": {
"observations": [
"Grass tiles dominate the visible area",
"Tree tiles are sparse and unnatural",
"Water tiles at (15,15) have incorrect palette colors",
"Path from (5,5) to (25,5) is broken"
],
"composition_score": 6.5,
"issues": [
{
"type": "sparse_trees",
"severity": "medium",
"location": {"x": 10, "y": 10},
"suggestion": "Add more tree tiles for forest theme"
}
]
}
}
Step 3: Generate Edit Plan
AI creates actionable plan:
{
"plan": [
{
"tool": "overworld-set-tiles-batch",
"parameters": {
"map": 0,
"tiles": [
{"x": 10, "y": 10, "tile_id": 66},
{"x": 11, "y": 10, "tile_id": 66},
{"x": 12, "y": 10, "tile_id": 66}
]
},
"reason": "Create denser forest area"
}
]
}
Step 4: Execute Plan (Sandbox)
# z3ed executes plan in sandbox
z3ed agent run --plan plan.json --rom zelda3.sfc --sandbox
Step 5: Human Review
# View proposed changes
z3ed agent diff --proposal-id abc123
# Accept or reject
z3ed agent accept --proposal-id abc123
# or
z3ed agent reject --proposal-id abc123
Example Workflows
Workflow 1: Create Forest Area
User Prompt: "Create a forest clearing at position 15,15 with grass in the center"
AI Plan:
{
"steps": [
{
"step": 1,
"description": "Check current tiles in region",
"tool": "overworld-analyze-region",
"parameters": {
"map": 0,
"x1": 10,
"y1": 10,
"x2": 20,
"y2": 20
}
},
{
"step": 2,
"description": "Paint grass clearing (center 5x5)",
"tool": "overworld-set-tiles-batch",
"parameters": {
"map": 0,
"tiles": [
{"x": 13, "y": 13, "tile_id": 40},
{"x": 14, "y": 13, "tile_id": 40},
...
]
}
},
{
"step": 3,
"description": "Plant trees around edges",
"tool": "overworld-set-tiles-batch",
"parameters": {
"map": 0,
"tiles": [
{"x": 10, "y": 10, "tile_id": 66},
{"x": 11, "y": 10, "tile_id": 66},
...
]
}
}
]
}
CLI Execution:
z3ed agent run --prompt "Create a forest clearing at position 15,15 with grass in the center" \
--rom zelda3.sfc --sandbox
Result: Proposal created with 50+ tile changes
Workflow 2: Fix Tile Placement Errors
User Prompt: "Fix any water tiles that should be grass in the visible region"
AI Plan:
{
"steps": [
{
"step": 1,
"tool": "overworld-get-visible-region",
"parameters": {"map": 0}
},
{
"step": 2,
"tool": "overworld-analyze-region",
"parameters": {
"map": 0,
"x1": 0,
"y1": 0,
"x2": 31,
"y2": 31
}
},
{
"step": 3,
"description": "Identify misplaced water tiles",
"logic": "Find water tiles (80) surrounded by grass (40)"
},
{
"step": 4,
"tool": "overworld-set-tiles-batch",
"parameters": {
"map": 0,
"tiles": [
{"x": 5, "y": 5, "tile_id": 40},
{"x": 12, "y": 8, "tile_id": 40}
]
}
}
]
}
Workflow 3: Generate Path
User Prompt: "Create a path from (5,5) to (25,25) using path tiles"
AI Plan:
{
"steps": [
{
"step": 1,
"description": "Calculate path coordinates",
"logic": "Line from (5,5) to (25,25)"
},
{
"step": 2,
"tool": "overworld-set-tiles-batch",
"parameters": {
"map": 0,
"tiles": [
{"x": 5, "y": 5, "tile_id": 50},
{"x": 6, "y": 6, "tile_id": 50},
{"x": 7, "y": 7, "tile_id": 50},
...
]
}
}
]
}
Common Tile IDs Reference
Grass & Ground
0x0028
(40) - Grass
0x0029
(41) - Dark grass
0x002A
(42) - Dirt
0x002B
(43) - Sand
Trees & Plants
0x0042
(66) - Tree
0x0043
(67) - Bush
0x0044
(68) - Flower
Water
0x0050
(80) - Water
0x0051
(81) - Deep water
0x0052
(82) - Shore
Paths & Roads
0x0032
(50) - Path
0x0033
(51) - Road
0x0034
(52) - Bridge
Structures
0x0060
(96) - Wall
0x0061
(97) - Door
0x0062
(98) - Window
Best Practices for AI Agents
1. Always Analyze Before Editing
# GOOD: Check current state first
z3ed agent run --prompt "Analyze map 0 then suggest improvements" --rom zelda3.sfc --sandbox
# BAD: Blindly paint without context
z3ed agent run --prompt "Paint trees everywhere" --rom zelda3.sfc --sandbox
2. Use Batch Operations
# GOOD: Single batch operation
overworld-set-tiles-batch (50 tiles)
# BAD: 50 individual operations
overworld-set-tile (×50)
3. Provide Clear Reasoning
{
"tool": "overworld-set-tile",
"parameters": {"x": 10, "y": 10, "tile_id": 66},
"reason": "Creating forest theme - tree tile at center"
}
4. Respect Tile Boundaries
Large maps (0x00-0x09, 0x80-0x89) are 512×512 pixels = 32×32 tiles.
Don't paint beyond (31, 31)
for these maps.
5. Check Visibility
{
"step": 1,
"tool": "overworld-get-visible-region",
"reason": "Ensure tiles are visible before analysis"
}
6. Create Reversible Edits
Always generate proposals that can be rejected:
z3ed agent run --prompt "..." --rom zelda3.sfc --sandbox # Creates proposal
z3ed agent reject --proposal-id abc123 # Can undo
Error Handling
"Tile ID out of range"
- Cause: Invalid tile ID (>4095 for Tile16)
- Fix: Validate tile IDs before
set-tile
"Coordinates out of bounds"
- Cause: Painting beyond map boundaries
- Fix: Check map dimensions (typically 32×32 tiles)
"Proposal rejected"
- Cause: Human reviewer rejected changes
- Fix: Analyze feedback, adjust plan, try again
"ROM file locked"
- Cause: ROM file open in another process
- Fix: Close other instances of YAZE
Testing AI-Generated Edits
Manual Testing
# Generate proposal
z3ed agent run --prompt "..." --rom zelda3.sfc --sandbox
# Review in YAZE GUI
yaze zelda3.sfc
# Open Debug → Agent Chat → Proposals
# Review proposal, accept/reject
Automated Testing
# GUI automation test
z3ed agent test replay overworld_ai_edit.jsonl --rom zelda3.sfc --grpc localhost:50051
# Validate tile placement
z3ed agent test assert --tile-at 10,10 --expected-tile 66 --rom zelda3.sfc
Advanced Techniques
Technique 1: Pattern Recognition
Use multimodal vision to detect patterns:
z3ed agent vision --capture-canvas "Overworld Canvas" \
--prompt "Identify repeated tile patterns in this map" \
--rom zelda3.sfc
AI detects:
- Forest clusters
- Water bodies
- Paths and roads
- Building layouts
Technique 2: Style Transfer
z3ed agent run --prompt "Make this map look like Kakariko Village from the dark world" \
--rom zelda3.sfc --sandbox
AI:
- Analyzes Kakariko Village (map 0x18)
- Extracts tile palette and patterns
- Applies similar patterns to target map
Technique 3: Procedural Generation
z3ed agent run --prompt "Generate a random forest area at 10,10 with natural-looking tree placement" \
--rom zelda3.sfc --sandbox
AI uses procedural algorithms:
- Perlin noise for natural randomness
- Clustering for realistic tree placement
- Edge smoothing for organic boundaries
Integration with GUI Automation
Record Human Edits
# Record editing session
z3ed agent test record --suite overworld_forest.jsonl --rom zelda3.sfc
Replay for AI Training
# Replay recorded session
z3ed agent test replay overworld_forest.jsonl --rom zelda3.sfc
# AI learns from human edits
z3ed agent learn --from-recording overworld_forest.jsonl
Validate AI Edits
# AI generates edits
z3ed agent run --prompt "..." --rom zelda3.sfc --sandbox
# GUI automation validates
z3ed agent test verify --proposal-id abc123 --suite validation_tests.jsonl
Collaboration Features
Network Collaboration
# Connect to yaze-server
z3ed net connect ws://localhost:8765
# Join session
z3ed net join ABC123 --username "ai-agent"
# AI agent edits, humans review in real-time
z3ed agent run --prompt "..." --rom zelda3.sfc --sandbox
# Proposal synced to all participants
Proposal Voting
# Submit proposal to session
z3ed proposal submit --proposal-id abc123 --session ABC123
# Wait for votes
z3ed proposal wait --proposal-id abc123
# Check result
z3ed proposal status --proposal-id abc123
# Output: approved (3/3 votes)
Troubleshooting
Agent Not Responding
# Check AI provider
z3ed agent ping
# Test simple query
z3ed agent simple-chat "Hello" --rom zelda3.sfc
Tools Not Available
# Verify z3ed build
z3ed agent describe --resource overworld
# Should show:
# - overworld-get-tile
# - overworld-set-tile
# - overworld-analyze-region
gRPC Connection Failed
# Check YAZE is running with gRPC
z3ed agent test ping --grpc localhost:50051
# Start YAZE with gRPC enabled
yaze --enable-grpc zelda3.sfc
See Also
- Canvas Automation API - C++ API reference
- GUI Automation Scenarios - Test examples
- z3ed README - CLI documentation
- Multimodal Vision - Screenshot analysis