Harness System
Multi-session AI game development for Roblox
The Harness System enables AI agents (like Claude) to build Roblox games incrementally across multiple sessions, maintaining context and tracking progress even when the AI has no memory of previous work.
The Problem
When you're building a Roblox game with AI assistance across multiple sessions:
- No memory - Each new Claude session starts fresh with zero context
- Lost progress - You have to re-explain what features exist, what's done, what's blocked
- Missing decisions - Design decisions, architecture notes, and handoff context are lost
- Manual tracking - No structured way to track feature progress
The Solution
The Harness System provides structured persistence for AI game development:
.rbxsync/harness/
├── game.yaml # Game definition and architecture
├── features.yaml # Feature registry with status tracking
└── sessions/ # Development session logs
├── abc123.yaml # Session 1 - Combat system
└── def456.yaml # Session 2 - InventoryEach session can read previous context, update feature status, and leave handoff notes for the next session.
Quick Start
1. Initialize Harness
curl -X POST http://localhost:44755/harness/init \
-H "Content-Type: application/json" \
-d '{
"projectDir": "/path/to/game",
"gameName": "My RPG",
"genre": "RPG",
"description": "A fantasy adventure game"
}'This creates the .rbxsync/harness/ directory structure.
2. Start a Session
curl -X POST http://localhost:44755/harness/session/start \
-H "Content-Type: application/json" \
-d '{
"projectDir": "/path/to/game",
"initialGoals": ["Implement inventory system", "Add item pickups"]
}'Returns a sessionId and context from previous sessions.
3. Track Features
curl -X POST http://localhost:44755/harness/feature/update \
-H "Content-Type: application/json" \
-d '{
"projectDir": "/path/to/game",
"name": "Inventory System",
"status": "in_progress",
"priority": "high",
"tags": ["ui", "gameplay"],
"notes": ["Using ReplicatedStorage for ItemData", "Max 20 slots"]
}'4. End Session with Handoff
curl -X POST http://localhost:44755/harness/session/end \
-H "Content-Type: application/json" \
-d '{
"projectDir": "/path/to/game",
"sessionId": "abc-123-def",
"summary": "Completed basic inventory UI and item data structure",
"handoffNotes": [
"Need to add drag-drop functionality",
"ItemData module is in ReplicatedStorage/Data",
"Using RemoteEvents for client-server sync"
],
"completedFeatures": ["Inventory System"],
"blockers": []
}'5. Check Status (Next Session)
curl -X POST http://localhost:44755/harness/status \
-H "Content-Type: application/json" \
-d '{"projectDir": "/path/to/game"}'Returns complete game state, all features, and recent session summaries.
API Reference
POST /harness/init
Initialize a new harness for a project.
Request:
{
"projectDir": "/path/to/game",
"gameName": "My Game",
"description": "Optional description",
"genre": "RPG"
}Response:
{
"success": true,
"message": "Harness initialized",
"harnessDir": "/path/to/game/.rbxsync/harness",
"gameId": "uuid-here"
}POST /harness/session/start
Start a new development session.
Request:
{
"projectDir": "/path/to/game",
"initialGoals": ["Goal 1", "Goal 2"]
}Response:
{
"success": true,
"sessionId": "uuid-here",
"game": { /* GameDefinition */ },
"features": [ /* Feature[] */ ],
"previousSessions": [ /* Recent session summaries */ ],
"suggestedNextSteps": ["Based on status..."]
}POST /harness/session/end
End the current session with summary and handoff notes.
Request:
{
"projectDir": "/path/to/game",
"sessionId": "uuid-from-start",
"summary": "What was accomplished",
"handoffNotes": ["Note for next session"],
"completedFeatures": ["Feature A"],
"blockers": ["Blocked by X"]
}POST /harness/feature/update
Create or update a feature.
Request:
{
"projectDir": "/path/to/game",
"name": "Feature Name",
"description": "What it does",
"status": "planned|in_progress|completed|blocked|cancelled",
"priority": "critical|high|medium|low",
"tags": ["ui", "gameplay"],
"dependencies": ["Other Feature"],
"acceptanceCriteria": ["Player can X", "System does Y"],
"notes": ["Implementation notes"]
}POST /harness/status
Get current harness state.
Request:
{
"projectDir": "/path/to/game"
}Response:
{
"success": true,
"game": { /* GameDefinition */ },
"features": {
"total": 5,
"byStatus": {
"planned": 2,
"in_progress": 1,
"completed": 2,
"blocked": 0
},
"list": [ /* Feature[] */ ]
},
"recentSessions": [ /* Last 5 sessions */ ],
"nextSteps": ["Suggested actions"]
}Data Structures
GameDefinition (game.yaml)
id: "uuid"
name: "My RPG"
description: "A fantasy adventure game"
genre: "RPG"
targetAudience: "Casual gamers"
designGoals:
- "Engaging combat system"
- "Rich lore and story"
constraints:
- "Must run on mobile"
- "Max 50 concurrent players"
references:
- "https://example.com/inspiration"
createdAt: "2026-01-16T12:00:00Z"
updatedAt: "2026-01-16T14:30:00Z"Feature (features.yaml)
features:
- id: "uuid"
name: "Combat System"
description: "Turn-based combat with abilities"
status: completed
priority: critical
tags:
- gameplay
- core
dependencies: []
acceptanceCriteria:
- "Player can attack enemies"
- "Damage calculation works"
notes:
- "Using CombatModule in ServerScriptService"
createdAt: "2026-01-15T10:00:00Z"
updatedAt: "2026-01-16T14:00:00Z"SessionLog (sessions/<id>.yaml)
id: "uuid"
startedAt: "2026-01-16T10:00:00Z"
endedAt: "2026-01-16T12:30:00Z"
initialGoals:
- "Implement inventory system"
summary: "Completed basic inventory UI"
handoffNotes:
- "Need drag-drop next"
- "ItemData in ReplicatedStorage/Data"
entries:
- timestamp: "2026-01-16T10:15:00Z"
type: feature_started
content: "Started Inventory System"
- timestamp: "2026-01-16T12:00:00Z"
type: feature_completed
content: "Inventory UI done"
completedFeatures:
- "Inventory System"
blockers: []Use Case: Building an RPG
Session 1 (Monday)
# Initialize
curl -X POST localhost:44755/harness/init \
-d '{"projectDir": "/games/rpg", "gameName": "Dragon Quest Clone", "genre": "RPG"}'
# Start session
curl -X POST localhost:44755/harness/session/start \
-d '{"projectDir": "/games/rpg", "initialGoals": ["Set up project structure", "Combat system"]}'
# Create features
curl -X POST localhost:44755/harness/feature/update \
-d '{"projectDir": "/games/rpg", "name": "Combat System", "status": "in_progress", "priority": "critical"}'
curl -X POST localhost:44755/harness/feature/update \
-d '{"projectDir": "/games/rpg", "name": "Inventory", "status": "planned", "priority": "high"}'
curl -X POST localhost:44755/harness/feature/update \
-d '{"projectDir": "/games/rpg", "name": "NPC Dialog", "status": "planned", "priority": "medium"}'
# ... work on combat ...
# Mark combat complete
curl -X POST localhost:44755/harness/feature/update \
-d '{"projectDir": "/games/rpg", "name": "Combat System", "status": "completed"}'
# End session
curl -X POST localhost:44755/harness/session/end \
-d '{
"projectDir": "/games/rpg",
"sessionId": "...",
"summary": "Combat system complete with turn-based mechanics",
"handoffNotes": [
"Damage formula: ATK * 2 - DEF",
"CombatModule in ServerScriptService/Combat",
"Using BindableEvents for turn signals"
],
"completedFeatures": ["Combat System"]
}'Session 2 (Wednesday - Fresh Claude Instance)
# Check status - see what's done
curl -X POST localhost:44755/harness/status \
-d '{"projectDir": "/games/rpg"}'
# Response shows:
# - Combat System: completed
# - Inventory: planned (suggested next)
# - Previous handoff: "Damage formula: ATK * 2 - DEF..."
# Start new session with full context
curl -X POST localhost:44755/harness/session/start \
-d '{"projectDir": "/games/rpg", "initialGoals": ["Implement inventory"]}'
# Continue building with context preservedFeature Status Flow
planned → in_progress → completed
↓
blocked → in_progress → completed
↓
cancelledBest Practices
- Be specific in handoff notes - Include file paths, module names, design decisions
- Use acceptance criteria - Makes it clear when a feature is "done"
- Tag features consistently - Helps filter and organize (ui, gameplay, networking, etc.)
- Track dependencies - Know what needs to be done first
- End every session - Even if incomplete, handoff notes help the next session
Future Enhancements
- MCP Tools - Claude can query/update harness directly via tool calls
- VS Code UI - Visualize feature progress in sidebar
- Game Templates - Pre-built feature sets for common genres (Tycoon, Obby, Simulator)
- Auto-context injection - Harness state automatically included in Claude prompts
- Feature verification - Integration with bot testing to verify features work
Related
- MCP Integration - AI tool integration
- Bot Testing - Automated game testing
- Getting Started - RbxSync basics
