- Updated the immediate action plan to focus on integrating `Tile16ProposalGenerator` and `ResourceContextBuilder` into agent commands, improving command handling and proposal generation. - Implemented the `SetTile` method in the `Overworld` class to facilitate tile modifications based on the current world context. - Enhanced error handling in command execution to ensure robust feedback during ROM operations. - Created new files for `Tile16ProposalGenerator` and `ResourceContextBuilder`, enabling structured management of tile changes and resource labels for AI prompts. This commit advances the functionality of the z3ed system, laying the groundwork for more sophisticated AI-driven editing capabilities.
z3ed: AI-Powered CLI for YAZE
Status: Active Development | AI Integration Phase
Latest Update: October 3, 2025
Overview
z3ed is a command-line interface for YAZE that enables AI-driven ROM modifications through a proposal-based workflow. It provides both human-accessible commands for developers and machine-readable APIs for LLM integration.
Core Capabilities:
- AI-Driven Editing: Natural language prompts → ROM modifications (overworld tile16, dungeon objects, sprites, palettes)
- GUI Test Automation: Widget discovery, test recording/replay, introspection for debugging
- Proposal System: Safe sandbox editing with accept/reject workflow
- Multiple AI Backends: Ollama (local), Gemini (cloud), Claude (planned)
Quick Start
Build Options
# Basic z3ed (CLI only, no AI/testing features)
cmake --build build --target z3ed
# Full build with AI agent and testing suite
cmake -B build-grpc-test -DYAZE_WITH_GRPC=ON -DYAZE_WITH_JSON=ON
cmake --build build-grpc-test --target z3ed
Dependencies for Full Build:
- gRPC (GUI automation)
- nlohmann/json (AI service communication)
- OpenSSL (optional, for Gemini HTTPS - auto-detected on macOS/Linux)
AI Agent Commands
# Generate commands from natural language prompt
z3ed agent plan --prompt "Place a tree at position 10, 10 on map 0"
# Execute in sandbox with auto-approval
z3ed agent run --prompt "Create a 3x3 water pond at 15, 20" --rom zelda3.sfc --sandbox
# List all proposals
z3ed agent list
# View proposal details
z3ed agent diff --proposal <id>
GUI Testing Commands
# Run automated test
z3ed agent test --prompt "Open Overworld editor and verify it loads"
# Query test status
z3ed agent test status --test-id <id> --follow
# Record manual workflow
z3ed agent test record start --output tests/my_test.json
# ... perform actions in GUI ...
z3ed agent test record stop
# Replay recorded test
z3ed agent test replay tests/my_test.json
AI Service Setup
Ollama (Local LLM - Recommended for Development)
# Install Ollama
brew install ollama # macOS
# or download from https://ollama.com
# Pull recommended model
ollama pull qwen2.5-coder:7b
# Start server
ollama serve
# z3ed will auto-detect Ollama at localhost:11434
z3ed agent plan --prompt "test"
Gemini (Google Cloud API)
# Get API key from https://aistudio.google.com/apikey
export GEMINI_API_KEY="your-key-here"
# z3ed will auto-select Gemini when key is set
z3ed agent plan --prompt "test"
Note: Gemini requires OpenSSL (HTTPS). Build with -DYAZE_WITH_GRPC=ON -DYAZE_WITH_JSON=ON to enable SSL support. OpenSSL is auto-detected on macOS/Linux. Windows users can use Ollama instead.
Core Documentation
Essential Reads
- E6-z3ed-cli-design.md - Architecture, design philosophy, agentic workflow framework
- E6-z3ed-reference.md - Complete command reference and API documentation
- AGENTIC-PLAN-STATUS.md - Current implementation status and roadmap
Quick References
- QUICK_REFERENCE.md - Condensed command cheatsheet
- QUICK-START-GEMINI.md - Gemini API setup and testing guide
- OVERWORLD-DUNGEON-AI-PLAN.md - Tile16 editing strategy and ResourceLabels integration
Implementation Guides
- LLM-INTEGRATION-PLAN.md - LLM integration roadmap (Ollama, Gemini, Claude)
- LLM-IMPLEMENTATION-CHECKLIST.md - Step-by-step implementation tasks
- IT-05-IMPLEMENTATION-GUIDE.md - Test introspection API (complete ✅)
- IT-08-IMPLEMENTATION-GUIDE.md - Enhanced error reporting (complete ✅)
Current Status (October 2025)
✅ Complete
- CLI Infrastructure: Command parsing, handlers, TUI components
- Proposal System: Sandbox creation, diff generation, accept/reject workflow
- AI Services: Ollama integration, Gemini integration, PromptBuilder
- GUI Automation: Widget discovery, test recording/replay, gRPC harness
- Test Introspection: Status polling, results query, execution history
- Error Reporting: Screenshots, failure context, widget state dumps
🔄 In Progress
- Tile16 Editing Workflow: Accept/reject for overworld canvas edits
- ResourceLabels Integration: User-defined names for AI context
- Dungeon Editing Support: Object/sprite placement via AI
📋 Planned
- Visual Diff Generation: Before/after screenshots for proposals
- Batch Operations: Multiple tile16 changes in single proposal
- Pattern Library: Pre-defined tile patterns (rivers, forests, etc.)
- Claude Integration: Anthropic API support
AI Editing Focus Areas
z3ed is optimized for practical ROM editing workflows:
Overworld Tile16 Editing ⭐ PRIMARY FOCUS
Why: Simple data model (uint16 IDs), visual feedback, reversible, safe
- Single tile placement (trees, rocks, bushes)
- Area creation (water ponds, dirt patches)
- Path creation (connecting points with tiles)
- Pattern generation (tree rows, forests, boundaries)
Dungeon Editing
- Sprite placement with label awareness ("eastern palace entrance")
- Object placement (chests, doors, switches)
- Entrance configuration
- Room property editing
Palette Editing
- Color modification by index
- Sprite palette adjustments
- Export/import workflows
Additional Capabilities
- Sprite data editing
- Compression/decompression
- ROM validation
- Patch application
Example Workflows
Basic Tile16 Edit
# AI generates command
z3ed agent plan --prompt "Place a tree at 10, 10"
# Output: overworld set-tile --map 0 --x 10 --y 10 --tile 0x02E
# Execute manually
z3ed overworld set-tile --map 0 --x 10 --y 10 --tile 0x02E
# Or auto-execute with sandbox
z3ed agent run --prompt "Place a tree at 10, 10" --rom zelda3.sfc --sandbox
Complex Multi-Step Edit
# AI generates multiple commands
z3ed agent plan --prompt "Create a 3x3 water pond at 15, 20"
# Review proposal
z3ed agent diff --latest
# Accept and apply
z3ed agent accept --latest
Label-Aware Dungeon Edit
# AI uses ResourceLabels from your project
z3ed agent plan --prompt "Add 3 soldiers to my custom fortress entrance"
# AI explains: "Using label 'custom_fortress' for dungeon 0x04"
Dependencies Guard
AI agent features require:
YAZE_WITH_GRPC=ON- GUI automation and test harnessYAZE_WITH_JSON=ON- AI service communication- OpenSSL (optional) - Gemini HTTPS support (auto-detected)
Windows Compatibility: Build without gRPC/JSON for basic z3ed functionality. Use Ollama (localhost) instead of Gemini for AI features without SSL dependency.
Recent Changes (Oct 3, 2025)
SSL/HTTPS Support
- ✅ OpenSSL now optional (guarded by YAZE_WITH_GRPC + YAZE_WITH_JSON)
- ✅ Graceful degradation when OpenSSL not found (Ollama still works)
- ✅ Windows builds work without SSL dependencies
Prompt Engineering
- ✅ Refocused examples on tile16 editing workflows
- ✅ Added dungeon editing with label awareness
- ✅ Inline tile16 reference for AI knowledge
- ✅ Practical multi-step examples (water ponds, paths, patterns)
Documentation Consolidation
- ✅ Removed 10 outdated/redundant documents
- ✅ Consolidated status into AGENTIC-PLAN-STATUS.md
- ✅ Updated README with clear dependency requirements
- ✅ Added Windows compatibility notes
Troubleshooting
"OpenSSL not found" warning
Impact: Gemini API won't work (HTTPS required)
Solutions:
- Use Ollama instead (no SSL needed, runs locally)
- Install OpenSSL:
brew install openssl(macOS) orapt-get install libssl-dev(Linux) - Windows: Build without gRPC/JSON, use Ollama
"gRPC not available" error
Impact: GUI testing and automation disabled
Solution: Rebuild with -DYAZE_WITH_GRPC=ON
AI generates invalid commands
Causes: Vague prompt, unfamiliar tile IDs, missing context
Solutions:
- Use specific coordinates and tile types
- Reference tile16 IDs from documentation
- Provide map context ("Light World", "map 0")
- Check ResourceLabels are loaded for your project
Contributing
Adding AI Prompt Examples
Edit src/cli/service/prompt_builder.cc → LoadDefaultExamples()
- Add practical, multi-step examples
- Include explanation of tile IDs and reasoning
- Test with both Ollama and Gemini
Adding CLI Commands
- Create handler in
src/cli/handlers/<category>.cc - Register in command dispatcher
- Add to
E6-z3ed-reference.mddocumentation - Add example prompt to
prompt_builder.cc
Testing
# Run unit tests
cd build-grpc-test && ctest --output-on-failure
# Test AI integration
./bin/z3ed agent plan --prompt "test prompt" --verbose
Getting Help:
- Read E6-z3ed-cli-design.md for architecture
- Check AGENTIC-PLAN-STATUS.md for current status
- Review QUICK-START-GEMINI.md for AI setup
Quick Test (verifies AI is working):
export GEMINI_API_KEY="your-key" # or start ollama serve
./build-grpc-test/bin/z3ed agent plan --prompt "Place a tree at 10, 10"