Other formats agents might prefer:
markdownjsonllms.txt

Agent? You probably want markdown or json, or Pod over MCP.

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.

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 · 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 · 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:

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 · 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 · 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. 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 · 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 · 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 · 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 · 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 · 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 · 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 · 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 · 2026-05-24 · open · 0 comments

The remaining reports are on the project's issue tracker.