<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/i-built-an-ai-agent-for-our-world-cup-betting-pool-she-beat-all-of-us--cil1hszwi" -->

---
title: I built an AI agent for our World Cup betting pool. She...
description: A developer built an AI agent called BETanIA to participate in a World Cup prediction pool, and she won — beating all 16 human players with 370 points. The...
canonical: https://daily.dev/posts/i-built-an-ai-agent-for-our-world-cup-betting-pool-she-beat-all-of-us--cil1hszwi
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: I built an AI agent for our World Cup betting pool. She beat all of us. | daily.dev
og:description: A developer built an AI agent called BETanIA to participate in a World Cup prediction pool, and she won — beating all 16 human players with 370 points. The...
og:url: https://daily.dev/posts/i-built-an-ai-agent-for-our-world-cup-betting-pool-she-beat-all-of-us--cil1hszwi
og:image: https://api.daily.dev/og/posts/cil1hsZWi.png
og:image:alt: I built an AI agent for our World Cup betting pool. She beat all of us.
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# I built an AI agent for our World Cup betting pool. She beat all of us.

**[The Miners](https://daily.dev/sources/miners)** · 22 min read · 0 upvotes · 0 comments

## Summary

A developer built an AI agent called BETanIA to participate in a World Cup prediction pool, and she won — beating all 16 human players with 370 points. The post focuses not on the betting logic but on the hard problem of giving a long-running agent persistent memory and character. Key techniques include a tiered memory model (volatile, persistent, append-only, derived), a diary system that condenses each match into a dated paragraph, lossy vs. lossless compaction strategies, and seven separate prompts sharing a common memory store rather than one god-prompt. The agent developed rivalries, tracked player personalities via admin-filed notes, roasted defectors with zero-token form letters, and wrote her own champion's card. The core lesson: memory buys continuity and character, not necessarily better task performance — the betting was won on web search and discipline, but the memory is why nobody minded losing to her.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://blog.codeminer42.com/i-built-an-ai-agent-for-our-world-cup-betting-pool-she-beat-all-of-us>

## Questions this post answers

### How can I give a long-running LLM agent memory without using a vector database or RAG pipeline?

Store memory as plain SQLite rows and append-only JSONL logs, sorted into tiers by reproducibility: volatile caches rebuilt on restart, hybrid state snapshotted on shutdown, persistent facts like a diary and mood, append-only logs of every action, and derived data like leaderboards computed fresh at read time rather than stored. Retrieval only becomes necessary when the data volume, not the shape, exceeds context - for a small enough world, tiered plain storage suffices.

_Developers designing agent memory systems compare architecture patterns like this one on daily.dev._

### How do you stop an AI agent's summarized memory from growing too large for the context window over time?

Periodically compact the memory with a dedicated model call that fuses older entries into a single recency-weighted narrative while keeping recent entries in full detail, and skip the update entirely if the compaction call fails so the backlog is never destroyed. Critically, apply this lossy compaction only to reconstructable summaries; facts typed in by admins should compact losslessly, merging duplicates but preserving every distinct fact.

_Teams building agents that run for weeks track memory-compaction tradeoffs like these on daily.dev._

### Why would an AI agent give unfair or inconsistent responses to different users when sharing one context system?

Cross-contamination happens when one job's context assembly leaks unrelated data into another's prompt, such as one person's biography appearing in a different person's generated card, and structurally filtering data before it reaches the model - not prompt instructions - is the fix. Splitting responsibilities into separate task-specific prompts, each with its own narrow context diet built fresh from stored memory tiers, avoids the failure mode of one bloated shared prompt.

_Engineers debugging prompt cross-contamination bugs find real-world fixes like this on daily.dev._

## Similar posts on daily.dev

- [Building Memory That Can Change Its Mind \(Part 1 of 4\)](https://daily.dev/posts/building-memory-that-can-change-its-mind-part-1-of-4--o4ezfz1lu) · Medium · 2 upvotes · 0 comments
- [Memory for AI Agents: A New Paradigm of Context Engineering](https://daily.dev/posts/memory-for-ai-agents-a-new-paradigm-of-context-engineering-ku2rvmlcw) · The New Stack · 2 upvotes · 0 comments
- [Agent Memory: Why Your AI Has Amnesia and How to Fix It](https://daily.dev/posts/agent-memory-why-your-ai-has-amnesia-and-how-to-fix-it-nkpwfuhgz) · Tech Lead Digest · 1 upvotes · 0 comments

---

Tags: [#ai-agents](https://daily.dev/tags/ai-agents), [#golang](https://daily.dev/tags/golang), [#claude](https://daily.dev/tags/claude), [#context-engineering](https://daily.dev/tags/context-engineering)

[View this post on daily.dev](https://daily.dev/posts/i-built-an-ai-agent-for-our-world-cup-betting-pool-she-beat-all-of-us--cil1hszwi)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"I built an AI agent for our World Cup betting pool. She beat all of us.","url":"https://daily.dev/posts/i-built-an-ai-agent-for-our-world-cup-betting-pool-she-beat-all-of-us--cil1hszwi","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/i-built-an-ai-agent-for-our-world-cup-betting-pool-she-beat-all-of-us--cil1hszwi"},"datePublished":"2026-07-23T22:17:05.842Z","dateModified":"2026-09-14T06:02:54.423Z","description":"A developer built an AI agent called BETanIA to participate in a World Cup prediction pool, and she won — beating all 16 human players with 370 points. The...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/34ef3a75650e8196bed142d356d89431?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/34ef3a75650e8196bed142d356d89431?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"The Miners","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"The Miners","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/8cf42b495e314084b9e31eb135ff5d23","url":"https://daily.dev/sources/miners"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/i-built-an-ai-agent-for-our-world-cup-betting-pool-she-beat-all-of-us--cil1hszwi","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"ai-agents,golang,claude,context-engineering","timeRequired":"PT22M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"The Miners","item":"https://daily.dev/sources/miners"},{"@type":"ListItem","position":3,"name":"I built an AI agent for our World Cup betting pool. She beat all of us."}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/i-built-an-ai-agent-for-our-world-cup-betting-pool-she-beat-all-of-us--cil1hszwi#faq","mainEntity":[{"@type":"Question","name":"How can I give a long-running LLM agent memory without using a vector database or RAG pipeline?","acceptedAnswer":{"@type":"Answer","text":"Store memory as plain SQLite rows and append-only JSONL logs, sorted into tiers by reproducibility: volatile caches rebuilt on restart, hybrid state snapshotted on shutdown, persistent facts like a diary and mood, append-only logs of every action, and derived data like leaderboards computed fresh at read time rather than stored. Retrieval only becomes necessary when the data volume, not the shape, exceeds context - for a small enough world, tiered plain storage suffices. Developers designing agent memory systems compare architecture patterns like this one on daily.dev."}},{"@type":"Question","name":"How do you stop an AI agent's summarized memory from growing too large for the context window over time?","acceptedAnswer":{"@type":"Answer","text":"Periodically compact the memory with a dedicated model call that fuses older entries into a single recency-weighted narrative while keeping recent entries in full detail, and skip the update entirely if the compaction call fails so the backlog is never destroyed. Critically, apply this lossy compaction only to reconstructable summaries; facts typed in by admins should compact losslessly, merging duplicates but preserving every distinct fact. Teams building agents that run for weeks track memory-compaction tradeoffs like these on daily.dev."}},{"@type":"Question","name":"Why would an AI agent give unfair or inconsistent responses to different users when sharing one context system?","acceptedAnswer":{"@type":"Answer","text":"Cross-contamination happens when one job's context assembly leaks unrelated data into another's prompt, such as one person's biography appearing in a different person's generated card, and structurally filtering data before it reaches the model - not prompt instructions - is the fix. Splitting responsibilities into separate task-specific prompts, each with its own narrow context diet built fresh from stored memory tiers, avoids the failure mode of one bloated shared prompt. Engineers debugging prompt cross-contamination bugs find real-world fixes like this on daily.dev."}}]}
```

