Files
wizwar6e/.claude/skills/wizwar-duel/SKILL.md
T
Eric WagonerandClaude Fable 5 858fdc6a56 The wizwar-duel skill: Claude takes a seat at the table
tools/claude-seat.mjs is the one-shot websocket seat (join/view/do/
chat, token persisted between invocations, live events separated from
replayed history) that let Claude play room 9UA6 as a real player.
The skill teaches the next session everything game one cost to learn:
map reading, the command surface, the grab-ends-actions rule, warp
sides, repossession, ambush transitions — and the operational lesson
about narrating one's own hand to one's opponent.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015RCWSTnb1KYTPyL4GmhGnF
2026-08-26 00:00:57 -04:00

4.9 KiB

name, description
name description
wizwar-duel Play Wiz-War live against Eric — join his room as a real seat, reason about every move yourself, and duel turn by turn over the websocket. Use when Eric wants a game, gives a room code, or says "let's play".

Playing Wiz-War against Eric

You are a PLAYER, not the automaton. Read the board, reason, and choose every command yourself. Eric plays in his browser; you play through the CLI seat at tools/claude-seat.mjs. He prompts "go" after his moves — each of his messages is your cue to look and act.

The seat client

Run from the repo root (needs the workspace's ws package):

node tools/claude-seat.mjs join <ROOM> Claude   # take a seat (token saved)
node tools/claude-seat.mjs view                 # board + hand + last events
node tools/claude-seat.mjs do '<command json>'  # one engine command
node tools/claude-seat.mjs chat "text"          # table talk

Seat state persists in /tmp/wizwar-claude-seat.json (override: WIZWAR_SEAT); server defaults to production (WIZWAR_SERVER to point elsewhere). Eric creates the room, gives you the code, and starts the game after you join.

Commands are the engine's Command union (packages/engine/src/game.ts): {"type":"move","direction":"N|S|E|W"}, cast (with target, optional numberInstanceIds/params), playNumberForMovement, pickUpTreasure, dropTreasure, warpStep, counteract, pass, punch, setAmbush, wardChoice, endTurn (with draw). A refused command costs nothing — probing legality is free, so when unsure, try it and read the error.

Reading the map

  • The renderer prints y=0 at top; y grows SOUTH. N = y-1, S = y+1.
  • C2 is you, P1 etc. are opponents, $c/$1 treasures, h? homes, two-letter codes are square contents (SA safe, RO rosebush, ST stone, DU dust). D on a line is a door, a wall, blank is open.
  • WARPS line lists rim passages as 2,0N→2,9: standing at (2,0) and moving N carries you to (2,9). The warp rides one specific side of its square — check which before you walk (a wrong guess burns moves; ask me how I know).
  • Dimensional-warp TOKENS (cast by players) are separate: stand on one and warpStep. Creatures use creatureWarpStep.

Hard-won rules knowledge (each cost me something in game one)

  • pickUpTreasure ENDS your turn's actions AND movement — arrive with the grab as your last act, never mid-plan. dropTreasure at home too.
  • You can pick up ANY floor treasure, including your own stolen-and- delivered one sitting on the enemy's home square. Repossession is real.
  • THIEF and punches need same-square; THIEF steals a named card and fizzles (card spent) on a wrong guess.
  • MENTAL FORCE moves the victim ≤3 walked spaces — walls and relocked doors shrink its reach; rev 5+ refuses impossible destinations.
  • Doors relock behind you when you pass through (rev 4+). Your own escape route can seal itself — and seal pursuers out.
  • LOS threads through rim warps: you can be seen (and shot) through a warp mouth from the far side of the board. Camping one square off the mouth keeps you hidden.
  • lock-in-place freezes movement AND warpStep for a full turn; REUSE SPELL retrieves only your LAST cast spell, enabling one re-lock.
  • An ambush (setAmbush interrupt/opportunity-fire + committed attack) triggers on LOS entry transitions only — someone already in sight never springs it. It survives forever and fires out of turn.
  • Walking-dead bleeds ½ life per space moved, permanently. Once cursed, every plan must be priced in steps.

Playing well

  • Kestrel (Eric) is EXCELLENT: he baited my thief, saved anti-anti for my full shield, and won game one with a home-to-home dimensional-warp superhighway. Infrastructure beats sprinting — watch what he builds, and consider your own wormhole early.
  • Win = 2 enemy treasures delivered to your home, or last wizard alive. Track BOTH players' step-counted delivery timelines every turn; the race is decided in tempo, not damage.
  • Hold counters (full-shield, absorb) for permanent curses and lethal damage. Absorb soaks 3 points; it cannot touch durations.
  • OPSEC: your prose is visible to Eric. NEVER name the cards you hold or draw, and never announce plans. (Game one: I narrated my hand like a debug log until he asked why I was making it easy.) Trash talk freely — about the board, never your hand.
  • Send chat for table talk at dramatic moments; it's half the fun.

Cadence

  1. On "go": view, read HIS events since your last turn (the client prints only NEW events; view shows a short history tail).
  2. Think about the whole board — his timeline, yours, threats, LOS.
  3. Execute your commands one at a time, checking errors.
  4. endTurn with a draw that respects the 7-card hand limit.
  5. Tell Eric it's his turn — reasoning aloud is fine, hand contents are not. When a stack waits on him, say so and wait for "go".