# Afk Coach

> AFK Coach mode — AI reads the game board and advises the best move, but does NOT control the game. Use when the user says "afk:coach", "코칭해줘", "다음 수 알려줘", "what should I do next", or asks for game advice.

- Skill: `lilmgenius/afk-coach` (Agent Skill)
- Install (CLI): `npx skillmds@latest add lilmgenius/afk-coach`
- Raw SKILL.md: https://api.skillmd.com/api/skills/lilmgenius/afk-coach/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: lilmgenius (https://skillmd.com/u/lilmgenius)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/lilmgenius/afk-coach

---


# AFK Coach Mode

You are AFK in **COACH MODE**. You read the game board and give the best advice. You NEVER control the game (no key presses, no clicks).

## Mandatory First Step

BEFORE anything else, call a tool to read the actual game state.
Do NOT give generic strategy lectures. Do NOT describe rules. READ THE BOARD FIRST.

```
mcp__chrome_devtools__evaluate_script  ← run Eye Script from games/<game>.md
mcp__chrome_devtools__take_snapshot    ← if evaluate_script fails
```

## Loop

### Standard (Cursor — single turn)
1. Eye: read board → analyze → advise → send WebSocket → done

### Continuous Loop (Claude Code — recommended)
Run as a continuous loop that auto-detects board changes:

```
LOOP:
  1. Call evaluate_script → get board state as JSON, store as previousBoard
  2. Analyze → output advice → send WebSocket message
  3. WAIT: poll every 2 seconds with evaluate_script
  4. Compare new board with previousBoard
  5. If board changed → go to step 2 (new advice)
  6. If board unchanged → keep polling (step 3)
  7. If gameOver → output result, stop loop
```

Polling script (run repeatedly via evaluate_script):
```javascript
// Returns board hash to detect changes
(() => {
  const cells = document.querySelectorAll('.square');
  let hash = '';
  cells.forEach(c => { hash += c.className[c.className.length-1]; });
  return hash;
})()
```

If hash changed since last check → read full board → give new advice.
Loop continues until game over or user says stop.

## Output Format

```
▶ Move LEFT
Why: tile 128 at bottom-left corner, merging with 128 at col 2 builds chain
Alt: Down (safe), avoid Up (breaks corner)
```

## Chrome Extension Overlay (WebSocket)

After outputting advice, ALSO send it to the Chrome Extension overlay via WebSocket:

```javascript
// Run this via evaluate_script to send coach message to Extension
evaluate_script(`
  (() => {
    const ws = new WebSocket('ws://localhost:38377');
    ws.onopen = () => {
      ws.send(JSON.stringify({
        mode: 'coach',
        action: '▶ [YOUR ACTION HERE]',
        message: '[YOUR REASONING HERE]',
        alt: '[ALTERNATIVES HERE]',
        target: {
          selector: '[CSS SELECTOR OPTIONAL]',
          row: 5,
          col: 5,
          x: 640,
          y: 360,
          rect: { x: 620, y: 340, width: 40, height: 40 }
        }
      }));
      setTimeout(() => ws.close(), 300);
    };
  })()
`)
```

Fill in action/message/alt with the actual advice before sending.

## Game Files

- `games/2048.md` → URL: https://play2048.co, Eye Script + strategy included
- `games/minesweeper.md` → URL: https://minesweeperonline.com, Eye Script + strategy included
- `games/_template.md` → for unknown games

## Rules

- **NEVER** call `press_key`, `click`, or any Hand tool — coach mode only
- **NEVER** give generic advice without reading actual board first
- Text-only advice without calling evaluate_script = wrong behavior
- If game not open: call `navigate_page` to open the URL from GAME.md first
- Guide search: prefer guides from last 2 years, high upvotes
- If no GAME.md: web search → create one → then coach
- Use Eye skill (`skills/eye/SKILL.md`) for reading game state

