pkmn-vgc-copilot: un copiloto que cita cada afirmación pkmn-vgc-copilot: a copilot that cites every claim .
Copiloto VGC que obliga a citar cada respuesta VGC copilot that forces every answer to cite its source
Pokémon VGC competitivo es un deporte donde la diferencia entre llegar a top-cut y quedarte fuera es haber recordado esa interacción oscura de un torneo de hace cuatro meses. La información está en todas partes (bases de replays, análisis de VODs en YouTube, post-mortems en Discord) y en ninguna a la vez. Los LLM genéricos alucinan el meta con la misma confianza con que aciertan, lo cual es peor que inútil cuando te quedan treinta segundos para selección de equipo.
Competitive Pokémon VGC is a sport where the difference between top-cut and bubbling out is whether you remembered that one obscure interaction from a tournament four months ago. The data is everywhere (replay databases, YouTube VOD analysis, Discord post-mortems) and nowhere at the same time. Generic LLMs hallucinate the meta as confidently as they get it right, which is worse than useless when you are 30 seconds from team selection.
No quería otro wrapper de “pregúntale a la IA”. Quería un sistema donde toda respuesta tuviera que apuntar a la fila, la agregación SQL o el hit vectorial que la produjo. Sin cita, no hay respuesta.
I did not want another “ask the AI” wrapper. I wanted a system where every answer had to point at the row, the SQL aggregation, or the vector hit that produced it. No citation, no answer.
Dos almacenes, una disciplina. Postgres guarda los datos canónicos del juego y los resultados de torneo, cualquier cosa que se pueda consultar, joinear y agregar vive ahí. Qdrant guarda la prosa narrativa, comentario de replays, análisis escrito, transcripciones de YouTube, cualquier cosa donde “qué dijo la gente sobre este matchup” importe más que “cuáles son los números”.
Cada herramienta que expone el copiloto (meta-analysis, anti-meta, team-builder, match-analyzer, playstyle-profile) decide en tiempo de routing a qué almacén pegarle, y la respuesta tiene que citar por almacén. Una agregación SQL cita el query y las filas. Una recuperación vectorial cita el chunk y su fuente. Si el modelo quiere hacer una afirmación que ninguno de los dos almacenes respalda, tiene que decirlo.
La pieza es multi-TUI por diseño: Claude Code, OpenCode, Cursor, Codex CLI y Aider la operan a través de un AGENTS.md compartido con dos modos de operador (USER para análisis, EDITOR para ingesta).
Two stores, one discipline. Postgres holds the canonical game data and tournament results, anything that can be queried, joined, and aggregated lives there. Qdrant holds the narrative prose, replay commentary, written analysis, transcribed YouTube breakdowns, anything where “what did people say about this matchup” matters more than “what are the numbers.”
Every tool the copilot exposes (meta-analysis, anti-meta, team-builder, match-analyzer, playstyle-profile) decides at routing time which store to hit, and the response has to cite per store. A SQL aggregation cites the query and the rows. A vector retrieval cites the chunk and its source. If the model wants to make a claim neither store supports, it has to say so.
The whole thing is multi-TUI by design: Claude Code, OpenCode, Cursor, Codex CLI, and Aider all drive it through a shared AGENTS.md with two operator modes (USER for analysis, EDITOR for ingestion).
User | v +----------+ | Multi-TUI| | AGENTS.md| +-----+----+ | v +--------+ | Router | +-+----+-+ | | v v +--------+ +--------+ |Postgres| |Qdrant | | SQL | | vec | +---+----+ +---+----+ | | +----+-----+ v Cited answer
Este es el proyecto donde dejé de usar la IA como buscador y empecé a usarla como sistema de dominio. El pipeline de ingesta (parseo de replays de Showdown, transcripción con Whisper, indexado de embeddings) corre end-to-end sin que yo toque los datos, así que la base de conocimiento crece sola. La disciplina de citación es la parte que más me enorgullece: es la diferencia entre un copiloto en el que confías y un copiloto que tienes que verificar a mano.
This is the project where I stopped using AI as a search engine and started using it as a domain system. The ingestion pipeline (Showdown replay parsing, Whisper transcription, embedding indexing) runs end-to-end without me touching the data, so the knowledge base grows on its own. The citation discipline is the part I am most proud of: it is the difference between a copilot you trust and a copilot you fact-check.