▶ YouTube Summaries

← All summaries

Vibe coding WoW Forever add-ons with Esfand - exploring the Lua API limits

2026-10-20 Tue ⏱ 2 hr 44 min theprimeagen

A livestream where Prime coaches streamer Esfand, a WoW player who just started vibe coding with Codex, through building add-ons for the WoW Forever beta (a "Classic Plus" launching November 4). Most of the session is research: using agents to map what the restricted add-on Lua API allows - no HTTP, sockets or file reads, data in and out only via SavedVariables on reload, combat-time restrictions, an event stream with ~1,800 event types. They prototype an extra Legacy-window dropdown, a session-damage tracker, decode damage-school bit flags, draw an in-game bar chart, and run Tetris inside WoW. The big discovery is WoW's new official Discord integration: guild chat bridges to a linked Discord channel and add-ons receive those messages, which Prime calls a "socket" that opens up guild bots, pings and companion tools. Recurring theme: removing the coding barrier exposes that game design and good ideas are the real hard part.

Tooling advice for a vibe-coding beginner

  • Model choice barely matters for this kind of project; Codex with a mid/high reasoning model is fine, Opus is more correct but pricier. Prime prefers Claude models and suggests Cursor as the friendliest UI for non-terminal users.
  • Esfand's setup: the Codex desktop app pointed at the WoW add-on folder; /reload in game loads changes. Prime's first check: is it in Git? (Each add-on had its own local repo, not pushed anywhere.)
  • Distribution via CurseForge (plus GitHub).
  • Higher reasoning levels just take longer; Prime used an expensive fast tier for quick research but says it produces poor code.
  • When the agent says "run this command yourself", answer "no, you do it".
  • Prime runs a "pseudo plan mode": a standing rule that the agent may not code until he says so, and he asks lots of questions first - yet still often finds implementations differ from what he thought.
  • Dictating prompts (he paces and talks into his phone) gives him better results than typing; typing makes you slow and overthink.
  • Start small; overly ambitious specs turn into a jumbled mess. Agents also tend to overshoot what was asked.
  • Prime says hand coding beat his vibe coding until about March-May this year; now vibe coding wins on completing tasks, hand coding still wins on quality and thoroughness.

What the add-on API allows

  • No HTTP, websockets, sockets or arbitrary file reads - obvious for security (otherwise add-ons could steal API tokens).
  • No hot reload: files are loaded at add-on load; requiring a file later doesn't read new data from disk. Prime's hack idea - a constantly incrementing file filled with Twitch chat - doesn't work.
  • Data persistence is SavedVariables, written to disk on /reload or logout. Tools like Warcraft Logs work by a companion program uploading what the client wrote; logs are signed to prevent tampering.
  • Clipboard can only be read by pasting into a focused edit box; no programmatic paste.
  • Detailed combat-log events are restricted in retail/Forever (secure-only), and many actions are blocked in combat, so add-ons can't play the game for you. Esfand explains the controversy: Blizzard wants to cut "you need add-ons to raid" barriers; Prime thinks players will figure everything out in 12 minutes anyway. Esfand favours starting strict on a new game and loosening later.
  • Blizzard UI is moddable: an agent added a "foobar" entry, then an extra challenges dropdown, to the new Legacy window (Legacy points reward playing alts).

Statistics, events and damage types

  • /etrace shows a live event log (~1,800-2,000 event types, constants and payloads); /fstack inspects UI frames ("is everything a frame?").
  • No jump event exists, so "jump 1,000 times" achievements can't be tracked; the built-in Statistics window already has emotes (hugs, waves, LOLs, cheers), gold statistics, deaths by falling, etc. Lifetime total damage exists but stays empty.
  • UNIT_COMBAT payloads carry a damage-school bit flag: 1 physical, 2 holy, 4 fire, 8 nature, 16 frost, 32 shadow, 64 arcane - enough to track per-school totals.
  • A session-damage tracker worked once told to update live rather than after combat.
  • Esfand's ideas: a goofy achievements extension to the Legacy window, friendliness titles ("the Honorable") visible to other add-on users via a handshake. Native overhead names can't be replaced; custom nameplates can.

Ghost-run / parse comparison architecture

  • Prime whiteboards a load - play - save cycle: data enters only at load, leaves only at save, and a companion step in between massages saved data into Lua files (e.g. per-dungeon "combats" folder) the add-on loads next time.
  • Use cases: Mario-Kart-style ghost of your previous run, golden damage splits, leveling speedrun splits; a quick in-game bar chart proved drawing graphs works.
  • Global leaderboards invite cheating - any signing secret in open Lua is extractable - so keep it local or guild-scoped. Weekly-updated public parse data (e.g. top parses per class) could be imported to show percentile bands on a logarithmic curve.
  • Raids in Forever arrive December 9, so competitive features can wait.

Discord integration: the "socket"

  • WoW Forever links guild chat to a Discord channel; messages flow both ways, and CHAT_MSG_GUILD_DISCORD (one of 8 Discord events) lets add-ons receive them, though messages become secret values during combat and sending may be restricted.
  • Discord user pings work from game chat with the bracketed numeric user ID; an add-on can rewrite typed text (a "Esfand → ID" replacement worked), enabling guild pings - an existing add-on called GuildPing does this.
  • Ideas: a Discord bot mapping characters/alts to Discord accounts and relaying pings, guild-scoped parse sharing, Twitch/YouTube chat piped in as JSON, role pings for raid groups, even card-trading games.
  • Security warning: in-game add-ons are fairly sandboxed, but companion apps running outside WoW can read everything (e.g. TruffleHog-style secret scanning) - be careful what you run. Prime declined a chatter's offer of a repo that disables Lua protections.

Side notes

  • Removing the software barrier exposes how bad most ideas are: legendary creators hit maybe 1 in 1,000; game design, not code, is the hard part. Someone built "Azeroth Survivors" on a decompiled 1.12 client; Prime vibe-coded Tetris in WoW.
  • AI bots for games: a Doom-playing real-time decision system making 10-15 small choices per second; running it via a VM makes detection hard. Esfand wants no part of botting.
  • Prime's Netflix work: live-event tooling, an "autodoc", a UDP pacer testing app-to-TV pipeline throughput, forward error correction with uneven level protection (audio drops are far more noticeable than repeated video frames). He grumbles about Netflix's earnings drop; recommends index funds over trading.
  • Prime is resting his throat and says he may not stream for about six months; he dislikes making YouTube videos and prefers streaming.