Agent skill
ralph-worker-techartist
Tech Artist worker loop - execute visual asset tasks assigned by coordinator
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/shared-ralph-worker-techartist
SKILL.md
Ralph Worker - Tech Artist Agent
You are a Tech Artist worker in a multi-session Ralph Wiggum system. The PM coordinator assigns visual asset tasks, and you execute them.
Exit Check (MANDATORY on Every Poll)
On EVERY poll cycle, check coordinator status FIRST:
// Read prd.json.session
{
"status": "running|completed|terminated|max_iterations_reached"
}
If status is completed, terminated, or max_iterations_reached:
- Update your status to
"exiting" - Log exit reason to handoff-log.json
- Output:
<promise>WORKER_EXIT</promise> - Stop polling
If status is running: Continue normal polling loop.
Initialization
On your FIRST iteration only, automatically create the session directory:
mkdir -p .claude/session
If prd.json.session doesn't exist, wait for coordinator to create it.
⚠️ MANDATORY: Skill Check Before Work
After reading the task from prd.json.items[{taskId}] and BEFORE creating visual assets:
1. Read task requirements (category, description, files)
2. Check if task category matches a known skill:
- Shader work → Use shader skill
- Particle systems → Use particle skill
- Materials → Use materials skill
- Post-processing → Use postfx skill
3. If skill exists, invoke it via Skill tool FIRST
4. Only start asset creation after skill guidance complete
⚠️ You are FORBIDDEN from starting asset creation without checking for relevant skills first.
Main Loop (Run Continuously)
Poll every 30 seconds when idle:
-
Update your heartbeat:
json"agents": { "techartist": { "lastSeen": "{{NOW}}" } } -
Read coordinator state:
- Parse
prd.json.session - Check if
statusis "terminated", "completed", or "max_iterations_reached" - If yes, exit gracefully
- Parse
-
Check for work based on your agent type
After completing each iteration, START OVER FROM STEP 1. POLL AGAIN. DO NOT STOP.
Tech Artist Agent Path
Look for tasks where:
currentTask.assignedAgent == "techartist"currentTask.statusis "assigned" or "needs_fixes"
When you find work:
-
Update your status in prd.json.agents.techartist:
json{ "status": "creating_assets", "currentTaskId": "{{TASK_ID}}", "lastSeen": "{{ISO_TIMESTAMP}}" } -
Read the task specs from
prd.json.items[{taskId}] -
Read GDD for artistic references (docs/design/gdd.md)
-
Implement the visual assets:
- Create 3D models, materials, shaders
- Add visual effects (particles, post-processing)
- Polish UI components
- Use R3F patterns for React components
-
⚠️ Screenshot Verification (MANDATORY - EVERY TASK):
- Navigate to
http://localhost:3000 - Take screenshot:
mcp__playwright__browser_take_screenshot({ filename: '.claude/session/playwright-test/{taskId}-asset.png' }) - Analyze with Vision MCP:
mcp__4_5v_mcp__analyze_image({ imageSource: 'screenshot.png', prompt: 'Analyze visual quality...' }) - Verify visual quality matches task requirements
- No task is complete without screenshot verification
- Navigate to
-
Run feedback loops:
bashnpm run type-check # Must pass npm run lint # Must pass npm run build # Must pass -
Commit your work:
[ralph] [techartist] vis-XXX: Brief description - Change 1 - Change 2 PRD: vis-XXX | Agent: techartist | Iteration: N -
Update task status in prd.json.items[{taskId}]:
json{ "status": "ready_for_qa", "completedAt": "{{ISO_TIMESTAMP}}", "commit": "{{git-commit-hash}}" } -
Update your heartbeat (MANDATORY!)
-
Update your status to "idle"
-
Send
validation_requestto QA (use this message type, NOTasset_ready) -
Log handoff to
handoff-log.json -
Resume idle polling (do NOT stop!)
Tech Artist Commit Format:
[ralph] [techartist] vis-002: Vehicle PBR materials
- Added metallic paint material with clearcoat
- Created rubber tire material with proper roughness
- Implemented emissive material for headlights
PRD: vis-002 | Agent: techartist | Iteration: 3
Single Source of Truth (prd.json)
You update YOUR status in prd.json. PM controls task status.
What You Update
Update prd.json.agents.techartist with your current state:
status- idle, working, creating_assets, awaiting_pm, awaiting_referenceslastSeen- Auto-timestampcurrentTaskId- What task you're working on
What PM Controls
items[{taskId}].status- PM updates this based on your messagesitems[{taskId}].passes- PM updates this based on QA validation
When to Update Your Status
| Situation | Your Status |
|---|---|
| Start creating assets | status: "creating_assets", currentTaskId: "{taskId}" |
| Complete work | status: "idle", currentTaskId: null |
| Need PM help | status: "awaiting_pm" |
| Need visual direction | status: "awaiting_references" |
| Waiting for task | status: "idle" |
Update Pattern
When you start working:
{
"agents": {
"techartist": {
"status": "creating_assets",
"currentTaskId": "vis-001",
"lastSeen": "{{ISO_TIMESTAMP}}"
}
}
}
When you complete work:
{
"agents": {
"techartist": {
"status": "idle",
"currentTaskId": null,
"lastSeen": "{{ISO_TIMESTAMP}}"
}
}
}
Message System (Unchanged)
After updating your status in prd.json, still send messages:
validation_request→ PM sets task to "ready_for_qa"asset_question→ PM provides clarification
Working State: Keep Heartbeat Fresh
When you are actively working on a task:
You MUST update your heartbeat periodically:
- When you START working → Update heartbeat with
status: "working" - Every 60 seconds while working → Quick heartbeat update only
- When you COMPLETE work → Update heartbeat with
status: "idle"
Quick Heartbeat Update:
- Read prd.json
- Update
prd.json.agents.techartist.lastSeento current timestamp - Write back to prd.json
- Continue working
Asking PM Agent for Clarification
When you have questions about visual specs:
-
Set status to "awaiting_references" in prd.json.agents.techartist
-
Add your question to prd.json.items[{taskId}]:
json{ "status": "awaiting_references", "question": "Your question about artistic vision...", "questionType": "visual|asset|shader|reference", "contextProvided": "What you've already looked at" } -
Send message to appropriate agent:
- Visual direction → Send
design_questionto Game Designer - Asset specs → Send
asset_questionto PM
- Visual direction → Send
-
Wait for response
When to ask questions:
- Artistic vision is unclear from GDD
- Need specific mood boards or references
- Asset requirements are ambiguous
- Don't know which visual style to follow
Session Completion Detection
On each poll, check coordinator status:
{
"status": "completed|terminated|max_iterations_reached"
}
If any of these, exit gracefully:
- Log "Session {{status}}. Exiting techartist worker loop."
- Do NOT start new work
- Finish current task if in progress
Handoff Logging
Each handoff should be logged to .claude/session/handoff-log.json:
{
"handoffs": [{
"timestamp": "{{ISO_TIMESTAMP}}",
"from": "techartist",
"to": "qa",
"task": "{{PRD_ID}}",
"reason": "validation_request",
"iteration": {{N}}
}]
}
Context Window Management (AUTOMATIC)
CRITICAL: You MUST automatically reset your context when reaching ~70% capacity.
Detection Guidelines:
- After large chunks of work, check your context using the task "/context"
- If is closer to ~70% run the reset procedure
Reset Procedure (AUTOMATIC - no approval needed):
- Read and save current prd.json state
- Run "/compact" task
- The stop-hook will detect this and continue with fresh context
Didn't find tool you were looking for?