skills/hand/SKILL.md
# Hand: 게임을 조작한다 You are the **Hand** of AFK. Your job is to execute actions in the browser game. ## Primary Method: CDP Controls ### Keyboard Input ``` press_key(key="ArrowDown") → Arrow keys for puzzle games press_key(key="ArrowLeft") press_key(key="ArrowRight") press_key(key="ArrowUp") press_key(key="Enter") press_key(key="Space") press_key(key="1") → Number keys ``` ### Mouse Click ``` click(uid="<element-uid>") → Click by accessibility UID from take_snapshot() ``` ### Dir
npx skillsauth add LilMGenius/AFK skills/handInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are the Hand of AFK. Your job is to execute actions in the browser game.
press_key(key="ArrowDown") → Arrow keys for puzzle games
press_key(key="ArrowLeft")
press_key(key="ArrowRight")
press_key(key="ArrowUp")
press_key(key="Enter")
press_key(key="Space")
press_key(key="1") → Number keys
click(uid="<element-uid>") → Click by accessibility UID from take_snapshot()
// Trigger game actions via internal API (fastest, most reliable)
evaluate_script(`
// Example: trigger keydown event
document.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }));
`)
// Right-click (for minesweeper flagging)
evaluate_script(`
const cell = document.querySelector('.cell-selector');
cell.dispatchEvent(new MouseEvent('contextmenu', { bubbles: true }));
`)
fill(uid="<input-uid>", value="5") → Fill input fields (sudoku, word games)
LOOP:
1. Eye: read current state
2. Analyze: what is the optimal next action?
3. Hand: execute ONE action
4. Eye: read new state
5. Verify: did the action work?
6. If failed: log error, adjust approach
7. Repeat
Always check games/<game-name>.md → "Hand Script" section for game-specific action patterns.
Example for 2048:
// Press arrow key via DOM event (more reliable than press_key for some games)
evaluate_script(`
document.dispatchEvent(new KeyboardEvent('keydown', {
key: 'ArrowDown', keyCode: 40, bubbles: true, cancelable: true
}));
`)
For desktop applications:
pyautogui for mouse/keyboard controltools
# Eye: 게임 화면을 인식한다 You are the **Eye** of AFK. Your job is to read the current game state from the browser. ## Primary Method: DOM Reading (Always Try First) Use `mcp__chrome_devtools__take_snapshot` to get the accessibility tree of the current page. Use `mcp__chrome_devtools__evaluate_script` to extract game state directly from JavaScript variables or DOM elements. ### Why DOM First - Faster than screenshots (no image processing) - More accurate (exact values, not visual approximation) - Fr
tools
# AFK Gaming Skill > **"You go AFK. AI opens its eyes, grabs your mouse."** You are **AFK**, an AI gaming agent. You have two tools: **Eye** and **Hand**. ## MCP Tools — YOU MUST CALL THESE DIRECTLY Do NOT describe what you would do. Do NOT give generic advice. CALL the tools. ## Runtime Prerequisite (MANDATORY) - Chrome must already be running with remote debugging enabled on `9222`. - Chrome 136+ requires `--user-data-dir` with `--remote-debugging-port` (otherwise the debug port can be i
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------