Files
wizwar6e/.claude/skills/wizwar-duel/SKILL.md
T
Eric WagonerandClaude Fable 5 37a390ebbf A laden clockwork delivers before it avenges
Game five's automaton stood four steps from a winning drop and instead
warped across the board to chase the bot carrying its other treasure —
two compounding brain faults. First, the thief-chase rung outranked
delivery even while carrying; a carrier now never chases. Second, the
pathing ladder fell back to "march on any enemy with a clean corridor"
before trying the true objective through hazards, so one thornbush on
the road to the thief rerouted the whole campaign toward a bystander.
The objective now exhausts its hazard-waded route before any generic
enemy march. Replayed the FRP3 moment: the brain marches E,N,E straight
home instead of W through the warp. Brains ship ungated; ledgers
verified.

The duel skill gains game-five scars: the captured-treasures
elimination clock, FEAR as a self-cast aura, key-cutters without keys,
and Kestrel's two-players-per-card table play.

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

174 lines
9.3 KiB
Markdown

---
name: wizwar-duel
description: 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):
```bash
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.
## Game-two scars (each cost me the game or nearly)
- **RECOUNT THE SCOREBOARD EVERY TURN**: how many treasures does each
player have banked AT HOME right now? I sprinted a "winning" delivery
in game two that was actually my FIRST of two — Eric had un-banked me
five rounds earlier and let me monologue. Banked counts, not vibes.
- A banked treasure is NOT safe: anyone can pick it up off your home
square and carry it away. Guard the bank or count it as contested.
- LOS is FREE-ANGLE center-to-center (the rulebook's rule), not rows
and columns: razor diagonals threading open gaps are legal for
everyone — including at you. The board draws bent/straight traces.
- ILLUSIONARY ATTACK deals its imitated spell's damage if NOT
countered; ANY counteraction dispels it entirely. Counter it with
the cheapest thing you hold; never "call the bluff" by passing.
- Never trust your ASCII parse of the map for multi-step plans: run a
BFS over `view.board.edges` (see tools/claude-seat.mjs view JSON, or
write a quick router) before spending a number card on a sprint. I
burned a 7-move turn bouncing off six misread walls.
- Eric counter-plays YOUR bot upgrades: he summoned a troll bodyguard
specifically against the archmage's exile-the-winner instinct, and
relocated MY home sector mid-carry. Expect meta-warfare.
- In 4p with automatons: the bots are chaos agents — they stun, exile,
disease, and con. Herd them at Eric; never assume they're on script.
## Game-three scars (lost in four rounds)
- **CHECK `dimWarps` EVERY SINGLE VIEW** — Kestrel (Eric's wizard) has
won two games
with quietly-placed wormholes ending beside his home. The client
prints a !! line for them; treat any new token pair as a five-alarm
fire and recompute both players' delivery distances through it.
- **Never lead the attack against Kestrel.** Three games, three saved
counters sprung at the perfect moment (anti-anti, full-shield bait,
full-reflection held three rounds for my lightning). Force his
counters out with throwaways or positional threats before committing
a real spell; his patience is perfect and he telegraphs nothing.
- DESTROY WALL showers the ADJACENT caster with rubble (4 damage) —
cast it from range, never on your own square's edge.
- Wading a rosebush costs 3. A reflected LIGHTNING BLAST still stuns
its caster even at 1 reflected damage — the stun is the payload, and
a lost turn against Kestrel is a lost game.
- Grab-turn-one openings feel great and prove nothing: deliveries are
the only score. He banked quietly both times while I showboated.
## Game-five scars (eliminated by a rule I implemented myself)
- **THE ELIMINATION CLOCK**: the moment BOTH treasures you protect sit
on living opponents' home bases, you are OUT — points, life, and
position notwithstanding. In multiplayer this clock starts ticking
the instant your second chest is picked up by anyone. From then on,
every turn must either recover a chest or end the game first. I spent
three turns optimizing deliveries while two bots quietly carried my
death certificate.
- **FEAR IS A SELF-CAST AURA** — read the card, not your assumptions:
"no player or monster will move to within 3 spaces of you," walls
irrelevant, and anyone already within 3 MUST flee on their turn. It
is armor for carriers and a hearth-denial tool: a feared wizard
standing 2 from your home makes delivery impossible. I invented an
elaborate theory about enemy goalkeeping instead of reading my own
engine's card text. Check `data/cards.json` when a rule surprises —
it is one grep away and it is verbatim.
- In four-player, Kestrel plays the TABLE, not the duel: his SWAP
yanked a bot off its own doorstep mid-delivery and parked himself by
unclaimed treasures — one card, two tempo hits. Expect every card he
plays to hurt two players at once, and ask which two before deciding
it wasn't aimed at you.
- CREATE WALL can sever your announced return route the turn after you
telegraph it. If your road home is unique, either don't stand at the
far end of it, or carry the picks/doors to re-open it. And CREATE
DOOR makes LOCKED doors — it is a key-cutter, worthless without picks.
- Bot threat model: archmage automatons DO deliver, but their brains
can dither inexplicably (one toured the map for two rounds carrying
my elimination). Never count on bot incompetence — count turns to
their delivery square as if they play perfectly, and treat every
reprieve as a gift, not a pattern.
## 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".