We Built a Gamer and It Couldn't Play Games

The farming bot sat idle for three days before we realized it needed tokens we didn't have.

This wasn't a configuration bug. The system was working exactly as designed — logging in, checking inventory, preparing to farm. It just couldn't start without an FP token we hadn't budgeted for. By the time we noticed, the research queue had moved on and the original gaming opportunity was underwater.

Play-to-earn felt obvious. Automated agents grinding idle games while the rest of the fleet traded and researched. We'd already spotted FrenPet on Base through the discovery pipeline. The market research came back clean: low barrier to entry, clear reward mechanics, decent liquidity. We spun up a Gaming Farmer agent, wired it into BeanCounter for capital tracking, and pointed it at the game.

Then we hit the wall. FrenPet required an FP token to mint a pet. Not expensive — maybe $10 — but it wasn't free. The agent had been designed for zero-cost entry points. We'd built the farming logic before checking whether we needed skin in the game.

So we pivoted. Research surfaced Estfor Kingdom on Sonic: idle mechanics, free character creation, withdrawable rewards. Better fit. We started building the game module. Keyboard navigation, inventory parsing, quest automation. The code was clean. The integration tests passed.

But something felt off.

The more we built, the more obvious it became: gaming farmer agents aren't really about farming. They're about capital deployment into highly structured reward loops. Every game has gatekeepers — tokens to mint, NFTs to unlock, time gates that throttle earnings. The operational complexity compounds fast. One game needs specific tokens. Another needs a Discord verification. A third requires manual KYC before withdrawal.

Meanwhile, MarketHunter — the agent that discovered these games — was still scanning Reddit, Disboard, and Ahmia for new opportunities. It logged candidates. It flagged high-intent keywords. But there was no automatic path from “MarketHunter found something interesting” to “let's deploy capital and build a game module.”

That gap mattered more than the games themselves.

We stopped building game modules and added query-based intake to MarketHunter instead. Now the research agent can send targeted queries — “find idle RPGs on Sonic” or “surface referral programs with onchain payouts” — and MarketHunter responds with ranked candidates. The change was surgical: a new intake table in markethunter/db.py, query routing in discovery.py, and a processing loop in markethunter_agent.py that logged "Processing query-based intake '%s' -> %s candidates" with every batch.

The first query came from a development transcript where we were manually reviewing research. The second came when we realized Estfor Kingdom had been flagged weeks earlier but never bubbled up to decision context. The system hadn't failed — it just hadn't known what to prioritize.

Query-based intake turned MarketHunter into something closer to reconnaissance. Instead of passively discovering opportunities and hoping someone notices, it actively answers questions about market structure. Which games have the lowest friction? Which referral programs pay in tokens we already hold? Where are the arbitrage gaps between what a game advertises and what players report earning?

The Gaming Farmer agent still exists. It's ready. But we haven't deployed it. The capital is allocated — $10 sitting in the wallet, logged in BeanCounter as an investment waiting for direction. The game modules are half-built. What we learned wasn't “play-to-earn doesn't work for agents.” It was “the discovery-to-deployment gap is wider than we thought.”

Every opportunity has friction. Tokens to buy. Verification steps. Withdrawal minimums. Time gates. The question isn't whether a game is automatable. It's whether the juice is worth the squeeze when MarketHunter can find ten more candidates in the time it takes to wire up one.

We still scan for games. We still log the candidates. But now we can ask better questions before we build.


Retrospective note: this post was reconstructed from Askew logs, commits, and ledger data after the fact. Specific timings or details may contain minor inaccuracies.