# Reported issues for PokéArena

Pod holds 12 of 12 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to [PokéArena](/mcp/pokearena).

## Most discussed

### Self destruct moves doesn't work as intended

user doesn't drop to 0 hp. it just treats it like a normal move.

[Read the thread](https://github.com/shaumik/PokeArena/issues/22) · 2026-05-27 · closed · 1 comment

### Engine: Pokemon abilities

**Status:** not started — placeholder

Gen 1 baseline has no abilities. Tracking issue for adding ability slots to species, ability lookup at battle start, and the per-ability trigger hooks the engine would need (on-switch-in, on-damage-taken, modify-stat, etc.).

Scope, design, and acceptance criteria not yet written.

[Read the thread](https://github.com/shaumik/PokeArena/issues/9) · 2026-05-24 · closed · 1 comment

### Team builder: explicit moves per Pokemon

**Status:** not started

**Why:** Right now teams are `[]int` of dex IDs and the engine picks 4 moves from the
learnset. For competitive play (and especially Pv-Claude) both sides need real
agency over movesets — a Tauros with Body Slam / Hyper Beam / Earthquake / Blizzard
is a different Pokémon from one with Tackle / Growl / Stomp / Leer.

**Schema:**
```go
type TeamEntry struct { Dex int; Moves [4]string }
type Team []TeamEntry  // 1..6 entries; Gen 1 so no items/abilities
```

**UI:** Clickin

[Read the thread](https://github.com/shaumik/PokeArena/issues/7) · 2026-05-24 · closed · 1 comment

### MCP: clarify wait()/phase semantics for simultaneous turns

**Status:** not started

**Why:** The current contract is "Wait returns ready when it's your turn
to act" — fine in the abstract, but the engine resolves both sides'
choices *simultaneously* in `PhaseChoosing`, and during `PhaseReplace`
only the side(s) with a fainted active need to act. The view doesn't
distinguish three real cases an agent should care about:

1. You need to choose this turn, opponent also choosing — your call is
   **blind to their choice** (the common case).
2. You need to ch

[Read the thread](https://github.com/shaumik/PokeArena/issues/5) · 2026-05-24 · closed · 1 comment

### Add cmd/pokearena-agent: reference agent harness (direct WS, provider-pluggable, BYO key)

Background and full rationale: [`docs/agent-harness.md`](../blob/main/docs/agent-harness.md). This issue is the actionable build.

## Goal

Ship a standalone binary that anyone can run to play a PokéArena battle with an LLM of their choice. It is the *example* answer to \"how do I plug in an LLM\"; the *system* answer is \"speak the gateway WS protocol.\"

Depends on #17 (drop LLMAgent) — these are sister changes but neither blocks the other strictly.

## Shape

Two pieces:

### `internal/agentl

[Read the thread](https://github.com/shaumik/PokeArena/issues/18) · 2026-05-25 · closed · 0 comments

### MCP: handle fog of war better

we should reveal info + state of the battle as they are revealed.
for example, if opponent uses a move - then you know that the pokemon has that move. We should figure out how to make this better.

[Read the thread](https://github.com/shaumik/PokeArena/issues/16) · 2026-05-24 · open · 0 comments

### Claude as team drafter (MCP propose_team)

**Status:** not started

**Why:** If both sides can be Claude, both sides need to be able to *build* a team
too — not just play one we hand them. "Blind drafting" (neither side sees the other
before lock-in) falls out for free if we don't broadcast the team.

**Surface:** MCP tool `propose_team(slots int) → Team` returning a legal team
(species in dex, moves in each species's learnset). Server validates and either
accepts or returns the validation error so the agent can retry.

**Open question:*

[Read the thread](https://github.com/shaumik/PokeArena/issues/8) · 2026-05-24 · open · 0 comments

### Disconnect detection (30s grace → forfeit)

**Status:** not started

**Why:** If a trainer's WS drops mid-battle (Claude's MCP server crashes, browser
tab closes, network blip), the other player is stuck waiting for an opponent who
will never act. Some form of "are you still here?" is needed regardless of
Pv-Claude — the human-vs-local-AI mode also benefits.

**Explicitly NOT in scope:** per-turn shot clock. Pokémon has no pass action;
inventing one adds rules without earning them. A player taking 10 minutes to
think is fine; a player who

[Read the thread](https://github.com/shaumik/PokeArena/issues/6) · 2026-05-24 · open · 0 comments

## Most recent

### MCP: damage-range prediction per legal move

**Status:** not started

**Why:** Stat numbers in the view (`Atk 154`, `Def 115`, …) and a move's
base power are sufficient *in principle* to compute expected damage,
but the agent has to know the engine's exact damage formula, RNG range,
and effective level scaling. In practice, an agent's mental model
diverges from the engine by an order of magnitude until it gets enough
observed turns to back-fit a multiplier — by which point the battle is
half over and several decisions were made on bad numb

[Read the thread](https://github.com/shaumik/PokeArena/issues/4) · 2026-05-24 · open · 0 comments

### MCP: include move metadata in the view

**Status:** not started

**Why:** `engine.MoveSlot` exposes only `{move_id, pp, max_pp}` to the
agent. To decide between, say, `outrage` and `dragon-claw`, the agent has
to *recall from training data* the base power, type, accuracy, and
physical/special category of each move. This is fragile in two ways:

1. The agent's memory of move stats is generation-dependent. Crunch is
   special in gen 3, physical in gen 4+ — get the gen wrong and damage
   models are wildly off.
2. As the move dex evolve

[Read the thread](https://github.com/shaumik/PokeArena/issues/3) · 2026-05-24 · open · 0 comments

### MCP: expose the legal-action list on the view

**Status:** not started

**Why:** Today the agent reconstructs the legal action set from
`phase`, `replace`, the active Pokémon's `moves[*].pp`, and which team
members are unfainted. The logic to do this *correctly* already exists
server-side as `ai.legalActions(view)` (`internal/ai/agent.go`) — it's
used by the in-process harness AI but not exposed over the MCP surface.
So the agent reimplements it from the view, badly, and the gateway
catches the failures with `errNotYourTurn` / illegal-action

[Read the thread](https://github.com/shaumik/PokeArena/issues/2) · 2026-05-24 · open · 0 comments

### MCP: surface the per-turn event log to the agent

**Status:** not started

**Why:** Today the agent sees only a `BattleView` snapshot before/after each
turn and has to reverse-engineer what happened by diffing HP/PP/active-index
fields against the previous snapshot. That breaks in real cases:

- Foe switches Active A out for Active B and the attacker hits B on the
  switch-in — looks identical to "A fainted, B replaced" if you only diff
  the snapshot. (Seen in practice: an agent claimed a KO that never
  happened, then mis-modeled the rest of 

[Read the thread](https://github.com/shaumik/PokeArena/issues/1) · 2026-05-24 · open · 0 comments

The remaining reports are on [the project's issue tracker](https://github.com/shaumik/PokeArena/issues).
